I'm about ready to check-in some updates for proof generation in FuXi, and was having some fun with httpRange-14 I wanted to share. Some time ago, I wrote Emeka, a phenny-based IRC bot to experiment with how intelligent agents might best be used over IRC. I've recently been playing around with using REGEX patterns to match and invoke "Semantic Web" services (none seem "generally" useful, so far). But, I recently added a "hook" to generate proofs of RDF assertions from rulesets and ontologies. Below is how Emeka & FuXi deduce that http://dbpedia.org/data/DBpedia is a "document" as defined by the FOAF ontology:
<chimezie> .varBind proofSrc list('http://dbpedia.org/data/DBpedia','http://xmlns.com/foaf/spec/') <chimezie> Emeka, proove "@prefix foaf: <http://xmlns.com/foaf/0.1/>. <http://en.wikipedia.org/wiki/DBpedia> a foaf:Document ." from $proofSrc <Emeka> Calculated closure in 514.962911606 milli seconds <Emeka> reached Q.E.D. See: http://rafb.net/p/5PvAhz98.html
The first line uses a Versa expression to build a variable bound to a list of resources, which can be referenced within Versa expressions (these are the ontologies that should be used with "graph links"). The second line uses a combination of Notation 3 (to express the "goal") and Versa (for the list of information resources). I'm still considering whether having an IRC bot automatically paste content to a "paste bin" is rude.
The contents of the pastebin comprises a (somewhat) human-readable (linear) proof.
Human-readable proof: Building nodeset around antecedent goal (justified by a direct assertion): foaf:page(dbpedia:DBpedia wiki:DBpedia) Building inference step for Proof step for foaf:topic(wiki:DBpedia dbpedia:DBpedia) Inferred from RETE node via foaf:topic(?X ?sgflxxAo413) :- foaf:page(?sgflxxAo413 ?X) Bindings: {?X: rdflib.URIRef('http://en.wikipedia.org/wiki/DBpedia'), ?sgflxxAo413: rdflib.URIRef('http://dbpedia.org/resource/DBpedia')} Building nodeset around antecedent goal: foaf:topic(wiki:DBpedia dbpedia:DBpedia) Building inference step for Proof step for foaf:Document(wiki:DBpedia) Inferred from RETE node via foaf:Document(?X) :- foaf:topic(?X ?sgflxxAo1286) Bindings: {?X: rdflib.URIRef('http://en.wikipedia.org/wiki/DBpedia'), ?sgflxxAo1286: rdflib.URIRef('http://dbpedia.org/resource/DBpedia')} Building proof around goal: foaf:Document(wiki:DBpedia) ## Generated by Emeka at 2007-09-12T20:52:53.728814 in 6.64019584656 milli seconds
Note, the proof doesn't rely on what the transport protocol says about http://en.wikipedia.org/wiki/DBpedia
I had some problems getting the Standford Inference Web proof browser to render FuXi's RDF/XML serialization, I wonder if it is because of my assumption (in the serialization) that the 'entailment' semantics of a RETE network is equivalent to Generalized Modus Ponens. Anyway, the diagram FuXi generates is below:
This was generated via:
Fuxi --output=dot --ns=wiki=http://en.wikipedia.org/wiki/ --ns=dbpedia=http://dbpedia.org/resource/ --ns=foaf=http://xmlns.com/foaf/0.1/ --proove="@prefix foaf: <http://xmlns.com/foaf/0.1/>. <http://en.wikipedia.org/wiki/DBpedia> a foaf:Document ." --dlp http://xmlns.com/foaf/spec/ http://dbpedia.org/data/DBpedia
I just need to wrap up the doctests and unit tests and push the latest build to cheeseshop and google code