From 7aa34753b7bddeba0e0ba2ecbea9b5bec88b10a8 Mon Sep 17 00:00:00 2001 From: Oszkar Semerath Date: Fri, 8 May 2020 23:32:07 +0200 Subject: UP patterns -> decision procedure trace finished --- .../logic2viatra/patterns/PatternGenerator.xtend | 8 ++-- .../logic2viatra/patterns/PatternProvider.xtend | 16 ++++++-- .../UnitPropagationPreconditionGenerator.xtend | 43 +++++++++++++++++++--- .../rules/RefinementRuleProvider.xtend | 6 +-- 4 files changed, 59 insertions(+), 14 deletions(-) (limited to 'Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src') diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/PatternGenerator.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/PatternGenerator.xtend index 56138ee8..d5ebe318 100644 --- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/PatternGenerator.xtend +++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/PatternGenerator.xtend @@ -155,8 +155,8 @@ class PatternGenerator { Map fqn2PQuery, TypeAnalysisResult typeAnalysisResult ) { - - return ''' + val first = + ''' import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage" import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem" import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language" @@ -395,7 +395,9 @@ class PatternGenerator { ////////// // 5 Unit Propagations ////////// - «unitPropagationPreconditionGenerator.generateUnitPropagationRules(problem,problem.relations.filter(RelationDefinition),fqn2PQuery)» ''' + val up = unitPropagationPreconditionGenerator.generateUnitPropagationRules(problem,problem.relations.filter(RelationDefinition),fqn2PQuery) + val second = up.definitions + return (first+second) -> up.constraint2PreconditionName } } diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/PatternProvider.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/PatternProvider.xtend index 0e13a5e1..f576d1a1 100644 --- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/PatternProvider.xtend +++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/PatternProvider.xtend @@ -21,6 +21,8 @@ import org.eclipse.xtend.lib.annotations.Data import static extension hu.bme.mit.inf.dslreasoner.util.CollectionsUtil.* import java.util.Collection import java.util.Set +import org.eclipse.viatra.query.runtime.matchers.psystem.PConstraint +import java.util.HashMap @Data class GeneratedPatterns { public Map>> invalidWFQueries @@ -29,6 +31,7 @@ import java.util.Set public Map>> refineObjectQueries public Map>> refineTypeQueries public Map, IQuerySpecification>> refinerelationQueries + public Map>> unitPropagationPreconditionPatterns public Collection>> allQueries } @@ -56,13 +59,15 @@ class PatternProvider { } else { null } - val baseIndexerFile = patternGenerator.transformBaseProperties(problem,emptySolution,fqn2Query,typeAnalysisResult) + val patternGeneratorResult = patternGenerator.transformBaseProperties(problem,emptySolution,fqn2Query,typeAnalysisResult) + val baseIndexerFile = patternGeneratorResult.key + val unitPropagationTrace = patternGeneratorResult.value if(writeToFile) { workspace.writeText('''generated3valued.vql_deactivated''',baseIndexerFile) } val ParseUtil parseUtil = new ParseUtil val generatedQueries = parseUtil.parse(baseIndexerFile) - val runtimeQueries = calclulateRuntimeQueries(patternGenerator,problem,emptySolution,typeAnalysisResult,generatedQueries); + val runtimeQueries = calclulateRuntimeQueries(patternGenerator,problem,emptySolution,typeAnalysisResult,unitPropagationTrace,generatedQueries); return runtimeQueries } @@ -71,7 +76,8 @@ class PatternProvider { LogicProblem problem, PartialInterpretation emptySolution, TypeAnalysisResult typeAnalysisResult, - Map>> queries + HashMap unitPropagationTrace, + Map>> queries ) { val Map>> invalidWFQueries = patternGenerator.invalidIndexer.getInvalidateByWfQueryNames(problem).mapValues[it.lookup(queries)] @@ -85,6 +91,9 @@ class PatternProvider { refineTypeQueries = patternGenerator.typeRefinementGenerator.getRefineTypeQueryNames(problem,emptySolution,typeAnalysisResult).mapValues[it.lookup(queries)] val Map, IQuerySpecification>> refineRelationQueries = patternGenerator.relationRefinementGenerator.getRefineRelationQueries(problem).mapValues[it.lookup(queries)] + val Map>> + unitPropagationPreconditionPatterns = unitPropagationTrace.mapValues[it.lookup(queries)] + unitPropagationPreconditionPatterns.entrySet.forEach[println(it.key + "->" +it.value)] return new GeneratedPatterns( invalidWFQueries, unfinishedWFQueries, @@ -92,6 +101,7 @@ class PatternProvider { refineObjectsQueries, refineTypeQueries, refineRelationQueries, + unitPropagationPreconditionPatterns, queries.values ) } 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 b5e344f7..7cf52b41 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 @@ -58,6 +58,11 @@ class UnitPropagationPreconditionGenerationResult { return unitPropagation2PatternName.get(key) !== null } } +@Data +class UnitPropagationPreconditionFinalResult { + CharSequence definitions + HashMap constraint2PreconditionName +} class UnitPropagationPreconditionGenerator { val PatternGenerator base @@ -76,23 +81,51 @@ class UnitPropagationPreconditionGenerator { // Create an empty result val res = new UnitPropagationPreconditionGenerationResult val wfs = base.wfQueries(problem)//.map[it.patternPQuery] - val mainPropagationNames = new LinkedHashSet + val Map>> mainPropagationNames = 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) { - mainPropagationNames+= getOrGeneratePropagationRule(res,relation,query,referredCheck,PropagationModality::UP, Modality::MUST) + val propagationPrecondition = getOrGeneratePropagationRule(res,relation,query,referredCheck,PropagationModality::UP, Modality::MUST) + if(!mainPropagationNames.containsKey(referredCheck)) { + mainPropagationNames.put(referredCheck,new LinkedList) + } + if(propagationPrecondition !== null) { + println(query.parameterNames) + println(query.parameterNames.size) + mainPropagationNames.get(referredCheck).add(propagationPrecondition->query.parameterNames.size) + } } } - return ''' + val preconditions = new LinkedList + val constraint2Precondition = new HashMap + for(entry : mainPropagationNames.entrySet) { + val name = '''UPMUSTPropagate«res.getOrGenerateConstraintName(entry.key)»'''; + val def = ''' + pattern «name»( + problem:LogicProblem, interpretation:PartialInterpretation, + «FOR index : 1..entry.key.arity SEPARATOR ", "»«canonizeName(index,PropagationModality::UP)»«ENDFOR») + «FOR propagation : entry.value SEPARATOR " or "» + { find «propagation.key»(problem,interpretation,«FOR index : 0..