From 91b772506f00ce2e317027dd384b82dc7a1295fd Mon Sep 17 00:00:00 2001 From: Oszkar Semerath Date: Mon, 11 May 2020 02:22:15 +0200 Subject: separated must and current UP rules to support non-prop neg finds --- .../UnitPropagationPreconditionGenerator.xtend | 42 ++++++++++++++++------ 1 file changed, 31 insertions(+), 11 deletions(-) (limited to 'Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/UnitPropagationPreconditionGenerator.xtend') diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/UnitPropagationPreconditionGenerator.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/UnitPropagationPreconditionGenerator.xtend index d487db64..91a7a2c2 100644 --- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/UnitPropagationPreconditionGenerator.xtend +++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/UnitPropagationPreconditionGenerator.xtend @@ -61,7 +61,8 @@ class UnitPropagationPreconditionGenerationResult { @Data class UnitPropagationPreconditionFinalResult { CharSequence definitions - HashMap constraint2PreconditionName + HashMap constraint2MustPreconditionName + HashMap constraint2CurrentPreconditionName } class UnitPropagationPreconditionGenerator { @@ -81,25 +82,34 @@ class UnitPropagationPreconditionGenerator { // Create an empty result val res = new UnitPropagationPreconditionGenerationResult val wfs = base.wfQueries(problem)//.map[it.patternPQuery] - val Map>> mainPropagationNames = new HashMap + val Map>> mainMustPropagationNames = new HashMap + val Map>> mainCurrentPropagationNames = new HashMap for(wf : wfs) { val query = wf.patternPQuery as PQuery val relation = wf.target val allReferredChecks = allReferredConstraints(relation,query).filter(ExpressionEvaluation) for(referredCheck : allReferredChecks) { - val propagationPrecondition = getOrGeneratePropagationRule(res,relation,query,referredCheck,PropagationModality::UP, Modality::MUST) - if(!mainPropagationNames.containsKey(referredCheck)) { - mainPropagationNames.put(referredCheck,new LinkedList) + val mustPropagationPrecondition = getOrGeneratePropagationRule(res,relation,query,referredCheck,PropagationModality::UP, Modality::MUST) + val currentPropagationPrecondition = getOrGeneratePropagationRule(res,relation,query,referredCheck,PropagationModality::UP, Modality::CURRENT) + if(!mainMustPropagationNames.containsKey(referredCheck)) { + mainMustPropagationNames.put(referredCheck,new LinkedList) } - if(propagationPrecondition !== null) { - mainPropagationNames.get(referredCheck).add(propagationPrecondition->query.parameterNames.size) + if(!mainCurrentPropagationNames.containsKey(referredCheck)) { + mainCurrentPropagationNames.put(referredCheck,new LinkedList) + } + if(mustPropagationPrecondition !== null) { + mainMustPropagationNames.get(referredCheck).add(mustPropagationPrecondition->query.parameterNames.size) + } + if(currentPropagationPrecondition !== null) { + mainCurrentPropagationNames.get(referredCheck).add(currentPropagationPrecondition->query.parameterNames.size) } } } val preconditions = new LinkedList - val constraint2Precondition = new HashMap - for(entry : mainPropagationNames.entrySet) { + val constraint2MustPrecondition = new HashMap + val constraint2CurrentPrecondition = new HashMap + for(entry : mainMustPropagationNames.entrySet) { val name = '''UPMUSTPropagate_«res.getOrGenerateConstraintName(entry.key)»'''; val def = ''' pattern «name»(«FOR index : 1..entry.key.arity SEPARATOR ", "»«canonizeName(index,PropagationModality::UP)»«ENDFOR») @@ -107,7 +117,17 @@ class UnitPropagationPreconditionGenerator { { find «propagation.key»(problem,interpretation,«FOR index : 0..