aboutsummaryrefslogtreecommitdiffstats
path: root/subprojects
diff options
context:
space:
mode:
authorLibravatar Kristóf Marussy <kristof@marussy.com>2024-06-17 01:41:26 +0200
committerLibravatar Kristóf Marussy <kristof@marussy.com>2024-06-17 01:41:26 +0200
commitfca741703a6374a564463ce7b8d7cdd4f2764b02 (patch)
treeb18352429b332a79d38ab13ff7bcbb7d8affdb50 /subprojects
parentfeat(language): warn about partial references (diff)
downloadrefinery-fca741703a6374a564463ce7b8d7cdd4f2764b02.tar.gz
refinery-fca741703a6374a564463ce7b8d7cdd4f2764b02.tar.zst
refinery-fca741703a6374a564463ce7b8d7cdd4f2764b02.zip
fix: allow predicates in rule actions
We must mark any predicate definition in a rule action as mutable so that we can collect assertions created by rules during model generation.
Diffstat (limited to 'subprojects')
-rw-r--r--subprojects/language-semantics/src/main/java/tools/refinery/language/semantics/ModelInitializer.java15
1 files changed, 14 insertions, 1 deletions
diff --git a/subprojects/language-semantics/src/main/java/tools/refinery/language/semantics/ModelInitializer.java b/subprojects/language-semantics/src/main/java/tools/refinery/language/semantics/ModelInitializer.java
index c9e7dea3..10138c2f 100644
--- a/subprojects/language-semantics/src/main/java/tools/refinery/language/semantics/ModelInitializer.java
+++ b/subprojects/language-semantics/src/main/java/tools/refinery/language/semantics/ModelInitializer.java
@@ -14,6 +14,7 @@ import tools.refinery.language.scoping.imports.ImportCollector;
14import tools.refinery.language.semantics.internal.MutableSeed; 14import tools.refinery.language.semantics.internal.MutableSeed;
15import tools.refinery.language.utils.BuiltinSymbols; 15import tools.refinery.language.utils.BuiltinSymbols;
16import tools.refinery.language.utils.ProblemUtil; 16import tools.refinery.language.utils.ProblemUtil;
17import tools.refinery.language.validation.ActionTargetCollector;
17import tools.refinery.logic.Constraint; 18import tools.refinery.logic.Constraint;
18import tools.refinery.logic.dnf.*; 19import tools.refinery.logic.dnf.*;
19import tools.refinery.logic.literal.*; 20import tools.refinery.logic.literal.*;
@@ -67,6 +68,9 @@ public class ModelInitializer {
67 @Inject 68 @Inject
68 private ImportAdapterProvider importAdapterProvider; 69 private ImportAdapterProvider importAdapterProvider;
69 70
71 @Inject
72 private ActionTargetCollector actionTargetCollector;
73
70 private Problem problem; 74 private Problem problem;
71 75
72 private final Set<Problem> importedProblems = new HashSet<>(); 76 private final Set<Problem> importedProblems = new HashSet<>();
@@ -593,7 +597,7 @@ public class ModelInitializer {
593 private void collectPredicateDefinition(PredicateDefinition predicateDefinition, ModelStoreBuilder storeBuilder) { 597 private void collectPredicateDefinition(PredicateDefinition predicateDefinition, ModelStoreBuilder storeBuilder) {
594 var partialRelation = getPartialRelation(predicateDefinition); 598 var partialRelation = getPartialRelation(predicateDefinition);
595 var query = toQuery(partialRelation.name(), predicateDefinition); 599 var query = toQuery(partialRelation.name(), predicateDefinition);
596 boolean mutable = targetTypes.contains(partialRelation); 600 boolean mutable = targetTypes.contains(partialRelation) || isActionTarget(predicateDefinition);
597 TruthValue defaultValue; 601 TruthValue defaultValue;
598 if (predicateDefinition.isError()) { 602 if (predicateDefinition.isError()) {
599 defaultValue = TruthValue.FALSE; 603 defaultValue = TruthValue.FALSE;
@@ -608,6 +612,15 @@ public class ModelInitializer {
608 storeBuilder.with(translator); 612 storeBuilder.with(translator);
609 } 613 }
610 614
615 private boolean isActionTarget(PredicateDefinition predicateDefinition) {
616 for (var importedProblem : importedProblems) {
617 if (actionTargetCollector.isActionTarget(importedProblem, predicateDefinition)) {
618 return true;
619 }
620 }
621 return false;
622 }
623
611 private RelationalQuery toQuery(String name, PredicateDefinition predicateDefinition) { 624 private RelationalQuery toQuery(String name, PredicateDefinition predicateDefinition) {
612 var problemParameters = predicateDefinition.getParameters(); 625 var problemParameters = predicateDefinition.getParameters();
613 int arity = problemParameters.size(); 626 int arity = problemParameters.size();