diff options
| author | Federico Igne <federico.igne@cs.ox.ac.uk> | 2022-05-10 18:17:06 +0100 |
|---|---|---|
| committer | Federico Igne <federico.igne@cs.ox.ac.uk> | 2022-05-11 12:34:47 +0100 |
| commit | 17bd9beaf7f358a44e5bf36a5855fe6727d506dc (patch) | |
| tree | 47e9310a0cff869d9ec017dcb2c81876407782c8 /src/uk/ac/ox/cs/pagoda/tracking/TrackingRuleEncoderDisj2.java | |
| parent | 8651164cd632a5db310b457ce32d4fbc97bdc41c (diff) | |
| download | ACQuA-17bd9beaf7f358a44e5bf36a5855fe6727d506dc.tar.gz ACQuA-17bd9beaf7f358a44e5bf36a5855fe6727d506dc.zip | |
[pagoda] Move project to Scala
This commit includes a few changes:
- The repository still uses Maven to manage dependency but it is now a
Scala project.
- The code has been ported from OWLAPI 3.4.10 to 5.1.20
- A proof of concept program using both RSAComb and PAGOdA has been
added.
Diffstat (limited to 'src/uk/ac/ox/cs/pagoda/tracking/TrackingRuleEncoderDisj2.java')
| -rw-r--r-- | src/uk/ac/ox/cs/pagoda/tracking/TrackingRuleEncoderDisj2.java | 112 |
1 files changed, 0 insertions, 112 deletions
diff --git a/src/uk/ac/ox/cs/pagoda/tracking/TrackingRuleEncoderDisj2.java b/src/uk/ac/ox/cs/pagoda/tracking/TrackingRuleEncoderDisj2.java deleted file mode 100644 index 8d79090..0000000 --- a/src/uk/ac/ox/cs/pagoda/tracking/TrackingRuleEncoderDisj2.java +++ /dev/null | |||
| @@ -1,112 +0,0 @@ | |||
| 1 | package uk.ac.ox.cs.pagoda.tracking; | ||
| 2 | |||
| 3 | import org.semanticweb.HermiT.model.*; | ||
| 4 | import uk.ac.ox.cs.pagoda.MyPrefixes; | ||
| 5 | import uk.ac.ox.cs.pagoda.multistage.Normalisation; | ||
| 6 | import uk.ac.ox.cs.pagoda.query.QueryRecord; | ||
| 7 | import uk.ac.ox.cs.pagoda.reasoner.light.BasicQueryEngine; | ||
| 8 | import uk.ac.ox.cs.pagoda.rules.UpperDatalogProgram; | ||
| 9 | import uk.ac.ox.cs.pagoda.rules.approximators.OverApproxExist; | ||
| 10 | |||
| 11 | public class TrackingRuleEncoderDisj2 extends TrackingRuleEncoderDisj { | ||
| 12 | |||
| 13 | public TrackingRuleEncoderDisj2(UpperDatalogProgram program, BasicQueryEngine store) { | ||
| 14 | super(program, store); | ||
| 15 | } | ||
| 16 | |||
| 17 | @Override | ||
| 18 | public boolean encodingRules() { | ||
| 19 | if (ruleEncoded) return false; | ||
| 20 | ruleEncoded = true; | ||
| 21 | |||
| 22 | for (DLClause clause: program.getClauses()) { | ||
| 23 | encodingRule(clause); | ||
| 24 | } | ||
| 25 | |||
| 26 | if (disjunctiveRules.isEmpty()) | ||
| 27 | return true; | ||
| 28 | |||
| 29 | processDisjunctiveRules(); | ||
| 30 | return false; | ||
| 31 | } | ||
| 32 | |||
| 33 | @Override | ||
| 34 | protected DLPredicate generateAuxiliaryRule(AtomicConcept p) { | ||
| 35 | return getTrackingDLPredicate(p); | ||
| 36 | } | ||
| 37 | |||
| 38 | @Override | ||
| 39 | protected DLPredicate generateAuxiliaryRule(AtomicRole p) { | ||
| 40 | return getTrackingDLPredicate(p); | ||
| 41 | } | ||
| 42 | |||
| 43 | private Variable X = Variable.create("X"); | ||
| 44 | |||
| 45 | @Override | ||
| 46 | protected DLPredicate generateAuxiliaryRule(AtLeastConcept p, DLClause original, Individual[] individuals) { | ||
| 47 | DLPredicate ret = AtomicConcept.create(getTrackingPredicate(Normalisation.getAuxiliaryConcept4Disjunct(p, individuals))); | ||
| 48 | Atom[] headAtom = new Atom[] {Atom.create(ret, X)}; | ||
| 49 | |||
| 50 | AtomicRole role = p.getOnRole() instanceof AtomicRole ? | ||
| 51 | (AtomicRole) p.getOnRole(): | ||
| 52 | ((InverseRole) p.getOnRole()).getInverseOf(); | ||
| 53 | |||
| 54 | AtomicConcept concept = p.getToConcept() instanceof AtomicConcept ? | ||
| 55 | (AtomicConcept) p.getToConcept() : | ||
| 56 | OverApproxExist.getNegationConcept(((AtomicNegationConcept) p.getToConcept()).getNegatedAtomicConcept()); | ||
| 57 | |||
| 58 | Term[] roleArgs, conceptArg; | ||
| 59 | for (Individual i: individuals) { | ||
| 60 | // Variable i = Variable.create("Y"); | ||
| 61 | if (p.getOnRole() instanceof AtomicRole) { | ||
| 62 | roleArgs = new Term[] {X, i}; | ||
| 63 | conceptArg = new Term[] {i}; | ||
| 64 | } | ||
| 65 | else { | ||
| 66 | roleArgs = new Term[] {i, X}; | ||
| 67 | conceptArg = new Term[] {i}; | ||
| 68 | } | ||
| 69 | |||
| 70 | addTrackingClause( | ||
| 71 | DLClause.create(headAtom, | ||
| 72 | new Atom[] {Atom.create(getTrackingDLPredicate(role), roleArgs)})); | ||
| 73 | |||
| 74 | Atom guard = Atom.create(role, roleArgs); | ||
| 75 | |||
| 76 | if (!concept.equals(AtomicConcept.THING)) { | ||
| 77 | addTrackingClause( | ||
| 78 | DLClause.create(headAtom, | ||
| 79 | new Atom[] {guard, Atom.create(getTrackingDLPredicate(concept), conceptArg)})); | ||
| 80 | } | ||
| 81 | } | ||
| 82 | |||
| 83 | return ret; | ||
| 84 | } | ||
| 85 | |||
| 86 | @Override | ||
| 87 | protected void encodingRule(DLClause clause) { | ||
| 88 | DLClause original = program.getCorrespondingClause(clause); | ||
| 89 | if (original.getHeadLength() <= 1) { | ||
| 90 | super.encodingRule(clause); | ||
| 91 | } | ||
| 92 | else addDisjunctiveRule(original, clause); | ||
| 93 | } | ||
| 94 | |||
| 95 | @Override | ||
| 96 | public String getTrackingProgram() { | ||
| 97 | StringBuilder sb = getTrackingProgramBody(); | ||
| 98 | sb.insert(0, MyPrefixes.PAGOdAPrefixes.prefixesText()); | ||
| 99 | return sb.toString(); | ||
| 100 | } | ||
| 101 | |||
| 102 | @Override | ||
| 103 | protected void encodingAtomicQuery(QueryRecord[] botQuerRecords) { | ||
| 104 | super.encodingAtomicQuery(botQuerRecords, true); | ||
| 105 | } | ||
| 106 | |||
| 107 | @Override | ||
| 108 | protected DLPredicate generateAuxiliaryRule(Inequality instance) { | ||
| 109 | // TODO Auto-generated method stub | ||
| 110 | return null; | ||
| 111 | } | ||
| 112 | } | ||
