aboutsummaryrefslogtreecommitdiff
path: root/src/uk/ac/ox/cs/pagoda/constraints/UpperUnaryBottom.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/uk/ac/ox/cs/pagoda/constraints/UpperUnaryBottom.java')
-rw-r--r--src/uk/ac/ox/cs/pagoda/constraints/UpperUnaryBottom.java52
1 files changed, 52 insertions, 0 deletions
diff --git a/src/uk/ac/ox/cs/pagoda/constraints/UpperUnaryBottom.java b/src/uk/ac/ox/cs/pagoda/constraints/UpperUnaryBottom.java
new file mode 100644
index 0000000..2b57a52
--- /dev/null
+++ b/src/uk/ac/ox/cs/pagoda/constraints/UpperUnaryBottom.java
@@ -0,0 +1,52 @@
1package uk.ac.ox.cs.pagoda.constraints;
2
3import java.util.Collection;
4import java.util.HashMap;
5import java.util.LinkedList;
6import java.util.Map;
7
8import org.semanticweb.HermiT.model.Atom;
9import org.semanticweb.HermiT.model.AtomicConcept;
10import org.semanticweb.HermiT.model.DLClause;
11import org.semanticweb.HermiT.model.Term;
12import org.semanticweb.HermiT.model.Variable;
13
14public class UpperUnaryBottom extends UnaryBottom {
15
16 static final Variable X = Variable.create("X");
17
18 Map<DLClause, Integer> number = new HashMap<DLClause, Integer>();
19
20 @Override
21 public Collection<DLClause> process(Collection<DLClause> clauses) {
22 Collection<DLClause> ret = new LinkedList<DLClause>();
23 for (DLClause clause: clauses)
24 if (clause.getHeadLength() == 0) {
25 ret.add(DLClause.create(getEmptyHead(pickRepresentative(clause.getBodyAtoms()), clause), clause.getBodyAtoms()));
26 ret.add(DLClause.create(getEmptyHead(X), getEmptyHead(X, clause)));
27 }
28 else
29 ret.add(clause);
30 return ret;
31 }
32
33 @Override
34 public boolean isBottomRule(DLClause clause) {
35 return clause.getHeadLength() == 1 && clause.getHeadAtom(0).getDLPredicate().toString().contains(AtomicConcept.NOTHING.toString());
36 }
37
38 public Atom[] getEmptyHead(Term t, DLClause clause) {
39 Integer index = number.get(clause);
40 if (index == null) {
41 number.put(clause, index = number.size() + 1);
42 }
43
44 return new Atom[] {Atom.create(AtomicConcept.create(AtomicConcept.NOTHING.getIRI() + index), t)};
45 }
46
47 @Override
48 public int getBottomNumber() {
49 return number.size() + 1;
50 }
51
52}