From 4fe4ca32d8f45807ab881b6fb8e814842dad0ec6 Mon Sep 17 00:00:00 2001 From: RncLsn Date: Mon, 11 May 2015 18:00:57 +0100 Subject: Adding (not completed) a new upper bound technique, namely Limited Skolemisation. --- src/uk/ac/ox/cs/pagoda/rules/Approximator.java | 8 +++---- .../ac/ox/cs/pagoda/rules/LowerDatalogProgram.java | 25 +++++++-------------- src/uk/ac/ox/cs/pagoda/rules/OverApproxDisj.java | 23 +++++++++---------- src/uk/ac/ox/cs/pagoda/rules/OverApproxExist.java | 26 ++++------------------ 4 files changed, 26 insertions(+), 56 deletions(-) (limited to 'src/uk/ac/ox/cs/pagoda/rules') diff --git a/src/uk/ac/ox/cs/pagoda/rules/Approximator.java b/src/uk/ac/ox/cs/pagoda/rules/Approximator.java index b2edd56..66e676b 100644 --- a/src/uk/ac/ox/cs/pagoda/rules/Approximator.java +++ b/src/uk/ac/ox/cs/pagoda/rules/Approximator.java @@ -1,16 +1,16 @@ package uk.ac.ox.cs.pagoda.rules; -import java.util.Collection; -import java.util.LinkedList; - import org.semanticweb.HermiT.model.AtLeast; import org.semanticweb.HermiT.model.Atom; import org.semanticweb.HermiT.model.DLClause; import org.semanticweb.HermiT.model.DLPredicate; +import java.util.Collection; +import java.util.LinkedList; + public interface Approximator { - public Collection convert(DLClause clause, DLClause originalClause); + Collection convert(DLClause clause, DLClause originalClause); } diff --git a/src/uk/ac/ox/cs/pagoda/rules/LowerDatalogProgram.java b/src/uk/ac/ox/cs/pagoda/rules/LowerDatalogProgram.java index 6e17f02..a664ba1 100644 --- a/src/uk/ac/ox/cs/pagoda/rules/LowerDatalogProgram.java +++ b/src/uk/ac/ox/cs/pagoda/rules/LowerDatalogProgram.java @@ -1,23 +1,9 @@ package uk.ac.ox.cs.pagoda.rules; -import java.util.Collection; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.Set; - import org.semanticweb.HermiT.Reasoner; -import org.semanticweb.HermiT.model.Atom; -import org.semanticweb.HermiT.model.AtomicConcept; -import org.semanticweb.HermiT.model.AtomicRole; -import org.semanticweb.HermiT.model.DLClause; -import org.semanticweb.HermiT.model.Variable; -import org.semanticweb.owlapi.model.OWLClass; -import org.semanticweb.owlapi.model.OWLObjectInverseOf; -import org.semanticweb.owlapi.model.OWLObjectProperty; -import org.semanticweb.owlapi.model.OWLObjectPropertyExpression; -import org.semanticweb.owlapi.model.OWLOntology; +import org.semanticweb.HermiT.model.*; +import org.semanticweb.owlapi.model.*; import org.semanticweb.owlapi.reasoner.Node; - import uk.ac.ox.cs.pagoda.constraints.BottomStrategy; import uk.ac.ox.cs.pagoda.constraints.NullaryBottom; import uk.ac.ox.cs.pagoda.constraints.UnaryBottom; @@ -27,6 +13,11 @@ import uk.ac.ox.cs.pagoda.multistage.RestrictedApplication; import uk.ac.ox.cs.pagoda.util.Timer; import uk.ac.ox.cs.pagoda.util.Utility; +import java.util.Collection; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.Set; + public class LowerDatalogProgram extends ApproxProgram implements IncrementalProgram { boolean m_toClassify; @@ -68,7 +59,7 @@ public class LowerDatalogProgram extends ApproxProgram implements IncrementalPro norm.process(); for (DLClause nClause: norm.getNormlisedClauses()) { if (nClause.getHeadLength() != 1) - for (DLClause newClause: RestrictedApplication.addAddtionalDatalogRules(nClause, tBottom, norm)) { + for (DLClause newClause: RestrictedApplication.addAdditionalDatalogRules(nClause, tBottom, norm)) { // System.out.println(newClause); if (newClause.getHeadAtom(0).getDLPredicate() instanceof AtomicConcept || newClause.getHeadAtom(0).getDLPredicate() instanceof AtomicRole) { // System.out.println(newClause); diff --git a/src/uk/ac/ox/cs/pagoda/rules/OverApproxDisj.java b/src/uk/ac/ox/cs/pagoda/rules/OverApproxDisj.java index 5edb08e..5b298e8 100644 --- a/src/uk/ac/ox/cs/pagoda/rules/OverApproxDisj.java +++ b/src/uk/ac/ox/cs/pagoda/rules/OverApproxDisj.java @@ -1,22 +1,19 @@ package uk.ac.ox.cs.pagoda.rules; -import java.util.Collection; -import java.util.HashMap; -import java.util.HashSet; -import java.util.LinkedList; -import java.util.Map; -import java.util.Set; - -import org.semanticweb.HermiT.model.Atom; -import org.semanticweb.HermiT.model.DLClause; -import org.semanticweb.HermiT.model.DLPredicate; -import org.semanticweb.HermiT.model.Term; -import org.semanticweb.HermiT.model.Variable; - +import org.semanticweb.HermiT.model.*; import uk.ac.ox.cs.pagoda.hermit.DLClauseHelper; +import java.util.*; + public class OverApproxDisj implements Approximator { + /** + * Splits a disjunctive rule into a bunch of rules. + *

+ * It returns a collection containing a rule for each atom in the head of the input rule. + * Each rule has the same body of the input rule, + * and the relative head atom as head. + * */ @Override public Collection convert(DLClause clause, DLClause originalClause) { LinkedList distincts = new LinkedList(); diff --git a/src/uk/ac/ox/cs/pagoda/rules/OverApproxExist.java b/src/uk/ac/ox/cs/pagoda/rules/OverApproxExist.java index 7e66411..2ff1673 100644 --- a/src/uk/ac/ox/cs/pagoda/rules/OverApproxExist.java +++ b/src/uk/ac/ox/cs/pagoda/rules/OverApproxExist.java @@ -1,30 +1,11 @@ package uk.ac.ox.cs.pagoda.rules; -import java.util.Collection; -import java.util.HashMap; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.Map; - -import org.semanticweb.HermiT.model.AtLeast; -import org.semanticweb.HermiT.model.AtLeastConcept; -import org.semanticweb.HermiT.model.AtLeastDataRange; -import org.semanticweb.HermiT.model.Atom; -import org.semanticweb.HermiT.model.AtomicConcept; -import org.semanticweb.HermiT.model.AtomicNegationConcept; -import org.semanticweb.HermiT.model.AtomicRole; -import org.semanticweb.HermiT.model.DLClause; -import org.semanticweb.HermiT.model.DLPredicate; -import org.semanticweb.HermiT.model.Individual; -import org.semanticweb.HermiT.model.Inequality; -import org.semanticweb.HermiT.model.InverseRole; -import org.semanticweb.HermiT.model.LiteralConcept; -import org.semanticweb.HermiT.model.Role; -import org.semanticweb.HermiT.model.Term; -import org.semanticweb.HermiT.model.Variable; +import org.semanticweb.HermiT.model.*; import uk.ac.ox.cs.pagoda.hermit.DLClauseHelper; import uk.ac.ox.cs.pagoda.util.Namespace; +import java.util.*; + public class OverApproxExist implements Approximator { @Override @@ -142,6 +123,7 @@ public class OverApproxExist implements Approximator { AtomicConcept atomicConcept = null; if (concept instanceof AtomicNegationConcept) { + // is this already in MultiStageUpperProgram? Atom atom1 = Atom.create(atomicConcept = ((AtomicNegationConcept) concept).getNegatedAtomicConcept(), X); Atom atom2 = Atom.create(atomicConcept = getNegationConcept(atomicConcept), X); ret.add(DLClause.create(new Atom[0], new Atom[] {atom1, atom2})); -- cgit v1.2.3