- From: Sandro Hawke <sandro@w3.org>
- Date: Sat, 27 Aug 2005 11:06:30 -0400
- To: Michael Kifer <kifer@cs.sunysb.edu>
- Cc: doug.foxvog@deri.org, Dieter Fensel <dieter.fensel@deri.org>, public-rule-workshop-discuss@w3.org, Christian de Sainte Marie <csma@ilog.fr>
> 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
Received on Saturday, 27 August 2005 15:06:38 UTC