aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar Kristóf Marussy <kristof@marussy.com>2023-04-10 19:18:29 +0200
committerLibravatar Kristóf Marussy <kristof@marussy.com>2023-04-15 17:15:50 +0200
commit7c15c0e6e6a035458bdd89a939aacdf4a207e1cd (patch)
treee9318d8f1c326c05ee981e4ec966fb3fcffd6afa
parentbuild: add workflow for REUSE compliance check (diff)
downloadrefinery-7c15c0e6e6a035458bdd89a939aacdf4a207e1cd.tar.gz
refinery-7c15c0e6e6a035458bdd89a939aacdf4a207e1cd.tar.zst
refinery-7c15c0e6e6a035458bdd89a939aacdf4a207e1cd.zip
refactor: rename RelationView to SymbolView
* Add NodeFunctionView for symbols that hold function-like (single associated object for each key) relations as integer values for performance.
-rw-r--r--subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/ViatraModelQueryBuilderImpl.java10
-rw-r--r--subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/ViatraModelQueryStoreAdapterImpl.java10
-rw-r--r--subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/context/RelationalQueryMetaContext.java34
-rw-r--r--subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/context/RelationalRuntimeContext.java22
-rw-r--r--subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/pquery/Dnf2PQuery.java14
-rw-r--r--subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/pquery/QueryWrapperFactory.java22
-rw-r--r--subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/pquery/SymbolViewWrapper.java (renamed from subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/pquery/RelationViewWrapper.java)6
-rw-r--r--subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/update/ModelUpdateListener.java38
-rw-r--r--subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/update/SymbolViewUpdateListener.java (renamed from subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/update/RelationViewUpdateListener.java)20
-rw-r--r--subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/update/TupleChangingViewUpdateListener.java (renamed from subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/update/TupleChangingRelationViewUpdateListener.java)24
-rw-r--r--subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/update/TuplePreservingViewUpdateListener.java (renamed from subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/update/TuplePreservingRelationViewUpdateListener.java)10
-rw-r--r--subprojects/store-query-viatra/src/test/java/tools/refinery/store/query/viatra/DiagonalQueryTest.java36
-rw-r--r--subprojects/store-query-viatra/src/test/java/tools/refinery/store/query/viatra/FunctionalQueryTest.java50
-rw-r--r--subprojects/store-query-viatra/src/test/java/tools/refinery/store/query/viatra/QueryTest.java60
-rw-r--r--subprojects/store-query-viatra/src/test/java/tools/refinery/store/query/viatra/QueryTransactionTest.java24
-rw-r--r--subprojects/store-query/src/main/java/tools/refinery/store/query/ModelQueryStoreAdapter.java4
-rw-r--r--subprojects/store-query/src/main/java/tools/refinery/store/query/view/AbstractFunctionView.java (renamed from subprojects/store-query/src/main/java/tools/refinery/store/query/view/FunctionalRelationView.java)44
-rw-r--r--subprojects/store-query/src/main/java/tools/refinery/store/query/view/AnySymbolView.java (renamed from subprojects/store-query/src/main/java/tools/refinery/store/query/view/AnyRelationView.java)4
-rw-r--r--subprojects/store-query/src/main/java/tools/refinery/store/query/view/FilteredView.java (renamed from subprojects/store-query/src/main/java/tools/refinery/store/query/view/FilteredRelationView.java)12
-rw-r--r--subprojects/store-query/src/main/java/tools/refinery/store/query/view/ForbiddenView.java (renamed from subprojects/store-query/src/main/java/tools/refinery/store/query/view/ForbiddenRelationView.java)4
-rw-r--r--subprojects/store-query/src/main/java/tools/refinery/store/query/view/KeyOnlyView.java (renamed from subprojects/store-query/src/main/java/tools/refinery/store/query/view/KeyOnlyRelationView.java)6
-rw-r--r--subprojects/store-query/src/main/java/tools/refinery/store/query/view/MayView.java (renamed from subprojects/store-query/src/main/java/tools/refinery/store/query/view/MayRelationView.java)4
-rw-r--r--subprojects/store-query/src/main/java/tools/refinery/store/query/view/MustView.java (renamed from subprojects/store-query/src/main/java/tools/refinery/store/query/view/MustRelationView.java)4
-rw-r--r--subprojects/store-query/src/main/java/tools/refinery/store/query/view/RelationViewImplication.java24
-rw-r--r--subprojects/store-query/src/main/java/tools/refinery/store/query/view/SymbolView.java (renamed from subprojects/store-query/src/main/java/tools/refinery/store/query/view/RelationView.java)8
-rw-r--r--subprojects/store-query/src/main/java/tools/refinery/store/query/view/TuplePreservingView.java (renamed from subprojects/store-query/src/main/java/tools/refinery/store/query/view/TuplePreservingRelationView.java)11
-rw-r--r--subprojects/store-query/src/test/java/tools/refinery/store/query/DnfBuilderTest.java26
-rw-r--r--subprojects/store-query/src/test/java/tools/refinery/store/query/DnfToDefinitionStringTest.java20
-rw-r--r--subprojects/store-query/src/test/java/tools/refinery/store/query/tests/StructurallyEqualToTest.java10
-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)6
-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)6
31 files changed, 279 insertions, 294 deletions
diff --git a/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/ViatraModelQueryBuilderImpl.java b/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/ViatraModelQueryBuilderImpl.java
index 999d349a..44ed1505 100644
--- a/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/ViatraModelQueryBuilderImpl.java
+++ b/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/ViatraModelQueryBuilderImpl.java
@@ -117,7 +117,7 @@ public class ViatraModelQueryBuilderImpl extends AbstractModelAdapterBuilder imp
117 public ViatraModelQueryStoreAdapterImpl createStoreAdapter(ModelStore store) { 117 public ViatraModelQueryStoreAdapterImpl createStoreAdapter(ModelStore store) {
118 validateSymbols(store); 118 validateSymbols(store);
119 dnf2PQuery.assertNoUnusedHints(); 119 dnf2PQuery.assertNoUnusedHints();
120 return new ViatraModelQueryStoreAdapterImpl(store, buildEngineOptions(), dnf2PQuery.getRelationViews(), 120 return new ViatraModelQueryStoreAdapterImpl(store, buildEngineOptions(), dnf2PQuery.getSymbolViews(),
121 Collections.unmodifiableMap(querySpecifications), Collections.unmodifiableSet(vacuousQueries)); 121 Collections.unmodifiableMap(querySpecifications), Collections.unmodifiableSet(vacuousQueries));
122 } 122 }
123 123
@@ -140,11 +140,11 @@ public class ViatraModelQueryBuilderImpl extends AbstractModelAdapterBuilder imp
140 140
141 private void validateSymbols(ModelStore store) { 141 private void validateSymbols(ModelStore store) {
142 var symbols = store.getSymbols(); 142 var symbols = store.getSymbols();
143 for (var relationView : dnf2PQuery.getRelationViews().keySet()) { 143 for (var symbolView : dnf2PQuery.getSymbolViews().keySet()) {
144 var symbol = relationView.getSymbol(); 144 var symbol = symbolView.getSymbol();
145 if (!symbols.contains(symbol)) { 145 if (!symbols.contains(symbol)) {
146 throw new IllegalArgumentException("Cannot query relation view %s: symbol %s is not in the model" 146 throw new IllegalArgumentException("Cannot query view %s: symbol %s is not in the model"
147 .formatted(relationView, symbol)); 147 .formatted(symbolView, symbol));
148 } 148 }
149 } 149 }
150 } 150 }
diff --git a/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/ViatraModelQueryStoreAdapterImpl.java b/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/ViatraModelQueryStoreAdapterImpl.java
index aa102a35..11a3c7fd 100644
--- a/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/ViatraModelQueryStoreAdapterImpl.java
+++ b/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/ViatraModelQueryStoreAdapterImpl.java
@@ -13,20 +13,20 @@ import tools.refinery.store.model.ModelStore;
13import tools.refinery.store.query.dnf.AnyQuery; 13import tools.refinery.store.query.dnf.AnyQuery;
14import tools.refinery.store.query.viatra.ViatraModelQueryStoreAdapter; 14import tools.refinery.store.query.viatra.ViatraModelQueryStoreAdapter;
15import tools.refinery.store.query.viatra.internal.matcher.RawPatternMatcher; 15import tools.refinery.store.query.viatra.internal.matcher.RawPatternMatcher;
16import tools.refinery.store.query.view.AnyRelationView; 16import tools.refinery.store.query.view.AnySymbolView;
17 17
18import java.util.*; 18import java.util.*;
19 19
20public class ViatraModelQueryStoreAdapterImpl implements ViatraModelQueryStoreAdapter { 20public class ViatraModelQueryStoreAdapterImpl implements ViatraModelQueryStoreAdapter {
21 private final ModelStore store; 21 private final ModelStore store;
22 private final ViatraQueryEngineOptions engineOptions; 22 private final ViatraQueryEngineOptions engineOptions;
23 private final Map<AnyRelationView, IInputKey> inputKeys; 23 private final Map<AnySymbolView, IInputKey> inputKeys;
24 private final Map<AnyQuery, IQuerySpecification<RawPatternMatcher>> querySpecifications; 24 private final Map<AnyQuery, IQuerySpecification<RawPatternMatcher>> querySpecifications;
25 private final Set<AnyQuery> vacuousQueries; 25 private final Set<AnyQuery> vacuousQueries;
26 private final Set<AnyQuery> allQueries; 26 private final Set<AnyQuery> allQueries;
27 27
28 ViatraModelQueryStoreAdapterImpl(ModelStore store, ViatraQueryEngineOptions engineOptions, 28 ViatraModelQueryStoreAdapterImpl(ModelStore store, ViatraQueryEngineOptions engineOptions,
29 Map<AnyRelationView, IInputKey> inputKeys, 29 Map<AnySymbolView, IInputKey> inputKeys,
30 Map<AnyQuery, IQuerySpecification<RawPatternMatcher>> querySpecifications, 30 Map<AnyQuery, IQuerySpecification<RawPatternMatcher>> querySpecifications,
31 Set<AnyQuery> vacuousQueries) { 31 Set<AnyQuery> vacuousQueries) {
32 this.store = store; 32 this.store = store;
@@ -45,11 +45,11 @@ public class ViatraModelQueryStoreAdapterImpl implements ViatraModelQueryStoreAd
45 return store; 45 return store;
46 } 46 }
47 47
48 public Collection<AnyRelationView> getRelationViews() { 48 public Collection<AnySymbolView> getSymbolViews() {
49 return inputKeys.keySet(); 49 return inputKeys.keySet();
50 } 50 }
51 51
52 public Map<AnyRelationView, IInputKey> getInputKeys() { 52 public Map<AnySymbolView, IInputKey> getInputKeys() {
53 return inputKeys; 53 return inputKeys;
54 } 54 }
55 55
diff --git a/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/context/RelationalQueryMetaContext.java b/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/context/RelationalQueryMetaContext.java
index 07a5a6ea..cf96b7fd 100644
--- a/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/context/RelationalQueryMetaContext.java
+++ b/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/context/RelationalQueryMetaContext.java
@@ -10,8 +10,8 @@ import org.eclipse.viatra.query.runtime.matchers.context.IInputKey;
10import org.eclipse.viatra.query.runtime.matchers.context.InputKeyImplication; 10import org.eclipse.viatra.query.runtime.matchers.context.InputKeyImplication;
11import org.eclipse.viatra.query.runtime.matchers.context.common.JavaTransitiveInstancesKey; 11import org.eclipse.viatra.query.runtime.matchers.context.common.JavaTransitiveInstancesKey;
12import tools.refinery.store.query.term.DataSort; 12import tools.refinery.store.query.term.DataSort;
13import tools.refinery.store.query.viatra.internal.pquery.RelationViewWrapper; 13import tools.refinery.store.query.viatra.internal.pquery.SymbolViewWrapper;
14import tools.refinery.store.query.view.AnyRelationView; 14import tools.refinery.store.query.view.AnySymbolView;
15 15
16import java.util.*; 16import java.util.*;
17 17
@@ -19,9 +19,9 @@ import java.util.*;
19 * The meta context information for String scopes. 19 * The meta context information for String scopes.
20 */ 20 */
21public class RelationalQueryMetaContext extends AbstractQueryMetaContext { 21public class RelationalQueryMetaContext extends AbstractQueryMetaContext {
22 private final Map<AnyRelationView, IInputKey> inputKeys; 22 private final Map<AnySymbolView, IInputKey> inputKeys;
23 23
24 RelationalQueryMetaContext(Map<AnyRelationView, IInputKey> inputKeys) { 24 RelationalQueryMetaContext(Map<AnySymbolView, IInputKey> inputKeys) {
25 this.inputKeys = inputKeys; 25 this.inputKeys = inputKeys;
26 } 26 }
27 27
@@ -47,23 +47,23 @@ public class RelationalQueryMetaContext extends AbstractQueryMetaContext {
47 if (implyingKey instanceof JavaTransitiveInstancesKey) { 47 if (implyingKey instanceof JavaTransitiveInstancesKey) {
48 return List.of(); 48 return List.of();
49 } 49 }
50 var relationView = checkKey(implyingKey); 50 var symbolView = checkKey(implyingKey);
51 var relationViewImplications = relationView.getImpliedRelationViews(); 51 var relationViewImplications = symbolView.getImpliedRelationViews();
52 var inputKeyImplications = new HashSet<InputKeyImplication>(relationViewImplications.size()); 52 var inputKeyImplications = new HashSet<InputKeyImplication>(relationViewImplications.size());
53 for (var relationViewImplication : relationViewImplications) { 53 for (var relationViewImplication : relationViewImplications) {
54 if (!relationView.equals(relationViewImplication.implyingRelationView())) { 54 if (!symbolView.equals(relationViewImplication.implyingView())) {
55 throw new IllegalArgumentException("Relation view %s returned unrelated implication %s".formatted( 55 throw new IllegalArgumentException("Relation view %s returned unrelated implication %s".formatted(
56 relationView, relationViewImplication)); 56 symbolView, relationViewImplication));
57 } 57 }
58 var impliedInputKey = inputKeys.get(relationViewImplication.impliedRelationView()); 58 var impliedInputKey = inputKeys.get(relationViewImplication.impliedView());
59 // Ignore implications not relevant for any queries included in the model. 59 // Ignore implications not relevant for any queries included in the model.
60 if (impliedInputKey != null) { 60 if (impliedInputKey != null) {
61 inputKeyImplications.add(new InputKeyImplication(implyingKey, impliedInputKey, 61 inputKeyImplications.add(new InputKeyImplication(implyingKey, impliedInputKey,
62 relationViewImplication.impliedIndices())); 62 relationViewImplication.impliedIndices()));
63 } 63 }
64 } 64 }
65 var sorts = relationView.getSorts(); 65 var sorts = symbolView.getSorts();
66 int arity = relationView.arity(); 66 int arity = symbolView.arity();
67 for (int i = 0; i < arity; i++) { 67 for (int i = 0; i < arity; i++) {
68 var sort = sorts.get(i); 68 var sort = sorts.get(i);
69 if (sort instanceof DataSort<?> dataSort) { 69 if (sort instanceof DataSort<?> dataSort) {
@@ -99,20 +99,20 @@ public class RelationalQueryMetaContext extends AbstractQueryMetaContext {
99 return flattened; 99 return flattened;
100 } 100 }
101 101
102 private static void checkValidIndices(AnyRelationView relationView, Collection<Integer> indices) { 102 private static void checkValidIndices(AnySymbolView relationView, Collection<Integer> indices) {
103 indices.stream().filter(relationView::invalidIndex).findAny().ifPresent(i -> { 103 indices.stream().filter(relationView::invalidIndex).findAny().ifPresent(i -> {
104 throw new IllegalArgumentException("Index %d is invalid for %s".formatted(i, relationView)); 104 throw new IllegalArgumentException("Index %d is invalid for %s".formatted(i, relationView));
105 }); 105 });
106 } 106 }
107 107
108 public AnyRelationView checkKey(IInputKey key) { 108 public AnySymbolView checkKey(IInputKey key) {
109 if (!(key instanceof RelationViewWrapper wrapper)) { 109 if (!(key instanceof SymbolViewWrapper wrapper)) {
110 throw new IllegalArgumentException("The input key %s is not a valid input key".formatted(key)); 110 throw new IllegalArgumentException("The input key %s is not a valid input key".formatted(key));
111 } 111 }
112 var relationView = wrapper.getWrappedKey(); 112 var symbolView = wrapper.getWrappedKey();
113 if (!inputKeys.containsKey(relationView)) { 113 if (!inputKeys.containsKey(symbolView)) {
114 throw new IllegalArgumentException("The input key %s is not present in the model".formatted(key)); 114 throw new IllegalArgumentException("The input key %s is not present in the model".formatted(key));
115 } 115 }
116 return relationView; 116 return symbolView;
117 } 117 }
118} 118}
diff --git a/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/context/RelationalRuntimeContext.java b/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/context/RelationalRuntimeContext.java
index 71943737..0f2daca8 100644
--- a/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/context/RelationalRuntimeContext.java
+++ b/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/context/RelationalRuntimeContext.java
@@ -13,9 +13,9 @@ import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples;
13import org.eclipse.viatra.query.runtime.matchers.util.Accuracy; 13import org.eclipse.viatra.query.runtime.matchers.util.Accuracy;
14import tools.refinery.store.model.Model; 14import tools.refinery.store.model.Model;
15import tools.refinery.store.query.viatra.internal.ViatraModelQueryAdapterImpl; 15import tools.refinery.store.query.viatra.internal.ViatraModelQueryAdapterImpl;
16import tools.refinery.store.query.viatra.internal.pquery.RelationViewWrapper; 16import tools.refinery.store.query.viatra.internal.pquery.SymbolViewWrapper;
17import tools.refinery.store.query.viatra.internal.update.ModelUpdateListener; 17import tools.refinery.store.query.viatra.internal.update.ModelUpdateListener;
18import tools.refinery.store.query.view.AnyRelationView; 18import tools.refinery.store.query.view.AnySymbolView;
19 19
20import java.lang.reflect.InvocationTargetException; 20import java.lang.reflect.InvocationTargetException;
21import java.util.Iterator; 21import java.util.Iterator;
@@ -59,9 +59,9 @@ public class RelationalRuntimeContext implements IQueryRuntimeContext {
59 59
60 @Override 60 @Override
61 public boolean isIndexed(IInputKey key, IndexingService service) { 61 public boolean isIndexed(IInputKey key, IndexingService service) {
62 if (key instanceof RelationViewWrapper wrapper) { 62 if (key instanceof SymbolViewWrapper wrapper) {
63 var relationalKey = wrapper.getWrappedKey(); 63 var symbolViewKey = wrapper.getWrappedKey();
64 return this.modelUpdateListener.containsRelationView(relationalKey); 64 return this.modelUpdateListener.containsSymbolView(symbolViewKey);
65 } else { 65 } else {
66 return false; 66 return false;
67 } 67 }
@@ -74,13 +74,13 @@ public class RelationalRuntimeContext implements IQueryRuntimeContext {
74 } 74 }
75 } 75 }
76 76
77 AnyRelationView checkKey(IInputKey key) { 77 AnySymbolView checkKey(IInputKey key) {
78 if (key instanceof RelationViewWrapper wrappedKey) { 78 if (key instanceof SymbolViewWrapper wrappedKey) {
79 var relationViewKey = wrappedKey.getWrappedKey(); 79 var symbolViewKey = wrappedKey.getWrappedKey();
80 if (modelUpdateListener.containsRelationView(relationViewKey)) { 80 if (modelUpdateListener.containsSymbolView(symbolViewKey)) {
81 return relationViewKey; 81 return symbolViewKey;
82 } else { 82 } else {
83 throw new IllegalStateException("Query is asking for non-indexed key %s".formatted(relationViewKey)); 83 throw new IllegalStateException("Query is asking for non-indexed key %s".formatted(symbolViewKey));
84 } 84 }
85 } else { 85 } else {
86 throw new IllegalStateException("Query is asking for non-relational key"); 86 throw new IllegalStateException("Query is asking for non-relational key");
diff --git a/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/pquery/Dnf2PQuery.java b/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/pquery/Dnf2PQuery.java
index 714d41c0..b511a5c7 100644
--- a/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/pquery/Dnf2PQuery.java
+++ b/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/pquery/Dnf2PQuery.java
@@ -29,7 +29,7 @@ import tools.refinery.store.query.term.ConstantTerm;
29import tools.refinery.store.query.term.StatefulAggregator; 29import tools.refinery.store.query.term.StatefulAggregator;
30import tools.refinery.store.query.term.StatelessAggregator; 30import tools.refinery.store.query.term.StatelessAggregator;
31import tools.refinery.store.query.term.Variable; 31import tools.refinery.store.query.term.Variable;
32import tools.refinery.store.query.view.AnyRelationView; 32import tools.refinery.store.query.view.AnySymbolView;
33import tools.refinery.store.util.CycleDetectingMapper; 33import tools.refinery.store.util.CycleDetectingMapper;
34 34
35import java.util.*; 35import java.util.*;
@@ -53,8 +53,8 @@ public class Dnf2PQuery {
53 return mapper.map(dnfQuery); 53 return mapper.map(dnfQuery);
54 } 54 }
55 55
56 public Map<AnyRelationView, IInputKey> getRelationViews() { 56 public Map<AnySymbolView, IInputKey> getSymbolViews() {
57 return wrapperFactory.getRelationViews(); 57 return wrapperFactory.getSymbolViews();
58 } 58 }
59 59
60 public void hint(Dnf dnf, QueryEvaluationHint hint) { 60 public void hint(Dnf dnf, QueryEvaluationHint hint) {
@@ -165,8 +165,8 @@ public class Dnf2PQuery {
165 if (constraint instanceof Dnf dnf) { 165 if (constraint instanceof Dnf dnf) {
166 var pattern = translate(dnf); 166 var pattern = translate(dnf);
167 new PositivePatternCall(body, substitution, pattern); 167 new PositivePatternCall(body, substitution, pattern);
168 } else if (constraint instanceof AnyRelationView relationView) { 168 } else if (constraint instanceof AnySymbolView symbolView) {
169 var inputKey = wrapperFactory.getInputKey(relationView); 169 var inputKey = wrapperFactory.getInputKey(symbolView);
170 new TypeConstraint(body, substitution, inputKey); 170 new TypeConstraint(body, substitution, inputKey);
171 } else { 171 } else {
172 throw new IllegalArgumentException("Unknown Constraint: " + constraint); 172 throw new IllegalArgumentException("Unknown Constraint: " + constraint);
@@ -178,8 +178,8 @@ public class Dnf2PQuery {
178 PQuery pattern; 178 PQuery pattern;
179 if (constraint instanceof Dnf dnf) { 179 if (constraint instanceof Dnf dnf) {
180 pattern = translate(dnf); 180 pattern = translate(dnf);
181 } else if (constraint instanceof AnyRelationView relationView) { 181 } else if (constraint instanceof AnySymbolView symbolView) {
182 pattern = wrapperFactory.wrapRelationViewIdentityArguments(relationView); 182 pattern = wrapperFactory.wrapSymbolViewIdentityArguments(symbolView);
183 } else { 183 } else {
184 throw new IllegalArgumentException("Unknown Constraint: " + constraint); 184 throw new IllegalArgumentException("Unknown Constraint: " + constraint);
185 } 185 }
diff --git a/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/pquery/QueryWrapperFactory.java b/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/pquery/QueryWrapperFactory.java
index 30f848a6..0d046455 100644
--- a/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/pquery/QueryWrapperFactory.java
+++ b/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/pquery/QueryWrapperFactory.java
@@ -21,8 +21,8 @@ import tools.refinery.store.query.dnf.DnfClause;
21import tools.refinery.store.query.dnf.DnfUtils; 21import tools.refinery.store.query.dnf.DnfUtils;
22import tools.refinery.store.query.literal.AbstractCallLiteral; 22import tools.refinery.store.query.literal.AbstractCallLiteral;
23import tools.refinery.store.query.term.Variable; 23import tools.refinery.store.query.term.Variable;
24import tools.refinery.store.query.view.AnyRelationView; 24import tools.refinery.store.query.view.AnySymbolView;
25import tools.refinery.store.query.view.RelationView; 25import tools.refinery.store.query.view.SymbolView;
26import tools.refinery.store.util.CycleDetectingMapper; 26import tools.refinery.store.util.CycleDetectingMapper;
27 27
28import java.util.*; 28import java.util.*;
@@ -30,7 +30,7 @@ import java.util.function.ToIntFunction;
30 30
31class QueryWrapperFactory { 31class QueryWrapperFactory {
32 private final Dnf2PQuery dnf2PQuery; 32 private final Dnf2PQuery dnf2PQuery;
33 private final Map<AnyRelationView, RelationViewWrapper> view2WrapperMap = new LinkedHashMap<>(); 33 private final Map<AnySymbolView, SymbolViewWrapper> view2WrapperMap = new LinkedHashMap<>();
34 private final CycleDetectingMapper<RemappedConstraint, RawPQuery> wrapConstraint = new CycleDetectingMapper<>( 34 private final CycleDetectingMapper<RemappedConstraint, RawPQuery> wrapConstraint = new CycleDetectingMapper<>(
35 RemappedConstraint::toString, this::doWrapConstraint); 35 RemappedConstraint::toString, this::doWrapConstraint);
36 36
@@ -38,12 +38,12 @@ class QueryWrapperFactory {
38 this.dnf2PQuery = dnf2PQuery; 38 this.dnf2PQuery = dnf2PQuery;
39 } 39 }
40 40
41 public PQuery wrapRelationViewIdentityArguments(AnyRelationView relationView) { 41 public PQuery wrapSymbolViewIdentityArguments(AnySymbolView symbolView) {
42 var identity = new int[relationView.arity()]; 42 var identity = new int[symbolView.arity()];
43 for (int i = 0; i < identity.length; i++) { 43 for (int i = 0; i < identity.length; i++) {
44 identity[i] = i; 44 identity[i] = i;
45 } 45 }
46 return maybeWrapConstraint(relationView, identity); 46 return maybeWrapConstraint(symbolView, identity);
47 } 47 }
48 public WrappedCall maybeWrapConstraint(AbstractCallLiteral callLiteral, DnfClause clause) { 48 public WrappedCall maybeWrapConstraint(AbstractCallLiteral callLiteral, DnfClause clause) {
49 var arguments = callLiteral.getArguments(); 49 var arguments = callLiteral.getArguments();
@@ -112,8 +112,8 @@ class QueryWrapperFactory {
112 } 112 }
113 var argumentTuple = Tuples.flatTupleOf(arguments); 113 var argumentTuple = Tuples.flatTupleOf(arguments);
114 114
115 if (constraint instanceof RelationView<?> relationView) { 115 if (constraint instanceof SymbolView<?> view) {
116 new TypeConstraint(body, argumentTuple, getInputKey(relationView)); 116 new TypeConstraint(body, argumentTuple, getInputKey(view));
117 } else if (constraint instanceof Dnf dnf) { 117 } else if (constraint instanceof Dnf dnf) {
118 var calledPQuery = dnf2PQuery.translate(dnf); 118 var calledPQuery = dnf2PQuery.translate(dnf);
119 new PositivePatternCall(body, argumentTuple, calledPQuery); 119 new PositivePatternCall(body, argumentTuple, calledPQuery);
@@ -125,11 +125,11 @@ class QueryWrapperFactory {
125 return embeddedPQuery; 125 return embeddedPQuery;
126 } 126 }
127 127
128 public IInputKey getInputKey(AnyRelationView relationView) { 128 public IInputKey getInputKey(AnySymbolView symbolView) {
129 return view2WrapperMap.computeIfAbsent(relationView, RelationViewWrapper::new); 129 return view2WrapperMap.computeIfAbsent(symbolView, SymbolViewWrapper::new);
130 } 130 }
131 131
132 public Map<AnyRelationView, IInputKey> getRelationViews() { 132 public Map<AnySymbolView, IInputKey> getSymbolViews() {
133 return Collections.unmodifiableMap(view2WrapperMap); 133 return Collections.unmodifiableMap(view2WrapperMap);
134 } 134 }
135 135
diff --git a/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/pquery/RelationViewWrapper.java b/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/pquery/SymbolViewWrapper.java
index 02da932b..a777613e 100644
--- a/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/pquery/RelationViewWrapper.java
+++ b/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/pquery/SymbolViewWrapper.java
@@ -6,10 +6,10 @@
6package tools.refinery.store.query.viatra.internal.pquery; 6package tools.refinery.store.query.viatra.internal.pquery;
7 7
8import org.eclipse.viatra.query.runtime.matchers.context.common.BaseInputKeyWrapper; 8import org.eclipse.viatra.query.runtime.matchers.context.common.BaseInputKeyWrapper;
9import tools.refinery.store.query.view.AnyRelationView; 9import tools.refinery.store.query.view.AnySymbolView;
10 10
11public class RelationViewWrapper extends BaseInputKeyWrapper<AnyRelationView> { 11public class SymbolViewWrapper extends BaseInputKeyWrapper<AnySymbolView> {
12 public RelationViewWrapper(AnyRelationView wrappedKey) { 12 public SymbolViewWrapper(AnySymbolView wrappedKey) {
13 super(wrappedKey); 13 super(wrappedKey);
14 } 14 }
15 15
diff --git a/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/update/ModelUpdateListener.java b/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/update/ModelUpdateListener.java
index c612574f..986bb0b1 100644
--- a/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/update/ModelUpdateListener.java
+++ b/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/update/ModelUpdateListener.java
@@ -9,43 +9,43 @@ import org.eclipse.viatra.query.runtime.matchers.context.IInputKey;
9import org.eclipse.viatra.query.runtime.matchers.context.IQueryRuntimeContextListener; 9import org.eclipse.viatra.query.runtime.matchers.context.IQueryRuntimeContextListener;
10import org.eclipse.viatra.query.runtime.matchers.tuple.ITuple; 10import org.eclipse.viatra.query.runtime.matchers.tuple.ITuple;
11import tools.refinery.store.query.viatra.internal.ViatraModelQueryAdapterImpl; 11import tools.refinery.store.query.viatra.internal.ViatraModelQueryAdapterImpl;
12import tools.refinery.store.query.view.AnyRelationView; 12import tools.refinery.store.query.view.AnySymbolView;
13import tools.refinery.store.query.view.RelationView; 13import tools.refinery.store.query.view.SymbolView;
14 14
15import java.util.HashMap; 15import java.util.HashMap;
16import java.util.Map; 16import java.util.Map;
17 17
18public class ModelUpdateListener { 18public class ModelUpdateListener {
19 private final Map<AnyRelationView, RelationViewUpdateListener<?>> relationViewUpdateListeners; 19 private final Map<AnySymbolView, SymbolViewUpdateListener<?>> symbolViewUpdateListeners;
20 20
21 public ModelUpdateListener(ViatraModelQueryAdapterImpl adapter) { 21 public ModelUpdateListener(ViatraModelQueryAdapterImpl adapter) {
22 var relationViews = adapter.getStoreAdapter().getInputKeys().keySet(); 22 var symbolViews = adapter.getStoreAdapter().getInputKeys().keySet();
23 relationViewUpdateListeners = new HashMap<>(relationViews.size()); 23 symbolViewUpdateListeners = new HashMap<>(symbolViews.size());
24 for (var relationView : relationViews) { 24 for (var symbolView : symbolViews) {
25 registerView(adapter, (RelationView<?>) relationView); 25 registerView(adapter, (SymbolView<?>) symbolView);
26 } 26 }
27 } 27 }
28 28
29 private <T> void registerView(ViatraModelQueryAdapterImpl adapter, RelationView<T> relationView) { 29 private <T> void registerView(ViatraModelQueryAdapterImpl adapter, SymbolView<T> view) {
30 var model = adapter.getModel(); 30 var model = adapter.getModel();
31 var interpretation = model.getInterpretation(relationView.getSymbol()); 31 var interpretation = model.getInterpretation(view.getSymbol());
32 var listener = RelationViewUpdateListener.of(adapter, relationView, interpretation); 32 var listener = SymbolViewUpdateListener.of(adapter, view, interpretation);
33 relationViewUpdateListeners.put(relationView, listener); 33 symbolViewUpdateListeners.put(view, listener);
34 } 34 }
35 35
36 public boolean containsRelationView(AnyRelationView relationView) { 36 public boolean containsSymbolView(AnySymbolView relationView) {
37 return relationViewUpdateListeners.containsKey(relationView); 37 return symbolViewUpdateListeners.containsKey(relationView);
38 } 38 }
39 39
40 public void addListener(IInputKey key, AnyRelationView relationView, ITuple seed, 40 public void addListener(IInputKey key, AnySymbolView symbolView, ITuple seed,
41 IQueryRuntimeContextListener listener) { 41 IQueryRuntimeContextListener listener) {
42 var relationViewUpdateListener = relationViewUpdateListeners.get(relationView); 42 var symbolViewUpdateListener = symbolViewUpdateListeners.get(symbolView);
43 relationViewUpdateListener.addFilter(key, seed, listener); 43 symbolViewUpdateListener.addFilter(key, seed, listener);
44 } 44 }
45 45
46 public void removeListener(IInputKey key, AnyRelationView relationView, ITuple seed, 46 public void removeListener(IInputKey key, AnySymbolView symbolView, ITuple seed,
47 IQueryRuntimeContextListener listener) { 47 IQueryRuntimeContextListener listener) {
48 var relationViewUpdateListener = relationViewUpdateListeners.get(relationView); 48 var symbolViewUpdateListener = symbolViewUpdateListeners.get(symbolView);
49 relationViewUpdateListener.removeFilter(key, seed, listener); 49 symbolViewUpdateListener.removeFilter(key, seed, listener);
50 } 50 }
51} 51}
diff --git a/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/update/RelationViewUpdateListener.java b/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/update/SymbolViewUpdateListener.java
index 185e4ebc..f1a2ac7c 100644
--- a/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/update/RelationViewUpdateListener.java
+++ b/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/update/SymbolViewUpdateListener.java
@@ -12,18 +12,18 @@ import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple;
12import tools.refinery.store.model.Interpretation; 12import tools.refinery.store.model.Interpretation;
13import tools.refinery.store.model.InterpretationListener; 13import tools.refinery.store.model.InterpretationListener;
14import tools.refinery.store.query.viatra.internal.ViatraModelQueryAdapterImpl; 14import tools.refinery.store.query.viatra.internal.ViatraModelQueryAdapterImpl;
15import tools.refinery.store.query.view.RelationView; 15import tools.refinery.store.query.view.SymbolView;
16import tools.refinery.store.query.view.TuplePreservingRelationView; 16import tools.refinery.store.query.view.TuplePreservingView;
17 17
18import java.util.ArrayList; 18import java.util.ArrayList;
19import java.util.List; 19import java.util.List;
20 20
21public abstract class RelationViewUpdateListener<T> implements InterpretationListener<T> { 21public abstract class SymbolViewUpdateListener<T> implements InterpretationListener<T> {
22 private final ViatraModelQueryAdapterImpl adapter; 22 private final ViatraModelQueryAdapterImpl adapter;
23 private final Interpretation<T> interpretation; 23 private final Interpretation<T> interpretation;
24 private final List<RelationViewFilter> filters = new ArrayList<>(); 24 private final List<RelationViewFilter> filters = new ArrayList<>();
25 25
26 protected RelationViewUpdateListener(ViatraModelQueryAdapterImpl adapter, Interpretation<T> interpretation) { 26 protected SymbolViewUpdateListener(ViatraModelQueryAdapterImpl adapter, Interpretation<T> interpretation) {
27 this.adapter = adapter; 27 this.adapter = adapter;
28 this.interpretation = interpretation; 28 this.interpretation = interpretation;
29 } 29 }
@@ -53,13 +53,13 @@ public abstract class RelationViewUpdateListener<T> implements InterpretationLis
53 } 53 }
54 } 54 }
55 55
56 public static <T> RelationViewUpdateListener<T> of(ViatraModelQueryAdapterImpl adapter, 56 public static <T> SymbolViewUpdateListener<T> of(ViatraModelQueryAdapterImpl adapter,
57 RelationView<T> relationView, 57 SymbolView<T> view,
58 Interpretation<T> interpretation) { 58 Interpretation<T> interpretation) {
59 if (relationView instanceof TuplePreservingRelationView<T> tuplePreservingRelationView) { 59 if (view instanceof TuplePreservingView<T> tuplePreservingRelationView) {
60 return new TuplePreservingRelationViewUpdateListener<>(adapter, tuplePreservingRelationView, 60 return new TuplePreservingViewUpdateListener<>(adapter, tuplePreservingRelationView,
61 interpretation); 61 interpretation);
62 } 62 }
63 return new TupleChangingRelationViewUpdateListener<>(adapter, relationView, interpretation); 63 return new TupleChangingViewUpdateListener<>(adapter, view, interpretation);
64 } 64 }
65} 65}
diff --git a/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/update/TupleChangingRelationViewUpdateListener.java b/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/update/TupleChangingViewUpdateListener.java
index be4951af..45d35571 100644
--- a/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/update/TupleChangingRelationViewUpdateListener.java
+++ b/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/update/TupleChangingViewUpdateListener.java
@@ -8,37 +8,37 @@ package tools.refinery.store.query.viatra.internal.update;
8import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples; 8import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples;
9import tools.refinery.store.model.Interpretation; 9import tools.refinery.store.model.Interpretation;
10import tools.refinery.store.query.viatra.internal.ViatraModelQueryAdapterImpl; 10import tools.refinery.store.query.viatra.internal.ViatraModelQueryAdapterImpl;
11import tools.refinery.store.query.view.RelationView; 11import tools.refinery.store.query.view.SymbolView;
12import tools.refinery.store.tuple.Tuple; 12import tools.refinery.store.tuple.Tuple;
13 13
14import java.util.Arrays; 14import java.util.Arrays;
15 15
16public class TupleChangingRelationViewUpdateListener<T> extends RelationViewUpdateListener<T> { 16public class TupleChangingViewUpdateListener<T> extends SymbolViewUpdateListener<T> {
17 private final RelationView<T> relationView; 17 private final SymbolView<T> view;
18 18
19 TupleChangingRelationViewUpdateListener(ViatraModelQueryAdapterImpl adapter, RelationView<T> relationView, 19 TupleChangingViewUpdateListener(ViatraModelQueryAdapterImpl adapter, SymbolView<T> view,
20 Interpretation<T> interpretation) { 20 Interpretation<T> interpretation) {
21 super(adapter, interpretation); 21 super(adapter, interpretation);
22 this.relationView = relationView; 22 this.view = view;
23 } 23 }
24 24
25 @Override 25 @Override
26 public void put(Tuple key, T fromValue, T toValue, boolean restoring) { 26 public void put(Tuple key, T fromValue, T toValue, boolean restoring) {
27 boolean fromPresent = relationView.filter(key, fromValue); 27 boolean fromPresent = view.filter(key, fromValue);
28 boolean toPresent = relationView.filter(key, toValue); 28 boolean toPresent = view.filter(key, toValue);
29 if (fromPresent) { 29 if (fromPresent) {
30 if (toPresent) { // value change 30 if (toPresent) { // value change
31 var fromArray = relationView.forwardMap(key, fromValue); 31 var fromArray = view.forwardMap(key, fromValue);
32 var toArray = relationView.forwardMap(key, toValue); 32 var toArray = view.forwardMap(key, toValue);
33 if (!Arrays.equals(fromArray, toArray)) { 33 if (!Arrays.equals(fromArray, toArray)) {
34 processUpdate(Tuples.flatTupleOf(fromArray), false); 34 processUpdate(Tuples.flatTupleOf(fromArray), false);
35 processUpdate(Tuples.flatTupleOf(toArray), true); 35 processUpdate(Tuples.flatTupleOf(toArray), true);
36 } 36 }
37 } else { // fromValue disappears 37 } else { // fromValue disappears
38 processUpdate(Tuples.flatTupleOf(relationView.forwardMap(key, fromValue)), false); 38 processUpdate(Tuples.flatTupleOf(view.forwardMap(key, fromValue)), false);
39 } 39 }
40 } else if (toPresent) { // toValue appears 40 } else if (toPresent) { // toValue appears
41 processUpdate(Tuples.flatTupleOf(relationView.forwardMap(key, toValue)), true); 41 processUpdate(Tuples.flatTupleOf(view.forwardMap(key, toValue)), true);
42 } 42 }
43 } 43 }
44} 44}
diff --git a/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/update/TuplePreservingRelationViewUpdateListener.java b/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/update/TuplePreservingViewUpdateListener.java
index 9638266b..c18dbafb 100644
--- a/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/update/TuplePreservingRelationViewUpdateListener.java
+++ b/subprojects/store-query-viatra/src/main/java/tools/refinery/store/query/viatra/internal/update/TuplePreservingViewUpdateListener.java
@@ -8,14 +8,14 @@ package tools.refinery.store.query.viatra.internal.update;
8import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples; 8import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples;
9import tools.refinery.store.model.Interpretation; 9import tools.refinery.store.model.Interpretation;
10import tools.refinery.store.query.viatra.internal.ViatraModelQueryAdapterImpl; 10import tools.refinery.store.query.viatra.internal.ViatraModelQueryAdapterImpl;
11import tools.refinery.store.query.view.TuplePreservingRelationView; 11import tools.refinery.store.query.view.TuplePreservingView;
12import tools.refinery.store.tuple.Tuple; 12import tools.refinery.store.tuple.Tuple;
13 13
14public class TuplePreservingRelationViewUpdateListener<T> extends RelationViewUpdateListener<T> { 14public class TuplePreservingViewUpdateListener<T> extends SymbolViewUpdateListener<T> {
15 private final TuplePreservingRelationView<T> view; 15 private final TuplePreservingView<T> view;
16 16
17 TuplePreservingRelationViewUpdateListener(ViatraModelQueryAdapterImpl adapter, 17 TuplePreservingViewUpdateListener(ViatraModelQueryAdapterImpl adapter, TuplePreservingView<T> view,
18 TuplePreservingRelationView<T> view, Interpretation<T> interpretation) { 18 Interpretation<T> interpretation) {
19 super(adapter, interpretation); 19 super(adapter, interpretation);
20 this.view = view; 20 this.view = view;
21 } 21 }
diff --git a/subprojects/store-query-viatra/src/test/java/tools/refinery/store/query/viatra/DiagonalQueryTest.java b/subprojects/store-query-viatra/src/test/java/tools/refinery/store/query/viatra/DiagonalQueryTest.java
index da4aba7f..5cffef71 100644
--- a/subprojects/store-query-viatra/src/test/java/tools/refinery/store/query/viatra/DiagonalQueryTest.java
+++ b/subprojects/store-query-viatra/src/test/java/tools/refinery/store/query/viatra/DiagonalQueryTest.java
@@ -12,8 +12,8 @@ import tools.refinery.store.query.dnf.Dnf;
12import tools.refinery.store.query.dnf.Query; 12import tools.refinery.store.query.dnf.Query;
13import tools.refinery.store.query.term.Variable; 13import tools.refinery.store.query.term.Variable;
14import tools.refinery.store.query.viatra.tests.QueryEngineTest; 14import tools.refinery.store.query.viatra.tests.QueryEngineTest;
15import tools.refinery.store.query.view.FunctionalRelationView; 15import tools.refinery.store.query.view.FunctionView;
16import tools.refinery.store.query.view.KeyOnlyRelationView; 16import tools.refinery.store.query.view.KeyOnlyView;
17import tools.refinery.store.representation.Symbol; 17import tools.refinery.store.representation.Symbol;
18import tools.refinery.store.tuple.Tuple; 18import tools.refinery.store.tuple.Tuple;
19 19
@@ -30,8 +30,8 @@ class DiagonalQueryTest {
30 void inputKeyNegationTest(QueryEvaluationHint hint) { 30 void inputKeyNegationTest(QueryEvaluationHint hint) {
31 var person = new Symbol<>("Person", 1, Boolean.class, false); 31 var person = new Symbol<>("Person", 1, Boolean.class, false);
32 var symbol = new Symbol<>("symbol", 4, Boolean.class, false); 32 var symbol = new Symbol<>("symbol", 4, Boolean.class, false);
33 var personView = new KeyOnlyRelationView<>(person); 33 var personView = new KeyOnlyView<>(person);
34 var symbolView = new KeyOnlyRelationView<>(symbol); 34 var symbolView = new KeyOnlyView<>(symbol);
35 35
36 var p1 = Variable.of("p1"); 36 var p1 = Variable.of("p1");
37 var p2 = Variable.of("p2"); 37 var p2 = Variable.of("p2");
@@ -78,8 +78,8 @@ class DiagonalQueryTest {
78 void subQueryNegationTest(QueryEvaluationHint hint) { 78 void subQueryNegationTest(QueryEvaluationHint hint) {
79 var person = new Symbol<>("Person", 1, Boolean.class, false); 79 var person = new Symbol<>("Person", 1, Boolean.class, false);
80 var symbol = new Symbol<>("symbol", 4, Boolean.class, false); 80 var symbol = new Symbol<>("symbol", 4, Boolean.class, false);
81 var personView = new KeyOnlyRelationView<>(person); 81 var personView = new KeyOnlyView<>(person);
82 var symbolView = new KeyOnlyRelationView<>(symbol); 82 var symbolView = new KeyOnlyView<>(symbol);
83 83
84 var p1 = Variable.of("p1"); 84 var p1 = Variable.of("p1");
85 var p2 = Variable.of("p2"); 85 var p2 = Variable.of("p2");
@@ -139,8 +139,8 @@ class DiagonalQueryTest {
139 void inputKeyCountTest(QueryEvaluationHint hint) { 139 void inputKeyCountTest(QueryEvaluationHint hint) {
140 var person = new Symbol<>("Person", 1, Boolean.class, false); 140 var person = new Symbol<>("Person", 1, Boolean.class, false);
141 var symbol = new Symbol<>("symbol", 4, Boolean.class, false); 141 var symbol = new Symbol<>("symbol", 4, Boolean.class, false);
142 var personView = new KeyOnlyRelationView<>(person); 142 var personView = new KeyOnlyView<>(person);
143 var symbolView = new KeyOnlyRelationView<>(symbol); 143 var symbolView = new KeyOnlyView<>(symbol);
144 144
145 var p1 = Variable.of("p1"); 145 var p1 = Variable.of("p1");
146 var p2 = Variable.of("p2"); 146 var p2 = Variable.of("p2");
@@ -190,8 +190,8 @@ class DiagonalQueryTest {
190 void subQueryCountTest(QueryEvaluationHint hint) { 190 void subQueryCountTest(QueryEvaluationHint hint) {
191 var person = new Symbol<>("Person", 1, Boolean.class, false); 191 var person = new Symbol<>("Person", 1, Boolean.class, false);
192 var symbol = new Symbol<>("symbol", 4, Boolean.class, false); 192 var symbol = new Symbol<>("symbol", 4, Boolean.class, false);
193 var personView = new KeyOnlyRelationView<>(person); 193 var personView = new KeyOnlyView<>(person);
194 var symbolView = new KeyOnlyRelationView<>(symbol); 194 var symbolView = new KeyOnlyView<>(symbol);
195 195
196 var p1 = Variable.of("p1"); 196 var p1 = Variable.of("p1");
197 var p2 = Variable.of("p2"); 197 var p2 = Variable.of("p2");
@@ -254,8 +254,8 @@ class DiagonalQueryTest {
254 void inputKeyAggregationTest(QueryEvaluationHint hint) { 254 void inputKeyAggregationTest(QueryEvaluationHint hint) {
255 var person = new Symbol<>("Person", 1, Boolean.class, false); 255 var person = new Symbol<>("Person", 1, Boolean.class, false);
256 var symbol = new Symbol<>("symbol", 4, Integer.class, null); 256 var symbol = new Symbol<>("symbol", 4, Integer.class, null);
257 var personView = new KeyOnlyRelationView<>(person); 257 var personView = new KeyOnlyView<>(person);
258 var symbolView = new FunctionalRelationView<>(symbol); 258 var symbolView = new FunctionView<>(symbol);
259 259
260 var p1 = Variable.of("p1"); 260 var p1 = Variable.of("p1");
261 var p2 = Variable.of("p2"); 261 var p2 = Variable.of("p2");
@@ -306,8 +306,8 @@ class DiagonalQueryTest {
306 void subQueryAggregationTest(QueryEvaluationHint hint) { 306 void subQueryAggregationTest(QueryEvaluationHint hint) {
307 var person = new Symbol<>("Person", 1, Boolean.class, false); 307 var person = new Symbol<>("Person", 1, Boolean.class, false);
308 var symbol = new Symbol<>("symbol", 4, Integer.class, null); 308 var symbol = new Symbol<>("symbol", 4, Integer.class, null);
309 var personView = new KeyOnlyRelationView<>(person); 309 var personView = new KeyOnlyView<>(person);
310 var symbolView = new FunctionalRelationView<>(symbol); 310 var symbolView = new FunctionView<>(symbol);
311 311
312 var p1 = Variable.of("p1"); 312 var p1 = Variable.of("p1");
313 var p2 = Variable.of("p2"); 313 var p2 = Variable.of("p2");
@@ -374,8 +374,8 @@ class DiagonalQueryTest {
374 void inputKeyTransitiveTest(QueryEvaluationHint hint) { 374 void inputKeyTransitiveTest(QueryEvaluationHint hint) {
375 var person = new Symbol<>("Person", 1, Boolean.class, false); 375 var person = new Symbol<>("Person", 1, Boolean.class, false);
376 var symbol = new Symbol<>("symbol", 2, Boolean.class, false); 376 var symbol = new Symbol<>("symbol", 2, Boolean.class, false);
377 var personView = new KeyOnlyRelationView<>(person); 377 var personView = new KeyOnlyView<>(person);
378 var symbolView = new KeyOnlyRelationView<>(symbol); 378 var symbolView = new KeyOnlyView<>(symbol);
379 379
380 var p1 = Variable.of("p1"); 380 var p1 = Variable.of("p1");
381 var query = Query.builder("Diagonal") 381 var query = Query.builder("Diagonal")
@@ -420,8 +420,8 @@ class DiagonalQueryTest {
420 void subQueryTransitiveTest(QueryEvaluationHint hint) { 420 void subQueryTransitiveTest(QueryEvaluationHint hint) {
421 var person = new Symbol<>("Person", 1, Boolean.class, false); 421 var person = new Symbol<>("Person", 1, Boolean.class, false);
422 var symbol = new Symbol<>("symbol", 2, Boolean.class, false); 422 var symbol = new Symbol<>("symbol", 2, Boolean.class, false);
423 var personView = new KeyOnlyRelationView<>(person); 423 var personView = new KeyOnlyView<>(person);
424 var symbolView = new KeyOnlyRelationView<>(symbol); 424 var symbolView = new KeyOnlyView<>(symbol);
425 425
426 var p1 = Variable.of("p1"); 426 var p1 = Variable.of("p1");
427 var p2 = Variable.of("p2"); 427 var p2 = Variable.of("p2");
diff --git a/subprojects/store-query-viatra/src/test/java/tools/refinery/store/query/viatra/FunctionalQueryTest.java b/subprojects/store-query-viatra/src/test/java/tools/refinery/store/query/viatra/FunctionalQueryTest.java
index 3af67a50..19584273 100644
--- a/subprojects/store-query-viatra/src/test/java/tools/refinery/store/query/viatra/FunctionalQueryTest.java
+++ b/subprojects/store-query-viatra/src/test/java/tools/refinery/store/query/viatra/FunctionalQueryTest.java
@@ -13,9 +13,9 @@ import tools.refinery.store.query.dnf.Dnf;
13import tools.refinery.store.query.dnf.Query; 13import tools.refinery.store.query.dnf.Query;
14import tools.refinery.store.query.term.Variable; 14import tools.refinery.store.query.term.Variable;
15import tools.refinery.store.query.viatra.tests.QueryEngineTest; 15import tools.refinery.store.query.viatra.tests.QueryEngineTest;
16import tools.refinery.store.query.view.FilteredRelationView; 16import tools.refinery.store.query.view.FilteredView;
17import tools.refinery.store.query.view.FunctionalRelationView; 17import tools.refinery.store.query.view.FunctionView;
18import tools.refinery.store.query.view.KeyOnlyRelationView; 18import tools.refinery.store.query.view.KeyOnlyView;
19import tools.refinery.store.representation.Symbol; 19import tools.refinery.store.representation.Symbol;
20import tools.refinery.store.representation.TruthValue; 20import tools.refinery.store.representation.TruthValue;
21import tools.refinery.store.tuple.Tuple; 21import tools.refinery.store.tuple.Tuple;
@@ -38,8 +38,8 @@ class FunctionalQueryTest {
38 void inputKeyTest(QueryEvaluationHint hint) { 38 void inputKeyTest(QueryEvaluationHint hint) {
39 var person = new Symbol<>("Person", 1, Boolean.class, false); 39 var person = new Symbol<>("Person", 1, Boolean.class, false);
40 var age = new Symbol<>("age", 1, Integer.class, null); 40 var age = new Symbol<>("age", 1, Integer.class, null);
41 var personView = new KeyOnlyRelationView<>(person); 41 var personView = new KeyOnlyView<>(person);
42 var ageView = new FunctionalRelationView<>(age); 42 var ageView = new FunctionView<>(age);
43 43
44 var p1 = Variable.of("p1"); 44 var p1 = Variable.of("p1");
45 var x = Variable.of("x", Integer.class); 45 var x = Variable.of("x", Integer.class);
@@ -84,8 +84,8 @@ class FunctionalQueryTest {
84 void predicateTest(QueryEvaluationHint hint) { 84 void predicateTest(QueryEvaluationHint hint) {
85 var person = new Symbol<>("Person", 1, Boolean.class, false); 85 var person = new Symbol<>("Person", 1, Boolean.class, false);
86 var age = new Symbol<>("age", 1, Integer.class, null); 86 var age = new Symbol<>("age", 1, Integer.class, null);
87 var personView = new KeyOnlyRelationView<>(person); 87 var personView = new KeyOnlyView<>(person);
88 var ageView = new FunctionalRelationView<>(age); 88 var ageView = new FunctionView<>(age);
89 89
90 var p1 = Variable.of("p1"); 90 var p1 = Variable.of("p1");
91 var x = Variable.of("x", Integer.class); 91 var x = Variable.of("x", Integer.class);
@@ -137,8 +137,8 @@ class FunctionalQueryTest {
137 void computationTest(QueryEvaluationHint hint) { 137 void computationTest(QueryEvaluationHint hint) {
138 var person = new Symbol<>("Person", 1, Boolean.class, false); 138 var person = new Symbol<>("Person", 1, Boolean.class, false);
139 var age = new Symbol<>("age", 1, Integer.class, null); 139 var age = new Symbol<>("age", 1, Integer.class, null);
140 var personView = new KeyOnlyRelationView<>(person); 140 var personView = new KeyOnlyView<>(person);
141 var ageView = new FunctionalRelationView<>(age); 141 var ageView = new FunctionView<>(age);
142 142
143 var p1 = Variable.of("p1"); 143 var p1 = Variable.of("p1");
144 var x = Variable.of("x", Integer.class); 144 var x = Variable.of("x", Integer.class);
@@ -184,8 +184,8 @@ class FunctionalQueryTest {
184 void inputKeyCountTest(QueryEvaluationHint hint) { 184 void inputKeyCountTest(QueryEvaluationHint hint) {
185 var person = new Symbol<>("Person", 1, Boolean.class, false); 185 var person = new Symbol<>("Person", 1, Boolean.class, false);
186 var friend = new Symbol<>("friend", 2, TruthValue.class, TruthValue.FALSE); 186 var friend = new Symbol<>("friend", 2, TruthValue.class, TruthValue.FALSE);
187 var personView = new KeyOnlyRelationView<>(person); 187 var personView = new KeyOnlyView<>(person);
188 var friendMustView = new FilteredRelationView<>(friend, "must", TruthValue::must); 188 var friendMustView = new FilteredView<>(friend, "must", TruthValue::must);
189 189
190 var p1 = Variable.of("p1"); 190 var p1 = Variable.of("p1");
191 var p2 = Variable.of("p2"); 191 var p2 = Variable.of("p2");
@@ -233,8 +233,8 @@ class FunctionalQueryTest {
233 void predicateCountTest(QueryEvaluationHint hint) { 233 void predicateCountTest(QueryEvaluationHint hint) {
234 var person = new Symbol<>("Person", 1, Boolean.class, false); 234 var person = new Symbol<>("Person", 1, Boolean.class, false);
235 var friend = new Symbol<>("friend", 2, TruthValue.class, TruthValue.FALSE); 235 var friend = new Symbol<>("friend", 2, TruthValue.class, TruthValue.FALSE);
236 var personView = new KeyOnlyRelationView<>(person); 236 var personView = new KeyOnlyView<>(person);
237 var friendMustView = new FilteredRelationView<>(friend, "must", TruthValue::must); 237 var friendMustView = new FilteredView<>(friend, "must", TruthValue::must);
238 238
239 var p1 = Variable.of("p1"); 239 var p1 = Variable.of("p1");
240 var p2 = Variable.of("p2"); 240 var p2 = Variable.of("p2");
@@ -289,7 +289,7 @@ class FunctionalQueryTest {
289 @QueryEngineTest 289 @QueryEngineTest
290 void inputKeyAggregationTest(QueryEvaluationHint hint) { 290 void inputKeyAggregationTest(QueryEvaluationHint hint) {
291 var age = new Symbol<>("age", 1, Integer.class, null); 291 var age = new Symbol<>("age", 1, Integer.class, null);
292 var ageView = new FunctionalRelationView<>(age); 292 var ageView = new FunctionView<>(age);
293 293
294 var p1 = Variable.of("p1"); 294 var p1 = Variable.of("p1");
295 var x = Variable.of("x", Integer.class); 295 var x = Variable.of("x", Integer.class);
@@ -324,8 +324,8 @@ class FunctionalQueryTest {
324 void predicateAggregationTest(QueryEvaluationHint hint) { 324 void predicateAggregationTest(QueryEvaluationHint hint) {
325 var person = new Symbol<>("Person", 1, Boolean.class, false); 325 var person = new Symbol<>("Person", 1, Boolean.class, false);
326 var age = new Symbol<>("age", 1, Integer.class, null); 326 var age = new Symbol<>("age", 1, Integer.class, null);
327 var personView = new KeyOnlyRelationView<>(person); 327 var personView = new KeyOnlyView<>(person);
328 var ageView = new FunctionalRelationView<>(age); 328 var ageView = new FunctionView<>(age);
329 329
330 var p1 = Variable.of("p1"); 330 var p1 = Variable.of("p1");
331 var x = Variable.of("x", Integer.class); 331 var x = Variable.of("x", Integer.class);
@@ -371,8 +371,8 @@ class FunctionalQueryTest {
371 void extremeValueTest(QueryEvaluationHint hint) { 371 void extremeValueTest(QueryEvaluationHint hint) {
372 var person = new Symbol<>("Person", 1, Boolean.class, false); 372 var person = new Symbol<>("Person", 1, Boolean.class, false);
373 var friend = new Symbol<>("friend", 2, TruthValue.class, TruthValue.FALSE); 373 var friend = new Symbol<>("friend", 2, TruthValue.class, TruthValue.FALSE);
374 var personView = new KeyOnlyRelationView<>(person); 374 var personView = new KeyOnlyView<>(person);
375 var friendMustView = new FilteredRelationView<>(friend, "must", TruthValue::must); 375 var friendMustView = new FilteredView<>(friend, "must", TruthValue::must);
376 376
377 var p1 = Variable.of("p1"); 377 var p1 = Variable.of("p1");
378 var p2 = Variable.of("p2"); 378 var p2 = Variable.of("p2");
@@ -447,8 +447,8 @@ class FunctionalQueryTest {
447 void invalidComputationTest(QueryEvaluationHint hint) { 447 void invalidComputationTest(QueryEvaluationHint hint) {
448 var person = new Symbol<>("Person", 1, Boolean.class, false); 448 var person = new Symbol<>("Person", 1, Boolean.class, false);
449 var age = new Symbol<>("age", 1, Integer.class, null); 449 var age = new Symbol<>("age", 1, Integer.class, null);
450 var personView = new KeyOnlyRelationView<>(person); 450 var personView = new KeyOnlyView<>(person);
451 var ageView = new FunctionalRelationView<>(age); 451 var ageView = new FunctionView<>(age);
452 452
453 var p1 = Variable.of("p1"); 453 var p1 = Variable.of("p1");
454 var x = Variable.of("x", Integer.class); 454 var x = Variable.of("x", Integer.class);
@@ -494,8 +494,8 @@ class FunctionalQueryTest {
494 void invalidAssumeTest(QueryEvaluationHint hint) { 494 void invalidAssumeTest(QueryEvaluationHint hint) {
495 var person = new Symbol<>("Person", 1, Boolean.class, false); 495 var person = new Symbol<>("Person", 1, Boolean.class, false);
496 var age = new Symbol<>("age", 1, Integer.class, null); 496 var age = new Symbol<>("age", 1, Integer.class, null);
497 var personView = new KeyOnlyRelationView<>(person); 497 var personView = new KeyOnlyView<>(person);
498 var ageView = new FunctionalRelationView<>(age); 498 var ageView = new FunctionView<>(age);
499 499
500 var p1 = Variable.of("p1"); 500 var p1 = Variable.of("p1");
501 var x = Variable.of("x", Integer.class); 501 var x = Variable.of("x", Integer.class);
@@ -543,9 +543,9 @@ class FunctionalQueryTest {
543 var person = new Symbol<>("Person", 1, Boolean.class, false); 543 var person = new Symbol<>("Person", 1, Boolean.class, false);
544 var age = new Symbol<>("age", 1, Integer.class, null); 544 var age = new Symbol<>("age", 1, Integer.class, null);
545 var friend = new Symbol<>("friend", 2, TruthValue.class, TruthValue.FALSE); 545 var friend = new Symbol<>("friend", 2, TruthValue.class, TruthValue.FALSE);
546 var personView = new KeyOnlyRelationView<>(person); 546 var personView = new KeyOnlyView<>(person);
547 var ageView = new FunctionalRelationView<>(age); 547 var ageView = new FunctionView<>(age);
548 var friendMustView = new FilteredRelationView<>(friend, "must", TruthValue::must); 548 var friendMustView = new FilteredView<>(friend, "must", TruthValue::must);
549 549
550 var p1 = Variable.of("p1"); 550 var p1 = Variable.of("p1");
551 var p2 = Variable.of("p2"); 551 var p2 = Variable.of("p2");
diff --git a/subprojects/store-query-viatra/src/test/java/tools/refinery/store/query/viatra/QueryTest.java b/subprojects/store-query-viatra/src/test/java/tools/refinery/store/query/viatra/QueryTest.java
index e82f0a15..11ee98f5 100644
--- a/subprojects/store-query-viatra/src/test/java/tools/refinery/store/query/viatra/QueryTest.java
+++ b/subprojects/store-query-viatra/src/test/java/tools/refinery/store/query/viatra/QueryTest.java
@@ -13,9 +13,9 @@ import tools.refinery.store.query.dnf.Dnf;
13import tools.refinery.store.query.dnf.Query; 13import tools.refinery.store.query.dnf.Query;
14import tools.refinery.store.query.term.Variable; 14import tools.refinery.store.query.term.Variable;
15import tools.refinery.store.query.viatra.tests.QueryEngineTest; 15import tools.refinery.store.query.viatra.tests.QueryEngineTest;
16import tools.refinery.store.query.view.FilteredRelationView; 16import tools.refinery.store.query.view.FilteredView;
17import tools.refinery.store.query.view.FunctionalRelationView; 17import tools.refinery.store.query.view.FunctionView;
18import tools.refinery.store.query.view.KeyOnlyRelationView; 18import tools.refinery.store.query.view.KeyOnlyView;
19import tools.refinery.store.representation.Symbol; 19import tools.refinery.store.representation.Symbol;
20import tools.refinery.store.representation.TruthValue; 20import tools.refinery.store.representation.TruthValue;
21import tools.refinery.store.tuple.Tuple; 21import tools.refinery.store.tuple.Tuple;
@@ -34,7 +34,7 @@ class QueryTest {
34 void typeConstraintTest(QueryEvaluationHint hint) { 34 void typeConstraintTest(QueryEvaluationHint hint) {
35 var person = new Symbol<>("Person", 1, Boolean.class, false); 35 var person = new Symbol<>("Person", 1, Boolean.class, false);
36 var asset = new Symbol<>("Asset", 1, Boolean.class, false); 36 var asset = new Symbol<>("Asset", 1, Boolean.class, false);
37 var personView = new KeyOnlyRelationView<>(person); 37 var personView = new KeyOnlyView<>(person);
38 38
39 var p1 = Variable.of("p1"); 39 var p1 = Variable.of("p1");
40 var predicate = Query.builder("TypeConstraint") 40 var predicate = Query.builder("TypeConstraint")
@@ -73,8 +73,8 @@ class QueryTest {
73 void relationConstraintTest(QueryEvaluationHint hint) { 73 void relationConstraintTest(QueryEvaluationHint hint) {
74 var person = new Symbol<>("Person", 1, Boolean.class, false); 74 var person = new Symbol<>("Person", 1, Boolean.class, false);
75 var friend = new Symbol<>("friend", 2, TruthValue.class, TruthValue.FALSE); 75 var friend = new Symbol<>("friend", 2, TruthValue.class, TruthValue.FALSE);
76 var personView = new KeyOnlyRelationView<>(person); 76 var personView = new KeyOnlyView<>(person);
77 var friendMustView = new FilteredRelationView<>(friend, "must", TruthValue::must); 77 var friendMustView = new FilteredView<>(friend, "must", TruthValue::must);
78 78
79 var p1 = Variable.of("p1"); 79 var p1 = Variable.of("p1");
80 var p2 = Variable.of("p2"); 80 var p2 = Variable.of("p2");
@@ -122,8 +122,8 @@ class QueryTest {
122 void existTest(QueryEvaluationHint hint) { 122 void existTest(QueryEvaluationHint hint) {
123 var person = new Symbol<>("Person", 1, Boolean.class, false); 123 var person = new Symbol<>("Person", 1, Boolean.class, false);
124 var friend = new Symbol<>("friend", 2, TruthValue.class, TruthValue.FALSE); 124 var friend = new Symbol<>("friend", 2, TruthValue.class, TruthValue.FALSE);
125 var personView = new KeyOnlyRelationView<>(person); 125 var personView = new KeyOnlyView<>(person);
126 var friendMustView = new FilteredRelationView<>(friend, "must", TruthValue::must); 126 var friendMustView = new FilteredView<>(friend, "must", TruthValue::must);
127 127
128 var p1 = Variable.of("p1"); 128 var p1 = Variable.of("p1");
129 var p2 = Variable.of("p2"); 129 var p2 = Variable.of("p2");
@@ -172,9 +172,9 @@ class QueryTest {
172 var person = new Symbol<>("Person", 1, Boolean.class, false); 172 var person = new Symbol<>("Person", 1, Boolean.class, false);
173 var animal = new Symbol<>("Animal", 1, Boolean.class, false); 173 var animal = new Symbol<>("Animal", 1, Boolean.class, false);
174 var friend = new Symbol<>("friend", 2, TruthValue.class, TruthValue.FALSE); 174 var friend = new Symbol<>("friend", 2, TruthValue.class, TruthValue.FALSE);
175 var personView = new KeyOnlyRelationView<>(person); 175 var personView = new KeyOnlyView<>(person);
176 var animalView = new KeyOnlyRelationView<>(animal); 176 var animalView = new KeyOnlyView<>(animal);
177 var friendMustView = new FilteredRelationView<>(friend, "must", TruthValue::must); 177 var friendMustView = new FilteredView<>(friend, "must", TruthValue::must);
178 178
179 var p1 = Variable.of("p1"); 179 var p1 = Variable.of("p1");
180 var p2 = Variable.of("p2"); 180 var p2 = Variable.of("p2");
@@ -230,7 +230,7 @@ class QueryTest {
230 @QueryEngineTest 230 @QueryEngineTest
231 void equalityTest(QueryEvaluationHint hint) { 231 void equalityTest(QueryEvaluationHint hint) {
232 var person = new Symbol<>("Person", 1, Boolean.class, false); 232 var person = new Symbol<>("Person", 1, Boolean.class, false);
233 var personView = new KeyOnlyRelationView<>(person); 233 var personView = new KeyOnlyView<>(person);
234 234
235 var p1 = Variable.of("p1"); 235 var p1 = Variable.of("p1");
236 var p2 = Variable.of("p2"); 236 var p2 = Variable.of("p2");
@@ -273,8 +273,8 @@ class QueryTest {
273 void inequalityTest(QueryEvaluationHint hint) { 273 void inequalityTest(QueryEvaluationHint hint) {
274 var person = new Symbol<>("Person", 1, Boolean.class, false); 274 var person = new Symbol<>("Person", 1, Boolean.class, false);
275 var friend = new Symbol<>("friend", 2, TruthValue.class, TruthValue.FALSE); 275 var friend = new Symbol<>("friend", 2, TruthValue.class, TruthValue.FALSE);
276 var personView = new KeyOnlyRelationView<>(person); 276 var personView = new KeyOnlyView<>(person);
277 var friendMustView = new FilteredRelationView<>(friend, "must", TruthValue::must); 277 var friendMustView = new FilteredView<>(friend, "must", TruthValue::must);
278 278
279 var p1 = Variable.of("p1"); 279 var p1 = Variable.of("p1");
280 var p2 = Variable.of("p2"); 280 var p2 = Variable.of("p2");
@@ -322,8 +322,8 @@ class QueryTest {
322 void patternCallTest(QueryEvaluationHint hint) { 322 void patternCallTest(QueryEvaluationHint hint) {
323 var person = new Symbol<>("Person", 1, Boolean.class, false); 323 var person = new Symbol<>("Person", 1, Boolean.class, false);
324 var friend = new Symbol<>("friend", 2, TruthValue.class, TruthValue.FALSE); 324 var friend = new Symbol<>("friend", 2, TruthValue.class, TruthValue.FALSE);
325 var personView = new KeyOnlyRelationView<>(person); 325 var personView = new KeyOnlyView<>(person);
326 var friendMustView = new FilteredRelationView<>(friend, "must", TruthValue::must); 326 var friendMustView = new FilteredView<>(friend, "must", TruthValue::must);
327 327
328 var p1 = Variable.of("p1"); 328 var p1 = Variable.of("p1");
329 var p2 = Variable.of("p2"); 329 var p2 = Variable.of("p2");
@@ -381,8 +381,8 @@ class QueryTest {
381 void negativeRelationViewTest(QueryEvaluationHint hint) { 381 void negativeRelationViewTest(QueryEvaluationHint hint) {
382 var person = new Symbol<>("Person", 1, Boolean.class, false); 382 var person = new Symbol<>("Person", 1, Boolean.class, false);
383 var friend = new Symbol<>("friend", 2, TruthValue.class, TruthValue.FALSE); 383 var friend = new Symbol<>("friend", 2, TruthValue.class, TruthValue.FALSE);
384 var personView = new KeyOnlyRelationView<>(person); 384 var personView = new KeyOnlyView<>(person);
385 var friendMustView = new FilteredRelationView<>(friend, "must", TruthValue::must); 385 var friendMustView = new FilteredView<>(friend, "must", TruthValue::must);
386 386
387 var p1 = Variable.of("p1"); 387 var p1 = Variable.of("p1");
388 var p2 = Variable.of("p2"); 388 var p2 = Variable.of("p2");
@@ -435,8 +435,8 @@ class QueryTest {
435 void negativePatternCallTest(QueryEvaluationHint hint) { 435 void negativePatternCallTest(QueryEvaluationHint hint) {
436 var person = new Symbol<>("Person", 1, Boolean.class, false); 436 var person = new Symbol<>("Person", 1, Boolean.class, false);
437 var friend = new Symbol<>("friend", 2, TruthValue.class, TruthValue.FALSE); 437 var friend = new Symbol<>("friend", 2, TruthValue.class, TruthValue.FALSE);
438 var personView = new KeyOnlyRelationView<>(person); 438 var personView = new KeyOnlyView<>(person);
439 var friendMustView = new FilteredRelationView<>(friend, "must", TruthValue::must); 439 var friendMustView = new FilteredView<>(friend, "must", TruthValue::must);
440 440
441 var p1 = Variable.of("p1"); 441 var p1 = Variable.of("p1");
442 var p2 = Variable.of("p2"); 442 var p2 = Variable.of("p2");
@@ -500,8 +500,8 @@ class QueryTest {
500 void negativeRelationViewWithQuantificationTest(QueryEvaluationHint hint) { 500 void negativeRelationViewWithQuantificationTest(QueryEvaluationHint hint) {
501 var person = new Symbol<>("Person", 1, Boolean.class, false); 501 var person = new Symbol<>("Person", 1, Boolean.class, false);
502 var friend = new Symbol<>("friend", 2, TruthValue.class, TruthValue.FALSE); 502 var friend = new Symbol<>("friend", 2, TruthValue.class, TruthValue.FALSE);
503 var personView = new KeyOnlyRelationView<>(person); 503 var personView = new KeyOnlyView<>(person);
504 var friendMustView = new FilteredRelationView<>(friend, "must", TruthValue::must); 504 var friendMustView = new FilteredView<>(friend, "must", TruthValue::must);
505 505
506 var p1 = Variable.of("p1"); 506 var p1 = Variable.of("p1");
507 var p2 = Variable.of("p2"); 507 var p2 = Variable.of("p2");
@@ -547,8 +547,8 @@ class QueryTest {
547 void negativeWithQuantificationTest(QueryEvaluationHint hint) { 547 void negativeWithQuantificationTest(QueryEvaluationHint hint) {
548 var person = new Symbol<>("Person", 1, Boolean.class, false); 548 var person = new Symbol<>("Person", 1, Boolean.class, false);
549 var friend = new Symbol<>("friend", 2, TruthValue.class, TruthValue.FALSE); 549 var friend = new Symbol<>("friend", 2, TruthValue.class, TruthValue.FALSE);
550 var personView = new KeyOnlyRelationView<>(person); 550 var personView = new KeyOnlyView<>(person);
551 var friendMustView = new FilteredRelationView<>(friend, "must", TruthValue::must); 551 var friendMustView = new FilteredView<>(friend, "must", TruthValue::must);
552 552
553 var p1 = Variable.of("p1"); 553 var p1 = Variable.of("p1");
554 var p2 = Variable.of("p2"); 554 var p2 = Variable.of("p2");
@@ -603,8 +603,8 @@ class QueryTest {
603 void transitiveRelationViewTest(QueryEvaluationHint hint) { 603 void transitiveRelationViewTest(QueryEvaluationHint hint) {
604 var person = new Symbol<>("Person", 1, Boolean.class, false); 604 var person = new Symbol<>("Person", 1, Boolean.class, false);
605 var friend = new Symbol<>("friend", 2, TruthValue.class, TruthValue.FALSE); 605 var friend = new Symbol<>("friend", 2, TruthValue.class, TruthValue.FALSE);
606 var personView = new KeyOnlyRelationView<>(person); 606 var personView = new KeyOnlyView<>(person);
607 var friendMustView = new FilteredRelationView<>(friend, "must", TruthValue::must); 607 var friendMustView = new FilteredView<>(friend, "must", TruthValue::must);
608 608
609 var p1 = Variable.of("p1"); 609 var p1 = Variable.of("p1");
610 var p2 = Variable.of("p2"); 610 var p2 = Variable.of("p2");
@@ -656,8 +656,8 @@ class QueryTest {
656 void transitivePatternCallTest(QueryEvaluationHint hint) { 656 void transitivePatternCallTest(QueryEvaluationHint hint) {
657 var person = new Symbol<>("Person", 1, Boolean.class, false); 657 var person = new Symbol<>("Person", 1, Boolean.class, false);
658 var friend = new Symbol<>("friend", 2, TruthValue.class, TruthValue.FALSE); 658 var friend = new Symbol<>("friend", 2, TruthValue.class, TruthValue.FALSE);
659 var personView = new KeyOnlyRelationView<>(person); 659 var personView = new KeyOnlyView<>(person);
660 var friendMustView = new FilteredRelationView<>(friend, "must", TruthValue::must); 660 var friendMustView = new FilteredView<>(friend, "must", TruthValue::must);
661 661
662 var p1 = Variable.of("p1"); 662 var p1 = Variable.of("p1");
663 var p2 = Variable.of("p2"); 663 var p2 = Variable.of("p2");
@@ -720,8 +720,8 @@ class QueryTest {
720 void assumeTest(QueryEvaluationHint hint) { 720 void assumeTest(QueryEvaluationHint hint) {
721 var person = new Symbol<>("Person", 1, Boolean.class, false); 721 var person = new Symbol<>("Person", 1, Boolean.class, false);
722 var age = new Symbol<>("age", 1, Integer.class, null); 722 var age = new Symbol<>("age", 1, Integer.class, null);
723 var personView = new KeyOnlyRelationView<>(person); 723 var personView = new KeyOnlyView<>(person);
724 var ageView = new FunctionalRelationView<>(age); 724 var ageView = new FunctionView<>(age);
725 725
726 var p1 = Variable.of("p1"); 726 var p1 = Variable.of("p1");
727 var x = Variable.of("x", Integer.class); 727 var x = Variable.of("x", Integer.class);
diff --git a/subprojects/store-query-viatra/src/test/java/tools/refinery/store/query/viatra/QueryTransactionTest.java b/subprojects/store-query-viatra/src/test/java/tools/refinery/store/query/viatra/QueryTransactionTest.java
index 07b799ac..bd6b6b81 100644
--- a/subprojects/store-query-viatra/src/test/java/tools/refinery/store/query/viatra/QueryTransactionTest.java
+++ b/subprojects/store-query-viatra/src/test/java/tools/refinery/store/query/viatra/QueryTransactionTest.java
@@ -12,9 +12,9 @@ import tools.refinery.store.model.ModelStore;
12import tools.refinery.store.query.ModelQuery; 12import tools.refinery.store.query.ModelQuery;
13import tools.refinery.store.query.dnf.Query; 13import tools.refinery.store.query.dnf.Query;
14import tools.refinery.store.query.term.Variable; 14import tools.refinery.store.query.term.Variable;
15import tools.refinery.store.query.view.FilteredRelationView; 15import tools.refinery.store.query.view.FilteredView;
16import tools.refinery.store.query.view.FunctionalRelationView; 16import tools.refinery.store.query.view.FunctionView;
17import tools.refinery.store.query.view.KeyOnlyRelationView; 17import tools.refinery.store.query.view.KeyOnlyView;
18import tools.refinery.store.representation.Symbol; 18import tools.refinery.store.representation.Symbol;
19import tools.refinery.store.tuple.Tuple; 19import tools.refinery.store.tuple.Tuple;
20 20
@@ -30,7 +30,7 @@ class QueryTransactionTest {
30 @Test 30 @Test
31 void flushTest() { 31 void flushTest() {
32 var person = new Symbol<>("Person", 1, Boolean.class, false); 32 var person = new Symbol<>("Person", 1, Boolean.class, false);
33 var personView = new KeyOnlyRelationView<>(person); 33 var personView = new KeyOnlyView<>(person);
34 34
35 var p1 = Variable.of("p1"); 35 var p1 = Variable.of("p1");
36 var predicate = Query.builder("TypeConstraint") 36 var predicate = Query.builder("TypeConstraint")
@@ -101,7 +101,7 @@ class QueryTransactionTest {
101 @Test 101 @Test
102 void localSearchTest() { 102 void localSearchTest() {
103 var person = new Symbol<>("Person", 1, Boolean.class, false); 103 var person = new Symbol<>("Person", 1, Boolean.class, false);
104 var personView = new KeyOnlyRelationView<>(person); 104 var personView = new KeyOnlyView<>(person);
105 105
106 var p1 = Variable.of("p1"); 106 var p1 = Variable.of("p1");
107 var predicate = Query.builder("TypeConstraint") 107 var predicate = Query.builder("TypeConstraint")
@@ -156,7 +156,7 @@ class QueryTransactionTest {
156 void unrelatedChangesTest() { 156 void unrelatedChangesTest() {
157 var person = new Symbol<>("Person", 1, Boolean.class, false); 157 var person = new Symbol<>("Person", 1, Boolean.class, false);
158 var asset = new Symbol<>("Asset", 1, Boolean.class, false); 158 var asset = new Symbol<>("Asset", 1, Boolean.class, false);
159 var personView = new KeyOnlyRelationView<>(person); 159 var personView = new KeyOnlyView<>(person);
160 160
161 var p1 = Variable.of("p1"); 161 var p1 = Variable.of("p1");
162 var predicate = Query.builder("TypeConstraint") 162 var predicate = Query.builder("TypeConstraint")
@@ -229,8 +229,8 @@ class QueryTransactionTest {
229 void tupleChangingChangeTest() { 229 void tupleChangingChangeTest() {
230 var person = new Symbol<>("Person", 1, Boolean.class, false); 230 var person = new Symbol<>("Person", 1, Boolean.class, false);
231 var age = new Symbol<>("age", 1, Integer.class, null); 231 var age = new Symbol<>("age", 1, Integer.class, null);
232 var personView = new KeyOnlyRelationView<>(person); 232 var personView = new KeyOnlyView<>(person);
233 var ageView = new FunctionalRelationView<>(age); 233 var ageView = new FunctionView<>(age);
234 234
235 var p1 = Variable.of("p1"); 235 var p1 = Variable.of("p1");
236 var x = Variable.of("x", Integer.class); 236 var x = Variable.of("x", Integer.class);
@@ -277,8 +277,8 @@ class QueryTransactionTest {
277 void tuplePreservingUnchangedTest() { 277 void tuplePreservingUnchangedTest() {
278 var person = new Symbol<>("Person", 1, Boolean.class, false); 278 var person = new Symbol<>("Person", 1, Boolean.class, false);
279 var age = new Symbol<>("age", 1, Integer.class, null); 279 var age = new Symbol<>("age", 1, Integer.class, null);
280 var personView = new KeyOnlyRelationView<>(person); 280 var personView = new KeyOnlyView<>(person);
281 var adultView = new FilteredRelationView<>(age, "adult", n -> n != null && n >= 18); 281 var adultView = new FilteredView<>(age, "adult", n -> n != null && n >= 18);
282 282
283 var p1 = Variable.of("p1"); 283 var p1 = Variable.of("p1");
284 var x = Variable.of("x", Integer.class); 284 var x = Variable.of("x", Integer.class);
@@ -324,7 +324,7 @@ class QueryTransactionTest {
324 @Test 324 @Test
325 void commitAfterFlushTest() { 325 void commitAfterFlushTest() {
326 var person = new Symbol<>("Person", 1, Boolean.class, false); 326 var person = new Symbol<>("Person", 1, Boolean.class, false);
327 var personView = new KeyOnlyRelationView<>(person); 327 var personView = new KeyOnlyView<>(person);
328 328
329 var p1 = Variable.of("p1"); 329 var p1 = Variable.of("p1");
330 var predicate = Query.builder("TypeConstraint") 330 var predicate = Query.builder("TypeConstraint")
@@ -382,7 +382,7 @@ class QueryTransactionTest {
382 @Test 382 @Test
383 void commitWithoutFlushTest() { 383 void commitWithoutFlushTest() {
384 var person = new Symbol<>("Person", 1, Boolean.class, false); 384 var person = new Symbol<>("Person", 1, Boolean.class, false);
385 var personView = new KeyOnlyRelationView<>(person); 385 var personView = new KeyOnlyView<>(person);
386 386
387 var p1 = Variable.of("p1"); 387 var p1 = Variable.of("p1");
388 var predicate = Query.builder("TypeConstraint") 388 var predicate = Query.builder("TypeConstraint")
diff --git a/subprojects/store-query/src/main/java/tools/refinery/store/query/ModelQueryStoreAdapter.java b/subprojects/store-query/src/main/java/tools/refinery/store/query/ModelQueryStoreAdapter.java
index 33318abc..f0a950a6 100644
--- a/subprojects/store-query/src/main/java/tools/refinery/store/query/ModelQueryStoreAdapter.java
+++ b/subprojects/store-query/src/main/java/tools/refinery/store/query/ModelQueryStoreAdapter.java
@@ -8,12 +8,12 @@ package tools.refinery.store.query;
8import tools.refinery.store.adapter.ModelStoreAdapter; 8import tools.refinery.store.adapter.ModelStoreAdapter;
9import tools.refinery.store.model.Model; 9import tools.refinery.store.model.Model;
10import tools.refinery.store.query.dnf.AnyQuery; 10import tools.refinery.store.query.dnf.AnyQuery;
11import tools.refinery.store.query.view.AnyRelationView; 11import tools.refinery.store.query.view.AnySymbolView;
12 12
13import java.util.Collection; 13import java.util.Collection;
14 14
15public interface ModelQueryStoreAdapter extends ModelStoreAdapter { 15public interface ModelQueryStoreAdapter extends ModelStoreAdapter {
16 Collection<AnyRelationView> getRelationViews(); 16 Collection<AnySymbolView> getSymbolViews();
17 17
18 Collection<AnyQuery> getQueries(); 18 Collection<AnyQuery> getQueries();
19 19
diff --git a/subprojects/store-query/src/main/java/tools/refinery/store/query/view/FunctionalRelationView.java b/subprojects/store-query/src/main/java/tools/refinery/store/query/view/AbstractFunctionView.java
index ab48386e..c0aa35bf 100644
--- a/subprojects/store-query/src/main/java/tools/refinery/store/query/view/FunctionalRelationView.java
+++ b/subprojects/store-query/src/main/java/tools/refinery/store/query/view/AbstractFunctionView.java
@@ -7,7 +7,6 @@ package tools.refinery.store.query.view;
7 7
8import tools.refinery.store.model.Model; 8import tools.refinery.store.model.Model;
9import tools.refinery.store.query.dnf.FunctionalDependency; 9import tools.refinery.store.query.dnf.FunctionalDependency;
10import tools.refinery.store.query.term.DataSort;
11import tools.refinery.store.query.term.NodeSort; 10import tools.refinery.store.query.term.NodeSort;
12import tools.refinery.store.query.term.Sort; 11import tools.refinery.store.query.term.Sort;
13import tools.refinery.store.representation.Symbol; 12import tools.refinery.store.representation.Symbol;
@@ -20,19 +19,14 @@ import java.util.Set;
20import java.util.stream.Collectors; 19import java.util.stream.Collectors;
21import java.util.stream.IntStream; 20import java.util.stream.IntStream;
22 21
23public final class FunctionalRelationView<T> extends RelationView<T> { 22public abstract class AbstractFunctionView<T> extends SymbolView<T> {
24 private final T defaultValue; 23 private final T defaultValue;
25 24
26 public FunctionalRelationView(Symbol<T> symbol, String name) { 25 protected AbstractFunctionView(Symbol<T> symbol, String name) {
27 super(symbol, name); 26 super(symbol, name);
28 defaultValue = symbol.defaultValue(); 27 defaultValue = symbol.defaultValue();
29 } 28 }
30 29
31 public FunctionalRelationView(Symbol<T> symbol) {
32 super(symbol);
33 defaultValue = symbol.defaultValue();
34 }
35
36 @Override 30 @Override
37 public Set<FunctionalDependency<Integer>> getFunctionalDependencies() { 31 public Set<FunctionalDependency<Integer>> getFunctionalDependencies() {
38 var arity = getSymbol().arity(); 32 var arity = getSymbol().arity();
@@ -42,18 +36,28 @@ public final class FunctionalRelationView<T> extends RelationView<T> {
42 } 36 }
43 37
44 @Override 38 @Override
45 public Set<RelationViewImplication> getImpliedRelationViews() { 39 public Set<ViewImplication> getImpliedRelationViews() {
46 var symbol = getSymbol(); 40 var symbol = getSymbol();
47 var impliedIndices = IntStream.range(0, symbol.arity()).boxed().toList(); 41 var impliedIndices = IntStream.range(0, symbol.arity()).boxed().toList();
48 var keyOnlyRelationView = new KeyOnlyRelationView<>(symbol); 42 var keysView = new KeyOnlyView<>(symbol);
49 return Set.of(new RelationViewImplication(this, keyOnlyRelationView, impliedIndices)); 43 return Set.of(new ViewImplication(this, keysView, impliedIndices));
50 } 44 }
51 45
52 @Override 46 @Override
53 public boolean filter(Tuple key, T value) { 47 public final boolean filter(Tuple key, T value) {
54 return !Objects.equals(defaultValue, value); 48 return !Objects.equals(defaultValue, value);
55 } 49 }
56 50
51 protected abstract Sort getForwardMappedValueSort();
52
53 protected Object forwardMapValue(Tuple key, T value) {
54 return value;
55 }
56
57 protected boolean valueEquals(Tuple key, T value, Object otherForwardMappedValue) {
58 return Objects.equals(otherForwardMappedValue, forwardMapValue(key, value));
59 }
60
57 @Override 61 @Override
58 public Object[] forwardMap(Tuple key, T value) { 62 public Object[] forwardMap(Tuple key, T value) {
59 int size = key.getSize(); 63 int size = key.getSize();
@@ -61,7 +65,7 @@ public final class FunctionalRelationView<T> extends RelationView<T> {
61 for (int i = 0; i < size; i++) { 65 for (int i = 0; i < size; i++) {
62 result[i] = Tuple.of(key.get(i)); 66 result[i] = Tuple.of(key.get(i));
63 } 67 }
64 result[key.getSize()] = value; 68 result[key.getSize()] = forwardMapValue(key, value);
65 return result; 69 return result;
66 } 70 }
67 71
@@ -69,13 +73,15 @@ public final class FunctionalRelationView<T> extends RelationView<T> {
69 public boolean get(Model model, Object[] tuple) { 73 public boolean get(Model model, Object[] tuple) {
70 int[] content = new int[tuple.length - 1]; 74 int[] content = new int[tuple.length - 1];
71 for (int i = 0; i < tuple.length - 1; i++) { 75 for (int i = 0; i < tuple.length - 1; i++) {
72 content[i] = ((Tuple1) tuple[i]).value0(); 76 if (!(tuple[i] instanceof Tuple1 wrapper)) {
77 return false;
78 }
79 content[i] = wrapper.value0();
73 } 80 }
74 Tuple key = Tuple.of(content); 81 Tuple key = Tuple.of(content);
75 @SuppressWarnings("unchecked") 82 var valueInTuple = tuple[tuple.length - 1];
76 T valueInTuple = (T) tuple[tuple.length - 1];
77 T valueInMap = model.getInterpretation(getSymbol()).get(key); 83 T valueInMap = model.getInterpretation(getSymbol()).get(key);
78 return valueInTuple.equals(valueInMap); 84 return valueEquals(key, valueInMap, valueInTuple);
79 } 85 }
80 86
81 @Override 87 @Override
@@ -90,7 +96,7 @@ public final class FunctionalRelationView<T> extends RelationView<T> {
90 for (int i = 0; i < valueIndex; i++) { 96 for (int i = 0; i < valueIndex; i++) {
91 sorts[i] = NodeSort.INSTANCE; 97 sorts[i] = NodeSort.INSTANCE;
92 } 98 }
93 sorts[valueIndex] = new DataSort<>(getSymbol().valueType()); 99 sorts[valueIndex] = getForwardMappedValueSort();
94 return List.of(sorts); 100 return List.of(sorts);
95 } 101 }
96 102
@@ -99,7 +105,7 @@ public final class FunctionalRelationView<T> extends RelationView<T> {
99 if (this == o) return true; 105 if (this == o) return true;
100 if (o == null || getClass() != o.getClass()) return false; 106 if (o == null || getClass() != o.getClass()) return false;
101 if (!super.equals(o)) return false; 107 if (!super.equals(o)) return false;
102 FunctionalRelationView<?> that = (FunctionalRelationView<?>) o; 108 AbstractFunctionView<?> that = (AbstractFunctionView<?>) o;
103 return Objects.equals(defaultValue, that.defaultValue); 109 return Objects.equals(defaultValue, that.defaultValue);
104 } 110 }
105 111
diff --git a/subprojects/store-query/src/main/java/tools/refinery/store/query/view/AnyRelationView.java b/subprojects/store-query/src/main/java/tools/refinery/store/query/view/AnySymbolView.java
index 9aa923af..90b27ebb 100644
--- a/subprojects/store-query/src/main/java/tools/refinery/store/query/view/AnyRelationView.java
+++ b/subprojects/store-query/src/main/java/tools/refinery/store/query/view/AnySymbolView.java
@@ -12,7 +12,7 @@ import tools.refinery.store.query.Constraint;
12 12
13import java.util.Set; 13import java.util.Set;
14 14
15public sealed interface AnyRelationView extends Constraint permits RelationView { 15public sealed interface AnySymbolView extends Constraint permits SymbolView {
16 AnySymbol getSymbol(); 16 AnySymbol getSymbol();
17 17
18 String getViewName(); 18 String getViewName();
@@ -21,7 +21,7 @@ public sealed interface AnyRelationView extends Constraint permits RelationView
21 return Set.of(); 21 return Set.of();
22 } 22 }
23 23
24 default Set<RelationViewImplication> getImpliedRelationViews() { 24 default Set<ViewImplication> getImpliedRelationViews() {
25 return Set.of(); 25 return Set.of();
26 } 26 }
27 27
diff --git a/subprojects/store-query/src/main/java/tools/refinery/store/query/view/FilteredRelationView.java b/subprojects/store-query/src/main/java/tools/refinery/store/query/view/FilteredView.java
index 9717b2c1..922c7355 100644
--- a/subprojects/store-query/src/main/java/tools/refinery/store/query/view/FilteredRelationView.java
+++ b/subprojects/store-query/src/main/java/tools/refinery/store/query/view/FilteredView.java
@@ -12,24 +12,24 @@ import java.util.Objects;
12import java.util.function.BiPredicate; 12import java.util.function.BiPredicate;
13import java.util.function.Predicate; 13import java.util.function.Predicate;
14 14
15public class FilteredRelationView<T> extends TuplePreservingRelationView<T> { 15public class FilteredView<T> extends TuplePreservingView<T> {
16 private final BiPredicate<Tuple, T> predicate; 16 private final BiPredicate<Tuple, T> predicate;
17 17
18 public FilteredRelationView(Symbol<T> symbol, String name, BiPredicate<Tuple, T> predicate) { 18 public FilteredView(Symbol<T> symbol, String name, BiPredicate<Tuple, T> predicate) {
19 super(symbol, name); 19 super(symbol, name);
20 this.predicate = predicate; 20 this.predicate = predicate;
21 } 21 }
22 22
23 public FilteredRelationView(Symbol<T> symbol, BiPredicate<Tuple, T> predicate) { 23 public FilteredView(Symbol<T> symbol, BiPredicate<Tuple, T> predicate) {
24 super(symbol); 24 super(symbol);
25 this.predicate = predicate; 25 this.predicate = predicate;
26 } 26 }
27 27
28 public FilteredRelationView(Symbol<T> symbol, String name, Predicate<T> predicate) { 28 public FilteredView(Symbol<T> symbol, String name, Predicate<T> predicate) {
29 this(symbol, name, (k, v) -> predicate.test(v)); 29 this(symbol, name, (k, v) -> predicate.test(v));
30 } 30 }
31 31
32 public FilteredRelationView(Symbol<T> symbol, Predicate<T> predicate) { 32 public FilteredView(Symbol<T> symbol, Predicate<T> predicate) {
33 this(symbol, (k, v) -> predicate.test(v)); 33 this(symbol, (k, v) -> predicate.test(v));
34 } 34 }
35 35
@@ -43,7 +43,7 @@ public class FilteredRelationView<T> extends TuplePreservingRelationView<T> {
43 if (this == o) return true; 43 if (this == o) return true;
44 if (o == null || getClass() != o.getClass()) return false; 44 if (o == null || getClass() != o.getClass()) return false;
45 if (!super.equals(o)) return false; 45 if (!super.equals(o)) return false;
46 FilteredRelationView<?> that = (FilteredRelationView<?>) o; 46 FilteredView<?> that = (FilteredView<?>) o;
47 return Objects.equals(predicate, that.predicate); 47 return Objects.equals(predicate, that.predicate);
48 } 48 }
49 49
diff --git a/subprojects/store-query/src/main/java/tools/refinery/store/query/view/ForbiddenRelationView.java b/subprojects/store-query/src/main/java/tools/refinery/store/query/view/ForbiddenView.java
index c19d9282..26b717ee 100644
--- a/subprojects/store-query/src/main/java/tools/refinery/store/query/view/ForbiddenRelationView.java
+++ b/subprojects/store-query/src/main/java/tools/refinery/store/query/view/ForbiddenView.java
@@ -9,8 +9,8 @@ import tools.refinery.store.representation.Symbol;
9import tools.refinery.store.representation.TruthValue; 9import tools.refinery.store.representation.TruthValue;
10import tools.refinery.store.tuple.Tuple; 10import tools.refinery.store.tuple.Tuple;
11 11
12public class ForbiddenRelationView extends TuplePreservingRelationView<TruthValue> { 12public class ForbiddenView extends TuplePreservingView<TruthValue> {
13 public ForbiddenRelationView(Symbol<TruthValue> symbol) { 13 public ForbiddenView(Symbol<TruthValue> symbol) {
14 super(symbol, "forbidden"); 14 super(symbol, "forbidden");
15 } 15 }
16 16
diff --git a/subprojects/store-query/src/main/java/tools/refinery/store/query/view/KeyOnlyRelationView.java b/subprojects/store-query/src/main/java/tools/refinery/store/query/view/KeyOnlyView.java
index 9553a0cc..7e86f6e4 100644
--- a/subprojects/store-query/src/main/java/tools/refinery/store/query/view/KeyOnlyRelationView.java
+++ b/subprojects/store-query/src/main/java/tools/refinery/store/query/view/KeyOnlyView.java
@@ -10,12 +10,12 @@ import tools.refinery.store.tuple.Tuple;
10 10
11import java.util.Objects; 11import java.util.Objects;
12 12
13public final class KeyOnlyRelationView<T> extends TuplePreservingRelationView<T> { 13public final class KeyOnlyView<T> extends TuplePreservingView<T> {
14 public static final String VIEW_NAME = "key"; 14 public static final String VIEW_NAME = "key";
15 15
16 private final T defaultValue; 16 private final T defaultValue;
17 17
18 public KeyOnlyRelationView(Symbol<T> symbol) { 18 public KeyOnlyView(Symbol<T> symbol) {
19 super(symbol, VIEW_NAME); 19 super(symbol, VIEW_NAME);
20 defaultValue = symbol.defaultValue(); 20 defaultValue = symbol.defaultValue();
21 } 21 }
@@ -30,7 +30,7 @@ public final class KeyOnlyRelationView<T> extends TuplePreservingRelationView<T>
30 if (this == o) return true; 30 if (this == o) return true;
31 if (o == null || getClass() != o.getClass()) return false; 31 if (o == null || getClass() != o.getClass()) return false;
32 if (!super.equals(o)) return false; 32 if (!super.equals(o)) return false;
33 KeyOnlyRelationView<?> that = (KeyOnlyRelationView<?>) o; 33 KeyOnlyView<?> that = (KeyOnlyView<?>) o;
34 return Objects.equals(defaultValue, that.defaultValue); 34 return Objects.equals(defaultValue, that.defaultValue);
35 } 35 }
36 36
diff --git a/subprojects/store-query/src/main/java/tools/refinery/store/query/view/MayRelationView.java b/subprojects/store-query/src/main/java/tools/refinery/store/query/view/MayView.java
index 60325f35..e75a8171 100644
--- a/subprojects/store-query/src/main/java/tools/refinery/store/query/view/MayRelationView.java
+++ b/subprojects/store-query/src/main/java/tools/refinery/store/query/view/MayView.java
@@ -9,8 +9,8 @@ import tools.refinery.store.representation.Symbol;
9import tools.refinery.store.representation.TruthValue; 9import tools.refinery.store.representation.TruthValue;
10import tools.refinery.store.tuple.Tuple; 10import tools.refinery.store.tuple.Tuple;
11 11
12public class MayRelationView extends TuplePreservingRelationView<TruthValue> { 12public class MayView extends TuplePreservingView<TruthValue> {
13 public MayRelationView(Symbol<TruthValue> symbol) { 13 public MayView(Symbol<TruthValue> symbol) {
14 super(symbol, "may"); 14 super(symbol, "may");
15 } 15 }
16 16
diff --git a/subprojects/store-query/src/main/java/tools/refinery/store/query/view/MustRelationView.java b/subprojects/store-query/src/main/java/tools/refinery/store/query/view/MustView.java
index d7e7ae2e..a48f8045 100644
--- a/subprojects/store-query/src/main/java/tools/refinery/store/query/view/MustRelationView.java
+++ b/subprojects/store-query/src/main/java/tools/refinery/store/query/view/MustView.java
@@ -9,8 +9,8 @@ import tools.refinery.store.representation.Symbol;
9import tools.refinery.store.representation.TruthValue; 9import tools.refinery.store.representation.TruthValue;
10import tools.refinery.store.tuple.Tuple; 10import tools.refinery.store.tuple.Tuple;
11 11
12public class MustRelationView extends TuplePreservingRelationView<TruthValue> { 12public class MustView extends TuplePreservingView<TruthValue> {
13 public MustRelationView(Symbol<TruthValue> symbol) { 13 public MustView(Symbol<TruthValue> symbol) {
14 super(symbol, "must"); 14 super(symbol, "must");
15 } 15 }
16 16
diff --git a/subprojects/store-query/src/main/java/tools/refinery/store/query/view/RelationViewImplication.java b/subprojects/store-query/src/main/java/tools/refinery/store/query/view/RelationViewImplication.java
deleted file mode 100644
index c54cce2f..00000000
--- a/subprojects/store-query/src/main/java/tools/refinery/store/query/view/RelationViewImplication.java
+++ /dev/null
@@ -1,24 +0,0 @@
1/*
2 * SPDX-FileCopyrightText: 2021-2023 The Refinery Authors
3 *
4 * SPDX-License-Identifier: EPL-2.0
5 */
6package tools.refinery.store.query.view;
7
8import java.util.List;
9
10public record RelationViewImplication(AnyRelationView implyingRelationView, AnyRelationView impliedRelationView,
11 List<Integer> impliedIndices) {
12 public RelationViewImplication {
13 if (impliedIndices.size() != impliedRelationView.arity()) {
14 throw new IllegalArgumentException("Expected %d implied indices for %s, but %d are provided"
15 .formatted(impliedRelationView.arity(), impliedRelationView, impliedIndices.size()));
16 }
17 for (var index : impliedIndices) {
18 if (impliedRelationView.invalidIndex(index)) {
19 throw new IllegalArgumentException("%d is not a valid index for %s".formatted(index,
20 implyingRelationView));
21 }
22 }
23 }
24}
diff --git a/subprojects/store-query/src/main/java/tools/refinery/store/query/view/RelationView.java b/subprojects/store-query/src/main/java/tools/refinery/store/query/view/SymbolView.java
index fd4f47b4..267a99d3 100644
--- a/subprojects/store-query/src/main/java/tools/refinery/store/query/view/RelationView.java
+++ b/subprojects/store-query/src/main/java/tools/refinery/store/query/view/SymbolView.java
@@ -19,17 +19,17 @@ import java.util.UUID;
19 * @param <T> 19 * @param <T>
20 * @author Oszkar Semerath 20 * @author Oszkar Semerath
21 */ 21 */
22public abstract non-sealed class RelationView<T> implements AnyRelationView { 22public abstract non-sealed class SymbolView<T> implements AnySymbolView {
23 private final Symbol<T> symbol; 23 private final Symbol<T> symbol;
24 24
25 private final String viewName; 25 private final String viewName;
26 26
27 protected RelationView(Symbol<T> symbol, String viewName) { 27 protected SymbolView(Symbol<T> symbol, String viewName) {
28 this.symbol = symbol; 28 this.symbol = symbol;
29 this.viewName = viewName; 29 this.viewName = viewName;
30 } 30 }
31 31
32 protected RelationView(Symbol<T> representation) { 32 protected SymbolView(Symbol<T> representation) {
33 this(representation, UUID.randomUUID().toString()); 33 this(representation, UUID.randomUUID().toString());
34 } 34 }
35 35
@@ -71,7 +71,7 @@ public abstract non-sealed class RelationView<T> implements AnyRelationView {
71 public boolean equals(Object o) { 71 public boolean equals(Object o) {
72 if (this == o) return true; 72 if (this == o) return true;
73 if (o == null || getClass() != o.getClass()) return false; 73 if (o == null || getClass() != o.getClass()) return false;
74 RelationView<?> that = (RelationView<?>) o; 74 SymbolView<?> that = (SymbolView<?>) o;
75 return Objects.equals(symbol, that.symbol) && Objects.equals(viewName, that.viewName); 75 return Objects.equals(symbol, that.symbol) && Objects.equals(viewName, that.viewName);
76 } 76 }
77 77
diff --git a/subprojects/store-query/src/main/java/tools/refinery/store/query/view/TuplePreservingRelationView.java b/subprojects/store-query/src/main/java/tools/refinery/store/query/view/TuplePreservingView.java
index e6e54aa1..19862e3a 100644
--- a/subprojects/store-query/src/main/java/tools/refinery/store/query/view/TuplePreservingRelationView.java
+++ b/subprojects/store-query/src/main/java/tools/refinery/store/query/view/TuplePreservingView.java
@@ -15,12 +15,12 @@ import tools.refinery.store.representation.Symbol;
15import java.util.Arrays; 15import java.util.Arrays;
16import java.util.List; 16import java.util.List;
17 17
18public abstract class TuplePreservingRelationView<T> extends RelationView<T> { 18public abstract class TuplePreservingView<T> extends SymbolView<T> {
19 protected TuplePreservingRelationView(Symbol<T> symbol, String name) { 19 protected TuplePreservingView(Symbol<T> symbol, String name) {
20 super(symbol, name); 20 super(symbol, name);
21 } 21 }
22 22
23 protected TuplePreservingRelationView(Symbol<T> symbol) { 23 protected TuplePreservingView(Symbol<T> symbol) {
24 super(symbol); 24 super(symbol);
25 } 25 }
26 26
@@ -41,7 +41,10 @@ public abstract class TuplePreservingRelationView<T> extends RelationView<T> {
41 public boolean get(Model model, Object[] tuple) { 41 public boolean get(Model model, Object[] tuple) {
42 int[] content = new int[tuple.length]; 42 int[] content = new int[tuple.length];
43 for (int i = 0; i < tuple.length; i++) { 43 for (int i = 0; i < tuple.length; i++) {
44 content[i] = ((Tuple1) tuple[i]).value0(); 44 if (!(tuple[i] instanceof Tuple1 wrapper)) {
45 return false;
46 }
47 content[i] = wrapper.value0();
45 } 48 }
46 Tuple key = Tuple.of(content); 49 Tuple key = Tuple.of(content);
47 T value = model.getInterpretation(getSymbol()).get(key); 50 T value = model.getInterpretation(getSymbol()).get(key);
diff --git a/subprojects/store-query/src/test/java/tools/refinery/store/query/DnfBuilderTest.java b/subprojects/store-query/src/test/java/tools/refinery/store/query/DnfBuilderTest.java
index 70cd386b..152840f8 100644
--- a/subprojects/store-query/src/test/java/tools/refinery/store/query/DnfBuilderTest.java
+++ b/subprojects/store-query/src/test/java/tools/refinery/store/query/DnfBuilderTest.java
@@ -9,7 +9,7 @@ import org.junit.jupiter.api.Test;
9import tools.refinery.store.query.dnf.Dnf; 9import tools.refinery.store.query.dnf.Dnf;
10import tools.refinery.store.query.literal.BooleanLiteral; 10import tools.refinery.store.query.literal.BooleanLiteral;
11import tools.refinery.store.query.term.Variable; 11import tools.refinery.store.query.term.Variable;
12import tools.refinery.store.query.view.KeyOnlyRelationView; 12import tools.refinery.store.query.view.KeyOnlyView;
13import tools.refinery.store.representation.Symbol; 13import tools.refinery.store.representation.Symbol;
14 14
15import static org.hamcrest.MatcherAssert.assertThat; 15import static org.hamcrest.MatcherAssert.assertThat;
@@ -22,7 +22,7 @@ class DnfBuilderTest {
22 var p = Variable.of("p"); 22 var p = Variable.of("p");
23 var q = Variable.of("q"); 23 var q = Variable.of("q");
24 var friend = new Symbol<>("friend", 2, Boolean.class, false); 24 var friend = new Symbol<>("friend", 2, Boolean.class, false);
25 var friendView = new KeyOnlyRelationView<>(friend); 25 var friendView = new KeyOnlyView<>(friend);
26 26
27 var actual = Dnf.builder() 27 var actual = Dnf.builder()
28 .parameters(p, q) 28 .parameters(p, q)
@@ -38,7 +38,7 @@ class DnfBuilderTest {
38 var p = Variable.of("p"); 38 var p = Variable.of("p");
39 var q = Variable.of("q"); 39 var q = Variable.of("q");
40 var friend = new Symbol<>("friend", 2, Boolean.class, false); 40 var friend = new Symbol<>("friend", 2, Boolean.class, false);
41 var friendView = new KeyOnlyRelationView<>(friend); 41 var friendView = new KeyOnlyView<>(friend);
42 42
43 var actual = Dnf.builder() 43 var actual = Dnf.builder()
44 .parameters(p, q) 44 .parameters(p, q)
@@ -55,7 +55,7 @@ class DnfBuilderTest {
55 var p = Variable.of("p"); 55 var p = Variable.of("p");
56 var q = Variable.of("q"); 56 var q = Variable.of("q");
57 var friend = new Symbol<>("friend", 2, Boolean.class, false); 57 var friend = new Symbol<>("friend", 2, Boolean.class, false);
58 var friendView = new KeyOnlyRelationView<>(friend); 58 var friendView = new KeyOnlyView<>(friend);
59 59
60 var actual = Dnf.builder() 60 var actual = Dnf.builder()
61 .parameters(p, q) 61 .parameters(p, q)
@@ -72,7 +72,7 @@ class DnfBuilderTest {
72 var p = Variable.of("p"); 72 var p = Variable.of("p");
73 var q = Variable.of("q"); 73 var q = Variable.of("q");
74 var friend = new Symbol<>("friend", 2, Boolean.class, false); 74 var friend = new Symbol<>("friend", 2, Boolean.class, false);
75 var friendView = new KeyOnlyRelationView<>(friend); 75 var friendView = new KeyOnlyView<>(friend);
76 76
77 var actual = Dnf.builder() 77 var actual = Dnf.builder()
78 .parameters(p, q) 78 .parameters(p, q)
@@ -88,7 +88,7 @@ class DnfBuilderTest {
88 var p = Variable.of("p"); 88 var p = Variable.of("p");
89 var q = Variable.of("q"); 89 var q = Variable.of("q");
90 var friend = new Symbol<>("friend", 2, Boolean.class, false); 90 var friend = new Symbol<>("friend", 2, Boolean.class, false);
91 var friendView = new KeyOnlyRelationView<>(friend); 91 var friendView = new KeyOnlyView<>(friend);
92 var trueDnf = Dnf.builder().parameter(p).clause().build(); 92 var trueDnf = Dnf.builder().parameter(p).clause().build();
93 93
94 var actual = Dnf.builder() 94 var actual = Dnf.builder()
@@ -105,7 +105,7 @@ class DnfBuilderTest {
105 var p = Variable.of("p"); 105 var p = Variable.of("p");
106 var q = Variable.of("q"); 106 var q = Variable.of("q");
107 var friend = new Symbol<>("friend", 2, Boolean.class, false); 107 var friend = new Symbol<>("friend", 2, Boolean.class, false);
108 var friendView = new KeyOnlyRelationView<>(friend); 108 var friendView = new KeyOnlyView<>(friend);
109 var falseDnf = Dnf.builder().parameter(p).build(); 109 var falseDnf = Dnf.builder().parameter(p).build();
110 110
111 var actual = Dnf.builder() 111 var actual = Dnf.builder()
@@ -123,7 +123,7 @@ class DnfBuilderTest {
123 var p = Variable.of("p"); 123 var p = Variable.of("p");
124 var q = Variable.of("q"); 124 var q = Variable.of("q");
125 var friend = new Symbol<>("friend", 2, Boolean.class, false); 125 var friend = new Symbol<>("friend", 2, Boolean.class, false);
126 var friendView = new KeyOnlyRelationView<>(friend); 126 var friendView = new KeyOnlyView<>(friend);
127 var trueDnf = Dnf.builder().parameter(p).clause().build(); 127 var trueDnf = Dnf.builder().parameter(p).clause().build();
128 128
129 var actual = Dnf.builder() 129 var actual = Dnf.builder()
@@ -141,7 +141,7 @@ class DnfBuilderTest {
141 var p = Variable.of("p"); 141 var p = Variable.of("p");
142 var q = Variable.of("q"); 142 var q = Variable.of("q");
143 var friend = new Symbol<>("friend", 2, Boolean.class, false); 143 var friend = new Symbol<>("friend", 2, Boolean.class, false);
144 var friendView = new KeyOnlyRelationView<>(friend); 144 var friendView = new KeyOnlyView<>(friend);
145 var falseDnf = Dnf.builder().parameter(p).build(); 145 var falseDnf = Dnf.builder().parameter(p).build();
146 146
147 var actual = Dnf.builder() 147 var actual = Dnf.builder()
@@ -158,7 +158,7 @@ class DnfBuilderTest {
158 var p = Variable.of("p"); 158 var p = Variable.of("p");
159 var q = Variable.of("q"); 159 var q = Variable.of("q");
160 var friend = new Symbol<>("friend", 2, Boolean.class, false); 160 var friend = new Symbol<>("friend", 2, Boolean.class, false);
161 var friendView = new KeyOnlyRelationView<>(friend); 161 var friendView = new KeyOnlyView<>(friend);
162 var falseDnf = Dnf.builder().parameter(p).build(); 162 var falseDnf = Dnf.builder().parameter(p).build();
163 163
164 var actual = Dnf.builder() 164 var actual = Dnf.builder()
@@ -175,7 +175,7 @@ class DnfBuilderTest {
175 var p = Variable.of("p"); 175 var p = Variable.of("p");
176 var q = Variable.of("q"); 176 var q = Variable.of("q");
177 var friend = new Symbol<>("friend", 2, Boolean.class, false); 177 var friend = new Symbol<>("friend", 2, Boolean.class, false);
178 var friendView = new KeyOnlyRelationView<>(friend); 178 var friendView = new KeyOnlyView<>(friend);
179 var trueDnf = Dnf.builder().parameter(p).clause().build(); 179 var trueDnf = Dnf.builder().parameter(p).clause().build();
180 180
181 var actual = Dnf.builder() 181 var actual = Dnf.builder()
@@ -193,7 +193,7 @@ class DnfBuilderTest {
193 var p = Variable.of("p"); 193 var p = Variable.of("p");
194 var q = Variable.of("q"); 194 var q = Variable.of("q");
195 var friend = new Symbol<>("friend", 2, Boolean.class, false); 195 var friend = new Symbol<>("friend", 2, Boolean.class, false);
196 var friendView = new KeyOnlyRelationView<>(friend); 196 var friendView = new KeyOnlyView<>(friend);
197 var falseDnf = Dnf.builder().parameter(p).build(); 197 var falseDnf = Dnf.builder().parameter(p).build();
198 198
199 var actual = Dnf.builder() 199 var actual = Dnf.builder()
@@ -211,7 +211,7 @@ class DnfBuilderTest {
211 var p = Variable.of("p"); 211 var p = Variable.of("p");
212 var q = Variable.of("q"); 212 var q = Variable.of("q");
213 var friend = new Symbol<>("friend", 2, Boolean.class, false); 213 var friend = new Symbol<>("friend", 2, Boolean.class, false);
214 var friendView = new KeyOnlyRelationView<>(friend); 214 var friendView = new KeyOnlyView<>(friend);
215 var trueDnf = Dnf.builder().parameter(p).clause().build(); 215 var trueDnf = Dnf.builder().parameter(p).clause().build();
216 216
217 var actual = Dnf.builder() 217 var actual = Dnf.builder()
diff --git a/subprojects/store-query/src/test/java/tools/refinery/store/query/DnfToDefinitionStringTest.java b/subprojects/store-query/src/test/java/tools/refinery/store/query/DnfToDefinitionStringTest.java
index 7be57745..e89ab682 100644
--- a/subprojects/store-query/src/test/java/tools/refinery/store/query/DnfToDefinitionStringTest.java
+++ b/subprojects/store-query/src/test/java/tools/refinery/store/query/DnfToDefinitionStringTest.java
@@ -8,7 +8,7 @@ package tools.refinery.store.query;
8import org.junit.jupiter.api.Test; 8import org.junit.jupiter.api.Test;
9import tools.refinery.store.query.dnf.Dnf; 9import tools.refinery.store.query.dnf.Dnf;
10import tools.refinery.store.query.term.Variable; 10import tools.refinery.store.query.term.Variable;
11import tools.refinery.store.query.view.KeyOnlyRelationView; 11import tools.refinery.store.query.view.KeyOnlyView;
12import tools.refinery.store.representation.Symbol; 12import tools.refinery.store.representation.Symbol;
13 13
14import static org.hamcrest.MatcherAssert.assertThat; 14import static org.hamcrest.MatcherAssert.assertThat;
@@ -53,7 +53,7 @@ class DnfToDefinitionStringTest {
53 var p = Variable.of("p"); 53 var p = Variable.of("p");
54 var q = Variable.of("q"); 54 var q = Variable.of("q");
55 var friend = new Symbol<>("friend", 2, Boolean.class, false); 55 var friend = new Symbol<>("friend", 2, Boolean.class, false);
56 var friendView = new KeyOnlyRelationView<>(friend); 56 var friendView = new KeyOnlyView<>(friend);
57 var dnf = Dnf.builder("Example").parameter(p).clause(friendView.call(p, q)).build(); 57 var dnf = Dnf.builder("Example").parameter(p).clause(friendView.call(p, q)).build();
58 58
59 assertThat(dnf.toDefinitionString(), is(""" 59 assertThat(dnf.toDefinitionString(), is("""
@@ -67,7 +67,7 @@ class DnfToDefinitionStringTest {
67 var p = Variable.of("p"); 67 var p = Variable.of("p");
68 var q = Variable.of("q"); 68 var q = Variable.of("q");
69 var friend = new Symbol<>("friend", 2, Boolean.class, false); 69 var friend = new Symbol<>("friend", 2, Boolean.class, false);
70 var friendView = new KeyOnlyRelationView<>(friend); 70 var friendView = new KeyOnlyView<>(friend);
71 var dnf = Dnf.builder("Example").parameter(p).clause(not(friendView.call(p, q))).build(); 71 var dnf = Dnf.builder("Example").parameter(p).clause(not(friendView.call(p, q))).build();
72 72
73 assertThat(dnf.toDefinitionString(), is(""" 73 assertThat(dnf.toDefinitionString(), is("""
@@ -81,7 +81,7 @@ class DnfToDefinitionStringTest {
81 var p = Variable.of("p"); 81 var p = Variable.of("p");
82 var q = Variable.of("q"); 82 var q = Variable.of("q");
83 var friend = new Symbol<>("friend", 2, Boolean.class, false); 83 var friend = new Symbol<>("friend", 2, Boolean.class, false);
84 var friendView = new KeyOnlyRelationView<>(friend); 84 var friendView = new KeyOnlyView<>(friend);
85 var dnf = Dnf.builder("Example").parameter(p).clause(friendView.callTransitive(p, q)).build(); 85 var dnf = Dnf.builder("Example").parameter(p).clause(friendView.callTransitive(p, q)).build();
86 86
87 assertThat(dnf.toDefinitionString(), is(""" 87 assertThat(dnf.toDefinitionString(), is("""
@@ -95,7 +95,7 @@ class DnfToDefinitionStringTest {
95 var p = Variable.of("p"); 95 var p = Variable.of("p");
96 var q = Variable.of("q"); 96 var q = Variable.of("q");
97 var friend = new Symbol<>("friend", 2, Boolean.class, false); 97 var friend = new Symbol<>("friend", 2, Boolean.class, false);
98 var friendView = new KeyOnlyRelationView<>(friend); 98 var friendView = new KeyOnlyView<>(friend);
99 var dnf = Dnf.builder("Example").parameters(p, q).clause(friendView.call(p, q)).build(); 99 var dnf = Dnf.builder("Example").parameters(p, q).clause(friendView.call(p, q)).build();
100 100
101 assertThat(dnf.toDefinitionString(), is(""" 101 assertThat(dnf.toDefinitionString(), is("""
@@ -109,9 +109,9 @@ class DnfToDefinitionStringTest {
109 var p = Variable.of("p"); 109 var p = Variable.of("p");
110 var q = Variable.of("q"); 110 var q = Variable.of("q");
111 var person = new Symbol<>("person", 1, Boolean.class, false); 111 var person = new Symbol<>("person", 1, Boolean.class, false);
112 var personView = new KeyOnlyRelationView<>(person); 112 var personView = new KeyOnlyView<>(person);
113 var friend = new Symbol<>("friend", 2, Boolean.class, false); 113 var friend = new Symbol<>("friend", 2, Boolean.class, false);
114 var friendView = new KeyOnlyRelationView<>(friend); 114 var friendView = new KeyOnlyView<>(friend);
115 var dnf = Dnf.builder("Example") 115 var dnf = Dnf.builder("Example")
116 .parameter(p) 116 .parameter(p)
117 .clause( 117 .clause(
@@ -134,7 +134,7 @@ class DnfToDefinitionStringTest {
134 var p = Variable.of("p"); 134 var p = Variable.of("p");
135 var q = Variable.of("q"); 135 var q = Variable.of("q");
136 var friend = new Symbol<>("friend", 2, Boolean.class, false); 136 var friend = new Symbol<>("friend", 2, Boolean.class, false);
137 var friendView = new KeyOnlyRelationView<>(friend); 137 var friendView = new KeyOnlyView<>(friend);
138 var dnf = Dnf.builder("Example") 138 var dnf = Dnf.builder("Example")
139 .parameter(p) 139 .parameter(p)
140 .clause(friendView.call(p, q)) 140 .clause(friendView.call(p, q))
@@ -156,9 +156,9 @@ class DnfToDefinitionStringTest {
156 var r = Variable.of("r"); 156 var r = Variable.of("r");
157 var s = Variable.of("s"); 157 var s = Variable.of("s");
158 var person = new Symbol<>("person", 1, Boolean.class, false); 158 var person = new Symbol<>("person", 1, Boolean.class, false);
159 var personView = new KeyOnlyRelationView<>(person); 159 var personView = new KeyOnlyView<>(person);
160 var friend = new Symbol<>("friend", 2, Boolean.class, false); 160 var friend = new Symbol<>("friend", 2, Boolean.class, false);
161 var friendView = new KeyOnlyRelationView<>(friend); 161 var friendView = new KeyOnlyView<>(friend);
162 var called = Dnf.builder("Called").parameters(r, s).clause(friendView.call(r, s)).build(); 162 var called = Dnf.builder("Called").parameters(r, s).clause(friendView.call(r, s)).build();
163 var dnf = Dnf.builder("Example") 163 var dnf = Dnf.builder("Example")
164 .parameter(p) 164 .parameter(p)
diff --git a/subprojects/store-query/src/test/java/tools/refinery/store/query/tests/StructurallyEqualToTest.java b/subprojects/store-query/src/test/java/tools/refinery/store/query/tests/StructurallyEqualToTest.java
index e292b3ab..a1407288 100644
--- a/subprojects/store-query/src/test/java/tools/refinery/store/query/tests/StructurallyEqualToTest.java
+++ b/subprojects/store-query/src/test/java/tools/refinery/store/query/tests/StructurallyEqualToTest.java
@@ -8,7 +8,7 @@ package tools.refinery.store.query.tests;
8import org.junit.jupiter.api.Test; 8import org.junit.jupiter.api.Test;
9import tools.refinery.store.query.dnf.Dnf; 9import tools.refinery.store.query.dnf.Dnf;
10import tools.refinery.store.query.term.Variable; 10import tools.refinery.store.query.term.Variable;
11import tools.refinery.store.query.view.KeyOnlyRelationView; 11import tools.refinery.store.query.view.KeyOnlyView;
12import tools.refinery.store.representation.Symbol; 12import tools.refinery.store.representation.Symbol;
13 13
14import static org.hamcrest.CoreMatchers.containsString; 14import static org.hamcrest.CoreMatchers.containsString;
@@ -22,7 +22,7 @@ class StructurallyEqualToTest {
22 var p = Variable.of("p"); 22 var p = Variable.of("p");
23 var q = Variable.of("q"); 23 var q = Variable.of("q");
24 var person = new Symbol<>("Person", 1, Boolean.class, false); 24 var person = new Symbol<>("Person", 1, Boolean.class, false);
25 var personView = new KeyOnlyRelationView<>(person); 25 var personView = new KeyOnlyView<>(person);
26 26
27 var expected = Dnf.builder("Expected").parameters(q).clause(personView.call(q)).build(); 27 var expected = Dnf.builder("Expected").parameters(q).clause(personView.call(q)).build();
28 var actual = Dnf.builder("Actual").parameters(p).clause(personView.call(p)).build(); 28 var actual = Dnf.builder("Actual").parameters(p).clause(personView.call(p)).build();
@@ -35,7 +35,7 @@ class StructurallyEqualToTest {
35 var p = Variable.of("p"); 35 var p = Variable.of("p");
36 var q = Variable.of("q"); 36 var q = Variable.of("q");
37 var person = new Symbol<>("Person", 1, Boolean.class, false); 37 var person = new Symbol<>("Person", 1, Boolean.class, false);
38 var personView = new KeyOnlyRelationView<>(person); 38 var personView = new KeyOnlyView<>(person);
39 39
40 var expected = Dnf.builder("Expected").parameters(q).clause(personView.call(q)).build(); 40 var expected = Dnf.builder("Expected").parameters(q).clause(personView.call(q)).build();
41 var actual = Dnf.builder("Actual").parameters(p).clause(personView.call(q)).build(); 41 var actual = Dnf.builder("Actual").parameters(p).clause(personView.call(q)).build();
@@ -49,7 +49,7 @@ class StructurallyEqualToTest {
49 var p = Variable.of("p"); 49 var p = Variable.of("p");
50 var q = Variable.of("q"); 50 var q = Variable.of("q");
51 var person = new Symbol<>("Person", 1, Boolean.class, false); 51 var person = new Symbol<>("Person", 1, Boolean.class, false);
52 var personView = new KeyOnlyRelationView<>(person); 52 var personView = new KeyOnlyView<>(person);
53 53
54 var expected = Dnf.builder("Expected").parameters(q).clause( 54 var expected = Dnf.builder("Expected").parameters(q).clause(
55 Dnf.builder("Expected2").parameters(p).clause(personView.call(p)).build().call(q) 55 Dnf.builder("Expected2").parameters(p).clause(personView.call(p)).build().call(q)
@@ -66,7 +66,7 @@ class StructurallyEqualToTest {
66 var p = Variable.of("p"); 66 var p = Variable.of("p");
67 var q = Variable.of("q"); 67 var q = Variable.of("q");
68 var person = new Symbol<>("Person", 1, Boolean.class, false); 68 var person = new Symbol<>("Person", 1, Boolean.class, false);
69 var personView = new KeyOnlyRelationView<>(person); 69 var personView = new KeyOnlyView<>(person);
70 70
71 var expected = Dnf.builder("Expected").parameters(q).clause( 71 var expected = Dnf.builder("Expected").parameters(q).clause(
72 Dnf.builder("Expected2").parameters(p).clause(personView.call(p)).build().call(q) 72 Dnf.builder("Expected2").parameters(p).clause(personView.call(p)).build().call(q)
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 aea0a4b9..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
@@ -6,13 +6,13 @@
6package tools.refinery.store.reasoning.translator.typehierarchy; 6package tools.refinery.store.reasoning.translator.typehierarchy;
7 7
8import tools.refinery.store.reasoning.representation.PartialRelation; 8import tools.refinery.store.reasoning.representation.PartialRelation;
9import tools.refinery.store.query.view.TuplePreservingRelationView; 9import tools.refinery.store.query.view.TuplePreservingView;
10import tools.refinery.store.tuple.Tuple; 10import tools.refinery.store.tuple.Tuple;
11 11
12class InferredMayTypeRelationView extends TuplePreservingRelationView<InferredType> { 12class InferredMayTypeView extends TuplePreservingView<InferredType> {
13 private final PartialRelation type; 13 private final PartialRelation type;
14 14
15 InferredMayTypeRelationView(PartialRelation type) { 15 InferredMayTypeView(PartialRelation type) {
16 super(TypeHierarchyTranslationUnit.INFERRED_TYPE_SYMBOL, "%s#may".formatted(type)); 16 super(TypeHierarchyTranslationUnit.INFERRED_TYPE_SYMBOL, "%s#may".formatted(type));
17 this.type = type; 17 this.type = type;
18 } 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 6c995e3a..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
@@ -6,13 +6,13 @@
6package tools.refinery.store.reasoning.translator.typehierarchy; 6package tools.refinery.store.reasoning.translator.typehierarchy;
7 7
8import tools.refinery.store.reasoning.representation.PartialRelation; 8import tools.refinery.store.reasoning.representation.PartialRelation;
9import tools.refinery.store.query.view.TuplePreservingRelationView; 9import tools.refinery.store.query.view.TuplePreservingView;
10import tools.refinery.store.tuple.Tuple; 10import tools.refinery.store.tuple.Tuple;
11 11
12class InferredMustTypeRelationView extends TuplePreservingRelationView<InferredType> { 12class InferredMustTypeView extends TuplePreservingView<InferredType> {
13 private final PartialRelation type; 13 private final PartialRelation type;
14 14
15 InferredMustTypeRelationView(PartialRelation type) { 15 InferredMustTypeView(PartialRelation type) {
16 super(TypeHierarchyTranslationUnit.INFERRED_TYPE_SYMBOL, "%s#must".formatted(type)); 16 super(TypeHierarchyTranslationUnit.INFERRED_TYPE_SYMBOL, "%s#must".formatted(type));
17 this.type = type; 17 this.type = type;
18 } 18 }