diff options
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.xtend | 38 |
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 | ||