aboutsummaryrefslogtreecommitdiff
path: root/src/uk/ac/ox/cs/pagoda/tracking/TrackingRuleEncoderDisj1.java
diff options
context:
space:
mode:
authorFederico Igne <federico.igne@cs.ox.ac.uk>2022-05-10 18:17:06 +0100
committerFederico Igne <federico.igne@cs.ox.ac.uk>2022-05-11 12:34:47 +0100
commit17bd9beaf7f358a44e5bf36a5855fe6727d506dc (patch)
tree47e9310a0cff869d9ec017dcb2c81876407782c8 /src/uk/ac/ox/cs/pagoda/tracking/TrackingRuleEncoderDisj1.java
parent8651164cd632a5db310b457ce32d4fbc97bdc41c (diff)
downloadACQuA-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/TrackingRuleEncoderDisj1.java')
-rw-r--r--src/uk/ac/ox/cs/pagoda/tracking/TrackingRuleEncoderDisj1.java175
1 files changed, 0 insertions, 175 deletions
diff --git a/src/uk/ac/ox/cs/pagoda/tracking/TrackingRuleEncoderDisj1.java b/src/uk/ac/ox/cs/pagoda/tracking/TrackingRuleEncoderDisj1.java
deleted file mode 100644
index d6b5e8b..0000000
--- a/src/uk/ac/ox/cs/pagoda/tracking/TrackingRuleEncoderDisj1.java
+++ /dev/null
@@ -1,175 +0,0 @@
1package uk.ac.ox.cs.pagoda.tracking;
2
3import org.semanticweb.HermiT.model.*;
4import uk.ac.ox.cs.pagoda.MyPrefixes;
5import uk.ac.ox.cs.pagoda.hermit.DLClauseHelper;
6import uk.ac.ox.cs.pagoda.multistage.Normalisation;
7import uk.ac.ox.cs.pagoda.reasoner.light.BasicQueryEngine;
8import uk.ac.ox.cs.pagoda.rules.UpperDatalogProgram;
9import uk.ac.ox.cs.pagoda.rules.approximators.OverApproxExist;
10
11import java.util.LinkedList;
12
13public class TrackingRuleEncoderDisj1 extends TrackingRuleEncoderDisj {
14
15 public TrackingRuleEncoderDisj1(UpperDatalogProgram program, BasicQueryEngine store) {
16 super(program, store);
17 }
18
19 @Override
20 public boolean encodingRules() {
21 if (super.encodingRules()) {
22 processDisjunctiveRules();
23 return true;
24 }
25 return false;
26 }
27
28 @Override
29 protected void encodingRule(DLClause clause) {
30 if (currentQuery.isBottom()) {
31 super.encodingRule(clause);
32 return ;
33 }
34
35 DLClause original = program.getCorrespondingClause(clause);
36 if (original.getHeadLength() <= 1) {
37 super.encodingRule(clause);
38 }
39 else addDisjunctiveRule(original, clause);
40 }
41
42 private DLPredicate getAuxPredicate(DLPredicate p, Individual... individuals) {
43 if (p instanceof AtLeastConcept) {
44 StringBuilder builder = new StringBuilder(
45 Normalisation.getAuxiliaryConcept4Disjunct((AtLeastConcept) p, individuals));
46 builder.append("_AUXa").append(currentQuery.getQueryID());
47 return AtomicConcept.create(builder.toString());
48 }
49
50 return getDLPredicate(p, "_AUXa" + currentQuery.getQueryID());
51 }
52
53 private DLPredicate getTrackingBottomDLPredicate(DLPredicate p) {
54 return getDLPredicate(p, getTrackingSuffix("0"));
55 }
56
57 protected DLPredicate generateAuxiliaryRule(AtLeastConcept p, DLClause original, Individual[] individuals) {
58 DLPredicate ret = getAuxPredicate(p, individuals);
59 Atom[] headAtom = new Atom[] {Atom.create(ret, X)};
60
61 AtomicRole role = p.getOnRole() instanceof AtomicRole ?
62 (AtomicRole) p.getOnRole():
63 ((InverseRole) p.getOnRole()).getInverseOf();
64
65 AtomicConcept concept = p.getToConcept() instanceof AtomicConcept ?
66 (AtomicConcept) p.getToConcept() :
67 OverApproxExist.getNegationConcept(((AtomicNegationConcept) p.getToConcept()).getNegatedAtomicConcept());
68
69 Term[] roleArgs, conceptArg;
70 for (Individual i: individuals) {
71// Variable i = Variable.create("Y");
72 if (p.getOnRole() instanceof AtomicRole) {
73 roleArgs = new Term[] {X, i};
74 conceptArg = new Term[] {i};
75 }
76 else {
77 roleArgs = new Term[] {i, X};
78 conceptArg = new Term[] {i};
79 }
80
81 addTrackingClause(
82 DLClause.create(headAtom,
83 new Atom[] {Atom.create(getTrackingDLPredicate(role), roleArgs)}));
84
85 addTrackingClause(
86 DLClause.create(headAtom,
87 new Atom[] {Atom.create(getTrackingBottomDLPredicate(role), roleArgs)}));
88
89 Atom guard = Atom.create(role, roleArgs);
90
91 if (!concept.equals(AtomicConcept.THING)) {
92 addTrackingClause(
93 DLClause.create(headAtom,
94 new Atom[] {guard, Atom.create(getTrackingDLPredicate(concept), conceptArg)}));
95
96 addTrackingClause(
97 DLClause.create(headAtom,
98 new Atom[] {guard, Atom.create(getTrackingBottomDLPredicate(concept), conceptArg)}));
99 }
100 }
101
102 return ret;
103 }
104
105 protected DLPredicate generateAuxiliaryRule(AtomicRole p) {
106 DLPredicate ret = getAuxPredicate(p);
107 Atom[] headAtom = new Atom[] {Atom.create(ret, X, Y)};
108
109 addTrackingClause(
110 DLClause.create(headAtom, new Atom[] {Atom.create(getTrackingDLPredicate(p), X, Y)}));
111 addTrackingClause(
112 DLClause.create(headAtom, new Atom[] {Atom.create(getTrackingBottomDLPredicate(p), X, Y)}));
113
114 return ret;
115 }
116
117 private Variable X = Variable.create("X"), Y = Variable.create("Y");
118
119 protected DLPredicate generateAuxiliaryRule(AtomicConcept p) {
120 DLPredicate ret = getAuxPredicate(p);
121 Atom[] headAtom = new Atom[] {Atom.create(ret, X)};
122 addTrackingClause(
123 DLClause.create(headAtom,
124 new Atom[] { Atom.create(getTrackingDLPredicate(p), X)}));
125 addTrackingClause(
126 DLClause.create(headAtom,
127 new Atom[] { Atom.create(getTrackingBottomDLPredicate(p), X)}));
128
129 return ret;
130 }
131
132 protected DLPredicate generateAuxiliaryRule(Inequality instance) {
133 // TODO:
134 return null;
135 }
136
137 @Override
138 public boolean isAuxPredicate(String iri) {
139 return iri.contains("_AUXa");
140// if (iri.startsWith("<"))
141// return iri.endsWith("_AUXa" + currentQuery.getQueryID() + ">");
142// return iri.endsWith("_AUXa" + currentQuery.getQueryID());
143 }
144
145 @Override
146 public String getTrackingProgram() {
147 StringBuilder sb = getTrackingProgramBody();
148 if (currentQuery.isBottom())
149 sb.append(getBottomTrackingProgram());
150 sb.insert(0, MyPrefixes.PAGOdAPrefixes.prefixesText());
151 return sb.toString();
152 }
153
154 private String bottomTrackingProgram = null;
155
156 private String getBottomTrackingProgram() {
157 if (bottomTrackingProgram != null) return bottomTrackingProgram.replace("_tn", getTrackingPredicate(""));
158
159 String bottomSuffix = getTrackingSuffix("0");
160 LinkedList<DLClause> clauses = new LinkedList<DLClause>();
161 Variable X = Variable.create("X");
162 for (String concept: unaryPredicates)
163 clauses.add(DLClause.create(new Atom[] {Atom.create(AtomicConcept.create(concept + bottomSuffix) , X)},
164 new Atom[] {Atom.create(AtomicConcept.create(concept + "_tn"), X)}));
165 Variable Y = Variable.create("Y");
166 for (String role: binaryPredicates)
167 clauses.add(DLClause.create(new Atom[] {Atom.create(AtomicRole.create(role + bottomSuffix) , X, Y)},
168 new Atom[] {Atom.create(AtomicRole.create(role + "_tn"), X, Y) }));
169
170 StringBuilder builder = new StringBuilder(DLClauseHelper.toString(clauses));
171 bottomTrackingProgram = builder.toString();
172 return bottomTrackingProgram.replace("_tn", getTrackingPredicate(""));
173 }
174
175}