aboutsummaryrefslogtreecommitdiffstats
path: root/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/src/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/Logic2VampireLanguageMapper.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.xtend')
-rw-r--r--Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/src/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/Logic2VampireLanguageMapper.xtend56
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 }