aboutsummaryrefslogtreecommitdiffstats
path: root/subprojects/store-reasoning/src
diff options
context:
space:
mode:
Diffstat (limited to 'subprojects/store-reasoning/src')
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/ReasoningAdapter.java15
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/actions/MergeActionLiteral.java5
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/actions/PartialActionLiterals.java5
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/internal/ReasoningAdapterImpl.java18
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/interpretation/AbstractPartialInterpretation.java4
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/interpretation/PartialInterpretation.java7
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/refinement/AbstractPartialInterpretationRefiner.java6
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/refinement/ConcreteSymbolRefiner.java10
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/refinement/PartialInterpretationRefiner.java8
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/refinement/RefinementBasedInitializer.java5
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/representation/PartialFunction.java10
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/representation/PartialSymbol.java9
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/seed/ModelSeed.java13
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/seed/Seed.java5
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/seed/SeedInitializer.java5
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/PartialSymbolTranslator.java5
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/containment/ContainmentLinkRefiner.java2
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/containment/ContainsRefiner.java6
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/containment/InferredContainment.java4
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/crossreference/UndirectedCrossReferenceInitializer.java2
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/metamodel/MetamodelBuilder.java2
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/multiobject/EqualsRefiner.java2
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/multiobject/ExistsRefiner.java2
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/multiobject/MultiObjectInitializer.java2
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/multiobject/MultiObjectStorageRefiner.java2
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/opposite/OppositeInterpretation.java8
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/opposite/OppositeRefiner.java7
27 files changed, 99 insertions, 70 deletions
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/ReasoningAdapter.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/ReasoningAdapter.java
index 7f0ef8b4..a9b3141a 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/ReasoningAdapter.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/ReasoningAdapter.java
@@ -1,11 +1,12 @@
1/* 1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/> 2 * SPDX-FileCopyrightText: 2021-2024 The Refinery Authors <https://refinery.tools/>
3 * 3 *
4 * SPDX-License-Identifier: EPL-2.0 4 * SPDX-License-Identifier: EPL-2.0
5 */ 5 */
6package tools.refinery.store.reasoning; 6package tools.refinery.store.reasoning;
7 7
8import org.jetbrains.annotations.Nullable; 8import org.jetbrains.annotations.Nullable;
9import tools.refinery.logic.AbstractValue;
9import tools.refinery.store.adapter.ModelAdapter; 10import tools.refinery.store.adapter.ModelAdapter;
10import tools.refinery.store.reasoning.internal.ReasoningBuilderImpl; 11import tools.refinery.store.reasoning.internal.ReasoningBuilderImpl;
11import tools.refinery.store.reasoning.interpretation.AnyPartialInterpretation; 12import tools.refinery.store.reasoning.interpretation.AnyPartialInterpretation;
@@ -27,17 +28,19 @@ public interface ReasoningAdapter extends ModelAdapter {
27 28
28 default AnyPartialInterpretation getPartialInterpretation(Concreteness concreteness, 29 default AnyPartialInterpretation getPartialInterpretation(Concreteness concreteness,
29 AnyPartialSymbol partialSymbol) { 30 AnyPartialSymbol partialSymbol) {
30 return getPartialInterpretation(concreteness, (PartialSymbol<?, ?>) partialSymbol); 31 var typedPartialSymbol = (PartialSymbol<?, ?>) partialSymbol;
32 return getPartialInterpretation(concreteness, typedPartialSymbol);
31 } 33 }
32 34
33 <A, C> PartialInterpretation<A, C> getPartialInterpretation(Concreteness concreteness, 35 <A extends AbstractValue<A, C>, C> PartialInterpretation<A, C> getPartialInterpretation(
34 PartialSymbol<A, C> partialSymbol); 36 Concreteness concreteness, PartialSymbol<A, C> partialSymbol);
35 37
36 default AnyPartialInterpretationRefiner getRefiner(AnyPartialSymbol partialSymbol) { 38 default AnyPartialInterpretationRefiner getRefiner(AnyPartialSymbol partialSymbol) {
37 return getRefiner((PartialSymbol<?, ?>) partialSymbol); 39 var typedPartialSymbol = (PartialSymbol<?, ?>) partialSymbol;
40 return getRefiner(typedPartialSymbol);
38 } 41 }
39 42
40 <A, C> PartialInterpretationRefiner<A, C> getRefiner(PartialSymbol<A, C> partialSymbol); 43 <A extends AbstractValue<A, C>, C> PartialInterpretationRefiner<A, C> getRefiner(PartialSymbol<A, C> partialSymbol);
41 44
42 @Nullable 45 @Nullable
43 Tuple1 split(int parentMultiObject); 46 Tuple1 split(int parentMultiObject);
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/actions/MergeActionLiteral.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/actions/MergeActionLiteral.java
index 79e0237c..86256331 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/actions/MergeActionLiteral.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/actions/MergeActionLiteral.java
@@ -1,10 +1,11 @@
1/* 1/*
2 * SPDX-FileCopyrightText: 2023 The Refinery Authors <https://refinery.tools/> 2 * SPDX-FileCopyrightText: 2023-2024 The Refinery Authors <https://refinery.tools/>
3 * 3 *
4 * SPDX-License-Identifier: EPL-2.0 4 * SPDX-License-Identifier: EPL-2.0
5 */ 5 */
6package tools.refinery.store.reasoning.actions; 6package tools.refinery.store.reasoning.actions;
7 7
8import tools.refinery.logic.AbstractValue;
8import tools.refinery.store.dse.transition.actions.AbstractActionLiteral; 9import tools.refinery.store.dse.transition.actions.AbstractActionLiteral;
9import tools.refinery.store.dse.transition.actions.BoundActionLiteral; 10import tools.refinery.store.dse.transition.actions.BoundActionLiteral;
10import tools.refinery.store.model.Model; 11import tools.refinery.store.model.Model;
@@ -15,7 +16,7 @@ import tools.refinery.store.tuple.Tuple;
15 16
16import java.util.List; 17import java.util.List;
17 18
18public class MergeActionLiteral<A, C> extends AbstractActionLiteral { 19public class MergeActionLiteral<A extends AbstractValue<A, C>, C> extends AbstractActionLiteral {
19 private final PartialSymbol<A, C> partialSymbol; 20 private final PartialSymbol<A, C> partialSymbol;
20 private final List<NodeVariable> parameters; 21 private final List<NodeVariable> parameters;
21 private final A value; 22 private final A value;
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/actions/PartialActionLiterals.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/actions/PartialActionLiterals.java
index 7b4c5446..e8e6880a 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/actions/PartialActionLiterals.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/actions/PartialActionLiterals.java
@@ -5,6 +5,7 @@
5 */ 5 */
6package tools.refinery.store.reasoning.actions; 6package tools.refinery.store.reasoning.actions;
7 7
8import tools.refinery.logic.AbstractValue;
8import tools.refinery.logic.term.NodeVariable; 9import tools.refinery.logic.term.NodeVariable;
9import tools.refinery.store.reasoning.representation.PartialRelation; 10import tools.refinery.store.reasoning.representation.PartialRelation;
10import tools.refinery.store.reasoning.representation.PartialSymbol; 11import tools.refinery.store.reasoning.representation.PartialSymbol;
@@ -17,8 +18,8 @@ public final class PartialActionLiterals {
17 throw new IllegalStateException("This is a static utility class and should not be instantiated directly"); 18 throw new IllegalStateException("This is a static utility class and should not be instantiated directly");
18 } 19 }
19 20
20 public static <A, C> MergeActionLiteral<A, C> merge(PartialSymbol<A, C> partialSymbol, A value, 21 public static <A extends AbstractValue<A, C>, C> MergeActionLiteral<A, C> merge(
21 NodeVariable... parameters) { 22 PartialSymbol<A, C> partialSymbol, A value, NodeVariable... parameters) {
22 return new MergeActionLiteral<>(partialSymbol, value, List.of(parameters)); 23 return new MergeActionLiteral<>(partialSymbol, value, List.of(parameters));
23 } 24 }
24 25
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/internal/ReasoningAdapterImpl.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/internal/ReasoningAdapterImpl.java
index a287cce3..386ae1d8 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/internal/ReasoningAdapterImpl.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/internal/ReasoningAdapterImpl.java
@@ -1,11 +1,12 @@
1/* 1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/> 2 * SPDX-FileCopyrightText: 2021-2024 The Refinery Authors <https://refinery.tools/>
3 * 3 *
4 * SPDX-License-Identifier: EPL-2.0 4 * SPDX-License-Identifier: EPL-2.0
5 */ 5 */
6package tools.refinery.store.reasoning.internal; 6package tools.refinery.store.reasoning.internal;
7 7
8import org.jetbrains.annotations.Nullable; 8import org.jetbrains.annotations.Nullable;
9import tools.refinery.logic.AbstractValue;
9import tools.refinery.store.model.Interpretation; 10import tools.refinery.store.model.Interpretation;
10import tools.refinery.store.model.Model; 11import tools.refinery.store.model.Model;
11import tools.refinery.store.reasoning.ReasoningAdapter; 12import tools.refinery.store.reasoning.ReasoningAdapter;
@@ -49,7 +50,7 @@ class ReasoningAdapterImpl implements ReasoningAdapter {
49 createPartialInterpretations(); 50 createPartialInterpretations();
50 51
51 var refinerFactories = storeAdapter.getSymbolRefiners(); 52 var refinerFactories = storeAdapter.getSymbolRefiners();
52 refiners = new HashMap<>(refinerFactories.size()); 53 refiners = HashMap.newHashMap(refinerFactories.size());
53 createRefiners(); 54 createRefiners();
54 55
55 storageRefiners = storeAdapter.createStorageRefiner(model); 56 storageRefiners = storeAdapter.createStorageRefiner(model);
@@ -69,7 +70,7 @@ class ReasoningAdapterImpl implements ReasoningAdapter {
69 for (int i = 0; i < concretenessLength; i++) { 70 for (int i = 0; i < concretenessLength; i++) {
70 var concreteness = Concreteness.values()[i]; 71 var concreteness = Concreteness.values()[i];
71 if (supportedInterpretations.contains(concreteness)) { 72 if (supportedInterpretations.contains(concreteness)) {
72 partialInterpretations[i] = new HashMap<>(interpretationFactories.size()); 73 partialInterpretations[i] = HashMap.newHashMap(interpretationFactories.size());
73 } 74 }
74 } 75 }
75 // Create the partial interpretations in order so that factories may refer to interpretations of symbols 76 // Create the partial interpretations in order so that factories may refer to interpretations of symbols
@@ -87,7 +88,7 @@ class ReasoningAdapterImpl implements ReasoningAdapter {
87 } 88 }
88 } 89 }
89 90
90 private <A, C> PartialInterpretation<A, C> createPartialInterpretation( 91 private <A extends AbstractValue<A, C>, C> PartialInterpretation<A, C> createPartialInterpretation(
91 Concreteness concreteness, PartialInterpretation.Factory<A, C> interpreter, AnyPartialSymbol symbol) { 92 Concreteness concreteness, PartialInterpretation.Factory<A, C> interpreter, AnyPartialSymbol symbol) {
92 // The builder only allows well-typed assignment of interpreters to symbols. 93 // The builder only allows well-typed assignment of interpreters to symbols.
93 @SuppressWarnings("unchecked") 94 @SuppressWarnings("unchecked")
@@ -107,7 +108,7 @@ class ReasoningAdapterImpl implements ReasoningAdapter {
107 } 108 }
108 } 109 }
109 110
110 private <A, C> PartialInterpretationRefiner<A, C> createRefiner( 111 private <A extends AbstractValue<A, C>, C> PartialInterpretationRefiner<A, C> createRefiner(
111 PartialInterpretationRefiner.Factory<A, C> factory, AnyPartialSymbol symbol) { 112 PartialInterpretationRefiner.Factory<A, C> factory, AnyPartialSymbol symbol) {
112 // The builder only allows well-typed assignment of interpreters to symbols. 113 // The builder only allows well-typed assignment of interpreters to symbols.
113 @SuppressWarnings("unchecked") 114 @SuppressWarnings("unchecked")
@@ -126,8 +127,8 @@ class ReasoningAdapterImpl implements ReasoningAdapter {
126 } 127 }
127 128
128 @Override 129 @Override
129 public <A, C> PartialInterpretation<A, C> getPartialInterpretation(Concreteness concreteness, 130 public <A extends AbstractValue<A, C>, C> PartialInterpretation<A, C> getPartialInterpretation(
130 PartialSymbol<A, C> partialSymbol) { 131 Concreteness concreteness, PartialSymbol<A, C> partialSymbol) {
131 var map = partialInterpretations[concreteness.ordinal()]; 132 var map = partialInterpretations[concreteness.ordinal()];
132 if (map == null) { 133 if (map == null) {
133 throw new IllegalArgumentException("No interpretation for concreteness: " + concreteness); 134 throw new IllegalArgumentException("No interpretation for concreteness: " + concreteness);
@@ -143,7 +144,8 @@ class ReasoningAdapterImpl implements ReasoningAdapter {
143 } 144 }
144 145
145 @Override 146 @Override
146 public <A, C> PartialInterpretationRefiner<A, C> getRefiner(PartialSymbol<A, C> partialSymbol) { 147 public <A extends AbstractValue<A, C>, C> PartialInterpretationRefiner<A, C> getRefiner(
148 PartialSymbol<A, C> partialSymbol) {
147 var refiner = refiners.get(partialSymbol); 149 var refiner = refiners.get(partialSymbol);
148 if (refiner == null) { 150 if (refiner == null) {
149 throw new IllegalArgumentException("No refiner for partial symbol: " + partialSymbol); 151 throw new IllegalArgumentException("No refiner for partial symbol: " + partialSymbol);
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/interpretation/AbstractPartialInterpretation.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/interpretation/AbstractPartialInterpretation.java
index ed291eac..4f51957b 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/interpretation/AbstractPartialInterpretation.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/interpretation/AbstractPartialInterpretation.java
@@ -5,11 +5,13 @@
5 */ 5 */
6package tools.refinery.store.reasoning.interpretation; 6package tools.refinery.store.reasoning.interpretation;
7 7
8import tools.refinery.logic.AbstractValue;
8import tools.refinery.store.reasoning.ReasoningAdapter; 9import tools.refinery.store.reasoning.ReasoningAdapter;
9import tools.refinery.store.reasoning.literal.Concreteness; 10import tools.refinery.store.reasoning.literal.Concreteness;
10import tools.refinery.store.reasoning.representation.PartialSymbol; 11import tools.refinery.store.reasoning.representation.PartialSymbol;
11 12
12public abstract class AbstractPartialInterpretation<A, C> implements PartialInterpretation<A, C> { 13public abstract class AbstractPartialInterpretation<A extends AbstractValue<A, C>, C>
14 implements PartialInterpretation<A, C> {
13 private final ReasoningAdapter adapter; 15 private final ReasoningAdapter adapter;
14 private final PartialSymbol<A, C> partialSymbol; 16 private final PartialSymbol<A, C> partialSymbol;
15 private final Concreteness concreteness; 17 private final Concreteness concreteness;
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/interpretation/PartialInterpretation.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/interpretation/PartialInterpretation.java
index 86ffe751..5a304030 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/interpretation/PartialInterpretation.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/interpretation/PartialInterpretation.java
@@ -1,10 +1,11 @@
1/* 1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/> 2 * SPDX-FileCopyrightText: 2021-2024 The Refinery Authors <https://refinery.tools/>
3 * 3 *
4 * SPDX-License-Identifier: EPL-2.0 4 * SPDX-License-Identifier: EPL-2.0
5 */ 5 */
6package tools.refinery.store.reasoning.interpretation; 6package tools.refinery.store.reasoning.interpretation;
7 7
8import tools.refinery.logic.AbstractValue;
8import tools.refinery.store.map.Cursor; 9import tools.refinery.store.map.Cursor;
9import tools.refinery.store.model.ModelStoreBuilder; 10import tools.refinery.store.model.ModelStoreBuilder;
10import tools.refinery.store.reasoning.ReasoningAdapter; 11import tools.refinery.store.reasoning.ReasoningAdapter;
@@ -14,7 +15,7 @@ import tools.refinery.store.tuple.Tuple;
14 15
15import java.util.Set; 16import java.util.Set;
16 17
17public non-sealed interface PartialInterpretation<A, C> extends AnyPartialInterpretation { 18public non-sealed interface PartialInterpretation<A extends AbstractValue<A, C>, C> extends AnyPartialInterpretation {
18 @Override 19 @Override
19 PartialSymbol<A, C> getPartialSymbol(); 20 PartialSymbol<A, C> getPartialSymbol();
20 21
@@ -23,7 +24,7 @@ public non-sealed interface PartialInterpretation<A, C> extends AnyPartialInterp
23 Cursor<Tuple, A> getAll(); 24 Cursor<Tuple, A> getAll();
24 25
25 @FunctionalInterface 26 @FunctionalInterface
26 interface Factory<A, C> { 27 interface Factory<A extends AbstractValue<A, C>, C> {
27 PartialInterpretation<A, C> create(ReasoningAdapter adapter, Concreteness concreteness, 28 PartialInterpretation<A, C> create(ReasoningAdapter adapter, Concreteness concreteness,
28 PartialSymbol<A, C> partialSymbol); 29 PartialSymbol<A, C> partialSymbol);
29 30
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/refinement/AbstractPartialInterpretationRefiner.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/refinement/AbstractPartialInterpretationRefiner.java
index a7fc5b7e..42943490 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/refinement/AbstractPartialInterpretationRefiner.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/refinement/AbstractPartialInterpretationRefiner.java
@@ -1,14 +1,16 @@
1/* 1/*
2 * SPDX-FileCopyrightText: 2023 The Refinery Authors <https://refinery.tools/> 2 * SPDX-FileCopyrightText: 2023-2024 The Refinery Authors <https://refinery.tools/>
3 * 3 *
4 * SPDX-License-Identifier: EPL-2.0 4 * SPDX-License-Identifier: EPL-2.0
5 */ 5 */
6package tools.refinery.store.reasoning.refinement; 6package tools.refinery.store.reasoning.refinement;
7 7
8import tools.refinery.logic.AbstractValue;
8import tools.refinery.store.reasoning.ReasoningAdapter; 9import tools.refinery.store.reasoning.ReasoningAdapter;
9import tools.refinery.store.reasoning.representation.PartialSymbol; 10import tools.refinery.store.reasoning.representation.PartialSymbol;
10 11
11public abstract class AbstractPartialInterpretationRefiner<A, C> implements PartialInterpretationRefiner<A, C> { 12public abstract class AbstractPartialInterpretationRefiner<A extends AbstractValue<A, C>, C>
13 implements PartialInterpretationRefiner<A, C> {
12 private final ReasoningAdapter adapter; 14 private final ReasoningAdapter adapter;
13 private final PartialSymbol<A, C> partialSymbol; 15 private final PartialSymbol<A, C> partialSymbol;
14 16
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/refinement/ConcreteSymbolRefiner.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/refinement/ConcreteSymbolRefiner.java
index ebb9b824..d6ac0e9d 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/refinement/ConcreteSymbolRefiner.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/refinement/ConcreteSymbolRefiner.java
@@ -1,10 +1,11 @@
1/* 1/*
2 * SPDX-FileCopyrightText: 2023 The Refinery Authors <https://refinery.tools/> 2 * SPDX-FileCopyrightText: 2023-2024 The Refinery Authors <https://refinery.tools/>
3 * 3 *
4 * SPDX-License-Identifier: EPL-2.0 4 * SPDX-License-Identifier: EPL-2.0
5 */ 5 */
6package tools.refinery.store.reasoning.refinement; 6package tools.refinery.store.reasoning.refinement;
7 7
8import tools.refinery.logic.AbstractValue;
8import tools.refinery.store.model.Interpretation; 9import tools.refinery.store.model.Interpretation;
9import tools.refinery.store.reasoning.ReasoningAdapter; 10import tools.refinery.store.reasoning.ReasoningAdapter;
10import tools.refinery.store.reasoning.representation.PartialSymbol; 11import tools.refinery.store.reasoning.representation.PartialSymbol;
@@ -13,7 +14,8 @@ import tools.refinery.store.tuple.Tuple;
13 14
14import java.util.Objects; 15import java.util.Objects;
15 16
16public class ConcreteSymbolRefiner<A, C> extends AbstractPartialInterpretationRefiner<A, C> { 17public class ConcreteSymbolRefiner<A extends AbstractValue<A, C>, C>
18 extends AbstractPartialInterpretationRefiner<A, C> {
17 private final Interpretation<A> interpretation; 19 private final Interpretation<A> interpretation;
18 20
19 public ConcreteSymbolRefiner(ReasoningAdapter adapter, PartialSymbol<A, C> partialSymbol, 21 public ConcreteSymbolRefiner(ReasoningAdapter adapter, PartialSymbol<A, C> partialSymbol,
@@ -25,14 +27,14 @@ public class ConcreteSymbolRefiner<A, C> extends AbstractPartialInterpretationRe
25 @Override 27 @Override
26 public boolean merge(Tuple key, A value) { 28 public boolean merge(Tuple key, A value) {
27 var currentValue = interpretation.get(key); 29 var currentValue = interpretation.get(key);
28 var mergedValue = getPartialSymbol().abstractDomain().commonRefinement(currentValue, value); 30 var mergedValue = currentValue.meet(value);
29 if (!Objects.equals(currentValue, mergedValue)) { 31 if (!Objects.equals(currentValue, mergedValue)) {
30 interpretation.put(key, mergedValue); 32 interpretation.put(key, mergedValue);
31 } 33 }
32 return true; 34 return true;
33 } 35 }
34 36
35 public static <A1, C1> Factory<A1, C1> of(Symbol<A1> concreteSymbol) { 37 public static <A1 extends AbstractValue<A1, C1>, C1> Factory<A1, C1> of(Symbol<A1> concreteSymbol) {
36 return (adapter, partialSymbol) -> new ConcreteSymbolRefiner<>(adapter, partialSymbol, concreteSymbol); 38 return (adapter, partialSymbol) -> new ConcreteSymbolRefiner<>(adapter, partialSymbol, concreteSymbol);
37 } 39 }
38} 40}
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/refinement/PartialInterpretationRefiner.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/refinement/PartialInterpretationRefiner.java
index f48d1d1f..c8b182b8 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/refinement/PartialInterpretationRefiner.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/refinement/PartialInterpretationRefiner.java
@@ -1,22 +1,24 @@
1/* 1/*
2 * SPDX-FileCopyrightText: 2023 The Refinery Authors <https://refinery.tools/> 2 * SPDX-FileCopyrightText: 2023-2024 The Refinery Authors <https://refinery.tools/>
3 * 3 *
4 * SPDX-License-Identifier: EPL-2.0 4 * SPDX-License-Identifier: EPL-2.0
5 */ 5 */
6package tools.refinery.store.reasoning.refinement; 6package tools.refinery.store.reasoning.refinement;
7 7
8import tools.refinery.logic.AbstractValue;
8import tools.refinery.store.reasoning.ReasoningAdapter; 9import tools.refinery.store.reasoning.ReasoningAdapter;
9import tools.refinery.store.reasoning.representation.PartialSymbol; 10import tools.refinery.store.reasoning.representation.PartialSymbol;
10import tools.refinery.store.tuple.Tuple; 11import tools.refinery.store.tuple.Tuple;
11 12
12public non-sealed interface PartialInterpretationRefiner<A, C> extends AnyPartialInterpretationRefiner { 13public non-sealed interface PartialInterpretationRefiner<A extends AbstractValue<A, C>, C>
14 extends AnyPartialInterpretationRefiner {
13 @Override 15 @Override
14 PartialSymbol<A, C> getPartialSymbol(); 16 PartialSymbol<A, C> getPartialSymbol();
15 17
16 boolean merge(Tuple key, A value); 18 boolean merge(Tuple key, A value);
17 19
18 @FunctionalInterface 20 @FunctionalInterface
19 interface Factory<A, C> { 21 interface Factory<A extends AbstractValue<A, C>, C> {
20 PartialInterpretationRefiner<A, C> create(ReasoningAdapter adapter, PartialSymbol<A, C> partialSymbol); 22 PartialInterpretationRefiner<A, C> create(ReasoningAdapter adapter, PartialSymbol<A, C> partialSymbol);
21 } 23 }
22} 24}
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/refinement/RefinementBasedInitializer.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/refinement/RefinementBasedInitializer.java
index b6bccb01..1a2c03a6 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/refinement/RefinementBasedInitializer.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/refinement/RefinementBasedInitializer.java
@@ -1,16 +1,17 @@
1/* 1/*
2 * SPDX-FileCopyrightText: 2023 The Refinery Authors <https://refinery.tools/> 2 * SPDX-FileCopyrightText: 2023-2024 The Refinery Authors <https://refinery.tools/>
3 * 3 *
4 * SPDX-License-Identifier: EPL-2.0 4 * SPDX-License-Identifier: EPL-2.0
5 */ 5 */
6package tools.refinery.store.reasoning.refinement; 6package tools.refinery.store.reasoning.refinement;
7 7
8import tools.refinery.logic.AbstractValue;
8import tools.refinery.store.model.Model; 9import tools.refinery.store.model.Model;
9import tools.refinery.store.reasoning.ReasoningAdapter; 10import tools.refinery.store.reasoning.ReasoningAdapter;
10import tools.refinery.store.reasoning.representation.PartialSymbol; 11import tools.refinery.store.reasoning.representation.PartialSymbol;
11import tools.refinery.store.reasoning.seed.ModelSeed; 12import tools.refinery.store.reasoning.seed.ModelSeed;
12 13
13public class RefinementBasedInitializer<A, C> implements PartialModelInitializer { 14public class RefinementBasedInitializer<A extends AbstractValue<A, C>, C> implements PartialModelInitializer {
14 private final PartialSymbol<A, C> partialSymbol; 15 private final PartialSymbol<A, C> partialSymbol;
15 16
16 public RefinementBasedInitializer(PartialSymbol<A, C> partialSymbol) { 17 public RefinementBasedInitializer(PartialSymbol<A, C> partialSymbol) {
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/representation/PartialFunction.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/representation/PartialFunction.java
index 236be7f8..88b98da8 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/representation/PartialFunction.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/representation/PartialFunction.java
@@ -1,14 +1,16 @@
1/* 1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/> 2 * SPDX-FileCopyrightText: 2021-2024 The Refinery Authors <https://refinery.tools/>
3 * 3 *
4 * SPDX-License-Identifier: EPL-2.0 4 * SPDX-License-Identifier: EPL-2.0
5 */ 5 */
6package tools.refinery.store.reasoning.representation; 6package tools.refinery.store.reasoning.representation;
7 7
8import tools.refinery.logic.AbstractDomain; 8import tools.refinery.logic.AbstractDomain;
9import tools.refinery.logic.AbstractValue;
9 10
10public record PartialFunction<A, C>(String name, int arity, AbstractDomain<A, C> abstractDomain) 11public record PartialFunction<A extends AbstractValue<A, C>, C>(
11 implements AnyPartialFunction, PartialSymbol<A, C> { 12 String name, int arity, AbstractDomain<A, C> abstractDomain) implements AnyPartialFunction,
13 PartialSymbol<A, C> {
12 @Override 14 @Override
13 public A defaultValue() { 15 public A defaultValue() {
14 return null; 16 return null;
@@ -21,7 +23,7 @@ public record PartialFunction<A, C>(String name, int arity, AbstractDomain<A, C>
21 23
22 @Override 24 @Override
23 public int hashCode() { 25 public int hashCode() {
24 // Compare by identity to make hash table lookups more efficient. 26 // Compare by identity to make hash table look-ups more efficient.
25 return System.identityHashCode(this); 27 return System.identityHashCode(this);
26 } 28 }
27 29
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/representation/PartialSymbol.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/representation/PartialSymbol.java
index 6986d518..21cbfefa 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/representation/PartialSymbol.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/representation/PartialSymbol.java
@@ -1,13 +1,15 @@
1/* 1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/> 2 * SPDX-FileCopyrightText: 2021-2024 The Refinery Authors <https://refinery.tools/>
3 * 3 *
4 * SPDX-License-Identifier: EPL-2.0 4 * SPDX-License-Identifier: EPL-2.0
5 */ 5 */
6package tools.refinery.store.reasoning.representation; 6package tools.refinery.store.reasoning.representation;
7 7
8import tools.refinery.logic.AbstractDomain; 8import tools.refinery.logic.AbstractDomain;
9import tools.refinery.logic.AbstractValue;
9 10
10public sealed interface PartialSymbol<A, C> extends AnyPartialSymbol permits PartialFunction, PartialRelation { 11public sealed interface PartialSymbol<A extends AbstractValue<A, C>, C> extends AnyPartialSymbol
12 permits PartialFunction, PartialRelation {
11 @Override 13 @Override
12 AbstractDomain<A, C> abstractDomain(); 14 AbstractDomain<A, C> abstractDomain();
13 15
@@ -17,7 +19,8 @@ public sealed interface PartialSymbol<A, C> extends AnyPartialSymbol permits Par
17 return new PartialRelation(name, arity); 19 return new PartialRelation(name, arity);
18 } 20 }
19 21
20 static <A, C> PartialFunction<A, C> of(String name, int arity, AbstractDomain<A, C> abstractDomain) { 22 static <A extends AbstractValue<A, C>, C> PartialFunction<A, C> of(
23 String name, int arity, AbstractDomain<A, C> abstractDomain) {
21 return new PartialFunction<>(name, arity, abstractDomain); 24 return new PartialFunction<>(name, arity, abstractDomain);
22 } 25 }
23} 26}
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/seed/ModelSeed.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/seed/ModelSeed.java
index e6b3eaf9..9cd4862b 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/seed/ModelSeed.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/seed/ModelSeed.java
@@ -1,10 +1,11 @@
1/* 1/*
2 * SPDX-FileCopyrightText: 2023 The Refinery Authors <https://refinery.tools/> 2 * SPDX-FileCopyrightText: 2023-2024 The Refinery Authors <https://refinery.tools/>
3 * 3 *
4 * SPDX-License-Identifier: EPL-2.0 4 * SPDX-License-Identifier: EPL-2.0
5 */ 5 */
6package tools.refinery.store.reasoning.seed; 6package tools.refinery.store.reasoning.seed;
7 7
8import tools.refinery.logic.AbstractValue;
8import tools.refinery.store.map.Cursor; 9import tools.refinery.store.map.Cursor;
9import tools.refinery.store.reasoning.representation.AnyPartialSymbol; 10import tools.refinery.store.reasoning.representation.AnyPartialSymbol;
10import tools.refinery.store.reasoning.representation.PartialSymbol; 11import tools.refinery.store.reasoning.representation.PartialSymbol;
@@ -29,7 +30,7 @@ public class ModelSeed {
29 return nodeCount; 30 return nodeCount;
30 } 31 }
31 32
32 public <A> Seed<A> getSeed(PartialSymbol<A, ?> partialSymbol) { 33 public <A extends AbstractValue<A, ?>> Seed<A> getSeed(PartialSymbol<A, ?> partialSymbol) {
33 var seed = seeds.get(partialSymbol); 34 var seed = seeds.get(partialSymbol);
34 if (seed == null) { 35 if (seed == null) {
35 throw new IllegalArgumentException("No seed for partial symbol " + partialSymbol); 36 throw new IllegalArgumentException("No seed for partial symbol " + partialSymbol);
@@ -48,7 +49,8 @@ public class ModelSeed {
48 return Collections.unmodifiableSet(seeds.keySet()); 49 return Collections.unmodifiableSet(seeds.keySet());
49 } 50 }
50 51
51 public <A> Cursor<Tuple, A> getCursor(PartialSymbol<A, ?> partialSymbol, A defaultValue) { 52 public <A extends AbstractValue<A, ?>> Cursor<Tuple, A> getCursor(PartialSymbol<A, ?> partialSymbol,
53 A defaultValue) {
52 return getSeed(partialSymbol).getCursor(defaultValue, nodeCount); 54 return getSeed(partialSymbol).getCursor(defaultValue, nodeCount);
53 } 55 }
54 56
@@ -67,7 +69,7 @@ public class ModelSeed {
67 this.nodeCount = nodeCount; 69 this.nodeCount = nodeCount;
68 } 70 }
69 71
70 public <A> Builder seed(PartialSymbol<A, ?> partialSymbol, Seed<A> seed) { 72 public <A extends AbstractValue<A, ?>> Builder seed(PartialSymbol<A, ?> partialSymbol, Seed<A> seed) {
71 if (seed.arity() != partialSymbol.arity()) { 73 if (seed.arity() != partialSymbol.arity()) {
72 throw new IllegalStateException("Expected seed of arity %d for partial symbol %s, but got %d instead" 74 throw new IllegalStateException("Expected seed of arity %d for partial symbol %s, but got %d instead"
73 .formatted(partialSymbol.arity(), partialSymbol, seed.arity())); 75 .formatted(partialSymbol.arity(), partialSymbol, seed.arity()));
@@ -82,7 +84,8 @@ public class ModelSeed {
82 return this; 84 return this;
83 } 85 }
84 86
85 public <A> Builder seed(PartialSymbol<A, ?> partialSymbol, Consumer<Seed.Builder<A>> callback) { 87 public <A extends AbstractValue<A, ?>> Builder seed(PartialSymbol<A, ?> partialSymbol,
88 Consumer<Seed.Builder<A>> callback) {
86 var builder = Seed.builder(partialSymbol); 89 var builder = Seed.builder(partialSymbol);
87 callback.accept(builder); 90 callback.accept(builder);
88 return seed(partialSymbol, builder.build()); 91 return seed(partialSymbol, builder.build());
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/seed/Seed.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/seed/Seed.java
index d9bad866..32562f01 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/seed/Seed.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/seed/Seed.java
@@ -1,10 +1,11 @@
1/* 1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/> 2 * SPDX-FileCopyrightText: 2021-2024 The Refinery Authors <https://refinery.tools/>
3 * 3 *
4 * SPDX-License-Identifier: EPL-2.0 4 * SPDX-License-Identifier: EPL-2.0
5 */ 5 */
6package tools.refinery.store.reasoning.seed; 6package tools.refinery.store.reasoning.seed;
7 7
8import tools.refinery.logic.AbstractValue;
8import tools.refinery.store.map.Cursor; 9import tools.refinery.store.map.Cursor;
9import tools.refinery.store.reasoning.representation.PartialSymbol; 10import tools.refinery.store.reasoning.representation.PartialSymbol;
10import tools.refinery.store.representation.Symbol; 11import tools.refinery.store.representation.Symbol;
@@ -33,7 +34,7 @@ public interface Seed<T> {
33 return builder(symbol.arity(), symbol.valueType(), symbol.defaultValue()); 34 return builder(symbol.arity(), symbol.valueType(), symbol.defaultValue());
34 } 35 }
35 36
36 static <T> Builder<T> builder(PartialSymbol<T, ?> partialSymbol) { 37 static <T extends AbstractValue<T, ?>> Builder<T> builder(PartialSymbol<T, ?> partialSymbol) {
37 return builder(partialSymbol.arity(), partialSymbol.abstractDomain().abstractType(), 38 return builder(partialSymbol.arity(), partialSymbol.abstractDomain().abstractType(),
38 partialSymbol.defaultValue()); 39 partialSymbol.defaultValue());
39 } 40 }
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/seed/SeedInitializer.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/seed/SeedInitializer.java
index 9af457d8..138e3a64 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/seed/SeedInitializer.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/seed/SeedInitializer.java
@@ -1,16 +1,17 @@
1/* 1/*
2 * SPDX-FileCopyrightText: 2023 The Refinery Authors <https://refinery.tools/> 2 * SPDX-FileCopyrightText: 2023-2024 The Refinery Authors <https://refinery.tools/>
3 * 3 *
4 * SPDX-License-Identifier: EPL-2.0 4 * SPDX-License-Identifier: EPL-2.0
5 */ 5 */
6package tools.refinery.store.reasoning.seed; 6package tools.refinery.store.reasoning.seed;
7 7
8import tools.refinery.logic.AbstractValue;
8import tools.refinery.store.model.Model; 9import tools.refinery.store.model.Model;
9import tools.refinery.store.reasoning.refinement.PartialModelInitializer; 10import tools.refinery.store.reasoning.refinement.PartialModelInitializer;
10import tools.refinery.store.reasoning.representation.PartialSymbol; 11import tools.refinery.store.reasoning.representation.PartialSymbol;
11import tools.refinery.store.representation.Symbol; 12import tools.refinery.store.representation.Symbol;
12 13
13public class SeedInitializer<T> implements PartialModelInitializer { 14public class SeedInitializer<T extends AbstractValue<T, ?>> implements PartialModelInitializer {
14 private final Symbol<T> symbol; 15 private final Symbol<T> symbol;
15 private final PartialSymbol<T, ?> partialSymbol; 16 private final PartialSymbol<T, ?> partialSymbol;
16 17
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/PartialSymbolTranslator.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/PartialSymbolTranslator.java
index 6cdb287d..f2583098 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/PartialSymbolTranslator.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/PartialSymbolTranslator.java
@@ -6,6 +6,7 @@
6package tools.refinery.store.reasoning.translator; 6package tools.refinery.store.reasoning.translator;
7 7
8import org.jetbrains.annotations.Nullable; 8import org.jetbrains.annotations.Nullable;
9import tools.refinery.logic.AbstractValue;
9import tools.refinery.store.dse.transition.DesignSpaceExplorationBuilder; 10import tools.refinery.store.dse.transition.DesignSpaceExplorationBuilder;
10import tools.refinery.store.dse.transition.Rule; 11import tools.refinery.store.dse.transition.Rule;
11import tools.refinery.store.dse.transition.objectives.Criterion; 12import tools.refinery.store.dse.transition.objectives.Criterion;
@@ -25,8 +26,8 @@ import java.util.ArrayList;
25import java.util.List; 26import java.util.List;
26 27
27@SuppressWarnings("UnusedReturnValue") 28@SuppressWarnings("UnusedReturnValue")
28public abstract sealed class PartialSymbolTranslator<A, C> implements AnyPartialSymbolTranslator 29public abstract sealed class PartialSymbolTranslator<A extends AbstractValue<A, C>, C>
29 permits PartialRelationTranslator { 30 implements AnyPartialSymbolTranslator permits PartialRelationTranslator {
30 private final PartialSymbol<A, C> partialSymbol; 31 private final PartialSymbol<A, C> partialSymbol;
31 private boolean configured = false; 32 private boolean configured = false;
32 protected PartialInterpretationRefiner.Factory<A, C> interpretationRefiner; 33 protected PartialInterpretationRefiner.Factory<A, C> interpretationRefiner;
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/containment/ContainmentLinkRefiner.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/containment/ContainmentLinkRefiner.java
index ef007efc..e83c33ac 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/containment/ContainmentLinkRefiner.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/containment/ContainmentLinkRefiner.java
@@ -64,7 +64,7 @@ class ContainmentLinkRefiner extends AbstractPartialInterpretationRefiner<TruthV
64 if (mustLinks.contains(factory.linkType)) { 64 if (mustLinks.contains(factory.linkType)) {
65 return oldValue; 65 return oldValue;
66 } 66 }
67 return new InferredContainment(oldValue.contains().merge(TruthValue.TRUE), 67 return new InferredContainment(oldValue.contains().meet(TruthValue.TRUE),
68 addToSet(mustLinks, factory.linkType), oldValue.forbiddenLinks()); 68 addToSet(mustLinks, factory.linkType), oldValue.forbiddenLinks());
69 } 69 }
70 70
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/containment/ContainsRefiner.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/containment/ContainsRefiner.java
index 3fe63339..00820040 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/containment/ContainsRefiner.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/containment/ContainsRefiner.java
@@ -1,5 +1,5 @@
1/* 1/*
2 * SPDX-FileCopyrightText: 2023 The Refinery Authors <https://refinery.tools/> 2 * SPDX-FileCopyrightText: 2023-2024 The Refinery Authors <https://refinery.tools/>
3 * 3 *
4 * SPDX-License-Identifier: EPL-2.0 4 * SPDX-License-Identifier: EPL-2.0
5 */ 5 */
@@ -23,7 +23,7 @@ class ContainsRefiner extends AbstractPartialInterpretationRefiner<TruthValue, B
23 23
24 static { 24 static {
25 var values = TruthValue.values(); 25 var values = TruthValue.values();
26 EMPTY_VALUES = new LinkedHashMap<>(values.length); 26 EMPTY_VALUES = LinkedHashMap.newLinkedHashMap(values.length);
27 for (var value : values) { 27 for (var value : values) {
28 EMPTY_VALUES.put(value, new InferredContainment(value, Set.of(), Set.of())); 28 EMPTY_VALUES.put(value, new InferredContainment(value, Set.of(), Set.of()));
29 } 29 }
@@ -53,7 +53,7 @@ class ContainsRefiner extends AbstractPartialInterpretationRefiner<TruthValue, B
53 } 53 }
54 54
55 public InferredContainment mergeLink(InferredContainment oldValue, TruthValue toMerge) { 55 public InferredContainment mergeLink(InferredContainment oldValue, TruthValue toMerge) {
56 var newContains = oldValue.contains().merge(toMerge); 56 var newContains = oldValue.contains().meet(toMerge);
57 if (newContains.equals(oldValue.contains())) { 57 if (newContains.equals(oldValue.contains())) {
58 return oldValue; 58 return oldValue;
59 } 59 }
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/containment/InferredContainment.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/containment/InferredContainment.java
index 77c7aaf4..0b6503c3 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/containment/InferredContainment.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/containment/InferredContainment.java
@@ -31,11 +31,11 @@ final class InferredContainment {
31 Set<PartialRelation> forbiddenLinks) { 31 Set<PartialRelation> forbiddenLinks) {
32 var result = contains; 32 var result = contains;
33 if (!mustLinks.isEmpty()) { 33 if (!mustLinks.isEmpty()) {
34 result = result.merge(TruthValue.TRUE); 34 result = result.meet(TruthValue.TRUE);
35 } 35 }
36 boolean hasErrorLink = mustLinks.stream().anyMatch(forbiddenLinks::contains); 36 boolean hasErrorLink = mustLinks.stream().anyMatch(forbiddenLinks::contains);
37 if (mustLinks.size() >= 2 || hasErrorLink) { 37 if (mustLinks.size() >= 2 || hasErrorLink) {
38 result = result.merge(TruthValue.ERROR); 38 result = result.meet(TruthValue.ERROR);
39 } 39 }
40 return result; 40 return result;
41 } 41 }
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/crossreference/UndirectedCrossReferenceInitializer.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/crossreference/UndirectedCrossReferenceInitializer.java
index 5bb1b967..84dcfdc5 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/crossreference/UndirectedCrossReferenceInitializer.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/crossreference/UndirectedCrossReferenceInitializer.java
@@ -73,7 +73,7 @@ class UndirectedCrossReferenceInitializer implements PartialModelInitializer {
73 // Already processed entry. 73 // Already processed entry.
74 continue; 74 continue;
75 } 75 }
76 var mergedValue = value.merge(oppositeValue == null ? defaultValue : oppositeValue); 76 var mergedValue = value.meet(oppositeValue == null ? defaultValue : oppositeValue);
77 mergedMap.put(key, mergedValue); 77 mergedMap.put(key, mergedValue);
78 if (first != second) { 78 if (first != second) {
79 mergedMap.put(oppositeKey, mergedValue); 79 mergedMap.put(oppositeKey, mergedValue);
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/metamodel/MetamodelBuilder.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/metamodel/MetamodelBuilder.java
index a5047768..d1979b8c 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/metamodel/MetamodelBuilder.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/metamodel/MetamodelBuilder.java
@@ -131,7 +131,7 @@ public class MetamodelBuilder {
131 var oppositeInfo = referenceInfoMap.get(opposite); 131 var oppositeInfo = referenceInfoMap.get(opposite);
132 validateOpposite(linkType, info, opposite, oppositeInfo); 132 validateOpposite(linkType, info, opposite, oppositeInfo);
133 targetMultiplicity = oppositeInfo.multiplicity(); 133 targetMultiplicity = oppositeInfo.multiplicity();
134 defaultValue = defaultValue.merge(oppositeInfo.defaultValue()); 134 defaultValue = defaultValue.meet(oppositeInfo.defaultValue());
135 if (oppositeInfo.containment()) { 135 if (oppositeInfo.containment()) {
136 // Skip processing this reference and process it once we encounter its containment opposite. 136 // Skip processing this reference and process it once we encounter its containment opposite.
137 return; 137 return;
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/multiobject/EqualsRefiner.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/multiobject/EqualsRefiner.java
index 0b89ec58..07595932 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/multiobject/EqualsRefiner.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/multiobject/EqualsRefiner.java
@@ -51,7 +51,7 @@ public class EqualsRefiner extends AbstractPartialInterpretationRefiner<TruthVal
51 return false; 51 return false;
52 } 52 }
53 var newCount = currentCount.meet(CardinalityIntervals.LONE); 53 var newCount = currentCount.meet(CardinalityIntervals.LONE);
54 if (newCount.isEmpty()) { 54 if (newCount.isError()) {
55 return false; 55 return false;
56 } 56 }
57 countInterpretation.put(unaryKey, newCount); 57 countInterpretation.put(unaryKey, newCount);
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/multiobject/ExistsRefiner.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/multiobject/ExistsRefiner.java
index 3908fedb..83fa4377 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/multiobject/ExistsRefiner.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/multiobject/ExistsRefiner.java
@@ -42,7 +42,7 @@ public class ExistsRefiner extends AbstractPartialInterpretationRefiner<TruthVal
42 } 42 }
43 default -> throw new IllegalArgumentException("Unknown TruthValue: " + value); 43 default -> throw new IllegalArgumentException("Unknown TruthValue: " + value);
44 } 44 }
45 if (newCount.isEmpty()) { 45 if (newCount.isError()) {
46 return false; 46 return false;
47 } 47 }
48 countInterpretation.put(key, newCount); 48 countInterpretation.put(key, newCount);
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/multiobject/MultiObjectInitializer.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/multiobject/MultiObjectInitializer.java
index 694a800b..eb13174c 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/multiobject/MultiObjectInitializer.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/multiobject/MultiObjectInitializer.java
@@ -37,7 +37,7 @@ class MultiObjectInitializer implements PartialModelInitializer {
37 var uniqueTable = new HashMap<CardinalityInterval, CardinalityInterval>(); 37 var uniqueTable = new HashMap<CardinalityInterval, CardinalityInterval>();
38 for (int i = 0; i < intervals.length; i++) { 38 for (int i = 0; i < intervals.length; i++) {
39 var interval = intervals[i]; 39 var interval = intervals[i];
40 if (interval.isEmpty()) { 40 if (interval.isError()) {
41 throw new TranslationException(ReasoningAdapter.EXISTS_SYMBOL, 41 throw new TranslationException(ReasoningAdapter.EXISTS_SYMBOL,
42 "Inconsistent existence or equality for node " + i); 42 "Inconsistent existence or equality for node " + i);
43 } 43 }
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/multiobject/MultiObjectStorageRefiner.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/multiobject/MultiObjectStorageRefiner.java
index 147ae486..ab401f9e 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/multiobject/MultiObjectStorageRefiner.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/multiobject/MultiObjectStorageRefiner.java
@@ -28,7 +28,7 @@ class MultiObjectStorageRefiner implements StorageRefiner {
28 return false; 28 return false;
29 } 29 }
30 var newParentCount = parentCount.take(1); 30 var newParentCount = parentCount.take(1);
31 if (newParentCount.isEmpty()) { 31 if (newParentCount.isError()) {
32 return false; 32 return false;
33 } 33 }
34 var childKey = Tuple.of(childNode); 34 var childKey = Tuple.of(childNode);
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/opposite/OppositeInterpretation.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/opposite/OppositeInterpretation.java
index 7290ab40..75828086 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/opposite/OppositeInterpretation.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/opposite/OppositeInterpretation.java
@@ -1,11 +1,11 @@
1/* 1/*
2 * SPDX-FileCopyrightText: 2023 The Refinery Authors <https://refinery.tools/> 2 * SPDX-FileCopyrightText: 2023-2024 The Refinery Authors <https://refinery.tools/>
3 * 3 *
4 * SPDX-License-Identifier: EPL-2.0 4 * SPDX-License-Identifier: EPL-2.0
5 */ 5 */
6package tools.refinery.store.reasoning.translator.opposite; 6package tools.refinery.store.reasoning.translator.opposite;
7 7
8 8import tools.refinery.logic.AbstractValue;
9import tools.refinery.store.map.AnyVersionedMap; 9import tools.refinery.store.map.AnyVersionedMap;
10import tools.refinery.store.map.Cursor; 10import tools.refinery.store.map.Cursor;
11import tools.refinery.store.reasoning.ReasoningAdapter; 11import tools.refinery.store.reasoning.ReasoningAdapter;
@@ -17,7 +17,7 @@ import tools.refinery.store.tuple.Tuple;
17 17
18import java.util.Set; 18import java.util.Set;
19 19
20class OppositeInterpretation<A, C> extends AbstractPartialInterpretation<A, C> { 20class OppositeInterpretation<A extends AbstractValue<A, C>, C> extends AbstractPartialInterpretation<A, C> {
21 private final PartialInterpretation<A, C> opposite; 21 private final PartialInterpretation<A, C> opposite;
22 22
23 private OppositeInterpretation(ReasoningAdapter adapter, Concreteness concreteness, 23 private OppositeInterpretation(ReasoningAdapter adapter, Concreteness concreteness,
@@ -36,7 +36,7 @@ class OppositeInterpretation<A, C> extends AbstractPartialInterpretation<A, C> {
36 return new OppositeCursor<>(opposite.getAll()); 36 return new OppositeCursor<>(opposite.getAll());
37 } 37 }
38 38
39 public static <A1, C1> Factory<A1, C1> of(PartialSymbol<A1, C1> oppositeSymbol) { 39 public static <A1 extends AbstractValue<A1, C1>, C1> Factory<A1, C1> of(PartialSymbol<A1, C1> oppositeSymbol) {
40 return (adapter, concreteness, partialSymbol) -> { 40 return (adapter, concreteness, partialSymbol) -> {
41 var opposite = adapter.getPartialInterpretation(concreteness, oppositeSymbol); 41 var opposite = adapter.getPartialInterpretation(concreteness, oppositeSymbol);
42 return new OppositeInterpretation<>(adapter, concreteness, partialSymbol, opposite); 42 return new OppositeInterpretation<>(adapter, concreteness, partialSymbol, opposite);
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/opposite/OppositeRefiner.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/opposite/OppositeRefiner.java
index d09684df..47e3ac6a 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/opposite/OppositeRefiner.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/opposite/OppositeRefiner.java
@@ -1,17 +1,18 @@
1/* 1/*
2 * SPDX-FileCopyrightText: 2023 The Refinery Authors <https://refinery.tools/> 2 * SPDX-FileCopyrightText: 2023-2024 The Refinery Authors <https://refinery.tools/>
3 * 3 *
4 * SPDX-License-Identifier: EPL-2.0 4 * SPDX-License-Identifier: EPL-2.0
5 */ 5 */
6package tools.refinery.store.reasoning.translator.opposite; 6package tools.refinery.store.reasoning.translator.opposite;
7 7
8import tools.refinery.logic.AbstractValue;
8import tools.refinery.store.reasoning.ReasoningAdapter; 9import tools.refinery.store.reasoning.ReasoningAdapter;
9import tools.refinery.store.reasoning.refinement.AbstractPartialInterpretationRefiner; 10import tools.refinery.store.reasoning.refinement.AbstractPartialInterpretationRefiner;
10import tools.refinery.store.reasoning.refinement.PartialInterpretationRefiner; 11import tools.refinery.store.reasoning.refinement.PartialInterpretationRefiner;
11import tools.refinery.store.reasoning.representation.PartialSymbol; 12import tools.refinery.store.reasoning.representation.PartialSymbol;
12import tools.refinery.store.tuple.Tuple; 13import tools.refinery.store.tuple.Tuple;
13 14
14public class OppositeRefiner<A, C> extends AbstractPartialInterpretationRefiner<A, C> { 15public class OppositeRefiner<A extends AbstractValue<A, C>, C> extends AbstractPartialInterpretationRefiner<A, C> {
15 private final PartialInterpretationRefiner<A, C> opposite; 16 private final PartialInterpretationRefiner<A, C> opposite;
16 17
17 protected OppositeRefiner(ReasoningAdapter adapter, PartialSymbol<A, C> partialSymbol, 18 protected OppositeRefiner(ReasoningAdapter adapter, PartialSymbol<A, C> partialSymbol,
@@ -26,7 +27,7 @@ public class OppositeRefiner<A, C> extends AbstractPartialInterpretationRefiner<
26 return opposite.merge(oppositeKey, value); 27 return opposite.merge(oppositeKey, value);
27 } 28 }
28 29
29 public static <A1, C1> Factory<A1, C1> of(PartialSymbol<A1, C1> oppositeSymbol) { 30 public static <A1 extends AbstractValue<A1, C1>, C1> Factory<A1, C1> of(PartialSymbol<A1, C1> oppositeSymbol) {
30 return (adapter, partialSymbol) -> new OppositeRefiner<>(adapter, partialSymbol, oppositeSymbol); 31 return (adapter, partialSymbol) -> new OppositeRefiner<>(adapter, partialSymbol, oppositeSymbol);
31 } 32 }
32} 33}