http://eulersharp.sourceforge.net/GUIDE backup page

Euler5 proof engine supporting belief inferencing
=================================================

The notation that is used is Notation3 [1] and the logic is N3Logic [2].

N3 builtins are described in [3] and [4] and to model belief the
following predicate is used

e:true a rdf:Property;
      rdfs:domain rdfs:Resource;
      rdfs:range xsd:decimal;
      rdfs:comment """builtin to always succeed""".

Another predicate (which is not a builtin) that is typically used to
model belief is

e:boolean a rdf:Property;
      rdfs:domain rdfs:Resource;
      rdfs:range [ owl:oneOf (e:T e:F)];
      rdfs:comment """to model a logical proposition""".


The modeling is done in the form of "belief rules" and the semantics of

{P e:boolean e:T. Q e:boolean e:T. _: e:true x} => {C e:boolean e:T}.

is

belief(C|P,Q) = x.


If the conclusion of a belief rule is e:boolean e.g.

{:P e:boolean e:T. _: e:true 0.2} => {:C e:boolean e:T}.

then we should add the belief rule

{:P e:boolean e:T. _: e:true 0.8} => {:C e:boolean e:F}.

because if belief(C|P) = x then belief(~C|P) = 1-x .

In the logical case i.e. when x = 1 this amounts to
saying C iff P which avoids the "ex falso quodlibet".


The query answers are obtained via proof interpretation implemented
in [5] and the detailed model theory is under investigation.

The proof engine runs as an euler --prolog-bchain --nefq service
which is declared in [6] and is implemented [7] as

                  REST
                   /\
                   || N3
                   \/
             ,------------,
             |    Codd    |
             |     /\     |
             |     || Yap |
             |     \/     |
             | ,--------, |
             | | Euler5 | |
             | '--------' |
             '------------'


A typical test case is

RULES http://eulersharp.sourceforge.net/2004/04test/metastaticP.n3
QUERY http://eulersharp.sourceforge.net/2004/04test/metastaticQ.n3
PROOF http://eulersharp.sourceforge.net/2004/04test/metastaticR.n3


To cope with large amounts of triples, one can use euler --sql
to translate triples into SQL and after adding e.g.

dbname.driver               = org.sqlite.JDBC
dbname.uri                  = jdbc:sqlite:tripleStore/dbname

to codd.properties [6] one can get e.g.

http://host.domain/dbname?SQL=sql where sql is an urlencoding of e.g.

SELECT '@prefix ', prefix, ' ', namespace, '.' FROM pfx;
SELECT '';
SELECT subject, ' ', predicate, ' ', object, '.' FROM rdf
  WHERE predicate == 'rdfs:subClassOf' AND object == ':Event';


Similar queries can be used to get triples out of the huge amount
of existing relational data. For instance, given a database table
tbl1 with columns one and two the following query result is a set
of RDF/N3 triples

SELECT '@prefix xsd: <http://www.w3.org/2001/XMLSchema#>.';
SELECT '@prefix : <http://www.agfa.com/w3c/euler/dtP#>.';
SELECT '';
SELECT '"', one, '" :birthday "', two, '"^^xsd:gYear.' FROM tbl1
  WHERE two == 1956;



References
----------

[1] http://www.w3.org/DesignIssues/Notation3
[2] http://www.w3.org/DesignIssues/N3Logic
[3] http://www.w3.org/2000/10/swap/doc/CwmBuiltins
[4] http://eulersharp.sourceforge.net/2003/03swap/log-rules.n3
[5] http://eulersharp.sourceforge.net/2006/02swap/euler.yap
[6] http://eulersharp.sourceforge.net/2004/01swap/codd.properties
[7] http://eulersharp.sourceforge.net/

Received on Tuesday, 10 July 2007 22:36:40 UTC