diff options
author | OszkarSemerath <oszkar.semerath@gmail.com> | 2018-02-27 20:40:13 -0500 |
---|---|---|
committer | OszkarSemerath <oszkar.semerath@gmail.com> | 2018-02-27 20:40:13 -0500 |
commit | 929f6279d960a293c83632a0d476c49c3eca62bb (patch) | |
tree | ce7415ebe5e074c9d51e5b318f18804dd288ce82 /Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/patterns/TypeRefinementWithPreliminaryTypeAnalysis.xtend | |
parent | logging removed (diff) | |
download | VIATRA-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')
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 | { |