aboutsummaryrefslogtreecommitdiffstats
path: root/subprojects/store-partial/src/main/java/tools/refinery/store/partial/representation/PartialRelation.java
diff options
context:
space:
mode:
Diffstat (limited to 'subprojects/store-partial/src/main/java/tools/refinery/store/partial/representation/PartialRelation.java')
-rw-r--r--subprojects/store-partial/src/main/java/tools/refinery/store/partial/representation/PartialRelation.java66
1 files changed, 66 insertions, 0 deletions
diff --git a/subprojects/store-partial/src/main/java/tools/refinery/store/partial/representation/PartialRelation.java b/subprojects/store-partial/src/main/java/tools/refinery/store/partial/representation/PartialRelation.java
new file mode 100644
index 00000000..51c2f28d
--- /dev/null
+++ b/subprojects/store-partial/src/main/java/tools/refinery/store/partial/representation/PartialRelation.java
@@ -0,0 +1,66 @@
1package tools.refinery.store.partial.representation;
2
3import tools.refinery.store.partial.literal.Modality;
4import tools.refinery.store.partial.literal.PartialRelationLiteral;
5import tools.refinery.store.partial.literal.ModalRelationLiteral;
6import tools.refinery.store.query.RelationLike;
7import tools.refinery.store.query.Variable;
8import tools.refinery.store.query.literal.CallPolarity;
9import tools.refinery.store.representation.AbstractDomain;
10import tools.refinery.store.representation.TruthValue;
11import tools.refinery.store.representation.TruthValueDomain;
12
13import java.util.List;
14
15public record PartialRelation(String name, int arity) implements PartialSymbol<TruthValue, Boolean>, RelationLike {
16 @Override
17 public AbstractDomain<TruthValue, Boolean> abstractDomain() {
18 return TruthValueDomain.INSTANCE;
19 }
20
21 @Override
22 public TruthValue defaultValue() {
23 return TruthValue.FALSE;
24 }
25
26 @Override
27 public Boolean defaultConcreteValue() {
28 return false;
29 }
30
31 public ModalRelationLiteral call(CallPolarity polarity, Modality modality, List<Variable> arguments) {
32 return new ModalRelationLiteral(polarity, modality, this, arguments);
33 }
34
35 public PartialRelationLiteral call(CallPolarity polarity, List<Variable> arguments) {
36 return new PartialRelationLiteral(polarity, this, arguments);
37 }
38
39 public PartialRelationLiteral call(CallPolarity polarity, Variable... arguments) {
40 return call(polarity, List.of(arguments));
41 }
42
43 public PartialRelationLiteral call(Variable... arguments) {
44 return call(CallPolarity.POSITIVE, arguments);
45 }
46
47 public PartialRelationLiteral callTransitive(Variable left, Variable right) {
48 return call(CallPolarity.TRANSITIVE, List.of(left, right));
49 }
50
51 @Override
52 public boolean equals(Object o) {
53 return this == o;
54 }
55
56 @Override
57 public int hashCode() {
58 // Compare by identity to make hash table lookups more efficient.
59 return System.identityHashCode(this);
60 }
61
62 @Override
63 public String toString() {
64 return "%s/%d".formatted(name, arity);
65 }
66}