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 | 386 |
1 files changed, 386 insertions, 0 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 new file mode 100644 index 00000000..5ec15541 --- /dev/null +++ b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/src/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/Logic2VampireLanguageMapper.xtend | |||
@@ -0,0 +1,386 @@ | |||
1 | package ca.mcgill.ecse.dslreasoner.vampire.reasoner.builder | ||
2 | |||
3 | import hu.bme.mit.inf.dslreasoner.logic.model.builder.TracedOutput | ||
4 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.And | ||
5 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Assertion | ||
6 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.BoolLiteral | ||
7 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.BoolTypeReference | ||
8 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.ComplexTypeReference | ||
9 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.ConstantDeclaration | ||
10 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.ConstantDefinition | ||
11 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.DefinedElement | ||
12 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Distinct | ||
13 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Equals | ||
14 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Exists | ||
15 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Forall | ||
16 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.FunctionDeclaration | ||
17 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.FunctionDefinition | ||
18 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Iff | ||
19 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Impl | ||
20 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.InstanceOf | ||
21 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.IntLiteral | ||
22 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Not | ||
23 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Or | ||
24 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.RealLiteral | ||
25 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Relation | ||
26 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.RelationDefinition | ||
27 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.SymbolicValue | ||
28 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Term | ||
29 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Variable | ||
30 | import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.LogicProblem | ||
31 | import ca.mcgill.ecse.dslreasoner.vampire.reasoner.VampireSolverConfiguration | ||
32 | import ca.mcgill.ecse.dslreasoner.vampireLanguage.VLSTerm | ||
33 | import ca.mcgill.ecse.dslreasoner.vampireLanguage.VLSVariable | ||
34 | import ca.mcgill.ecse.dslreasoner.vampireLanguage.VampireLanguageFactory | ||
35 | import ca.mcgill.ecse.dslreasoner.vampireLanguage.VampireModel | ||
36 | import java.util.Collections | ||
37 | import java.util.HashMap | ||
38 | import java.util.List | ||
39 | import java.util.Map | ||
40 | import org.eclipse.xtend.lib.annotations.Accessors | ||
41 | |||
42 | import static extension hu.bme.mit.inf.dslreasoner.util.CollectionsUtil.* | ||
43 | |||
44 | class Logic2VampireLanguageMapper { | ||
45 | private val extension VampireLanguageFactory factory = VampireLanguageFactory.eINSTANCE | ||
46 | private val Logic2VampireLanguageMapper_Support support = new Logic2VampireLanguageMapper_Support; | ||
47 | @Accessors(PUBLIC_GETTER) private val Logic2VampireLanguageMapper_ConstantMapper constantMapper = new Logic2VampireLanguageMapper_ConstantMapper( | ||
48 | this) | ||
49 | @Accessors(PUBLIC_GETTER) private val Logic2VampireLanguageMapper_RelationMapper relationMapper = new Logic2VampireLanguageMapper_RelationMapper( | ||
50 | this) | ||
51 | @Accessors(PUBLIC_GETTER) private val Logic2VampireLanguageMapper_TypeMapper typeMapper | ||
52 | |||
53 | public new(Logic2VampireLanguageMapper_TypeMapper typeMapper) { | ||
54 | this.typeMapper = typeMapper | ||
55 | } | ||
56 | |||
57 | public def TracedOutput<VampireModel, Logic2VampireLanguageMapperTrace> transformProblem(LogicProblem problem, | ||
58 | VampireSolverConfiguration configuration) { | ||
59 | // create model bases | ||
60 | // TODO | ||
61 | val initialComment = createVLSComment => [ | ||
62 | it.comment = "%This is an initial Test Comment \r" | ||
63 | ] | ||
64 | |||
65 | val specification = createVampireModel => [ | ||
66 | it.comments += initialComment | ||
67 | ] | ||
68 | |||
69 | val trace = new Logic2VampireLanguageMapperTrace => [ | ||
70 | it.specification = specification | ||
71 | |||
72 | // it.incQueryEngine = viatraQueryEngine.on(new EMFScope(problem)) | ||
73 | ] | ||
74 | |||
75 | // call mappers | ||
76 | if (!problem.types.isEmpty) { | ||
77 | typeMapper.transformTypes(problem.types, problem.elements, this, trace) | ||
78 | } | ||
79 | |||
80 | trace.constantDefinitions = problem.collectConstantDefinitions | ||
81 | trace.relationDefinitions = problem.collectRelationDefinitions | ||
82 | |||
83 | problem.relations.forEach[this.relationMapper.transformRelation(it, trace)] | ||
84 | |||
85 | // only transforms definitions | ||
86 | // problem.constants.filter(ConstantDefinition).forEach[this.constantMapper.transformConstant(it, trace)] | ||
87 | problem.constants.filter(ConstantDefinition).forEach [ | ||
88 | this.constantMapper.transformConstantDefinitionSpecification(it, trace) | ||
89 | ] | ||
90 | |||
91 | // ////////////////// | ||
92 | // Transform Assertions | ||
93 | // ////////////////// | ||
94 | for (assertion : problem.assertions) { | ||
95 | transformAssertion(assertion, trace) | ||
96 | } | ||
97 | |||
98 | return new TracedOutput(specification, trace) | ||
99 | } | ||
100 | |||
101 | // End of transformProblem | ||
102 | // //////////// | ||
103 | // Type References | ||
104 | // //////////// | ||
105 | def dispatch protected VLSTerm transformTypeReference(BoolTypeReference boolTypeReference, | ||
106 | Logic2VampireLanguageMapperTrace trace) { | ||
107 | // TODO, Not Now | ||
108 | // return createALSReference => [ it.referred = support.getBooleanType(trace) ] | ||
109 | } | ||
110 | |||
111 | // //////////// | ||
112 | // Collectors | ||
113 | // //////////// | ||
114 | // exact Same as for Alloy | ||
115 | private def collectConstantDefinitions(LogicProblem problem) { | ||
116 | val res = new HashMap | ||
117 | problem.constants.filter(ConstantDefinition).filter[it.defines !== null].forEach [ | ||
118 | res.put(it.defines, it) | ||
119 | ] | ||
120 | return res | ||
121 | } | ||
122 | |||
123 | private def collectRelationDefinitions(LogicProblem problem) { | ||
124 | val res = new HashMap | ||
125 | problem.relations.filter(RelationDefinition).filter[it.defines !== null].forEach [ | ||
126 | res.put(it.defines, it) | ||
127 | ] | ||
128 | return res | ||
129 | } | ||
130 | |||
131 | // //////////// | ||
132 | // Assertions + Terms | ||
133 | // //////////// | ||
134 | def protected transformAssertion(Assertion assertion, Logic2VampireLanguageMapperTrace trace) { | ||
135 | val res = createVLSFofFormula => [ | ||
136 | it.name = support.toID(assertion.name) | ||
137 | // below is temporary solution | ||
138 | it.fofRole = "axiom" | ||
139 | it.fofFormula = assertion.value.transformTerm(trace, Collections.EMPTY_MAP) | ||
140 | // it.annotation = nothing | ||
141 | ] | ||
142 | trace.specification.formulas += res | ||
143 | } | ||
144 | |||
145 | def dispatch protected VLSTerm transformTerm(BoolLiteral literal, Logic2VampireLanguageMapperTrace trace, | ||
146 | Map<Variable, VLSVariable> variables) { | ||
147 | if (literal.value == true) { | ||
148 | createVLSTrue | ||
149 | } else { | ||
150 | createVLSFalse | ||
151 | } | ||
152 | } | ||
153 | |||
154 | def dispatch protected VLSTerm transformTerm(IntLiteral literal, Logic2VampireLanguageMapperTrace trace, | ||
155 | Map<Variable, VLSVariable> variables) { | ||
156 | createVLSInt => [it.value = literal.value.toString()] | ||
157 | } | ||
158 | |||
159 | def dispatch protected VLSTerm transformTerm(RealLiteral literal, Logic2VampireLanguageMapperTrace trace, | ||
160 | Map<Variable, VLSVariable> variables) { | ||
161 | createVLSReal => [it.value = literal.value.toString()] | ||
162 | } | ||
163 | |||
164 | def dispatch protected VLSTerm transformTerm(Not not, Logic2VampireLanguageMapperTrace trace, | ||
165 | Map<Variable, VLSVariable> variables) { | ||
166 | createVLSUnaryNegation => [operand = not.operand.transformTerm(trace, variables)] | ||
167 | } | ||
168 | |||
169 | def dispatch protected VLSTerm transformTerm(And and, Logic2VampireLanguageMapperTrace trace, | ||
170 | Map<Variable, VLSVariable> variables) { support.unfoldAnd(and.operands.map[transformTerm(trace, variables)]) } | ||
171 | |||
172 | def dispatch protected VLSTerm transformTerm(Or or, Logic2VampireLanguageMapperTrace trace, | ||
173 | Map<Variable, VLSVariable> variables) { support.unfoldOr(or.operands.map[transformTerm(trace, variables)]) } | ||
174 | |||
175 | def dispatch protected VLSTerm transformTerm(Impl impl, Logic2VampireLanguageMapperTrace trace, | ||
176 | Map<Variable, VLSVariable> variables) { | ||
177 | createVLSImplies => [ | ||
178 | left = impl.leftOperand.transformTerm(trace, variables) | ||
179 | right = impl.rightOperand.transformTerm(trace, variables) | ||
180 | ] | ||
181 | } | ||
182 | |||
183 | def dispatch protected VLSTerm transformTerm(Iff iff, Logic2VampireLanguageMapperTrace trace, | ||
184 | Map<Variable, VLSVariable> variables) { | ||
185 | createVLSEquivalent => [ | ||
186 | left = iff.leftOperand.transformTerm(trace, variables) | ||
187 | right = iff.rightOperand.transformTerm(trace, variables) | ||
188 | ] | ||
189 | } | ||
190 | |||
191 | // def dispatch protected VLSTerm transformTerm(MoreThan moreThan, Logic2VampireLanguageMapperTrace trace, Map<Variable, VLSVariable> variables) { | ||
192 | // createALSMore => [leftOperand = moreThan.leftOperand.transformTerm(trace,variables) rightOperand = moreThan.rightOperand.transformTerm(trace,variables)] } | ||
193 | // def dispatch protected VLSTerm transformTerm(LessThan lessThan, Logic2VampireLanguageMapperTrace trace, Map<Variable, VLSVariable> variables) { | ||
194 | // createALSLess => [leftOperand = lessThan.leftOperand.transformTerm(trace,variables) rightOperand = lessThan.rightOperand.transformTerm(trace,variables)] } | ||
195 | // def dispatch protected VLSTerm transformTerm(MoreOrEqualThan moreThan, Logic2VampireLanguageMapperTrace trace, Map<Variable, VLSVariable> variables) { | ||
196 | // createALSMeq => [leftOperand = moreThan.leftOperand.transformTerm(trace,variables) rightOperand = moreThan.rightOperand.transformTerm(trace,variables)] } | ||
197 | // def dispatch protected VLSTerm transformTerm(LessOrEqualThan lessThan, Logic2VampireLanguageMapperTrace trace, Map<Variable, VLSVariable> variables) { | ||
198 | // createALSLeq => [leftOperand = lessThan.leftOperand.transformTerm(trace,variables) rightOperand = lessThan.rightOperand.transformTerm(trace,variables)] } | ||
199 | def dispatch protected VLSTerm transformTerm(Equals equals, Logic2VampireLanguageMapperTrace trace, | ||
200 | Map<Variable, VLSVariable> variables) { | ||
201 | createVLSEquality => [ | ||
202 | left = equals.leftOperand.transformTerm(trace, variables) | ||
203 | right = equals.rightOperand.transformTerm(trace, variables) | ||
204 | ] | ||
205 | } | ||
206 | |||
207 | def dispatch protected VLSTerm transformTerm(Distinct distinct, Logic2VampireLanguageMapperTrace trace, Map<Variable, VLSVariable> variables) { | ||
208 | support.unfoldDistinctTerms(this,distinct.operands,trace,variables) } | ||
209 | // | ||
210 | // def dispatch protected ALSTerm transformTerm(Plus plus, Logic2AlloyLanguageMapperTrace trace, Map<Variable, ALSVariableDeclaration> variables) { | ||
211 | // createALSFunctionCall => [it.params += plus.leftOperand.transformTerm(trace,variables) it.params += plus.rightOperand.transformTerm(trace,variables) it.referredNumericOperator = ALSNumericOperator.PLUS] } | ||
212 | // def dispatch protected ALSTerm transformTerm(Minus minus, Logic2AlloyLanguageMapperTrace trace, Map<Variable, ALSVariableDeclaration> variables) { | ||
213 | // createALSFunctionCall => [it.params += minus.leftOperand.transformTerm(trace,variables) it.params += minus.rightOperand.transformTerm(trace,variables) it.referredNumericOperator = ALSNumericOperator.SUB] } | ||
214 | // def dispatch protected ALSTerm transformTerm(Multiply multiply, Logic2AlloyLanguageMapperTrace trace, Map<Variable, ALSVariableDeclaration> variables) { | ||
215 | // createALSFunctionCall => [it.params += multiply.leftOperand.transformTerm(trace,variables) it.params += multiply.rightOperand.transformTerm(trace,variables) it.referredNumericOperator = ALSNumericOperator.MUL] } | ||
216 | // def dispatch protected ALSTerm transformTerm(Divison div, Logic2AlloyLanguageMapperTrace trace, Map<Variable, ALSVariableDeclaration> variables) { | ||
217 | // createALSFunctionCall => [it.params += div.leftOperand.transformTerm(trace,variables) it.params += div.rightOperand.transformTerm(trace,variables) it.referredNumericOperator = ALSNumericOperator.DIV] } | ||
218 | // def dispatch protected ALSTerm transformTerm(Mod mod, Logic2AlloyLanguageMapperTrace trace, Map<Variable, ALSVariableDeclaration> variables) { | ||
219 | // createALSFunctionCall => [it.params += mod.leftOperand.transformTerm(trace,variables) it.params += mod.rightOperand.transformTerm(trace,variables) it.referredNumericOperator = ALSNumericOperator.REM] } | ||
220 | // | ||
221 | def dispatch protected VLSTerm transformTerm(Forall forall, Logic2VampireLanguageMapperTrace trace, | ||
222 | Map<Variable, VLSVariable> variables) { | ||
223 | support.createUniversallyQuantifiedExpression(this, forall, trace, variables) | ||
224 | } | ||
225 | |||
226 | def dispatch protected VLSTerm transformTerm(Exists exists, Logic2VampireLanguageMapperTrace trace, | ||
227 | Map<Variable, VLSVariable> variables) { | ||
228 | support.createExistentiallyQuantifiedExpression(this, exists, trace, variables) | ||
229 | } | ||
230 | |||
231 | def dispatch protected VLSTerm transformTerm(InstanceOf instanceOf, Logic2VampireLanguageMapperTrace trace, Map<Variable, VLSVariable> variables) { | ||
232 | return createVLSFunction => [ | ||
233 | it.constant = support.toIDMultiple("type", (instanceOf.range as ComplexTypeReference).referred.name ) | ||
234 | it.terms += instanceOf.value.transformTerm(trace, variables) | ||
235 | ] | ||
236 | } | ||
237 | // | ||
238 | // def dispatch protected ALSTerm transformTerm(TransitiveClosure tc, Logic2AlloyLanguageMapperTrace trace, Map<Variable, ALSVariableDeclaration> variables) { | ||
239 | // return this.relationMapper.transformTransitiveRelationReference( | ||
240 | // tc.relation, | ||
241 | // tc.leftOperand.transformTerm(trace,variables), | ||
242 | // tc.rightOperand.transformTerm(trace,variables), | ||
243 | // trace | ||
244 | // ) | ||
245 | // } | ||
246 | // | ||
247 | def dispatch protected VLSTerm transformTerm(SymbolicValue symbolicValue, Logic2VampireLanguageMapperTrace trace, | ||
248 | Map<Variable, VLSVariable> variables) { | ||
249 | symbolicValue.symbolicReference.transformSymbolicReference(symbolicValue.parameterSubstitutions, trace, | ||
250 | variables) | ||
251 | } | ||
252 | |||
253 | def dispatch protected VLSTerm transformSymbolicReference(DefinedElement referred, | ||
254 | List<Term> parameterSubstitutions, Logic2VampireLanguageMapperTrace trace, | ||
255 | Map<Variable, VLSVariable> variables) { | ||
256 | typeMapper.transformReference(referred, trace) | ||
257 | } | ||
258 | |||
259 | def dispatch protected VLSTerm transformSymbolicReference(ConstantDeclaration constant, | ||
260 | List<Term> parameterSubstitutions, Logic2VampireLanguageMapperTrace trace, | ||
261 | Map<Variable, VLSVariable> variables) { | ||
262 | // might need to make sure that only declared csts get transformed. see for Alloy | ||
263 | val res = createVLSConstant => [ | ||
264 | // ask if necessary VLSConstantDeclaration and not just directly strng | ||
265 | it.name = support.toID(constant.name) | ||
266 | ] | ||
267 | // no postprocessing cuz booleans are accepted | ||
268 | return res | ||
269 | } | ||
270 | |||
271 | // NOT NEEDED FOR NOW | ||
272 | // TODO | ||
273 | def dispatch protected VLSTerm transformSymbolicReference(ConstantDefinition constant, | ||
274 | List<Term> parameterSubstitutions, Logic2VampireLanguageMapperTrace trace, | ||
275 | Map<Variable, VLSVariable> variables) { | ||
276 | // val res = createVLSFunctionCall => [ | ||
277 | // it.referredDefinition = constant.lookup(trace.constantDefinition2Function) | ||
278 | // ] | ||
279 | // return support.postprocessResultOfSymbolicReference(constant.type,res,trace) | ||
280 | } | ||
281 | |||
282 | def dispatch protected VLSTerm transformSymbolicReference(Variable variable, | ||
283 | List<Term> parameterSubstitutions, Logic2VampireLanguageMapperTrace trace, | ||
284 | Map<Variable, VLSVariable> variables) { | ||
285 | |||
286 | // cannot treat variable as function (constant) because of name ID not being the same | ||
287 | // below does not work | ||
288 | val res = createVLSVariable => [ | ||
289 | // it.name = support.toIDMultiple("Var", variable.lookup(variables).name) | ||
290 | it.name = support.toID(variable.lookup(variables).name) | ||
291 | ] | ||
292 | // no need for potprocessing cuz booleans are supported | ||
293 | return res | ||
294 | } | ||
295 | |||
296 | // TODO | ||
297 | def dispatch protected VLSTerm transformSymbolicReference(FunctionDeclaration function, | ||
298 | List<Term> parameterSubstitutions, Logic2VampireLanguageMapperTrace trace, | ||
299 | Map<Variable, VLSVariable> variables) { | ||
300 | // if(trace.functionDefinitions.containsKey(function)) { | ||
301 | // return this.transformSymbolicReference(function.lookup(trace.functionDefinitions),parameterSubstitutions,trace,variables) | ||
302 | // } else { | ||
303 | // if(functionMapper.transformedToHostedField(function,trace)) { | ||
304 | // val param = parameterSubstitutions.get(0).transformTerm(trace,variables) | ||
305 | // val res = createVLSJoin => [ | ||
306 | // leftOperand = support.prepareParameterOfSymbolicReference(function.parameters.get(0),param,trace) | ||
307 | // rightOperand = createVLSReference => [referred = function.lookup(trace.functionDeclaration2HostedField)] | ||
308 | // ] | ||
309 | // return support.postprocessResultOfSymbolicReference(function.range,res,trace) | ||
310 | // } else { | ||
311 | // val functionExpression = createVLSJoin=>[ | ||
312 | // leftOperand = createVLSReference => [referred = trace.logicLanguage] | ||
313 | // rightOperand = createVLSReference => [referred = function.lookup(trace.functionDeclaration2LanguageField)] | ||
314 | // ] | ||
315 | // val res = support.unfoldDotJoin(this,parameterSubstitutions,functionExpression,trace,variables) | ||
316 | // return support.postprocessResultOfSymbolicReference(function.range,res,trace) | ||
317 | // } | ||
318 | // } | ||
319 | } | ||
320 | |||
321 | // TODO | ||
322 | def dispatch protected VLSTerm transformSymbolicReference(FunctionDefinition function, | ||
323 | List<Term> parameterSubstitutions, Logic2VampireLanguageMapperTrace trace, | ||
324 | Map<Variable, VLSVariable> variables) { | ||
325 | // val result = createVLSFunctionCall => [ | ||
326 | // it.referredDefinition = function.lookup(trace.functionDefinition2Function) | ||
327 | // it.params += parameterSubstitutions.map[it.transformTerm(trace,variables)] | ||
328 | // ] | ||
329 | // return support.postprocessResultOfSymbolicReference(function.range,result,trace) | ||
330 | } | ||
331 | |||
332 | // TODO | ||
333 | /* | ||
334 | def dispatch protected VLSTerm transformSymbolicReference(Relation relation, | ||
335 | List<Term> parameterSubstitutions, Logic2VampireLanguageMapperTrace trace, | ||
336 | Map<Variable, VLSVariable> variables) { | ||
337 | if (trace.relationDefinitions.containsKey(relation)) { | ||
338 | this.transformSymbolicReference(relation.lookup(trace.relationDefinitions), | ||
339 | parameterSubstitutions, trace, variables) | ||
340 | } | ||
341 | else { | ||
342 | // if (relationMapper.transformToHostedField(relation, trace)) { | ||
343 | // val VLSRelation = relation.lookup(trace.relationDeclaration2Field) | ||
344 | // // R(a,b) => | ||
345 | // // b in a.R | ||
346 | // return createVLSSubset => [ | ||
347 | // it.leftOperand = parameterSubstitutions.get(1).transformTerm(trace, variables) | ||
348 | // it.rightOperand = createVLSJoin => [ | ||
349 | // it.leftOperand = parameterSubstitutions.get(0).transformTerm(trace, variables) | ||
350 | // it.rightOperand = createVLSReference => [it.referred = VLSRelation] | ||
351 | // ] | ||
352 | // ] | ||
353 | // } else { | ||
354 | // val target = createVLSJoin => [ | ||
355 | // leftOperand = createVLSReference => [referred = trace.logicLanguage] | ||
356 | // rightOperand = createVLSReference => [ | ||
357 | // referred = relation.lookup(trace.relationDeclaration2Global) | ||
358 | // ] | ||
359 | // ] | ||
360 | // val source = support.unfoldTermDirectProduct(this, parameterSubstitutions, trace, variables) | ||
361 | // | ||
362 | // return createVLSSubset => [ | ||
363 | // leftOperand = source | ||
364 | // rightOperand = target | ||
365 | // ] | ||
366 | // } | ||
367 | } | ||
368 | } | ||
369 | */ | ||
370 | |||
371 | // TODO | ||
372 | def dispatch protected VLSTerm transformSymbolicReference(Relation relation, | ||
373 | List<Term> parameterSubstitutions, Logic2VampireLanguageMapperTrace trace, | ||
374 | Map<Variable, VLSVariable> variables) { | ||
375 | // createVLSFunction => [ | ||
376 | // it.referredDefinition = relation.lookup(trace.relationDefinition2Predicate) | ||
377 | // it.params += parameterSubstitutions.map[p|p.transformTerm(trace, variables)] | ||
378 | // ] | ||
379 | return createVLSFunction => [ | ||
380 | it.constant = support.toIDMultiple("rel", relation.name) | ||
381 | it.terms += parameterSubstitutions.map[p | p.transformTerm(trace,variables)] | ||
382 | ] | ||
383 | } | ||
384 | |||
385 | } | ||
386 | \ No newline at end of file | ||