diff options
author | Kristóf Marussy <marussy@mit.bme.hu> | 2023-09-14 19:29:36 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-09-14 19:29:36 +0200 |
commit | 98ed3b6db5f4e51961a161050cc31c66015116e8 (patch) | |
tree | 8bfd6d9bc8d6ed23b9eb0f889dd40b6c24fe8f92 /subprojects/store-query/src/main/java/tools/refinery/store/query/equality/SubstitutingLiteralEqualityHelper.java | |
parent | Merge pull request #38 from nagilooh/design-space-exploration (diff) | |
parent | Merge remote-tracking branch 'upstream/main' into partial-interpretation (diff) | |
download | refinery-98ed3b6db5f4e51961a161050cc31c66015116e8.tar.gz refinery-98ed3b6db5f4e51961a161050cc31c66015116e8.tar.zst refinery-98ed3b6db5f4e51961a161050cc31c66015116e8.zip |
Merge pull request #39 from kris7t/partial-interpretation
Implement partial interpretation based model generation
Diffstat (limited to 'subprojects/store-query/src/main/java/tools/refinery/store/query/equality/SubstitutingLiteralEqualityHelper.java')
-rw-r--r-- | subprojects/store-query/src/main/java/tools/refinery/store/query/equality/SubstitutingLiteralEqualityHelper.java | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/subprojects/store-query/src/main/java/tools/refinery/store/query/equality/SubstitutingLiteralEqualityHelper.java b/subprojects/store-query/src/main/java/tools/refinery/store/query/equality/SubstitutingLiteralEqualityHelper.java new file mode 100644 index 00000000..50a79e07 --- /dev/null +++ b/subprojects/store-query/src/main/java/tools/refinery/store/query/equality/SubstitutingLiteralEqualityHelper.java | |||
@@ -0,0 +1,59 @@ | |||
1 | /* | ||
2 | * SPDX-FileCopyrightText: 2023 The Refinery Authors <https://refinery.tools/> | ||
3 | * | ||
4 | * SPDX-License-Identifier: EPL-2.0 | ||
5 | */ | ||
6 | package tools.refinery.store.query.equality; | ||
7 | |||
8 | import tools.refinery.store.query.dnf.Dnf; | ||
9 | import tools.refinery.store.query.dnf.SymbolicParameter; | ||
10 | import tools.refinery.store.query.term.Variable; | ||
11 | |||
12 | import java.util.HashMap; | ||
13 | import java.util.List; | ||
14 | import java.util.Map; | ||
15 | |||
16 | public class SubstitutingLiteralEqualityHelper implements LiteralEqualityHelper { | ||
17 | private final DnfEqualityChecker dnfEqualityChecker; | ||
18 | private final Map<Variable, Variable> leftToRight; | ||
19 | private final Map<Variable, Variable> rightToLeft; | ||
20 | |||
21 | public SubstitutingLiteralEqualityHelper(DnfEqualityChecker dnfEqualityChecker, | ||
22 | List<SymbolicParameter> leftParameters, | ||
23 | List<SymbolicParameter> rightParameters) { | ||
24 | this.dnfEqualityChecker = dnfEqualityChecker; | ||
25 | var arity = leftParameters.size(); | ||
26 | if (arity != rightParameters.size()) { | ||
27 | throw new IllegalArgumentException("Parameter lists have unequal length"); | ||
28 | } | ||
29 | leftToRight = new HashMap<>(arity); | ||
30 | rightToLeft = new HashMap<>(arity); | ||
31 | for (int i = 0; i < arity; i++) { | ||
32 | if (!variableEqual(leftParameters.get(i).getVariable(), rightParameters.get(i).getVariable())) { | ||
33 | throw new IllegalArgumentException("Parameter lists cannot be unified: duplicate parameter " + i); | ||
34 | } | ||
35 | } | ||
36 | } | ||
37 | |||
38 | @Override | ||
39 | public boolean dnfEqual(Dnf left, Dnf right) { | ||
40 | return dnfEqualityChecker.dnfEqual(left, right); | ||
41 | } | ||
42 | |||
43 | @Override | ||
44 | public boolean variableEqual(Variable left, Variable right) { | ||
45 | if (left.tryGetType().equals(right.tryGetType()) && | ||
46 | checkMapping(leftToRight, left, right) && | ||
47 | checkMapping(rightToLeft, right, left)) { | ||
48 | leftToRight.put(left, right); | ||
49 | rightToLeft.put(right, left); | ||
50 | return true; | ||
51 | } | ||
52 | return false; | ||
53 | } | ||
54 | |||
55 | private static boolean checkMapping(Map<Variable, Variable> map, Variable key, Variable expectedValue) { | ||
56 | var currentValue = map.get(key); | ||
57 | return currentValue == null || currentValue.equals(expectedValue); | ||
58 | } | ||
59 | } | ||