aboutsummaryrefslogtreecommitdiffstats
path: root/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/src/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/VampireModelInterpretation.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/VampireModelInterpretation.xtend')
-rw-r--r--Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/src/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/VampireModelInterpretation.xtend167
1 files changed, 150 insertions, 17 deletions
diff --git a/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/src/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/VampireModelInterpretation.xtend b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/src/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/VampireModelInterpretation.xtend
index c2cffa6b..0c93e3fe 100644
--- a/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/src/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/VampireModelInterpretation.xtend
+++ b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/src/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/VampireModelInterpretation.xtend
@@ -1,49 +1,182 @@
1package ca.mcgill.ecse.dslreasoner.vampire.reasoner.builder 1package ca.mcgill.ecse.dslreasoner.vampire.reasoner.builder
2 2
3import ca.mcgill.ecse.dslreasoner.vampireLanguage.VLSAnd
4import ca.mcgill.ecse.dslreasoner.vampireLanguage.VLSConstant
5import ca.mcgill.ecse.dslreasoner.vampireLanguage.VLSEquality
6import ca.mcgill.ecse.dslreasoner.vampireLanguage.VLSFunction
7import ca.mcgill.ecse.dslreasoner.vampireLanguage.VLSFunctionAsTerm
8import ca.mcgill.ecse.dslreasoner.vampireLanguage.VLSOr
9import ca.mcgill.ecse.dslreasoner.vampireLanguage.VLSTerm
10import ca.mcgill.ecse.dslreasoner.vampireLanguage.VLSTffFormula
11import ca.mcgill.ecse.dslreasoner.vampireLanguage.VLSUniversalQuantifier
3import ca.mcgill.ecse.dslreasoner.vampireLanguage.VampireModel 12import ca.mcgill.ecse.dslreasoner.vampireLanguage.VampireModel
13import ca.mcgill.ecse.dslreasoner.vampireLanguage.impl.VLSAndImpl
14import ca.mcgill.ecse.dslreasoner.vampireLanguage.impl.VLSOrImpl
15import ca.mcgill.ecse.dslreasoner.vampireLanguage.impl.VLSUnaryNegationImpl
4import hu.bme.mit.inf.dslreasoner.logic.model.builder.LogicModelInterpretation 16import hu.bme.mit.inf.dslreasoner.logic.model.builder.LogicModelInterpretation
5import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.ConstantDeclaration 17import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.ConstantDeclaration
18import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.DefinedElement
6import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.FunctionDeclaration 19import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.FunctionDeclaration
7import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.LogiclanguageFactory 20import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.LogiclanguageFactory
8import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.RelationDeclaration 21import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.RelationDeclaration
9import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Type 22import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Type
23import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.TypeDeclaration
24import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.TypeDefinition
25import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.impl.TypeDeclarationImpl
26import java.util.HashMap
27import java.util.List
28import java.util.Map
29
30import static extension hu.bme.mit.inf.dslreasoner.util.CollectionsUtil.*
10 31
11class VampireModelInterpretation implements LogicModelInterpretation { 32class VampireModelInterpretation implements LogicModelInterpretation {
12 protected val extension LogiclanguageFactory factory = LogiclanguageFactory.eINSTANCE 33 protected val extension LogiclanguageFactory factory = LogiclanguageFactory.eINSTANCE
13 34
14 protected val Logic2VampireLanguageMapperTrace forwardTrace; 35 protected val Logic2VampireLanguageMapperTrace forwardTrace;
15 36
16 37 private val Map<String, DefinedElement> name2DefinedElement = new HashMap
38 private val Map<TypeDeclaration, List<DefinedElement>> type2DefinedElement = new HashMap
39
40 var num = -1
41
17 public new(VampireModel model, Logic2VampireLanguageMapperTrace trace) { 42 public new(VampireModel model, Logic2VampireLanguageMapperTrace trace) {
18 this.forwardTrace = trace 43 this.forwardTrace = trace
44
45 // 1. look at "finite_domain" formula (there should only be one)
46 // IN REALITY THE DEFINED ELEMENTS ARE DEFINED AS <nameOfDefinedEement>:$i
47 // SPECIFICALLY, THESE ARE "TYPE" FORMULAS
48 val finDomFormula = model.tfformulas.filter[name == "finite_domain"].get(0) as VLSTffFormula
49 val univQuant = finDomFormula.fofFormula as VLSUniversalQuantifier
50 var orFormulaTerm = univQuant.operand
51
52 var end = false
53 while (!end) {
54 if (orFormulaTerm.class == VLSOrImpl) {
55 val orFormula = orFormulaTerm as VLSOr
56 val orRight = orFormula.right as VLSEquality
57 add2ConstDefMap(orRight)
58 orFormulaTerm = orFormula.left
59 } else {
60 val firstTerm = orFormulaTerm as VLSEquality
61 add2ConstDefMap(firstTerm)
62 end = true
63 }
64
65 }
66
67 // 2. associate each type to defined elements
68// println(trace.type2Predicate.keySet)
69// println(trace.type2Predicate.keySet.length)
70// println(trace.type2Predicate.keySet.filter[class == TypeDeclarationImpl])
71// println(trace.type2Predicate.keySet.filter[class == TypeDeclarationImpl].length)
72// println()
73// println(trace.type2Predicate)
74 // Fill keys of map
75 val allTypeDecls = trace.type2Predicate.keySet.filter[class == TypeDeclarationImpl]
76 val allTypeFunctions = trace.predicate2Type
77
78 for (type : allTypeDecls) {
79 type2DefinedElement.put(type as TypeDeclaration, newArrayList)
80 }
81
82 // USE THE DECLARE_<TYPE_NAME> FORMULAS TO SEE WHAT THE TYPES ARE
83 val typeFormulas = model.tfformulas.filter[name.length > 12 && name.substring(0, 12) == "predicate_t_"]
84 // ^this way, we ignore the "object" type
85 //TODO potentially need to handle the enums in this case as well
86 for (formula : typeFormulas) {
87 // get associated type
88 val associatedTypeName = (formula as VLSTffFormula).name.substring(10)
89 val associatedFunction = allTypeFunctions.keySet.filter[constant == associatedTypeName].
90 get(0) as VLSFunction
91 val associatedTypeAll = associatedFunction.lookup(allTypeFunctions)
92// val associatedTypeDeclFormula = model.tfformulas.filter[name == ("declare_t_" + associatedTypeName)].get(0) as VLSTffFormula
93// val associatedTypeDefn = associatedTypeDeclFormula.fofFormula as VLSOtherDeclaration
94// val associatedTypeFct = associatedTypeDefn.name as VLSConstant
95 if (associatedTypeAll.class == TypeDeclarationImpl) {
96 val associatedType = associatedTypeAll as TypeDeclaration
97
98 // get definedElements
99 var andFormulaTerm = formula.fofFormula
100 end = false
101 val List<DefinedElement> instances = newArrayList
102 while (!end) {
103 if (andFormulaTerm.class == VLSAndImpl) {
104 val andFormula = andFormulaTerm as VLSAnd
105 val andRight = andFormula.right
106 addIfNotNeg(andRight, instances)
107 andFormulaTerm = andFormula.left
108 } else {
109 addIfNotNeg(andFormulaTerm as VLSTerm, instances)
110 end = true
111 }
112
113 }
114 for (elem : instances) {
115 associatedType.lookup(type2DefinedElement).add(elem)
116 }
117 }
118 }
119
120 printMap()
121
19 } 122 }
20 123
21 override getElements(Type type) { 124 def printMap() {
22 throw new UnsupportedOperationException("TODO: auto-generated method stub") 125 for (key : type2DefinedElement.keySet) {
126 println(key.name + "==>")
127 for (elem : key.lookup(type2DefinedElement)) {
128 print(elem.name + ", ")
129 }
130 println()
131
132 }
133 println()
23 } 134 }
24 135
136 def private addIfNotNeg(VLSTerm term, List<DefinedElement> list) {
137 if (term.class != VLSUnaryNegationImpl) {
138 val nodeName = ((term as VLSFunction).terms.get(0) as VLSFunctionAsTerm).functor
139 val defnElem = nodeName.lookup(name2DefinedElement)
140 list.add(defnElem)
141 }
142 }
143
144 def private add2ConstDefMap(VLSEquality eq) {
145 val defElemConst = (eq.right as VLSConstant)
146 val definedElement = createDefinedElement => [name = defElemConst.name]
147 this.name2DefinedElement.put(defElemConst.name, definedElement)
148 }
149
150 override getElements(Type type) { getElementsDispatch(type) }
151
152 def private dispatch getElementsDispatch(TypeDeclaration declaration) {
153 return declaration.lookup(this.type2DefinedElement)
154 }
155
156 def private dispatch getElementsDispatch(TypeDefinition declaration) { return declaration.elements }
157
25 override getInterpretation(FunctionDeclaration function, Object[] parameterSubstitution) { 158 override getInterpretation(FunctionDeclaration function, Object[] parameterSubstitution) {
26 throw new UnsupportedOperationException("TODO: auto-generated method stub") 159 throw new UnsupportedOperationException("TODO: auto-generated method stub")
27 } 160 }
28 161
29 override getInterpretation(RelationDeclaration relation, Object[] parameterSubstitution) { 162 override getInterpretation(RelationDeclaration relation, Object[] parameterSubstitution) {
30 throw new UnsupportedOperationException("TODO: auto-generated method stub") 163 throw new UnsupportedOperationException("TODO: auto-generated method stub")
31 } 164 }
32 165
33 override getInterpretation(ConstantDeclaration constant) { 166 override getInterpretation(ConstantDeclaration constant) {
34 throw new UnsupportedOperationException("TODO: auto-generated method stub") 167 throw new UnsupportedOperationException("TODO: auto-generated method stub")
35 } 168 }
36 169
37 override getAllIntegersInStructure() { 170 override getAllIntegersInStructure() {
38 throw new UnsupportedOperationException("TODO: auto-generated method stub") 171 return null
39 } 172 }
40 173
41 override getAllRealsInStructure() { 174 override getAllRealsInStructure() {
42 throw new UnsupportedOperationException("TODO: auto-generated method stub") 175 return null
43 } 176 }
44 177
45 override getAllStringsInStructure() { 178 override getAllStringsInStructure() {
46 throw new UnsupportedOperationException("TODO: auto-generated method stub") 179 return null
47 } 180 }
48 181
49} \ No newline at end of file 182}