diff options
Diffstat (limited to 'Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/src/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/Logic2VampireLanguageMapper.xtend')
-rw-r--r-- | Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/src/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/Logic2VampireLanguageMapper.xtend | 56 |
1 files changed, 44 insertions, 12 deletions
diff --git a/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/src/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/Logic2VampireLanguageMapper.xtend b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/src/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/Logic2VampireLanguageMapper.xtend index b617912d..60309f2d 100644 --- a/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/src/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/Logic2VampireLanguageMapper.xtend +++ b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/src/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/Logic2VampireLanguageMapper.xtend | |||
@@ -79,14 +79,15 @@ class Logic2VampireLanguageMapper { | |||
79 | if (!problem.types.isEmpty) { | 79 | if (!problem.types.isEmpty) { |
80 | typeMapper.transformTypes(problem.types, problem.elements, this, trace) | 80 | typeMapper.transformTypes(problem.types, problem.elements, this, trace) |
81 | } | 81 | } |
82 | 82 | ||
83 | // RELATION MAPPER | 83 | // RELATION MAPPER |
84 | trace.relationDefinitions = problem.collectRelationDefinitions | 84 | trace.relationDefinitions = problem.collectRelationDefinitions |
85 | // println(problem.relations.filter[class == RelationDefinitionImpl]) | 85 | // println(problem.relations.filter[class == RelationDefinitionImpl]) |
86 | toTrace(problem.relations.filter[class == RelationDefinitionImpl], trace) | ||
86 | problem.relations.forEach[this.relationMapper.transformRelation(it, trace, new Logic2VampireLanguageMapper)] | 87 | problem.relations.forEach[this.relationMapper.transformRelation(it, trace, new Logic2VampireLanguageMapper)] |
87 | 88 | ||
88 | // CONTAINMENT MAPPER | 89 | // CONTAINMENT MAPPER |
89 | containmentMapper.transformContainment(config,problem.containmentHierarchies, trace) | 90 | containmentMapper.transformContainment(config, problem.containmentHierarchies, trace) |
90 | 91 | ||
91 | // SCOPE MAPPER | 92 | // SCOPE MAPPER |
92 | scopeMapper.transformScope(problem.types, config, trace) | 93 | scopeMapper.transformScope(problem.types, config, trace) |
@@ -107,6 +108,39 @@ class Logic2VampireLanguageMapper { | |||
107 | return new TracedOutput(specification, trace) | 108 | return new TracedOutput(specification, trace) |
108 | } | 109 | } |
109 | 110 | ||
111 | def toTrace(Iterable<Relation> relations, Logic2VampireLanguageMapperTrace trace) { | ||
112 | val List<VLSVariable> vars = newArrayList | ||
113 | for (rel : relations) { | ||
114 | //decide name | ||
115 | val nameArray = rel.name.split(" ") | ||
116 | var relNameVar = "" | ||
117 | if (nameArray.length == 3) { | ||
118 | relNameVar = support.toIDMultiple(nameArray.get(0), nameArray.get(2)) | ||
119 | } else { | ||
120 | relNameVar = rel.name | ||
121 | } | ||
122 | val relName = relNameVar | ||
123 | |||
124 | val relDef = rel as RelationDefinition | ||
125 | for (i : 0 ..< rel.parameters.length) { | ||
126 | |||
127 | val v = createVLSVariable => [ | ||
128 | it.name = support.toIDMultiple("V", i.toString) | ||
129 | ] | ||
130 | vars.add(v) | ||
131 | } | ||
132 | |||
133 | val relFunc = createVLSFunction => [ | ||
134 | it.constant = support.toIDMultiple("r", relName) | ||
135 | for (v : vars) { | ||
136 | it.terms += support.duplicate(v) | ||
137 | } | ||
138 | ] | ||
139 | trace.relDef2Predicate.put(relDef, relFunc) | ||
140 | trace.predicate2RelDef.put(relFunc, relDef) | ||
141 | } | ||
142 | } | ||
143 | |||
110 | // End of transformProblem | 144 | // End of transformProblem |
111 | // //////////// | 145 | // //////////// |
112 | // Type References | 146 | // Type References |
@@ -169,7 +203,6 @@ class Logic2VampireLanguageMapper { | |||
169 | // Map<Variable, VLSVariable> variables) { | 203 | // Map<Variable, VLSVariable> variables) { |
170 | // createVLSReal => [it.value = literal.value.toString()] | 204 | // createVLSReal => [it.value = literal.value.toString()] |
171 | // } | 205 | // } |
172 | |||
173 | def dispatch protected VLSTerm transformTerm(Not not, Logic2VampireLanguageMapperTrace trace, | 206 | def dispatch protected VLSTerm transformTerm(Not not, Logic2VampireLanguageMapperTrace trace, |
174 | Map<Variable, VLSVariable> variables) { | 207 | Map<Variable, VLSVariable> variables) { |
175 | createVLSUnaryNegation => [operand = not.operand.transformTerm(trace, variables)] | 208 | createVLSUnaryNegation => [operand = not.operand.transformTerm(trace, variables)] |
@@ -265,10 +298,10 @@ class Logic2VampireLanguageMapper { | |||
265 | def dispatch protected VLSTerm transformSymbolicReference(DefinedElement referred, | 298 | def dispatch protected VLSTerm transformSymbolicReference(DefinedElement referred, |
266 | List<Term> parameterSubstitutions, Logic2VampireLanguageMapperTrace trace, | 299 | List<Term> parameterSubstitutions, Logic2VampireLanguageMapperTrace trace, |
267 | Map<Variable, VLSVariable> variables) { | 300 | Map<Variable, VLSVariable> variables) { |
268 | val name = referred.lookup(trace.definedElement2String) | 301 | val name = referred.lookup(trace.definedElement2String) |
269 | return createVLSConstant => [ | 302 | return createVLSConstant => [ |
270 | it.name = name | 303 | it.name = name |
271 | ] | 304 | ] |
272 | // typeMapper.transformReference(referred, trace) | 305 | // typeMapper.transformReference(referred, trace) |
273 | } | 306 | } |
274 | 307 | ||
@@ -390,12 +423,11 @@ class Logic2VampireLanguageMapper { | |||
390 | // } | 423 | // } |
391 | return createVLSFunction => [ | 424 | return createVLSFunction => [ |
392 | if (relation.class == RelationDeclarationImpl) { | 425 | if (relation.class == RelationDeclarationImpl) { |
393 | it.constant = (relation as RelationDeclaration).lookup(trace.rel2Predicate).constant | 426 | it.constant = (relation as RelationDeclaration).lookup(trace.rel2Predicate).constant |
394 | } | 427 | } else { |
395 | else { | ||
396 | it.constant = (relation as RelationDefinition).lookup(trace.relDef2Predicate).constant | 428 | it.constant = (relation as RelationDefinition).lookup(trace.relDef2Predicate).constant |
397 | } | 429 | } |
398 | 430 | ||
399 | it.terms += parameterSubstitutions.map[p|p.transformTerm(trace, variables)] | 431 | it.terms += parameterSubstitutions.map[p|p.transformTerm(trace, variables)] |
400 | ] | 432 | ] |
401 | } | 433 | } |