- From: <jos.deroo@agfa.com>
- Date: Wed, 11 Jul 2007 00:36:31 +0200
- To: www-archive@w3.org
- Message-ID: <OF6E1AC61F.1540D0CF-ONC1257314.007C3135-C1257314.007C316D@agfa.com>
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