aboutsummaryrefslogtreecommitdiffstats
path: root/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/TypeRefinementWithPreliminaryTypeAnalysis.xtend
diff options
context:
space:
mode:
authorLibravatar OszkarSemerath <oszkar.semerath@gmail.com>2018-02-27 20:40:13 -0500
committerLibravatar OszkarSemerath <oszkar.semerath@gmail.com>2018-02-27 20:40:13 -0500
commit929f6279d960a293c83632a0d476c49c3eca62bb (patch)
treece7415ebe5e074c9d51e5b318f18804dd288ce82 /Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/TypeRefinementWithPreliminaryTypeAnalysis.xtend
parentlogging removed (diff)
downloadVIATRA-Generator-929f6279d960a293c83632a0d476c49c3eca62bb.tar.gz
VIATRA-Generator-929f6279d960a293c83632a0d476c49c3eca62bb.tar.zst
VIATRA-Generator-929f6279d960a293c83632a0d476c49c3eca62bb.zip
Viatra Solver support for tasks with no partial model
Diffstat (limited to 'Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/TypeRefinementWithPreliminaryTypeAnalysis.xtend')
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/TypeRefinementWithPreliminaryTypeAnalysis.xtend21
1 files changed, 19 insertions, 2 deletions
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/TypeRefinementWithPreliminaryTypeAnalysis.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/TypeRefinementWithPreliminaryTypeAnalysis.xtend
index be54d63c..81f2f7db 100644
--- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/TypeRefinementWithPreliminaryTypeAnalysis.xtend
+++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/TypeRefinementWithPreliminaryTypeAnalysis.xtend
@@ -15,7 +15,6 @@ class TypeRefinementWithPreliminaryTypeAnalysis extends TypeRefinementGenerator{
15 } 15 }
16 override requiresTypeAnalysis() { true } 16 override requiresTypeAnalysis() { true }
17 17
18
19 override generateRefineObjectQueries(LogicProblem p, PartialInterpretation emptySolution, TypeAnalysisResult typeAnalysisResult) { 18 override generateRefineObjectQueries(LogicProblem p, PartialInterpretation emptySolution, TypeAnalysisResult typeAnalysisResult) {
20 val possibleNewDynamicType = typeAnalysisResult.possibleNewDynamicTypes 19 val possibleNewDynamicType = typeAnalysisResult.possibleNewDynamicTypes
21 val containment = p.containmentHierarchies.head 20 val containment = p.containmentHierarchies.head
@@ -25,6 +24,12 @@ class TypeRefinementWithPreliminaryTypeAnalysis extends TypeRefinementGenerator{
25 inverseRelations.put(it.inverseB,it.inverseA) 24 inverseRelations.put(it.inverseB,it.inverseA)
26 ] 25 ]
27 return ''' 26 return '''
27 private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation)
28 «FOR type :containment.typesOrderedInHierarchy SEPARATOR "or"»{
29 find interpretation(problem,interpretation);
30 «base.typeIndexer.referInstanceOf(type,Modality.MAY,"root")»
31 find mustExist(problem, interpretation, root);
32 }«ENDFOR»
28 «FOR type:possibleNewDynamicType» 33 «FOR type:possibleNewDynamicType»
29 «IF(containment.typesOrderedInHierarchy.contains(type))» 34 «IF(containment.typesOrderedInHierarchy.contains(type))»
30 «FOR containmentRelation : containment.containmentRelations.filter[canBeContainedByRelation(it,type)]» 35 «FOR containmentRelation : containment.containmentRelations.filter[canBeContainedByRelation(it,type)]»
@@ -66,8 +71,20 @@ class TypeRefinementWithPreliminaryTypeAnalysis extends TypeRefinementGenerator{
66 } 71 }
67 «ENDIF» 72 «ENDIF»
68 «ENDFOR» 73 «ENDFOR»
74 pattern «patternName(null,null,type)»(
75 problem:LogicProblem, interpretation:PartialInterpretation,
76 typeInterpretation:PartialTypeInterpratation)
77 {
78 find interpretation(problem,interpretation);
79 neg find hasElementInContainment(problem,interpretation);
80 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
81 PartialTypeInterpratation.interpretationOf.name(type,"«type.name»");
82 «base.typeIndexer.referInstanceOf(type,Modality.MAY,"newObject")»
83 find mayExist(problem, interpretation, newObject);
84 neg find mustExist(problem, interpretation, newObject);
85 }
69 «ELSE» 86 «ELSE»
70 pattern createObject_«base.canonizeName(type.name)»( 87 pattern «this.patternName(null,null,type)»(
71 problem:LogicProblem, interpretation:PartialInterpretation, 88 problem:LogicProblem, interpretation:PartialInterpretation,
72 typeInterpretation:PartialTypeInterpratation) 89 typeInterpretation:PartialTypeInterpratation)
73 { 90 {