aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar OszkarSemerath <oszkar.semerath@gmail.com>2018-06-13 13:27:33 +0200
committerLibravatar OszkarSemerath <oszkar.semerath@gmail.com>2018-06-13 13:27:33 +0200
commit354f378b6b8ed4d50fc4f378fe48217f9881505c (patch)
tree35676794eb6870ca67b006b452d58b43cf3abb44
parenttype multiplicity is refined to 0 (diff)
downloadVIATRA-Generator-354f378b6b8ed4d50fc4f378fe48217f9881505c.tar.gz
VIATRA-Generator-354f378b6b8ed4d50fc4f378fe48217f9881505c.tar.zst
VIATRA-Generator-354f378b6b8ed4d50fc4f378fe48217f9881505c.zip
Updated partial model representation handling
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretation2logic/PartialInterpretation2Logic.xtend6
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/PartialInterpretationInitialiser.xtend206
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/neighbourhood/PartialInterpretation2NeighbourhoodRepresentation.xtend20
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/statecoder/IdentifierBasedStateCoderFactory.xtend10
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/statecoder/NeighbourhoodBasedStateCoderFactory.xtend10
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/visualisation/PartialInterpretation2Gml.xtend23
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/PartialModelAsLogicInterpretation.xtend18
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.visualisation/src/hu/bme/mit/inf/dslreasoner/visualisation/pi2graphviz/PartialInterpretation2Graphviz.xtend23
8 files changed, 192 insertions, 124 deletions
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretation2logic/PartialInterpretation2Logic.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretation2logic/PartialInterpretation2Logic.xtend
index 3a85536b..e4ad4295 100644
--- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretation2logic/PartialInterpretation2Logic.xtend
+++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretation2logic/PartialInterpretation2Logic.xtend
@@ -10,9 +10,9 @@ import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.TypeDefinition
10import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.LogicProblem 10import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.LogicProblem
11import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partial2logicannotations.Partial2logicannotationsFactory 11import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partial2logicannotations.Partial2logicannotationsFactory
12import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.BinaryElementRelationLink 12import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.BinaryElementRelationLink
13import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialComplexTypeInterpretation
13import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation 14import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation
14import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialRelationInterpretation 15import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialRelationInterpretation
15import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialTypeInterpratation
16import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.RelationLink 16import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.RelationLink
17import java.util.ArrayList 17import java.util.ArrayList
18import java.util.HashMap 18import java.util.HashMap
@@ -46,7 +46,7 @@ class PartialInterpretation2Logic {
46 addExistingElementToProblem(p,i,trace) 46 addExistingElementToProblem(p,i,trace)
47 47
48 // Types 48 // Types
49 for(partialTypeDeclaration : i.partialtypeinterpratation) { 49 for(partialTypeDeclaration : i.partialtypeinterpratation.filter(PartialComplexTypeInterpretation)) {
50 splitTypeIntoTwo(p,partialTypeDeclaration,trace) 50 splitTypeIntoTwo(p,partialTypeDeclaration,trace)
51 } 51 }
52 connectSplittings(p,trace) 52 connectSplittings(p,trace)
@@ -69,7 +69,7 @@ class PartialInterpretation2Logic {
69 p.elements += i.newElements 69 p.elements += i.newElements
70 } 70 }
71 71
72 private def splitTypeIntoTwo(LogicProblem p, PartialTypeInterpratation partialTypeDeclaration,PartialInterpretation2Logic_Trace trace) { 72 private def splitTypeIntoTwo(LogicProblem p, PartialComplexTypeInterpretation partialTypeDeclaration,PartialInterpretation2Logic_Trace trace) {
73 if(!partialTypeDeclaration.elements.empty) { 73 if(!partialTypeDeclaration.elements.empty) {
74 val declaration = partialTypeDeclaration.interpretationOf 74 val declaration = partialTypeDeclaration.interpretationOf
75 75
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/PartialInterpretationInitialiser.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/PartialInterpretationInitialiser.xtend
index ad9d882b..cdc79743 100644
--- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/PartialInterpretationInitialiser.xtend
+++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/PartialInterpretationInitialiser.xtend
@@ -4,130 +4,152 @@ import hu.bme.mit.inf.dslreasoner.logic.model.builder.TracedOutput
4import hu.bme.mit.inf.dslreasoner.logic.model.builder.TypeScopes 4import hu.bme.mit.inf.dslreasoner.logic.model.builder.TypeScopes
5import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.ConstantDeclaration 5import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.ConstantDeclaration
6import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.FunctionDeclaration 6import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.FunctionDeclaration
7import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.IntLiteral
8import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.LogiclanguageFactory 7import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.LogiclanguageFactory
9import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.RealLiteral
10import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.RelationDeclaration 8import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.RelationDeclaration
11import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.StringLiteral
12import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Type 9import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Type
13import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.TypeDeclaration 10import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.TypeDeclaration
14import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.TypeDefinition 11import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.TypeDefinition
15import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.LogicProblem 12import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.LogicProblem
16import hu.bme.mit.inf.dslreasoner.logic.model.patterns.SupertypeStar 13import hu.bme.mit.inf.dslreasoner.logic.model.patterns.SupertypeStar
14import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partial2logicannotations.PartialModelRelation2Assertion
15import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialComplexTypeInterpretation
17import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialConstantInterpretation 16import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialConstantInterpretation
18import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialFunctionInterpretation 17import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialFunctionInterpretation
19import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation 18import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation
20import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialRelationInterpretation 19import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialRelationInterpretation
21import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialTypeInterpratation
22import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialinterpretationFactory 20import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialinterpretationFactory
21import java.math.BigDecimal
23import java.util.HashMap 22import java.util.HashMap
24import java.util.Map 23import java.util.Map
24import java.util.SortedSet
25import org.eclipse.emf.ecore.util.EcoreUtil
25import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine 26import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine
26import org.eclipse.viatra.query.runtime.emf.EMFScope 27import org.eclipse.viatra.query.runtime.emf.EMFScope
27import org.eclipse.xtend.lib.annotations.Data 28import org.eclipse.xtend.lib.annotations.Data
28 29
29import static extension hu.bme.mit.inf.dslreasoner.util.CollectionsUtil.* 30import static extension hu.bme.mit.inf.dslreasoner.util.CollectionsUtil.*
30import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partial2logicannotations.PartialModelRelation2Assertion
31import org.eclipse.emf.ecore.util.EcoreUtil
32 31
33@Data class Problem2PartialInterpretationTrace { 32@Data class Problem2PartialInterpretationTrace {
34 Map<TypeDeclaration, PartialTypeInterpratation> type2Interpretation = new HashMap 33 Map<TypeDeclaration, PartialComplexTypeInterpretation> type2Interpretation = new HashMap
35 Map<RelationDeclaration, PartialRelationInterpretation> relation2Interpretation = new HashMap 34 Map<RelationDeclaration, PartialRelationInterpretation> relation2Interpretation = new HashMap
36} 35}
37 36
37/**
38 * Initializer class for an empty partial interpretation.
39 */
38class PartialInterpretationInitialiser { 40class PartialInterpretationInitialiser {
39 val extension PartialinterpretationFactory factory = PartialinterpretationFactory.eINSTANCE 41 val extension PartialinterpretationFactory factory = PartialinterpretationFactory.eINSTANCE
40 val extension LogiclanguageFactory factory2 = LogiclanguageFactory.eINSTANCE 42 val extension LogiclanguageFactory factory2 = LogiclanguageFactory.eINSTANCE
41 43
42 /** 44 /**
43 * Initialises an empty partial interpretation from a logic problem 45 * Initialises an empty partial interpretation from a logic problem and a scope.
44 */ 46 */
45 def TracedOutput<PartialInterpretation,Problem2PartialInterpretationTrace> initialisePartialInterpretation( 47 def TracedOutput<PartialInterpretation,Problem2PartialInterpretationTrace> initialisePartialInterpretation(
46 LogicProblem problem, 48 LogicProblem problem,
47 TypeScopes typeScopes) 49 TypeScopes typeScopes)
48 { 50 {
49 val engine = ViatraQueryEngine.on(new EMFScope(problem)) 51
50 val trace = new Problem2PartialInterpretationTrace 52 val trace = new Problem2PartialInterpretationTrace
51 53
52 val res = createPartialInterpretation => [ 54 val res = createPartialInterpretation => [
53 it.problem = problem 55 it.problem = problem
54 56
55 // Elements 57 // Initialise primitive elements
56 it.minNewElements = typeScopes.maxNewElements 58 initBooleans(it)
57 it.maxNewElements = typeScopes.minNewElements 59 initIntegers(it, typeScopes.knownIntegers, typeScopes.minNewIntegers, typeScopes.maxNewIntegers)
58 // elements from problem are included 60 initReals(it, typeScopes.knownReals, typeScopes.minNewReals, typeScopes.maxNewReals)
59 if(maxNewElements>0) { 61 initStrings(it,typeScopes.knownStrings, typeScopes.minNewStrings, typeScopes.maxNewStrings)
60 it.openWorldElementPrototypes += createDefinedElement => [it.name = "Symbolic New Element"] 62 // Initialise complex elements
61 } 63 initElements(it,
62 64 typeScopes.minNewElementsByType,
63 // Booleans 65 typeScopes.maxNewElementsByType,
64 it.booleanelements += createBooleanElement => [it.name = "true" it.value = true it.valueSet = true] 66 typeScopes.minNewElements,
65 it.booleanelements += createBooleanElement => [it.name = "false" it.value = false it.valueSet = true] 67 typeScopes.maxNewElements,
68 trace
69 )
66 70
67 // Integers 71 // Initialise relations
68 it.maxNewIntegers = typeScopes.maxNewIntegers 72 initRelations(it,trace)
69 val knownIntegers = (typeScopes.knownIntegers + problem.eAllContents.toIterable.filter(IntLiteral).map[value]).toSet
70 for(integersInProblem : knownIntegers) {
71 it.integerelements += createIntegerElement => [it.name = '''«integersInProblem»''' it.value = integersInProblem it.valueSet = true]
72 }
73 if(maxNewIntegers>0) {
74 it.openWorldElementPrototypes += createIntegerElement => [it.name = "Symbolic New Integer" it.valueSet = false]
75 }
76
77 // Reals
78 it.maxNewReals = typeScopes.maxNewReals
79 val knownReals = (typeScopes.knownReals + problem.eAllContents.toIterable.filter(RealLiteral).map[value]).toSet
80 for(realsInProblem : knownReals) {
81 it.realelements += createRealElement => [it.name = '''«realsInProblem»''' it.value = realsInProblem it.valueSet = true]
82 }
83 if(maxNewReals>0) {
84 it.openWorldElementPrototypes += createRealElement => [it.name = "Symbolic New Real" it.valueSet = false]
85 }
86
87 // Strings
88 it.maxNewStrings = typeScopes.maxNewStrings
89 val knownStrings = (typeScopes.knownStrings + problem.eAllContents.toIterable.filter(StringLiteral).map[value]).toSet
90 for(stringsInProblem : knownStrings) {
91 it.stringelement += createStringElement => [it.name = '''"«stringsInProblem»"''' it.value=stringsInProblem it.valueSet = true]
92 }
93 if(maxNewStrings>0) {
94 it.openWorldElementPrototypes += createStringElement => [it.name = "Symbolic New String" it.valueSet = false]
95 }
96
97 for(typeDeclaration : problem.types.filter(TypeDeclaration)) {
98 it.partialtypeinterpratation += typeDeclaration.initialisePartialTypeInterpretation(engine,trace)
99 }
100 problem.connectSuperypes(trace)
101
102 it.partialrelationinterpretation += problem.relations.filter(RelationDeclaration)
103 .map[initialisePartialRelationInterpretation(trace)]
104 for(pMR2A : problem.annotations.filter(PartialModelRelation2Assertion)) {
105 val relation = pMR2A.targetRelation
106 val interpretation = relation.lookup(trace.relation2Interpretation)
107 interpretation.relationlinks+=pMR2A.links.map[EcoreUtil.copy(it)]
108 }
109 it.partialfunctioninterpretation += problem.functions.filter(FunctionDeclaration)
110 .map[initialisePartialFunctionInterpretation(trace)]
111 it.partialconstantinterpretation += problem.constants.filter(ConstantDeclaration)
112 .map[initialisePartialConstantDeclaration(trace)]
113 ] 73 ]
114 74
115 return new TracedOutput(res,trace) 75 return new TracedOutput(res,trace)
116 } 76 }
117 77
118 /** 78 def protected boolean initBooleans(PartialInterpretation partialInterpretation) {
119 * Initialize type with existing elements 79 val booleanInterpretation = createPartialBooleanInterpretation
120 */ 80 partialInterpretation.partialtypeinterpratation += booleanInterpretation
121 def private initialisePartialTypeInterpretation(TypeDeclaration t, ViatraQueryEngine engine, Problem2PartialInterpretationTrace trace) { 81
122 val supertypeMatcher = SupertypeStar.Matcher.on(engine) 82 val trueElement = createBooleanElement => [it.name = "true" it.value = true it.valueSet = true]
123 val res = createPartialTypeInterpratation => [ 83 booleanInterpretation.elements += trueElement
124 it.interpretationOf = t 84 partialInterpretation.newElements+=trueElement
125 it.elements += supertypeMatcher.getAllValuesOfsubtype(t) 85
126 .filter(TypeDefinition) 86 val falseElement = createBooleanElement => [it.name = "false" it.value = false it.valueSet = true]
127 .map[elements].flatten 87 booleanInterpretation.elements += falseElement
128 ] 88 partialInterpretation.newElements+=falseElement
129 trace.type2Interpretation.put(t,res) 89 }
130 return res 90
91 def protected initIntegers(PartialInterpretation partialInterpretation, SortedSet<Integer> knownIntegers, int minNewIntegers, int maxNewIntegers) {
92 val integerInterpretation = createPartialIntegerInterpretation
93 partialInterpretation.partialtypeinterpratation += integerInterpretation
94
95 for(knownInteger : knownIntegers) {
96 val integerElement = createIntegerElement => [it.name = knownInteger.toString it.value = knownInteger it.valueSet = true]
97 integerInterpretation.elements += integerElement
98 partialInterpretation.newElements += integerElement
99 }
100 if(maxNewIntegers>0) {
101 throw new UnsupportedOperationException('''Unspecified Integers are currently not supported!''')
102 }
103 }
104
105 def protected initReals(PartialInterpretation partialInterpretation, SortedSet<BigDecimal> knownReals, int minNewReals, int maxNewReals) {
106 val realInterpretation = createPartialRealInterpretation
107 partialInterpretation.partialtypeinterpratation += realInterpretation
108
109 for(knownReal : knownReals) {
110 val realElement = createRealElement => [it.name = knownReal.toString it.value = knownReal it.valueSet = true]
111 realInterpretation.elements += realElement
112 partialInterpretation.newElements += realElement
113 }
114 if(maxNewReals>0) {
115 throw new UnsupportedOperationException('''Unspecified Real values are currently not supported!''')
116 }
117 }
118
119 def protected initStrings(PartialInterpretation partialInterpretation, SortedSet<String> knownStrings, int minNewStrings, int maxNewStrings) {
120 val stringInterpretation = createPartialStringInterpretation
121 partialInterpretation.partialtypeinterpratation += stringInterpretation
122
123 for(knownString : knownStrings) {
124 val stringElement = createStringElement => [it.name = '''"«knownString»"''' it.value = knownString it.valueSet = true]
125 stringInterpretation.elements += stringElement
126 partialInterpretation.newElements += stringElement
127 }
128 if(maxNewStrings>0) {
129 throw new UnsupportedOperationException('''Unspecified String values are currently not supported!''')
130 }
131 }
132
133 def protected initElements(PartialInterpretation interpretation,
134 Map<Type, Integer> minNewElementsByType, Map<Type, Integer> maxNewElementsByType,
135 int minNewElements, int maxNewElements,
136 Problem2PartialInterpretationTrace trace)
137 {
138 val engine = ViatraQueryEngine.on(new EMFScope(interpretation.problem))
139 // Elements
140 interpretation.minNewElements = minNewElements
141 interpretation.maxNewElements = maxNewElements
142 // elements from problem are included
143 if(maxNewElements>0) {
144 val newElements = createDefinedElement => [it.name = "New Objects"]
145 interpretation.openWorldElements += newElements
146 }
147
148 for(typeDeclaration : interpretation.problem.types.filter(TypeDeclaration)) {
149 val typeInterpretation = typeDeclaration.initialisePartialTypeInterpretation(engine,trace)
150 interpretation.partialtypeinterpratation += typeInterpretation
151 }
152 interpretation.problem.connectSuperypes(trace)
131 } 153 }
132 154
133 def private connectSuperypes(LogicProblem problem, Problem2PartialInterpretationTrace trace) { 155 def private connectSuperypes(LogicProblem problem, Problem2PartialInterpretationTrace trace) {
@@ -140,6 +162,32 @@ class PartialInterpretationInitialiser {
140 } 162 }
141 } 163 }
142 164
165 def private initRelations(PartialInterpretation interpretation, Problem2PartialInterpretationTrace trace) {
166 interpretation.partialrelationinterpretation += interpretation.problem.relations.filter(RelationDeclaration)
167 .map[initialisePartialRelationInterpretation(trace)]
168 for(pMR2A : interpretation.problem.annotations.filter(PartialModelRelation2Assertion)) {
169 val relation = pMR2A.targetRelation
170 val r = relation.lookup(trace.relation2Interpretation)
171 r.relationlinks+=pMR2A.links.map[EcoreUtil.copy(it)]
172 }
173// interpretation.partialfunctioninterpretation += interpretation.problem.functions.filter(FunctionDeclaration)
174// .map[initialisePartialFunctionInterpretation(trace)]
175// interpretation.partialconstantinterpretation += interpretation.problem.constants.filter(ConstantDeclaration)
176// .map[initialisePartialConstantDeclaration(trace)]
177 }
178
179 def private initialisePartialTypeInterpretation(TypeDeclaration t, ViatraQueryEngine engine, Problem2PartialInterpretationTrace trace) {
180 val supertypeMatcher = SupertypeStar.Matcher.on(engine)
181 val res = createPartialComplexTypeInterpretation => [
182 it.interpretationOf = t
183 it.elements += supertypeMatcher.getAllValuesOfsubtype(t)
184 .filter(TypeDefinition)
185 .map[elements].flatten
186 ]
187 trace.type2Interpretation.put(t,res)
188 return res
189 }
190
143 def private initialisePartialRelationInterpretation(RelationDeclaration r, Problem2PartialInterpretationTrace trace) { 191 def private initialisePartialRelationInterpretation(RelationDeclaration r, Problem2PartialInterpretationTrace trace) {
144 val res = createPartialRelationInterpretation => [ 192 val res = createPartialRelationInterpretation => [
145 it.interpretationOf = r 193 it.interpretationOf = r
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/neighbourhood/PartialInterpretation2NeighbourhoodRepresentation.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/neighbourhood/PartialInterpretation2NeighbourhoodRepresentation.xtend
index a5739edf..bf593add 100644
--- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/neighbourhood/PartialInterpretation2NeighbourhoodRepresentation.xtend
+++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/neighbourhood/PartialInterpretation2NeighbourhoodRepresentation.xtend
@@ -13,6 +13,8 @@ import java.util.Map
13import java.util.Set 13import java.util.Set
14 14
15import static extension hu.bme.mit.inf.dslreasoner.util.CollectionsUtil.* 15import static extension hu.bme.mit.inf.dslreasoner.util.CollectionsUtil.*
16import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialPrimitiveInterpretation
17import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialComplexTypeInterpretation
16 18
17abstract class PartialInterpretation2NeighbourhoodRepresentation<ModelRepresentation,NodeRepresentation> { 19abstract class PartialInterpretation2NeighbourhoodRepresentation<ModelRepresentation,NodeRepresentation> {
18 private val boolean deepRepresentation 20 private val boolean deepRepresentation
@@ -33,6 +35,7 @@ abstract class PartialInterpretation2NeighbourhoodRepresentation<ModelRepresenta
33 * @param model The model to be represented. 35 * @param model The model to be represented.
34 * @param range The range of the neighbourhood. 36 * @param range The range of the neighbourhood.
35 * @param parallels The maximal number of parallel references to be differentiated. 37 * @param parallels The maximal number of parallel references to be differentiated.
38 * @param maxNumber The maximal number of elements in a equivalence class that chan be differentiated.
36 */ 39 */
37 def public createRepresentation(PartialInterpretation model, int range, int parallels, int maxNumber) { 40 def public createRepresentation(PartialInterpretation model, int range, int parallels, int maxNumber) {
38 return createRepresentation(model,range,parallels,maxNumber,null,null) 41 return createRepresentation(model,range,parallels,maxNumber,null,null)
@@ -187,10 +190,7 @@ abstract class PartialInterpretation2NeighbourhoodRepresentation<ModelRepresenta
187 return 190 return
188 model.problem.elements + 191 model.problem.elements +
189 model.newElements + 192 model.newElements +
190 model.booleanelements+ 193 model.openWorldElements
191 model.integerelements+
192 model.stringelement+
193 model.realelements
194 } 194 }
195 195
196 def private fillTypes(PartialInterpretation model, Map<DefinedElement, Set<String>> node2Type, Set<TypeDeclaration> relevantTypes) { 196 def private fillTypes(PartialInterpretation model, Map<DefinedElement, Set<String>> node2Type, Set<TypeDeclaration> relevantTypes) {
@@ -202,10 +202,14 @@ abstract class PartialInterpretation2NeighbourhoodRepresentation<ModelRepresenta
202// // Dont need 202// // Dont need
203// } 203// }
204 for(typeInterpretation : model.partialtypeinterpratation) { 204 for(typeInterpretation : model.partialtypeinterpratation) {
205 val type = typeInterpretation.interpretationOf 205 if(typeInterpretation instanceof PartialPrimitiveInterpretation) {
206 if(type.isRelevant(relevantTypes)) { 206
207 for(element : typeInterpretation.elements) { 207 } else if(typeInterpretation instanceof PartialComplexTypeInterpretation) {
208 element.lookup(node2Type).add(type.name) 208 val type = typeInterpretation.interpretationOf
209 if(type.isRelevant(relevantTypes)) {
210 for(element : typeInterpretation.elements) {
211 element.lookup(node2Type).add(type.name)
212 }
209 } 213 }
210 } 214 }
211 } 215 }
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/statecoder/IdentifierBasedStateCoderFactory.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/statecoder/IdentifierBasedStateCoderFactory.xtend
index c421ace6..f55a501a 100644
--- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/statecoder/IdentifierBasedStateCoderFactory.xtend
+++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/statecoder/IdentifierBasedStateCoderFactory.xtend
@@ -18,6 +18,8 @@ import org.eclipse.viatra.dse.statecode.IStateCoderFactory
18import org.eclipse.viatra.query.runtime.api.IPatternMatch 18import org.eclipse.viatra.query.runtime.api.IPatternMatch
19import org.eclipse.xtend.lib.annotations.Accessors 19import org.eclipse.xtend.lib.annotations.Accessors
20import org.eclipse.xtend.lib.annotations.Data 20import org.eclipse.xtend.lib.annotations.Data
21import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialPrimitiveInterpretation
22import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialComplexTypeInterpretation
21 23
22class IdentifierBasedStateCoderFactory implements IStateCoderFactory{ 24class IdentifierBasedStateCoderFactory implements IStateCoderFactory{
23 25
@@ -116,7 +118,13 @@ class IdentifierBasedStateCoder implements IStateCoder{
116 } else if(element instanceof PartialRelationInterpretation) { 118 } else if(element instanceof PartialRelationInterpretation) {
117 return element.interpretationOf.name.hashCode 119 return element.interpretationOf.name.hashCode
118 } else if(element instanceof PartialTypeInterpratation) { 120 } else if(element instanceof PartialTypeInterpratation) {
119 return element.interpretationOf.name.hashCode 121 if(element instanceof PartialPrimitiveInterpretation) {
122 element.class.simpleName.hashCode
123 } else if (element instanceof PartialComplexTypeInterpretation){
124 return element.interpretationOf.name.hashCode
125 } else {
126 throw new UnsupportedOperationException('''Unsupported type: «element.class.simpleName»''')
127 }
120 } else { 128 } else {
121 println(element) 129 println(element)
122 throw new UnsupportedOperationException('''Unsupported type: «element.class.simpleName»''') 130 throw new UnsupportedOperationException('''Unsupported type: «element.class.simpleName»''')
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/statecoder/NeighbourhoodBasedStateCoderFactory.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/statecoder/NeighbourhoodBasedStateCoderFactory.xtend
index 5fb85b0c..65a8207e 100644
--- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/statecoder/NeighbourhoodBasedStateCoderFactory.xtend
+++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/statecoder/NeighbourhoodBasedStateCoderFactory.xtend
@@ -30,6 +30,8 @@ import java.util.Set
30import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.TypeDeclaration 30import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.TypeDeclaration
31import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.RelationDeclaration 31import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.RelationDeclaration
32import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.neighbourhood.PartialInterpretation2NeighbourhoodRepresentation 32import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.neighbourhood.PartialInterpretation2NeighbourhoodRepresentation
33import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialComplexTypeInterpretation
34import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialPrimitiveInterpretation
33 35
34class NeighbourhoodBasedStateCoderFactory implements IStateCoderFactory { 36class NeighbourhoodBasedStateCoderFactory implements IStateCoderFactory {
35 val List<NeighbourhoodBasedPartialInterpretationStateCoder> statecoders = new LinkedList 37 val List<NeighbourhoodBasedPartialInterpretationStateCoder> statecoders = new LinkedList
@@ -142,7 +144,13 @@ class NeighbourhoodBasedPartialInterpretationStateCoder implements IStateCoder{
142 } else if(o instanceof PartialRelationInterpretation) { 144 } else if(o instanceof PartialRelationInterpretation) {
143 return o.interpretationOf.name 145 return o.interpretationOf.name
144 } else if(o instanceof PartialTypeInterpratation) { 146 } else if(o instanceof PartialTypeInterpratation) {
145 return o.interpretationOf.name 147 if(o instanceof PartialPrimitiveInterpretation) {
148 o.class.simpleName.hashCode
149 } else if (o instanceof PartialComplexTypeInterpretation){
150 return o.interpretationOf.name.hashCode
151 } else {
152 throw new UnsupportedOperationException('''Unsupported type: «o.class.simpleName»''')
153 }
146 } else { 154 } else {
147 throw new UnsupportedOperationException('''Unsupported type: «o.class.simpleName»''') 155 throw new UnsupportedOperationException('''Unsupported type: «o.class.simpleName»''')
148 } 156 }
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/visualisation/PartialInterpretation2Gml.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/visualisation/PartialInterpretation2Gml.xtend
index 6e948827..2b42a8b1 100644
--- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/visualisation/PartialInterpretation2Gml.xtend
+++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage/src/hu/bme/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage/visualisation/PartialInterpretation2Gml.xtend
@@ -1,14 +1,15 @@
1package hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.visualisation 1package hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.visualisation
2 2
3import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation
4import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.DefinedElement 3import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.DefinedElement
5import java.util.Map 4import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Relation
6import java.util.HashMap
7import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.TypeDefinition
8import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Type 5import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Type
9import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialRelationInterpretation 6import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.TypeDefinition
10import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.BinaryElementRelationLink 7import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.BinaryElementRelationLink
11import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Relation 8import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialComplexTypeInterpretation
9import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation
10import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialRelationInterpretation
11import java.util.HashMap
12import java.util.Map
12import java.util.Set 13import java.util.Set
13 14
14class PartialInterpretation2Gml { 15class PartialInterpretation2Gml {
@@ -16,10 +17,7 @@ class PartialInterpretation2Gml {
16 return 17 return
17 model.problem.elements + 18 model.problem.elements +
18 model.newElements + 19 model.newElements +
19 model.booleanelements+ 20 model.openWorldElements
20 model.integerelements+
21 model.stringelement+
22 model.realelements
23 } 21 }
24 22
25 def public transform(PartialInterpretation i) { 23 def public transform(PartialInterpretation i) {
@@ -41,8 +39,9 @@ class PartialInterpretation2Gml {
41 '''.toString 39 '''.toString
42 } 40 }
43 def typesOfElement(DefinedElement e, PartialInterpretation i) { 41 def typesOfElement(DefinedElement e, PartialInterpretation i) {
44 i.problem.types.filter(TypeDefinition).filter[it.elements.contains(e)] + 42 val typesElementDefinedIn= i.problem.types.filter(TypeDefinition).filter[it.elements.contains(e)]
45 i.partialtypeinterpratation.filter[it.elements.contains(e)].map[it.interpretationOf] 43 val typesElementAddedDuringGeneration = i.partialtypeinterpratation.filter(PartialComplexTypeInterpretation).filter[it.elements.contains(e)].map[it.interpretationOf]
44 return typesElementDefinedIn+typesElementAddedDuringGeneration
46 } 45 }
47 46
48 val protected titleSize = 16 47 val protected titleSize = 16
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/PartialModelAsLogicInterpretation.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/PartialModelAsLogicInterpretation.xtend
index 7751c8eb..eef53973 100644
--- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/PartialModelAsLogicInterpretation.xtend
+++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/PartialModelAsLogicInterpretation.xtend
@@ -10,9 +10,9 @@ import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.TypeDeclaration
10import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.BinaryElementRelationLink 10import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.BinaryElementRelationLink
11import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.BooleanElement 11import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.BooleanElement
12import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.IntegerElement 12import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.IntegerElement
13import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialComplexTypeInterpretation
13import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation 14import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation
14import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialRelationInterpretation 15import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialRelationInterpretation
15import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialTypeInterpratation
16import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PrimitiveElement 16import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PrimitiveElement
17import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.RealElement 17import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.RealElement
18import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.StringElement 18import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.StringElement
@@ -20,16 +20,16 @@ import java.math.BigDecimal
20import java.util.HashMap 20import java.util.HashMap
21import java.util.List 21import java.util.List
22import java.util.Map 22import java.util.Map
23import java.util.TreeSet
23import org.eclipse.emf.ecore.EObject 24import org.eclipse.emf.ecore.EObject
24import org.eclipse.xtext.xbase.lib.Functions.Function1 25import org.eclipse.xtext.xbase.lib.Functions.Function1
25 26
26import static extension hu.bme.mit.inf.dslreasoner.util.CollectionsUtil.* 27import static extension hu.bme.mit.inf.dslreasoner.util.CollectionsUtil.*
27import java.util.TreeSet
28 28
29class PartialModelAsLogicInterpretation implements LogicModelInterpretation{ 29class PartialModelAsLogicInterpretation implements LogicModelInterpretation{
30 val PartialInterpretation partialInterpretation 30 val PartialInterpretation partialInterpretation
31 val Map<EObject, EObject> trace; 31 val Map<EObject, EObject> trace;
32 val Map<TypeDeclaration,PartialTypeInterpratation> type2Interpretation 32 val Map<TypeDeclaration,PartialComplexTypeInterpretation> type2Interpretation
33 val Map<RelationDeclaration,PartialRelationInterpretation> relation2Interpretation 33 val Map<RelationDeclaration,PartialRelationInterpretation> relation2Interpretation
34 34
35 val Map<DefinedElement,DefinedElement> elementBackwardTrace 35 val Map<DefinedElement,DefinedElement> elementBackwardTrace
@@ -41,18 +41,18 @@ class PartialModelAsLogicInterpretation implements LogicModelInterpretation{
41 new(PartialInterpretation partialInterpretation, Map<EObject, EObject> forwardMap) { 41 new(PartialInterpretation partialInterpretation, Map<EObject, EObject> forwardMap) {
42 this.partialInterpretation = partialInterpretation 42 this.partialInterpretation = partialInterpretation
43 this.trace = forwardMap 43 this.trace = forwardMap
44 this.type2Interpretation = initTypes(partialInterpretation.partialtypeinterpratation) 44 this.type2Interpretation = initComplexTypes(partialInterpretation.partialtypeinterpratation.filter(PartialComplexTypeInterpretation))
45 this.relation2Interpretation = initRelations(partialInterpretation.partialrelationinterpretation) 45 this.relation2Interpretation = initRelations(partialInterpretation.partialrelationinterpretation)
46 46
47 this.elementBackwardTrace = initElementBackwardTrace(trace) 47 this.elementBackwardTrace = initElementBackwardTrace(trace)
48 this.booleanForwardTrace = initialisePrimitiveElementTrace( 48 this.booleanForwardTrace = initialisePrimitiveElementTrace(
49 null,null,[null],partialInterpretation.booleanelements,[it.value]) 49 null,null,[null],partialInterpretation.newElements.filter(BooleanElement),[it.value])
50 integerForwardTrace = initialisePrimitiveElementTrace( 50 integerForwardTrace = initialisePrimitiveElementTrace(
51 0,[it+1],[it],partialInterpretation.integerelements,[it.value]) 51 0,[it+1],[it],partialInterpretation.newElements.filter(IntegerElement),[it.value])
52 realForwardTrace = initialisePrimitiveElementTrace( 52 realForwardTrace = initialisePrimitiveElementTrace(
53 BigDecimal::ZERO,[it.add(BigDecimal.ONE)],[it],partialInterpretation.realelements,[it.value]) 53 BigDecimal::ZERO,[it.add(BigDecimal.ONE)],[it],partialInterpretation.newElements.filter(RealElement),[it.value])
54 stringForwardTrace = initialisePrimitiveElementTrace( 54 stringForwardTrace = initialisePrimitiveElementTrace(
55 0,[it+1],['''String«it»'''],partialInterpretation.stringelement,[it.value]) 55 0,[it+1],['''String«it»'''],partialInterpretation.newElements.filter(StringElement),[it.value])
56 } 56 }
57 57
58 private def <Seed,Type,ElementType extends PrimitiveElement> Map<Type,ElementType> initialisePrimitiveElementTrace( 58 private def <Seed,Type,ElementType extends PrimitiveElement> Map<Type,ElementType> initialisePrimitiveElementTrace(
@@ -83,7 +83,7 @@ class PartialModelAsLogicInterpretation implements LogicModelInterpretation{
83 return forwardMap 83 return forwardMap
84 } 84 }
85 85
86 def initTypes(List<PartialTypeInterpratation> types) { 86 def initComplexTypes(Iterable<PartialComplexTypeInterpretation> types) {
87 types.toMap[it.interpretationOf] 87 types.toMap[it.interpretationOf]
88 } 88 }
89 def initRelations(List<PartialRelationInterpretation> relations) { 89 def initRelations(List<PartialRelationInterpretation> relations) {
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.visualisation/src/hu/bme/mit/inf/dslreasoner/visualisation/pi2graphviz/PartialInterpretation2Graphviz.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.visualisation/src/hu/bme/mit/inf/dslreasoner/visualisation/pi2graphviz/PartialInterpretation2Graphviz.xtend
index e30b27ac..78326207 100644
--- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.visualisation/src/hu/bme/mit/inf/dslreasoner/visualisation/pi2graphviz/PartialInterpretation2Graphviz.xtend
+++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.visualisation/src/hu/bme/mit/inf/dslreasoner/visualisation/pi2graphviz/PartialInterpretation2Graphviz.xtend
@@ -10,11 +10,15 @@ import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Relation
10import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Type 10import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Type
11import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.TypeDefinition 11import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.TypeDefinition
12import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.BinaryElementRelationLink 12import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.BinaryElementRelationLink
13import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.BooleanElement
14import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.IntegerElement
15import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialComplexTypeInterpretation
13import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation 16import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation
17import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.RealElement
18import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.StringElement
14import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.visualisation.PartialInterpretationVisualisation 19import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.visualisation.PartialInterpretationVisualisation
15import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.visualisation.PartialInterpretationVisualiser 20import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.visualisation.PartialInterpretationVisualiser
16import hu.bme.mit.inf.dslreasoner.workspace.ReasonerWorkspace 21import hu.bme.mit.inf.dslreasoner.workspace.ReasonerWorkspace
17import java.util.Collection
18import java.util.HashMap 22import java.util.HashMap
19import java.util.HashSet 23import java.util.HashSet
20import java.util.LinkedList 24import java.util.LinkedList
@@ -45,10 +49,7 @@ class GraphvizVisualiser implements PartialInterpretationVisualiser {
45 return 49 return
46 model.problem.elements + 50 model.problem.elements +
47 model.newElements + 51 model.newElements +
48 model.booleanelements+ 52 model.openWorldElements
49 model.integerelements+
50 model.stringelement+
51 model.realelements
52 } 53 }
53 54
54 def private visualisePartialInterpretation(PartialInterpretation partialInterpretation, boolean concretizationOnly) { 55 def private visualisePartialInterpretation(PartialInterpretation partialInterpretation, boolean concretizationOnly) {
@@ -72,7 +73,7 @@ class GraphvizVisualiser implements PartialInterpretationVisualiser {
72 mustTypes.get(element)+=typeDefinition 73 mustTypes.get(element)+=typeDefinition
73 } 74 }
74 } 75 }
75 for(partialTypeInterpretations: partialInterpretation.partialtypeinterpratation) { 76 for(partialTypeInterpretations: partialInterpretation.partialtypeinterpratation.filter(PartialComplexTypeInterpretation)) {
76 for(element : partialTypeInterpretations.elements) { 77 for(element : partialTypeInterpretations.elements) {
77 mustTypes.get(element)+=partialTypeInterpretations.interpretationOf 78 mustTypes.get(element)+=partialTypeInterpretations.interpretationOf
78 } 79 }
@@ -105,10 +106,10 @@ class GraphvizVisualiser implements PartialInterpretationVisualiser {
105// elements2Node.put(newElement,image) 106// elements2Node.put(newElement,image)
106// } 107// }
107 108
108 partialInterpretation.booleanelements.drawDataTypes([it.value.toString],elements2Node,elements2ID) 109 partialInterpretation.newElements.filter(BooleanElement).drawDataTypes([it.value.toString],elements2Node,elements2ID)
109 partialInterpretation.integerelements.drawDataTypes([it.value.toString],elements2Node,elements2ID) 110 partialInterpretation.newElements.filter(IntegerElement).drawDataTypes([it.value.toString],elements2Node,elements2ID)
110 partialInterpretation.stringelement.drawDataTypes(['''"«it.value.toString»"'''],elements2Node,elements2ID) 111 partialInterpretation.newElements.filter(StringElement).drawDataTypes(['''"«it.value.toString»"'''],elements2Node,elements2ID)
111 partialInterpretation.realelements.drawDataTypes([it.value.toString],elements2Node,elements2ID) 112 partialInterpretation.newElements.filter(RealElement).drawDataTypes([it.value.toString],elements2Node,elements2ID)
112 113
113 // Drawing the edges 114 // Drawing the edges
114 val edges = new HashMap 115 val edges = new HashMap
@@ -134,7 +135,7 @@ class GraphvizVisualiser implements PartialInterpretationVisualiser {
134 return new GraphvizVisualisation(graph) 135 return new GraphvizVisualisation(graph)
135 } 136 }
136 137
137 def protected <T extends DefinedElement> void drawDataTypes(Collection<T> collection, Function1<T,String> namer, HashMap<DefinedElement, Node> elements2Node, HashMap<DefinedElement, String> elements2ID) { 138 def protected <T extends DefinedElement> void drawDataTypes(Iterable<T> collection, Function1<T,String> namer, HashMap<DefinedElement, Node> elements2Node, HashMap<DefinedElement, String> elements2ID) {
138 for(booleanElementIndex: 0..<collection.size) { 139 for(booleanElementIndex: 0..<collection.size) {
139 val newElement = collection.get(booleanElementIndex) 140 val newElement = collection.get(booleanElementIndex)
140 val id = namer.apply(newElement) 141 val id = namer.apply(newElement)