aboutsummaryrefslogtreecommitdiffstats
path: root/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/src/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/Logic2VampireLanguageMapper_ContainmentMapper.xtend
diff options
context:
space:
mode:
Diffstat (limited to 'Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/src/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/Logic2VampireLanguageMapper_ContainmentMapper.xtend')
-rw-r--r--Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/src/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/Logic2VampireLanguageMapper_ContainmentMapper.xtend38
1 files changed, 30 insertions, 8 deletions
diff --git a/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/src/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/Logic2VampireLanguageMapper_ContainmentMapper.xtend b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/src/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/Logic2VampireLanguageMapper_ContainmentMapper.xtend
index 9f29ea49..93c28e7c 100644
--- a/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/src/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/Logic2VampireLanguageMapper_ContainmentMapper.xtend
+++ b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/src/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/Logic2VampireLanguageMapper_ContainmentMapper.xtend
@@ -70,6 +70,7 @@ class Logic2VampireLanguageMapper_ContainmentMapper {
70 70
71 val topName = topTermVar.lookup(trace.type2Predicate).constant.toString 71 val topName = topTermVar.lookup(trace.type2Predicate).constant.toString
72 val topTerm = support.duplicate(topTermVar.lookup(trace.type2Predicate)) 72 val topTerm = support.duplicate(topTermVar.lookup(trace.type2Predicate))
73 trace.topLevelType = topTermVar
73 74
74 var topLvlIsInInitModel = false 75 var topLvlIsInInitModel = false
75 var topLvlString = "" 76 var topLvlString = ""
@@ -129,16 +130,22 @@ class Logic2VampireLanguageMapper_ContainmentMapper {
129 val varList = newArrayList(varB, varA) 130 val varList = newArrayList(varB, varA)
130 val Map<VLSFunction, List<VLSFunction>> type2cont = new HashMap 131 val Map<VLSFunction, List<VLSFunction>> type2cont = new HashMap
131 for (l : relationsList) { 132 for (l : relationsList) {
132 val rel = support.duplicate((l as RelationDeclaration).lookup(trace.rel2Predicate), varList) 133 val rel = (l as RelationDeclaration).lookup(trace.rel2Predicate)
133// val fromType = (l.parameters.get(0) as ComplexTypeReference).referred as Type 134// val fromType = (l.parameters.get(0) as ComplexTypeReference).referred as Type
134 val toType = ((l.parameters.get(1) as ComplexTypeReference).referred as Type) 135 val toType = ((l.parameters.get(1) as ComplexTypeReference).referred as Type)
135 val toFunc = toType.lookup(trace.type2Predicate) 136 val toFunc = toType.lookup(trace.type2Predicate)
136 137
137 addToMap(type2cont, toFunc, rel) 138 addToMap(type2cont, support.duplicate(toFunc), support.duplicate(rel, varList))
138 139
139 for (c : toType.subtypes) { 140 var subTypes = newArrayList
140 addToMap(type2cont, toFunc, rel) 141 support.listSubtypes(toType, subTypes)
142 for (c : subTypes) {
143 addToMap(type2cont, support.duplicate(c.lookup(trace.type2Predicate)), support.duplicate(rel, varList))
141 } 144 }
145
146
147
148
142// for (c : support.listSubtypes(toType)) { 149// for (c : support.listSubtypes(toType)) {
143// addToMap(type2cont, toFunc, rel) 150// addToMap(type2cont, toFunc, rel)
144// } 151// }
@@ -182,6 +189,7 @@ class Logic2VampireLanguageMapper_ContainmentMapper {
182 189
183// STEP 2 CONT'D 190// STEP 2 CONT'D
184 for (e : type2cont.entrySet) { 191 for (e : type2cont.entrySet) {
192 println(e.key + " " + e.value)
185 val relFormula = createVLSFofFormula => [ 193 val relFormula = createVLSFofFormula => [
186 it.name = support.toIDMultiple("containment_contained", e.key.constant.toString) 194 it.name = support.toIDMultiple("containment_contained", e.key.constant.toString)
187 it.fofRole = "axiom" 195 it.fofRole = "axiom"
@@ -192,6 +200,11 @@ class Logic2VampireLanguageMapper_ContainmentMapper {
192 it.left = support.duplicate(e.key, varA) 200 it.left = support.duplicate(e.key, varA)
193 it.right = createVLSExistentialQuantifier => [ 201 it.right = createVLSExistentialQuantifier => [
194 it.variables += support.duplicate(varB) 202 it.variables += support.duplicate(varB)
203// for ( x : type2cont.entrySet) {
204// if (support.dfsSupertypeCheck(e.key, x.key)) {
205// e.value.addAll(x.value)
206// }
207// }
195 if (e.value.length > 1) { 208 if (e.value.length > 1) {
196 it.operand = makeUnique(e.value) 209 it.operand = makeUnique(e.value)
197 } else { 210 } else {
@@ -264,11 +277,20 @@ class Logic2VampireLanguageMapper_ContainmentMapper {
264 } 277 }
265 278
266 protected def Object addToMap(Map<VLSFunction, List<VLSFunction>> type2cont, VLSFunction toFunc, VLSFunction rel) { 279 protected def Object addToMap(Map<VLSFunction, List<VLSFunction>> type2cont, VLSFunction toFunc, VLSFunction rel) {
267 if (!type2cont.containsKey(toFunc)) { 280 var keyInMap = false
281 var existingKey = createVLSFunction
282 for (k : type2cont.keySet) {
283 if (k.constant.equals(toFunc.constant)) {
284 keyInMap = true
285 existingKey = k
286 }
287 }
288
289 if (!keyInMap) {
268 type2cont.put(toFunc, newArrayList(rel)) 290 type2cont.put(toFunc, newArrayList(rel))
269 } else { 291 } else {
270 if (!type2cont.get(toFunc).contains(rel)) { 292 if (!type2cont.get(existingKey).contains(rel)) {
271 type2cont.get(toFunc).add(rel) 293 type2cont.get(existingKey).add(rel)
272 // type2cont.replace(toFunc, newArrayList(firstRel)) 294 // type2cont.replace(toFunc, newArrayList(firstRel))
273 } 295 }
274 296