- From: Michael Kifer <kifer@cs.sunysb.edu>
- Date: Sat, 27 Aug 2005 14:07:08 -0400
- To: Sandro Hawke <sandro@w3.org>
- Cc: public-rule-workshop-discuss@w3.org
Sandro Hawke <sandro@w3.org>: > > > Actually, there is nothing really clever in what Flora-2 or Triple do. :-) > > What they do is not a semantic trick, but a syntactic one. They allow the > > user to specify the scope of any inference (positive or negation) > > explicitly, but the semantics remains like in traditional systems. > > (Actually, Triple didn't have SNAF originally -- only positive scoped > > inference. I am not sure if some later versions of Triple have default > > negation, but this is not important here.) > > > > I already hinted at how this is done when discussing Dan's example. > > Basically, every rule-head (or fact) defined in a particular module > > is treated as a predicate with a prefix that is specific to that > > module, and different modules have different prefixes. In this way, > > if you ask a negated query against any predicate in a given module, > > then NAF and SNAF give the same result because nothing outside of > > the module matters due to the uniqueness of the predicate names that > > are local to that module. > > Yes, I had trouble following some of that discussion [1] yesterday, > but with this little explanation, it all becomes much more clear. > Flora-2's module mechanism lets you separate parts of the > rulebase into different areas, where they don't accidentally step on > each other, but the formulas in those areas still participate in the > logic. > > In contrast, N3's log:notIncludes mechanism keeps formulas in a much > more remote area -- in the Prolog sense, they're just terms. > log:notIncludes is not a metalogic (level-crossing) predicate; in a > reasonable language like Prolog which had terms it would not extend > the power of the language at all -- it would be quite easy to write. > In fact, here it is, using ordsets [2]: > > %% notIncludes(+Big, +Small) > %% > %% Big and Small are terms which represent N3 formulas, like: > %% > %% [rdf(s,p,o), rdf(s,p,o), ...] > %% > %% > > notIncludes(Big, Small) :- > list_to_ord_set(Big, BigSet), > list_to_ord_set(Small, SmallSet), > \+ ord_subset(BigSet, SmallSet). > > I'd guess that does the right thing as far as unification when the > formulas include variables, but I'm not sure. (I'm not sure about > either what ordsets does or what notIncludes does.) > > Nearby log:notIncludes, we have log:semantics which in prolog looks > something like: > > %% semantics(+URL, -Formula) > %% > %% Fetch the data from the URL and parse it to a formula term > %% based on its Content/Type. Only N3 and RDF/XML are supported. > > ... okay, I won't really provide an implementation; it's pretty much > just like SWI's load_rdf/2 [3]. (I'm not sure what RDF support XSB has > these days.) > > and also log:conclusion: > > %% conclusion(+Premise, -Conclusion) > %% > %% Compute the deductive closure of the Premise (an N3 formula > %% term) and unify it with the Conclusion. > %% > %% Formulas look like [ rdf(s,p,o), ..., <rule>, ... ] > %% > %% where rule is: rule(Antecedent, Consequent) > %% > %% and Antecedent & Consequent are each formulas. > %% > > ... and maybe I should provide an implementation of this, but > I think I've made the point about how the arguments to these > interesting N3 predicates are essentially just terms. > > (aside: > > Actually, I think N3 formulas are somewhat more complex terms, > because they can have existentially and universally quantified > variables. Some of that seems pretty messy to me. I'd probably go > with: > > n3_formula([exivar1, exivar2, ...], > [element1, element2, ...]) > where exivars were constants (NOT prolog variables), > where elements could be either > rdf/3 or rule/2 as above. > There's been talk of being able to label rules, > which would give us rule/3 instead. > ) > > Do you see now why/how N3 has a monotonic design, even if there are no > formal semantics so no one can mathematically prove it? > > -- sandro > > > [1] http://www.w3.org/mid/20050825220937.C46AACB5D3@kiferserv.kiferhome.com > [2] http://cvs.sourceforge.net/viewcvs.py/xsb/XSB/lib/ordsets.P?rev=1.7&view=auto > [3] http://www.swi-prolog.org/packages/rdf2pl.html#sec:3 > I think the key is that semantics(+URL,-Formula) predicate and the fact that you are leaving out of the picture the actual formulas that are sitting at URL. The formula that you are getting using semantics/2 is (as I understand) a list of terms that reify logical statements. So, you have formulas sitting at URL (*) the built-in semantics(URL,Formula) and then you have something like Formula notIncludes somelist So, adding a new formula to the set (*) can change the list Formula and invalidate a previously true statement of the form Formula notIncludes somelist. This is nonmonotonic. --michael
Received on Saturday, 27 August 2005 18:07:16 UTC