From 2fdbe809530817d49b0fa08066343cd2f13f52ff Mon Sep 17 00:00:00 2001 From: Kristóf Marussy Date: Sun, 27 Aug 2023 02:59:19 +0200 Subject: refactor: disable contains refinement Providing an efficient refinement calculus would be too difficult at this point, and contains is much more useful as a constraint in predicates that as an assertions anyway. --- .../ContainmentHierarchyTranslator.java | 4 +- .../translator/containment/ContainsRefiner.java | 70 ---------------------- 2 files changed, 1 insertion(+), 73 deletions(-) delete mode 100644 subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/containment/ContainsRefiner.java diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/containment/ContainmentHierarchyTranslator.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/containment/ContainmentHierarchyTranslator.java index eb112d0e..37eac022 100644 --- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/containment/ContainmentHierarchyTranslator.java +++ b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/containment/ContainmentHierarchyTranslator.java @@ -209,9 +209,7 @@ public class ContainmentHierarchyTranslator implements ModelStoreConfiguration { })) .must(Query.of(mustName, (builder, parent, child) -> builder.clause( new MustContainsView(containsStorage).call(parent, child) - ))) - .refiner(ContainsRefiner.of(containsStorage)) - .initializer(new RefinementBasedInitializer<>(CONTAINS_SYMBOL))); + )))); } private void translateInvalidNumberOfContainers(ModelStoreBuilder storeBuilder) { diff --git a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/containment/ContainsRefiner.java b/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/containment/ContainsRefiner.java deleted file mode 100644 index b57ca095..00000000 --- a/subprojects/store-reasoning/src/main/java/tools/refinery/store/reasoning/translator/containment/ContainsRefiner.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2023 The Refinery Authors - * - * SPDX-License-Identifier: EPL-2.0 - */ -package tools.refinery.store.reasoning.translator.containment; - -import tools.refinery.store.model.Interpretation; -import tools.refinery.store.reasoning.ReasoningAdapter; -import tools.refinery.store.reasoning.refinement.AbstractPartialInterpretationRefiner; -import tools.refinery.store.reasoning.refinement.PartialInterpretationRefiner; -import tools.refinery.store.reasoning.representation.PartialSymbol; -import tools.refinery.store.representation.Symbol; -import tools.refinery.store.representation.TruthValue; -import tools.refinery.store.tuple.Tuple; - -import java.util.Set; - -class ContainsRefiner extends AbstractPartialInterpretationRefiner { - private static final InferredContainment CONTAINS_TRUE = new InferredContainment(TruthValue.TRUE, Set.of(), - Set.of()); - private static final InferredContainment CONTAINS_FALSE = new InferredContainment(TruthValue.FALSE, Set.of(), - Set.of()); - private static final InferredContainment CONTAINS_ERROR = new InferredContainment(TruthValue.ERROR, Set.of(), - Set.of()); - - private final PartialInterpretationRefiner containedRefiner; - private final Interpretation interpretation; - - public ContainsRefiner(ReasoningAdapter adapter, PartialSymbol partialSymbol, - Symbol symbol) { - super(adapter, partialSymbol); - containedRefiner = adapter.getRefiner(ContainmentHierarchyTranslator.CONTAINED_SYMBOL); - interpretation = adapter.getModel().getInterpretation(symbol); - } - - @Override - public boolean merge(Tuple key, TruthValue value) { - var oldValue = interpretation.get(key); - var newValue = mergeContains(oldValue, value); - if (oldValue != newValue) { - interpretation.put(key, newValue); - } - if (value.must()) { - return containedRefiner.merge(Tuple.of(key.get(1)), TruthValue.TRUE); - } - return true; - } - - public InferredContainment mergeContains(InferredContainment oldValue, TruthValue toMerge) { - var oldContains = oldValue.contains(); - var newContains = oldContains.merge(toMerge); - if (newContains == oldContains) { - return oldValue; - } - if (oldValue.mustLinks().isEmpty() && oldValue.forbiddenLinks().isEmpty()) { - return switch (toMerge) { - case UNKNOWN -> oldValue; - case TRUE -> oldContains.may() ? CONTAINS_TRUE : CONTAINS_ERROR; - case FALSE -> oldContains.must() ? CONTAINS_ERROR : CONTAINS_FALSE; - case ERROR -> CONTAINS_ERROR; - }; - } - return new InferredContainment(newContains, oldValue.mustLinks(), oldValue.forbiddenLinks()); - } - - public static Factory of(Symbol symbol) { - return (adapter, partialSymbol) -> new ContainsRefiner(adapter, partialSymbol, symbol); - } -} -- cgit v1.2.3-54-g00ecf