diff options
Diffstat (limited to 'subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator')
12 files changed, 23 insertions, 21 deletions
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 @@ | |||
6 | package tools.refinery.store.reasoning.translator; | 6 | package tools.refinery.store.reasoning.translator; |
7 | 7 | ||
8 | import org.jetbrains.annotations.Nullable; | 8 | import org.jetbrains.annotations.Nullable; |
9 | import tools.refinery.logic.AbstractValue; | ||
9 | import tools.refinery.store.dse.transition.DesignSpaceExplorationBuilder; | 10 | import tools.refinery.store.dse.transition.DesignSpaceExplorationBuilder; |
10 | import tools.refinery.store.dse.transition.Rule; | 11 | import tools.refinery.store.dse.transition.Rule; |
11 | import tools.refinery.store.dse.transition.objectives.Criterion; | 12 | import tools.refinery.store.dse.transition.objectives.Criterion; |
@@ -25,8 +26,8 @@ import java.util.ArrayList; | |||
25 | import java.util.List; | 26 | import java.util.List; |
26 | 27 | ||
27 | @SuppressWarnings("UnusedReturnValue") | 28 | @SuppressWarnings("UnusedReturnValue") |
28 | public abstract sealed class PartialSymbolTranslator<A, C> implements AnyPartialSymbolTranslator | 29 | public 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 | */ |
6 | package tools.refinery.store.reasoning.translator.opposite; | 6 | package tools.refinery.store.reasoning.translator.opposite; |
7 | 7 | ||
8 | 8 | import tools.refinery.logic.AbstractValue; | |
9 | import tools.refinery.store.map.AnyVersionedMap; | 9 | import tools.refinery.store.map.AnyVersionedMap; |
10 | import tools.refinery.store.map.Cursor; | 10 | import tools.refinery.store.map.Cursor; |
11 | import tools.refinery.store.reasoning.ReasoningAdapter; | 11 | import tools.refinery.store.reasoning.ReasoningAdapter; |
@@ -17,7 +17,7 @@ import tools.refinery.store.tuple.Tuple; | |||
17 | 17 | ||
18 | import java.util.Set; | 18 | import java.util.Set; |
19 | 19 | ||
20 | class OppositeInterpretation<A, C> extends AbstractPartialInterpretation<A, C> { | 20 | class 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 | */ |
6 | package tools.refinery.store.reasoning.translator.opposite; | 6 | package tools.refinery.store.reasoning.translator.opposite; |
7 | 7 | ||
8 | import tools.refinery.logic.AbstractValue; | ||
8 | import tools.refinery.store.reasoning.ReasoningAdapter; | 9 | import tools.refinery.store.reasoning.ReasoningAdapter; |
9 | import tools.refinery.store.reasoning.refinement.AbstractPartialInterpretationRefiner; | 10 | import tools.refinery.store.reasoning.refinement.AbstractPartialInterpretationRefiner; |
10 | import tools.refinery.store.reasoning.refinement.PartialInterpretationRefiner; | 11 | import tools.refinery.store.reasoning.refinement.PartialInterpretationRefiner; |
11 | import tools.refinery.store.reasoning.representation.PartialSymbol; | 12 | import tools.refinery.store.reasoning.representation.PartialSymbol; |
12 | import tools.refinery.store.tuple.Tuple; | 13 | import tools.refinery.store.tuple.Tuple; |
13 | 14 | ||
14 | public class OppositeRefiner<A, C> extends AbstractPartialInterpretationRefiner<A, C> { | 15 | public 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 | } |