FuXi 1.0-rc (release candidate) updates

Various changes towards 1.0 feature freeze of FuXi:

Significant changes to the normal form reduction methods for horn
logic employed for managing syntax.  As a result, there is
significantly better, deterministic handling of disjunctions
(unionOf).

The reset method on networks now completely clears its various in-
memory caches

Various fixes to the magic set algorithms while improving test
coverage (test coverage of DLP algorithms is now 90%).

A new FuXi.DLP.Negation module is added [1] which implements
stratified negation semantics for RDF via SPARQL MINUS patterns
[3] .

FuXi now (optionally) uses telescope's [2] programmatic, generative
SPARQL query builder to create MINUS renderings into colloquial
SPARQL.  In this way, OWL-DL documents that use complementOf can use
interpretations that assume stratified negation semantics for all
negated formulas and FuXi can perform finite model checking of
"general" Horn clause logic described in an OWL document.

The included tests show examples of how InfixOwl is used to construct
OWL/RDF documents that have their stable models calculated via
fixpoint evaluation of a RETE-UL network:

#        Some Class
#            ## Primitive Type  ##
#            SubClassOf: Class: ex:NoExclusion  .
#            DisjointWith ( ex:contains some
ex:IsolatedCABGConcomitantExclusion )

CABG - Coronary Artery Bypass Graft

        from FuXi.DLP.DLNormalization import NormalFormReduction
        from FuXi.DLP.Negationimport CalculateStratifiedModel
        from FuXi.Rete.RuleStore import N3RuleStore,SetupRuleStore

        contains=Property(EX_NS.contains)
        #A negated existential restriction
        testClass = ~(contains|some|EX.Exclusion)

        testClass2 = EX.NoExclusion
        testClass2 += testClass
        #A GCI axiom with a general left hand side (testClass is the
left operand of the GCI)

        #standard LP normal form algorithms are used to reduce guarded
fragment first-order theories
        #into logic programs
        NormalFormReduction(self.ontGraph)
        individual1 = BNode()
        individual2 = BNode()
        contains.extent = [(individual1,individual2)]

        #the new makeNetwork argument is used to create a RETE network
        ruleStore,ruleGraph,network=SetupRuleStore(makeNetwork=True)

        #posRules and NegRules are the stratified positive and
negative logic programs used
        #to calculate a stable model or answer set for queries.
        posRules,negRules=CalculateStratifiedModel
(network,self.ontGraph,[EX_NS.NoExclusion])

[1] http://code.google.com/p/python-dlp/source/detail?format=side&path=/trunk/fuxi/lib/DLP/Negation.py&r=270&spec=svn270
[2] http://bitbucket.org/exogen/telescope/wiki/Home
[2] http://www.dcc.uchile.cl/TR/2006/TR_DCC-2006-009.pdf

Received on Monday, 2 March 2009 03:03:13 UTC