summaryrefslogtreecommitdiffstats
path: root/subprojects/store-reasoning/src/main
diff options
context:
space:
mode:
authorLibravatar Kristóf Marussy <marussy@mit.bme.hu>2023-06-18 18:04:43 +0200
committerLibravatar GitHub <noreply@github.com>2023-06-18 18:04:43 +0200
commita0619c0fbf1fab2304ca683343803d1f37c2ef7c (patch)
tree6d6e342b019a1f3ad0baae710cf520a5dffe4b9e /subprojects/store-reasoning/src/main
parentMerge pull request #24 from kris7t/partial-interpretation (diff)
parentchore(deps): bump dependencies (diff)
downloadrefinery-a0619c0fbf1fab2304ca683343803d1f37c2ef7c.tar.gz
refinery-a0619c0fbf1fab2304ca683343803d1f37c2ef7c.tar.zst
refinery-a0619c0fbf1fab2304ca683343803d1f37c2ef7c.zip
Merge pull request #26 from kris7t/query-refactor
Query refactor
Diffstat (limited to 'subprojects/store-reasoning/src/main')
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/AnyPartialInterpretation.java5
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/MergeResult.java5
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/PartialInterpretation.java5
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/Reasoning.java24
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/ReasoningAdapter.java14
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/ReasoningBuilder.java7
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/ReasoningStoreAdapter.java5
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/internal/ReasoningAdapterImpl.java7
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/internal/ReasoningBuilderImpl.java18
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/internal/ReasoningStoreAdapterImpl.java5
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/lifting/DnfLifter.java38
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/lifting/ModalDnf.java5
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/literal/ModalConstraint.java15
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/literal/Modality.java5
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/literal/PartialLiterals.java5
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/representation/AnyPartialFunction.java5
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/representation/AnyPartialSymbol.java5
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/representation/PartialFunction.java5
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/representation/PartialRelation.java16
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/representation/PartialSymbol.java5
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/rule/RelationRefinementAction.java9
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/rule/Rule.java5
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/rule/RuleAction.java5
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/rule/RuleActionExecutor.java9
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/rule/RuleExecutor.java12
-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/UniformSeed.java5
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/Advice.java14
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/AdviceSlot.java5
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/TranslatedRelation.java5
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/TranslationUnit.java10
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/base/BaseDecisionInterpretation.java5
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/base/BaseDecisionTranslationUnit.java12
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/base/TranslatedBaseDecision.java5
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/typehierarchy/EliminatedType.java5
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/typehierarchy/ExtendedTypeInfo.java5
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/typehierarchy/InferredMayTypeView.java (renamed from subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/typehierarchy/InferredMayTypeRelationView.java)11
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/typehierarchy/InferredMustTypeView.java (renamed from subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/typehierarchy/InferredMustTypeRelationView.java)11
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/typehierarchy/InferredType.java5
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/typehierarchy/PreservedType.java5
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/typehierarchy/TypeAnalysisResult.java5
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/typehierarchy/TypeAnalyzer.java5
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/typehierarchy/TypeHierarchyTranslationUnit.java9
-rw-r--r--subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/typehierarchy/TypeInfo.java5
44 files changed, 277 insertions, 94 deletions
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/AnyPartialInterpretation.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/AnyPartialInterpretation.java
index ebe82c8b..000171a1 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/AnyPartialInterpretation.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/AnyPartialInterpretation.java
@@ -1,3 +1,8 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
1package tools.refinery.store.reasoning; 6package tools.refinery.store.reasoning;
2 7
3import tools.refinery.store.reasoning.representation.AnyPartialSymbol; 8import tools.refinery.store.reasoning.representation.AnyPartialSymbol;
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/MergeResult.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/MergeResult.java
index 0d51598b..d3a216d8 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/MergeResult.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/MergeResult.java
@@ -1,3 +1,8 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
1package tools.refinery.store.reasoning; 6package tools.refinery.store.reasoning;
2 7
3public enum MergeResult { 8public enum MergeResult {
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/PartialInterpretation.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/PartialInterpretation.java
index 4f195e97..4140d640 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/PartialInterpretation.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/PartialInterpretation.java
@@ -1,3 +1,8 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
1package tools.refinery.store.reasoning; 6package tools.refinery.store.reasoning;
2 7
3import tools.refinery.store.reasoning.representation.PartialSymbol; 8import tools.refinery.store.reasoning.representation.PartialSymbol;
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/Reasoning.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/Reasoning.java
deleted file mode 100644
index d7d0a999..00000000
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/Reasoning.java
+++ /dev/null
@@ -1,24 +0,0 @@
1package tools.refinery.store.reasoning;
2
3import tools.refinery.store.reasoning.internal.ReasoningBuilderImpl;
4import tools.refinery.store.adapter.ModelAdapterBuilderFactory;
5import tools.refinery.store.model.ModelStoreBuilder;
6import tools.refinery.store.reasoning.representation.PartialRelation;
7
8public final class Reasoning extends ModelAdapterBuilderFactory<ReasoningAdapter,
9 ReasoningStoreAdapter, ReasoningBuilder> {
10 public static final Reasoning ADAPTER = new Reasoning();
11
12 public static final PartialRelation EXISTS = new PartialRelation("exists", 1);
13
14 public static final PartialRelation EQUALS = new PartialRelation("equals", 1);
15
16 private Reasoning() {
17 super(ReasoningAdapter.class, ReasoningStoreAdapter.class, ReasoningBuilder.class);
18 }
19
20 @Override
21 public ReasoningBuilder createBuilder(ModelStoreBuilder storeBuilder) {
22 return new ReasoningBuilderImpl(storeBuilder);
23 }
24}
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 de039dd9..8f319242 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,12 +1,20 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
1package tools.refinery.store.reasoning; 6package tools.refinery.store.reasoning;
2 7
3import tools.refinery.store.adapter.ModelAdapter; 8import tools.refinery.store.adapter.ModelAdapter;
9import tools.refinery.store.query.ResultSet;
10import tools.refinery.store.query.dnf.Dnf;
4import tools.refinery.store.reasoning.representation.AnyPartialSymbol; 11import tools.refinery.store.reasoning.representation.AnyPartialSymbol;
12import tools.refinery.store.reasoning.representation.PartialRelation;
5import tools.refinery.store.reasoning.representation.PartialSymbol; 13import tools.refinery.store.reasoning.representation.PartialSymbol;
6import tools.refinery.store.query.dnf.Dnf;
7import tools.refinery.store.query.ResultSet;
8 14
9public interface ReasoningAdapter extends ModelAdapter { 15public interface ReasoningAdapter extends ModelAdapter {
16 PartialRelation EXISTS = new PartialRelation("exists", 1);
17
10 @Override 18 @Override
11 ReasoningStoreAdapter getStoreAdapter(); 19 ReasoningStoreAdapter getStoreAdapter();
12 20
@@ -18,5 +26,5 @@ public interface ReasoningAdapter extends ModelAdapter {
18 26
19 <A, C> PartialInterpretation<A, C> getPartialInterpretation(PartialSymbol<A, C> partialSymbol); 27 <A, C> PartialInterpretation<A, C> getPartialInterpretation(PartialSymbol<A, C> partialSymbol);
20 28
21 ResultSet getLiftedResultSet(Dnf query); 29 ResultSet<Boolean> getLiftedResultSet(Dnf query);
22} 30}
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/ReasoningBuilder.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/ReasoningBuilder.java
index 4030d296..d3a337e8 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/ReasoningBuilder.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/ReasoningBuilder.java
@@ -1,3 +1,8 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
1package tools.refinery.store.reasoning; 6package tools.refinery.store.reasoning;
2 7
3import tools.refinery.store.adapter.ModelAdapterBuilder; 8import tools.refinery.store.adapter.ModelAdapterBuilder;
@@ -24,5 +29,5 @@ public interface ReasoningBuilder extends ModelAdapterBuilder {
24 Dnf lift(Modality modality, Dnf query); 29 Dnf lift(Modality modality, Dnf query);
25 30
26 @Override 31 @Override
27 ReasoningStoreAdapter createStoreAdapter(ModelStore store); 32 ReasoningStoreAdapter build(ModelStore store);
28} 33}
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/ReasoningStoreAdapter.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/ReasoningStoreAdapter.java
index f6a6e414..c9795255 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/ReasoningStoreAdapter.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/ReasoningStoreAdapter.java
@@ -1,3 +1,8 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
1package tools.refinery.store.reasoning; 6package tools.refinery.store.reasoning;
2 7
3import tools.refinery.store.adapter.ModelStoreAdapter; 8import tools.refinery.store.adapter.ModelStoreAdapter;
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 0acf0d49..33b6f3c6 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,3 +1,8 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
1package tools.refinery.store.reasoning.internal; 6package tools.refinery.store.reasoning.internal;
2 7
3import tools.refinery.store.model.Model; 8import tools.refinery.store.model.Model;
@@ -32,7 +37,7 @@ public class ReasoningAdapterImpl implements ReasoningAdapter {
32 } 37 }
33 38
34 @Override 39 @Override
35 public ResultSet getLiftedResultSet(Dnf query) { 40 public ResultSet<Boolean> getLiftedResultSet(Dnf query) {
36 return null; 41 return null;
37 } 42 }
38} 43}
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/internal/ReasoningBuilderImpl.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/internal/ReasoningBuilderImpl.java
index e11b14bf..aa71496c 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/internal/ReasoningBuilderImpl.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/internal/ReasoningBuilderImpl.java
@@ -1,17 +1,18 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
1package tools.refinery.store.reasoning.internal; 6package tools.refinery.store.reasoning.internal;
2 7
3import tools.refinery.store.adapter.AbstractModelAdapterBuilder; 8import tools.refinery.store.adapter.AbstractModelAdapterBuilder;
4import tools.refinery.store.model.ModelStore; 9import tools.refinery.store.model.ModelStore;
5import tools.refinery.store.model.ModelStoreBuilder; 10import tools.refinery.store.query.dnf.Dnf;
6import tools.refinery.store.reasoning.ReasoningBuilder; 11import tools.refinery.store.reasoning.ReasoningBuilder;
7import tools.refinery.store.reasoning.literal.Modality; 12import tools.refinery.store.reasoning.literal.Modality;
8import tools.refinery.store.query.dnf.Dnf;
9
10public class ReasoningBuilderImpl extends AbstractModelAdapterBuilder implements ReasoningBuilder {
11 public ReasoningBuilderImpl(ModelStoreBuilder storeBuilder) {
12 super(storeBuilder);
13 }
14 13
14public class ReasoningBuilderImpl extends AbstractModelAdapterBuilder<ReasoningStoreAdapterImpl>
15 implements ReasoningBuilder {
15 @Override 16 @Override
16 public ReasoningBuilder liftedQuery(Dnf liftedQuery) { 17 public ReasoningBuilder liftedQuery(Dnf liftedQuery) {
17 return null; 18 return null;
@@ -19,11 +20,12 @@ public class ReasoningBuilderImpl extends AbstractModelAdapterBuilder implements
19 20
20 @Override 21 @Override
21 public Dnf lift(Modality modality, Dnf query) { 22 public Dnf lift(Modality modality, Dnf query) {
23 checkNotConfigured();
22 return null; 24 return null;
23 } 25 }
24 26
25 @Override 27 @Override
26 public ReasoningStoreAdapterImpl createStoreAdapter(ModelStore store) { 28 public ReasoningStoreAdapterImpl doBuild(ModelStore store) {
27 return null; 29 return null;
28 } 30 }
29} 31}
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/internal/ReasoningStoreAdapterImpl.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/internal/ReasoningStoreAdapterImpl.java
index ac06e68b..cdddd8d6 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/internal/ReasoningStoreAdapterImpl.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/internal/ReasoningStoreAdapterImpl.java
@@ -1,3 +1,8 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
1package tools.refinery.store.reasoning.internal; 6package tools.refinery.store.reasoning.internal;
2 7
3import tools.refinery.store.reasoning.ReasoningStoreAdapter; 8import tools.refinery.store.reasoning.ReasoningStoreAdapter;
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/lifting/DnfLifter.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/lifting/DnfLifter.java
index 2b0e0f08..ac41d170 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/lifting/DnfLifter.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/lifting/DnfLifter.java
@@ -1,3 +1,8 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
1package tools.refinery.store.reasoning.lifting; 6package tools.refinery.store.reasoning.lifting;
2 7
3import org.jetbrains.annotations.Nullable; 8import org.jetbrains.annotations.Nullable;
@@ -7,16 +12,16 @@ import tools.refinery.store.query.dnf.DnfClause;
7import tools.refinery.store.query.literal.CallLiteral; 12import tools.refinery.store.query.literal.CallLiteral;
8import tools.refinery.store.query.literal.CallPolarity; 13import tools.refinery.store.query.literal.CallPolarity;
9import tools.refinery.store.query.literal.Literal; 14import tools.refinery.store.query.literal.Literal;
10import tools.refinery.store.query.term.DataVariable; 15import tools.refinery.store.query.term.NodeVariable;
11import tools.refinery.store.query.term.Variable; 16import tools.refinery.store.query.term.Variable;
12import tools.refinery.store.reasoning.Reasoning; 17import tools.refinery.store.reasoning.ReasoningAdapter;
13import tools.refinery.store.reasoning.literal.ModalConstraint; 18import tools.refinery.store.reasoning.literal.ModalConstraint;
14import tools.refinery.store.reasoning.literal.Modality; 19import tools.refinery.store.reasoning.literal.Modality;
15import tools.refinery.store.reasoning.literal.PartialLiterals; 20import tools.refinery.store.reasoning.literal.PartialLiterals;
16import tools.refinery.store.util.CycleDetectingMapper; 21import tools.refinery.store.util.CycleDetectingMapper;
17 22
18import java.util.ArrayList; 23import java.util.ArrayList;
19import java.util.HashSet; 24import java.util.LinkedHashSet;
20import java.util.List; 25import java.util.List;
21 26
22public class DnfLifter { 27public class DnfLifter {
@@ -31,10 +36,10 @@ public class DnfLifter {
31 var modality = modalDnf.modality(); 36 var modality = modalDnf.modality();
32 var dnf = modalDnf.dnf(); 37 var dnf = modalDnf.dnf();
33 var builder = Dnf.builder(); 38 var builder = Dnf.builder();
34 builder.parameters(dnf.getParameters()); 39 builder.symbolicParameters(dnf.getSymbolicParameters());
35 boolean changed = false; 40 boolean changed = false;
36 for (var clause : dnf.getClauses()) { 41 for (var clause : dnf.getClauses()) {
37 if (liftClause(modality, clause, builder)) { 42 if (liftClause(modality, dnf, clause, builder)) {
38 changed = true; 43 changed = true;
39 } 44 }
40 } 45 }
@@ -44,12 +49,9 @@ public class DnfLifter {
44 return dnf; 49 return dnf;
45 } 50 }
46 51
47 private boolean liftClause(Modality modality, DnfClause clause, DnfBuilder builder) { 52 private boolean liftClause(Modality modality, Dnf originalDnf, DnfClause clause, DnfBuilder builder) {
48 boolean changed = false; 53 boolean changed = false;
49 var quantifiedVariables = new HashSet<>(clause.boundVariables() 54 var quantifiedVariables = getQuantifiedDataVariables(originalDnf, clause);
50 .stream()
51 .filter(DataVariable.class::isInstance)
52 .toList());
53 var literals = clause.literals(); 55 var literals = clause.literals();
54 var liftedLiterals = new ArrayList<Literal>(literals.size()); 56 var liftedLiterals = new ArrayList<Literal>(literals.size());
55 for (var literal : literals) { 57 for (var literal : literals) {
@@ -69,20 +71,30 @@ public class DnfLifter {
69 } 71 }
70 for (var quantifiedVariable : quantifiedVariables) { 72 for (var quantifiedVariable : quantifiedVariables) {
71 // Quantify over data variables that are not already quantified with the expected modality. 73 // Quantify over data variables that are not already quantified with the expected modality.
72 liftedLiterals.add(new CallLiteral(CallPolarity.POSITIVE, new ModalConstraint(modality, Reasoning.EXISTS), 74 liftedLiterals.add(new CallLiteral(CallPolarity.POSITIVE,
73 List.of(quantifiedVariable))); 75 new ModalConstraint(modality, ReasoningAdapter.EXISTS), List.of(quantifiedVariable)));
74 } 76 }
75 builder.clause(liftedLiterals); 77 builder.clause(liftedLiterals);
76 return changed || !quantifiedVariables.isEmpty(); 78 return changed || !quantifiedVariables.isEmpty();
77 } 79 }
78 80
81 private static LinkedHashSet<Variable> getQuantifiedDataVariables(Dnf originalDnf, DnfClause clause) {
82 var quantifiedVariables = new LinkedHashSet<>(clause.positiveVariables());
83 for (var symbolicParameter : originalDnf.getSymbolicParameters()) {
84 // The existence of parameters will be checked outside this DNF.
85 quantifiedVariables.remove(symbolicParameter.getVariable());
86 }
87 quantifiedVariables.removeIf(variable -> !(variable instanceof NodeVariable));
88 return quantifiedVariables;
89 }
90
79 @Nullable 91 @Nullable
80 private Variable isExistsLiteralForVariable(Modality modality, Literal literal) { 92 private Variable isExistsLiteralForVariable(Modality modality, Literal literal) {
81 if (literal instanceof CallLiteral callLiteral && 93 if (literal instanceof CallLiteral callLiteral &&
82 callLiteral.getPolarity() == CallPolarity.POSITIVE && 94 callLiteral.getPolarity() == CallPolarity.POSITIVE &&
83 callLiteral.getTarget() instanceof ModalConstraint modalConstraint && 95 callLiteral.getTarget() instanceof ModalConstraint modalConstraint &&
84 modalConstraint.modality() == modality && 96 modalConstraint.modality() == modality &&
85 modalConstraint.constraint().equals(Reasoning.EXISTS)) { 97 modalConstraint.constraint().equals(ReasoningAdapter.EXISTS)) {
86 return callLiteral.getArguments().get(0); 98 return callLiteral.getArguments().get(0);
87 } 99 }
88 return null; 100 return null;
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/lifting/ModalDnf.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/lifting/ModalDnf.java
index ec381bb8..16fb8fbf 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/lifting/ModalDnf.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/lifting/ModalDnf.java
@@ -1,3 +1,8 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
1package tools.refinery.store.reasoning.lifting; 6package tools.refinery.store.reasoning.lifting;
2 7
3import tools.refinery.store.query.dnf.Dnf; 8import tools.refinery.store.query.dnf.Dnf;
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/literal/ModalConstraint.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/literal/ModalConstraint.java
index 2fbb4607..5ad1d5f8 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/literal/ModalConstraint.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/literal/ModalConstraint.java
@@ -1,9 +1,14 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
1package tools.refinery.store.reasoning.literal; 6package tools.refinery.store.reasoning.literal;
2 7
3import tools.refinery.store.query.Constraint; 8import tools.refinery.store.query.Constraint;
4import tools.refinery.store.query.equality.LiteralEqualityHelper; 9import tools.refinery.store.query.equality.LiteralEqualityHelper;
5import tools.refinery.store.query.literal.LiteralReduction; 10import tools.refinery.store.query.Reduction;
6import tools.refinery.store.query.term.Sort; 11import tools.refinery.store.query.term.Parameter;
7 12
8import java.util.List; 13import java.util.List;
9 14
@@ -16,12 +21,12 @@ public record ModalConstraint(Modality modality, Constraint constraint) implemen
16 } 21 }
17 22
18 @Override 23 @Override
19 public List<Sort> getSorts() { 24 public List<Parameter> getParameters() {
20 return constraint.getSorts(); 25 return constraint.getParameters();
21 } 26 }
22 27
23 @Override 28 @Override
24 public LiteralReduction getReduction() { 29 public Reduction getReduction() {
25 return constraint.getReduction(); 30 return constraint.getReduction();
26 } 31 }
27 32
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/literal/Modality.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/literal/Modality.java
index f0cb59de..96466d5c 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/literal/Modality.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/literal/Modality.java
@@ -1,3 +1,8 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
1package tools.refinery.store.reasoning.literal; 6package tools.refinery.store.reasoning.literal;
2 7
3import tools.refinery.store.query.literal.CallPolarity; 8import tools.refinery.store.query.literal.CallPolarity;
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/literal/PartialLiterals.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/literal/PartialLiterals.java
index f991f87f..0e46a795 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/literal/PartialLiterals.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/literal/PartialLiterals.java
@@ -1,3 +1,8 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
1package tools.refinery.store.reasoning.literal; 6package tools.refinery.store.reasoning.literal;
2 7
3import tools.refinery.store.query.literal.CallLiteral; 8import tools.refinery.store.query.literal.CallLiteral;
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/representation/AnyPartialFunction.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/representation/AnyPartialFunction.java
index e74cd58b..8d2cb5cf 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/representation/AnyPartialFunction.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/representation/AnyPartialFunction.java
@@ -1,3 +1,8 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
1package tools.refinery.store.reasoning.representation; 6package tools.refinery.store.reasoning.representation;
2 7
3public sealed interface AnyPartialFunction extends AnyPartialSymbol permits PartialFunction { 8public sealed interface AnyPartialFunction extends AnyPartialSymbol permits PartialFunction {
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/representation/AnyPartialSymbol.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/representation/AnyPartialSymbol.java
index 6ff5031b..788eef73 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/representation/AnyPartialSymbol.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/representation/AnyPartialSymbol.java
@@ -1,3 +1,8 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
1package tools.refinery.store.reasoning.representation; 6package tools.refinery.store.reasoning.representation;
2 7
3import tools.refinery.store.representation.AnyAbstractDomain; 8import tools.refinery.store.representation.AnyAbstractDomain;
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 59eeeefe..d58d026f 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,3 +1,8 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
1package tools.refinery.store.reasoning.representation; 6package tools.refinery.store.reasoning.representation;
2 7
3import tools.refinery.store.representation.AbstractDomain; 8import tools.refinery.store.representation.AbstractDomain;
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/representation/PartialRelation.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/representation/PartialRelation.java
index 9bae53a9..6b2f050b 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/representation/PartialRelation.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/representation/PartialRelation.java
@@ -1,8 +1,12 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
1package tools.refinery.store.reasoning.representation; 6package tools.refinery.store.reasoning.representation;
2 7
3import tools.refinery.store.query.Constraint; 8import tools.refinery.store.query.Constraint;
4import tools.refinery.store.query.term.NodeSort; 9import tools.refinery.store.query.term.Parameter;
5import tools.refinery.store.query.term.Sort;
6import tools.refinery.store.representation.AbstractDomain; 10import tools.refinery.store.representation.AbstractDomain;
7import tools.refinery.store.representation.TruthValue; 11import tools.refinery.store.representation.TruthValue;
8import tools.refinery.store.representation.TruthValueDomain; 12import tools.refinery.store.representation.TruthValueDomain;
@@ -27,10 +31,10 @@ public record PartialRelation(String name, int arity) implements PartialSymbol<T
27 } 31 }
28 32
29 @Override 33 @Override
30 public List<Sort> getSorts() { 34 public List<Parameter> getParameters() {
31 var sorts = new Sort[arity()]; 35 var parameters = new Parameter[arity];
32 Arrays.fill(sorts, NodeSort.INSTANCE); 36 Arrays.fill(parameters, Parameter.NODE_OUT);
33 return List.of(sorts); 37 return List.of(parameters);
34 } 38 }
35 39
36 @Override 40 @Override
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 1af11f2e..3a08bdd8 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,3 +1,8 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
1package tools.refinery.store.reasoning.representation; 6package tools.refinery.store.reasoning.representation;
2 7
3import tools.refinery.store.representation.AbstractDomain; 8import tools.refinery.store.representation.AbstractDomain;
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/rule/RelationRefinementAction.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/rule/RelationRefinementAction.java
index e8ed05a3..0beee248 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/rule/RelationRefinementAction.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/rule/RelationRefinementAction.java
@@ -1,6 +1,11 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
1package tools.refinery.store.reasoning.rule; 6package tools.refinery.store.reasoning.rule;
2 7
3import tools.refinery.store.reasoning.Reasoning; 8import tools.refinery.store.reasoning.ReasoningAdapter;
4import tools.refinery.store.reasoning.representation.PartialRelation; 9import tools.refinery.store.reasoning.representation.PartialRelation;
5import tools.refinery.store.model.Model; 10import tools.refinery.store.model.Model;
6import tools.refinery.store.query.term.Variable; 11import tools.refinery.store.query.term.Variable;
@@ -23,7 +28,7 @@ public record RelationRefinementAction(PartialRelation target, List<Variable> ar
23 28
24 @Override 29 @Override
25 public RuleActionExecutor createExecutor(int[] argumentIndices, Model model) { 30 public RuleActionExecutor createExecutor(int[] argumentIndices, Model model) {
26 var targetInterpretation = model.getAdapter(Reasoning.ADAPTER).getPartialInterpretation(target); 31 var targetInterpretation = model.getAdapter(ReasoningAdapter.class).getPartialInterpretation(target);
27 return activationTuple -> { 32 return activationTuple -> {
28 int arity = argumentIndices.length; 33 int arity = argumentIndices.length;
29 var arguments = new int[arity]; 34 var arguments = new int[arity];
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/rule/Rule.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/rule/Rule.java
index c7b16d47..45b0f02e 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/rule/Rule.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/rule/Rule.java
@@ -1,3 +1,8 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
1package tools.refinery.store.reasoning.rule; 6package tools.refinery.store.reasoning.rule;
2 7
3import tools.refinery.store.model.Model; 8import tools.refinery.store.model.Model;
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/rule/RuleAction.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/rule/RuleAction.java
index 4753b8bc..97ea7313 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/rule/RuleAction.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/rule/RuleAction.java
@@ -1,3 +1,8 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
1package tools.refinery.store.reasoning.rule; 6package tools.refinery.store.reasoning.rule;
2 7
3import tools.refinery.store.model.Model; 8import tools.refinery.store.model.Model;
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/rule/RuleActionExecutor.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/rule/RuleActionExecutor.java
index 80bfa6f8..5d743869 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/rule/RuleActionExecutor.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/rule/RuleActionExecutor.java
@@ -1,9 +1,14 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
1package tools.refinery.store.reasoning.rule; 6package tools.refinery.store.reasoning.rule;
2 7
3import tools.refinery.store.reasoning.MergeResult; 8import tools.refinery.store.reasoning.MergeResult;
4import tools.refinery.store.tuple.TupleLike; 9import tools.refinery.store.tuple.Tuple;
5 10
6@FunctionalInterface 11@FunctionalInterface
7public interface RuleActionExecutor { 12public interface RuleActionExecutor {
8 MergeResult execute(TupleLike activationTuple); 13 MergeResult execute(Tuple activationTuple);
9} 14}
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/rule/RuleExecutor.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/rule/RuleExecutor.java
index 1e5322b4..32cf13ea 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/rule/RuleExecutor.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/rule/RuleExecutor.java
@@ -1,8 +1,13 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
1package tools.refinery.store.reasoning.rule; 6package tools.refinery.store.reasoning.rule;
2 7
3import tools.refinery.store.reasoning.MergeResult;
4import tools.refinery.store.model.Model; 8import tools.refinery.store.model.Model;
5import tools.refinery.store.tuple.TupleLike; 9import tools.refinery.store.reasoning.MergeResult;
10import tools.refinery.store.tuple.Tuple;
6 11
7import java.util.List; 12import java.util.List;
8 13
@@ -24,7 +29,8 @@ public final class RuleExecutor {
24 public Model getModel() { 29 public Model getModel() {
25 return model; 30 return model;
26 } 31 }
27 public MergeResult execute(TupleLike activationTuple) { 32
33 public MergeResult execute(Tuple activationTuple) {
28 MergeResult mergeResult = MergeResult.UNCHANGED; 34 MergeResult mergeResult = MergeResult.UNCHANGED;
29 for (var actionExecutor : actionExecutors) { 35 for (var actionExecutor : actionExecutors) {
30 mergeResult = mergeResult.andAlso(actionExecutor.execute(activationTuple)); 36 mergeResult = mergeResult.andAlso(actionExecutor.execute(activationTuple));
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 90633495..08079f12 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,3 +1,8 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
1package tools.refinery.store.reasoning.seed; 6package tools.refinery.store.reasoning.seed;
2 7
3import tools.refinery.store.map.Cursor; 8import tools.refinery.store.map.Cursor;
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/seed/UniformSeed.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/seed/UniformSeed.java
index a030f6ea..451d1513 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/seed/UniformSeed.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/seed/UniformSeed.java
@@ -1,3 +1,8 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
1package tools.refinery.store.reasoning.seed; 6package tools.refinery.store.reasoning.seed;
2 7
3import tools.refinery.store.map.Cursor; 8import tools.refinery.store.map.Cursor;
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/Advice.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/Advice.java
index 5cdfedf7..d6a9e02c 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/Advice.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/Advice.java
@@ -1,10 +1,15 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
1package tools.refinery.store.reasoning.translator; 6package tools.refinery.store.reasoning.translator;
2 7
8import tools.refinery.store.query.substitution.Substitution;
3import tools.refinery.store.reasoning.representation.AnyPartialSymbol; 9import tools.refinery.store.reasoning.representation.AnyPartialSymbol;
4import tools.refinery.store.reasoning.representation.PartialRelation; 10import tools.refinery.store.reasoning.representation.PartialRelation;
5import tools.refinery.store.query.term.Variable; 11import tools.refinery.store.query.term.Variable;
6import tools.refinery.store.query.literal.Literal; 12import tools.refinery.store.query.literal.Literal;
7import tools.refinery.store.query.substitution.Substitutions;
8 13
9import java.util.*; 14import java.util.*;
10 15
@@ -61,14 +66,9 @@ public final class Advice {
61 public List<Literal> substitute(List<Variable> substituteParameters) { 66 public List<Literal> substitute(List<Variable> substituteParameters) {
62 checkArity(substituteParameters); 67 checkArity(substituteParameters);
63 markProcessed(); 68 markProcessed();
64 int arity = parameters.size();
65 var variableMap = new HashMap<Variable, Variable>(arity);
66 for (int i = 0; i < arity; i++) {
67 variableMap.put(parameters.get(i), substituteParameters.get(i));
68 }
69 // Use a renewing substitution to remove any non-parameter variables and avoid clashed between variables 69 // Use a renewing substitution to remove any non-parameter variables and avoid clashed between variables
70 // coming from different advice in the same clause. 70 // coming from different advice in the same clause.
71 var substitution = Substitutions.renewing(variableMap); 71 var substitution = Substitution.builder().putManyChecked(parameters, substituteParameters).renewing().build();
72 return literals.stream().map(literal -> literal.substitute(substitution)).toList(); 72 return literals.stream().map(literal -> literal.substitute(substitution)).toList();
73 } 73 }
74 74
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/AdviceSlot.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/AdviceSlot.java
index f3bd9c5e..bab20340 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/AdviceSlot.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/AdviceSlot.java
@@ -1,3 +1,8 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
1package tools.refinery.store.reasoning.translator; 6package tools.refinery.store.reasoning.translator;
2 7
3import tools.refinery.store.representation.TruthValue; 8import tools.refinery.store.representation.TruthValue;
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/TranslatedRelation.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/TranslatedRelation.java
index 9bab80c9..4a5a8843 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/TranslatedRelation.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/TranslatedRelation.java
@@ -1,3 +1,8 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
1package tools.refinery.store.reasoning.translator; 6package tools.refinery.store.reasoning.translator;
2 7
3import tools.refinery.store.model.Model; 8import tools.refinery.store.model.Model;
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/TranslationUnit.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/TranslationUnit.java
index 24b93911..6e44a7d7 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/TranslationUnit.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/TranslationUnit.java
@@ -1,7 +1,11 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
1package tools.refinery.store.reasoning.translator; 6package tools.refinery.store.reasoning.translator;
2 7
3import tools.refinery.store.model.Model; 8import tools.refinery.store.model.Model;
4import tools.refinery.store.model.ModelStoreBuilder;
5import tools.refinery.store.reasoning.ReasoningBuilder; 9import tools.refinery.store.reasoning.ReasoningBuilder;
6 10
7import java.util.Collection; 11import java.util.Collection;
@@ -18,10 +22,6 @@ public abstract class TranslationUnit {
18 configureReasoningBuilder(); 22 configureReasoningBuilder();
19 } 23 }
20 24
21 protected ModelStoreBuilder getModelStoreBuilder() {
22 return reasoningBuilder.getStoreBuilder();
23 }
24
25 protected void configureReasoningBuilder() { 25 protected void configureReasoningBuilder() {
26 // Nothing to configure by default. 26 // Nothing to configure by default.
27 } 27 }
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/base/BaseDecisionInterpretation.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/base/BaseDecisionInterpretation.java
index b703f142..e7b67ae4 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/base/BaseDecisionInterpretation.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/base/BaseDecisionInterpretation.java
@@ -1,3 +1,8 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
1package tools.refinery.store.reasoning.translator.base; 6package tools.refinery.store.reasoning.translator.base;
2 7
3import tools.refinery.store.map.Cursor; 8import tools.refinery.store.map.Cursor;
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/base/BaseDecisionTranslationUnit.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/base/BaseDecisionTranslationUnit.java
index 36e2782a..a1e4b816 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/base/BaseDecisionTranslationUnit.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/base/BaseDecisionTranslationUnit.java
@@ -1,3 +1,8 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
1package tools.refinery.store.reasoning.translator.base; 6package tools.refinery.store.reasoning.translator.base;
2 7
3import tools.refinery.store.model.Model; 8import tools.refinery.store.model.Model;
@@ -24,7 +29,7 @@ public class BaseDecisionTranslationUnit extends TranslationUnit {
24 } 29 }
25 this.partialRelation = partialRelation; 30 this.partialRelation = partialRelation;
26 this.seed = seed; 31 this.seed = seed;
27 symbol = new Symbol<>(partialRelation.name(), partialRelation.arity(), TruthValue.class, TruthValue.UNKNOWN); 32 symbol = Symbol.of(partialRelation.name(), partialRelation.arity(), TruthValue.class, TruthValue.UNKNOWN);
28 } 33 }
29 34
30 public BaseDecisionTranslationUnit(PartialRelation partialRelation) { 35 public BaseDecisionTranslationUnit(PartialRelation partialRelation) {
@@ -32,11 +37,6 @@ public class BaseDecisionTranslationUnit extends TranslationUnit {
32 } 37 }
33 38
34 @Override 39 @Override
35 protected void configureReasoningBuilder() {
36 getModelStoreBuilder().symbol(symbol);
37 }
38
39 @Override
40 public Collection<TranslatedRelation> getTranslatedRelations() { 40 public Collection<TranslatedRelation> getTranslatedRelations() {
41 return List.of(new TranslatedBaseDecision(getReasoningBuilder(), partialRelation, symbol)); 41 return List.of(new TranslatedBaseDecision(getReasoningBuilder(), partialRelation, symbol));
42 } 42 }
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/base/TranslatedBaseDecision.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/base/TranslatedBaseDecision.java
index 2294b4fd..4782eb46 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/base/TranslatedBaseDecision.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/base/TranslatedBaseDecision.java
@@ -1,3 +1,8 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
1package tools.refinery.store.reasoning.translator.base; 6package tools.refinery.store.reasoning.translator.base;
2 7
3import tools.refinery.store.model.Model; 8import tools.refinery.store.model.Model;
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/typehierarchy/EliminatedType.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/typehierarchy/EliminatedType.java
index 1b8d7cc9..6e4728db 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/typehierarchy/EliminatedType.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/typehierarchy/EliminatedType.java
@@ -1,3 +1,8 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
1package tools.refinery.store.reasoning.translator.typehierarchy; 6package tools.refinery.store.reasoning.translator.typehierarchy;
2 7
3import tools.refinery.store.reasoning.representation.PartialRelation; 8import tools.refinery.store.reasoning.representation.PartialRelation;
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/typehierarchy/ExtendedTypeInfo.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/typehierarchy/ExtendedTypeInfo.java
index 43b8e1dd..7a917dcf 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/typehierarchy/ExtendedTypeInfo.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/typehierarchy/ExtendedTypeInfo.java
@@ -1,3 +1,8 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
1package tools.refinery.store.reasoning.translator.typehierarchy; 6package tools.refinery.store.reasoning.translator.typehierarchy;
2 7
3import org.jetbrains.annotations.NotNull; 8import org.jetbrains.annotations.NotNull;
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/typehierarchy/InferredMayTypeRelationView.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/typehierarchy/InferredMayTypeView.java
index 12c37c86..ce2d6ff3 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/typehierarchy/InferredMayTypeRelationView.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/typehierarchy/InferredMayTypeView.java
@@ -1,13 +1,18 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
1package tools.refinery.store.reasoning.translator.typehierarchy; 6package tools.refinery.store.reasoning.translator.typehierarchy;
2 7
3import tools.refinery.store.reasoning.representation.PartialRelation; 8import tools.refinery.store.reasoning.representation.PartialRelation;
4import tools.refinery.store.query.view.TuplePreservingRelationView; 9import tools.refinery.store.query.view.TuplePreservingView;
5import tools.refinery.store.tuple.Tuple; 10import tools.refinery.store.tuple.Tuple;
6 11
7class InferredMayTypeRelationView extends TuplePreservingRelationView<InferredType> { 12class InferredMayTypeView extends TuplePreservingView<InferredType> {
8 private final PartialRelation type; 13 private final PartialRelation type;
9 14
10 InferredMayTypeRelationView(PartialRelation type) { 15 InferredMayTypeView(PartialRelation type) {
11 super(TypeHierarchyTranslationUnit.INFERRED_TYPE_SYMBOL, "%s#may".formatted(type)); 16 super(TypeHierarchyTranslationUnit.INFERRED_TYPE_SYMBOL, "%s#may".formatted(type));
12 this.type = type; 17 this.type = type;
13 } 18 }
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/typehierarchy/InferredMustTypeRelationView.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/typehierarchy/InferredMustTypeView.java
index 975f627e..beda1796 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/typehierarchy/InferredMustTypeRelationView.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/typehierarchy/InferredMustTypeView.java
@@ -1,13 +1,18 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
1package tools.refinery.store.reasoning.translator.typehierarchy; 6package tools.refinery.store.reasoning.translator.typehierarchy;
2 7
3import tools.refinery.store.reasoning.representation.PartialRelation; 8import tools.refinery.store.reasoning.representation.PartialRelation;
4import tools.refinery.store.query.view.TuplePreservingRelationView; 9import tools.refinery.store.query.view.TuplePreservingView;
5import tools.refinery.store.tuple.Tuple; 10import tools.refinery.store.tuple.Tuple;
6 11
7class InferredMustTypeRelationView extends TuplePreservingRelationView<InferredType> { 12class InferredMustTypeView extends TuplePreservingView<InferredType> {
8 private final PartialRelation type; 13 private final PartialRelation type;
9 14
10 InferredMustTypeRelationView(PartialRelation type) { 15 InferredMustTypeView(PartialRelation type) {
11 super(TypeHierarchyTranslationUnit.INFERRED_TYPE_SYMBOL, "%s#must".formatted(type)); 16 super(TypeHierarchyTranslationUnit.INFERRED_TYPE_SYMBOL, "%s#must".formatted(type));
12 this.type = type; 17 this.type = type;
13 } 18 }
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/typehierarchy/InferredType.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/typehierarchy/InferredType.java
index a366e262..fd05158b 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/typehierarchy/InferredType.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/typehierarchy/InferredType.java
@@ -1,3 +1,8 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
1package tools.refinery.store.reasoning.translator.typehierarchy; 6package tools.refinery.store.reasoning.translator.typehierarchy;
2 7
3import tools.refinery.store.reasoning.representation.PartialRelation; 8import tools.refinery.store.reasoning.representation.PartialRelation;
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/typehierarchy/PreservedType.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/typehierarchy/PreservedType.java
index 63dba964..0696f4c3 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/typehierarchy/PreservedType.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/typehierarchy/PreservedType.java
@@ -1,3 +1,8 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
1package tools.refinery.store.reasoning.translator.typehierarchy; 6package tools.refinery.store.reasoning.translator.typehierarchy;
2 7
3import tools.refinery.store.reasoning.representation.PartialRelation; 8import tools.refinery.store.reasoning.representation.PartialRelation;
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/typehierarchy/TypeAnalysisResult.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/typehierarchy/TypeAnalysisResult.java
index 4f915108..fbf8a7c9 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/typehierarchy/TypeAnalysisResult.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/typehierarchy/TypeAnalysisResult.java
@@ -1,3 +1,8 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
1package tools.refinery.store.reasoning.translator.typehierarchy; 6package tools.refinery.store.reasoning.translator.typehierarchy;
2 7
3sealed interface TypeAnalysisResult permits EliminatedType, PreservedType { 8sealed interface TypeAnalysisResult permits EliminatedType, PreservedType {
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/typehierarchy/TypeAnalyzer.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/typehierarchy/TypeAnalyzer.java
index 62f8e750..e97ce954 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/typehierarchy/TypeAnalyzer.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/typehierarchy/TypeAnalyzer.java
@@ -1,3 +1,8 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
1package tools.refinery.store.reasoning.translator.typehierarchy; 6package tools.refinery.store.reasoning.translator.typehierarchy;
2 7
3import tools.refinery.store.reasoning.representation.PartialRelation; 8import tools.refinery.store.reasoning.representation.PartialRelation;
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/typehierarchy/TypeHierarchyTranslationUnit.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/typehierarchy/TypeHierarchyTranslationUnit.java
index 4b0761f2..06e3c05f 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/typehierarchy/TypeHierarchyTranslationUnit.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/typehierarchy/TypeHierarchyTranslationUnit.java
@@ -1,3 +1,8 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
1package tools.refinery.store.reasoning.translator.typehierarchy; 6package tools.refinery.store.reasoning.translator.typehierarchy;
2 7
3import tools.refinery.store.model.Model; 8import tools.refinery.store.model.Model;
@@ -11,8 +16,8 @@ import java.util.List;
11import java.util.Map; 16import java.util.Map;
12 17
13public class TypeHierarchyTranslationUnit extends TranslationUnit { 18public class TypeHierarchyTranslationUnit extends TranslationUnit {
14 static final Symbol<InferredType> INFERRED_TYPE_SYMBOL = new Symbol<>("inferredType", 1, 19 static final Symbol<InferredType> INFERRED_TYPE_SYMBOL = Symbol.of(
15 InferredType.class, InferredType.UNTYPED); 20 "inferredType", 1, InferredType.class, InferredType.UNTYPED);
16 21
17 private final TypeAnalyzer typeAnalyzer; 22 private final TypeAnalyzer typeAnalyzer;
18 23
diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/typehierarchy/TypeInfo.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/typehierarchy/TypeInfo.java
index 313df4df..9f897e46 100644
--- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/typehierarchy/TypeInfo.java
+++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/typehierarchy/TypeInfo.java
@@ -1,3 +1,8 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
1package tools.refinery.store.reasoning.translator.typehierarchy; 6package tools.refinery.store.reasoning.translator.typehierarchy;
2 7
3import tools.refinery.store.reasoning.representation.PartialRelation; 8import tools.refinery.store.reasoning.representation.PartialRelation;