diff options
author | ArenBabikian <aren.babikian@mail.mcgill.ca> | 2019-09-02 03:47:21 -0400 |
---|---|---|
committer | ArenBabikian <aren.babikian@mail.mcgill.ca> | 2020-06-07 19:41:44 -0400 |
commit | 35ac37963fc3e3f3fb142aaf1fdffd26e05e473a (patch) | |
tree | 5e2449306e2fd7169b05ac72fe78e167934d7f8c /Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/src/ca/mcgill/ecse/dslreasoner/vampire | |
parent | VAMPIRE: setup structure of model interpretation (diff) | |
download | VIATRA-Generator-35ac37963fc3e3f3fb142aaf1fdffd26e05e473a.tar.gz VIATRA-Generator-35ac37963fc3e3f3fb142aaf1fdffd26e05e473a.tar.zst VIATRA-Generator-35ac37963fc3e3f3fb142aaf1fdffd26e05e473a.zip |
VAMPIRE: implement Vampire Model Interpreter, 2/3 done
Diffstat (limited to 'Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/src/ca/mcgill/ecse/dslreasoner/vampire')
3 files changed, 152 insertions, 17 deletions
diff --git a/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/src/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/Logic2VampireLanguageMapperTrace.xtend b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/src/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/Logic2VampireLanguageMapperTrace.xtend index e94584ae..7ab15fba 100644 --- a/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/src/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/Logic2VampireLanguageMapperTrace.xtend +++ b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/src/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/Logic2VampireLanguageMapperTrace.xtend | |||
@@ -35,6 +35,7 @@ class Logic2VampireLanguageMapperTrace { | |||
35 | public var topLevelType = null | 35 | public var topLevelType = null |
36 | 36 | ||
37 | public val Map<Type, VLSFunction> type2Predicate = new HashMap; | 37 | public val Map<Type, VLSFunction> type2Predicate = new HashMap; |
38 | public val Map<VLSFunction, Type> predicate2Type = new HashMap; | ||
38 | public val Map<DefinedElement, VLSFunction> element2Predicate = new HashMap | 39 | public val Map<DefinedElement, VLSFunction> element2Predicate = new HashMap |
39 | public val Map<Type, VLSTerm> type2PossibleNot = new HashMap | 40 | public val Map<Type, VLSTerm> type2PossibleNot = new HashMap |
40 | public val Map<Type, VLSTerm> type2And = new HashMap | 41 | public val Map<Type, VLSTerm> type2And = new HashMap |
diff --git a/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/src/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/Logic2VampireLanguageMapper_TypeMapper.xtend b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/src/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/Logic2VampireLanguageMapper_TypeMapper.xtend index 1b30393f..d2a01e0e 100644 --- a/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/src/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/Logic2VampireLanguageMapper_TypeMapper.xtend +++ b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/src/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/Logic2VampireLanguageMapper_TypeMapper.xtend | |||
@@ -42,6 +42,7 @@ class Logic2VampireLanguageMapper_TypeMapper { | |||
42 | it.terms += support.duplicate(variable) | 42 | it.terms += support.duplicate(variable) |
43 | ] | 43 | ] |
44 | trace.type2Predicate.put(type, typePred) | 44 | trace.type2Predicate.put(type, typePred) |
45 | trace.predicate2Type.put(typePred, type) | ||
45 | } | 46 | } |
46 | 47 | ||
47 | // 2. Map each ENUM/InitialModelElement type definition to fof formula | 48 | // 2. Map each ENUM/InitialModelElement type definition to fof formula |
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 @@ | |||
1 | package ca.mcgill.ecse.dslreasoner.vampire.reasoner.builder | 1 | package ca.mcgill.ecse.dslreasoner.vampire.reasoner.builder |
2 | 2 | ||
3 | import ca.mcgill.ecse.dslreasoner.vampireLanguage.VLSAnd | ||
4 | import ca.mcgill.ecse.dslreasoner.vampireLanguage.VLSConstant | ||
5 | import ca.mcgill.ecse.dslreasoner.vampireLanguage.VLSEquality | ||
6 | import ca.mcgill.ecse.dslreasoner.vampireLanguage.VLSFunction | ||
7 | import ca.mcgill.ecse.dslreasoner.vampireLanguage.VLSFunctionAsTerm | ||
8 | import ca.mcgill.ecse.dslreasoner.vampireLanguage.VLSOr | ||
9 | import ca.mcgill.ecse.dslreasoner.vampireLanguage.VLSTerm | ||
10 | import ca.mcgill.ecse.dslreasoner.vampireLanguage.VLSTffFormula | ||
11 | import ca.mcgill.ecse.dslreasoner.vampireLanguage.VLSUniversalQuantifier | ||
3 | import ca.mcgill.ecse.dslreasoner.vampireLanguage.VampireModel | 12 | import ca.mcgill.ecse.dslreasoner.vampireLanguage.VampireModel |
13 | import ca.mcgill.ecse.dslreasoner.vampireLanguage.impl.VLSAndImpl | ||
14 | import ca.mcgill.ecse.dslreasoner.vampireLanguage.impl.VLSOrImpl | ||
15 | import ca.mcgill.ecse.dslreasoner.vampireLanguage.impl.VLSUnaryNegationImpl | ||
4 | import hu.bme.mit.inf.dslreasoner.logic.model.builder.LogicModelInterpretation | 16 | import hu.bme.mit.inf.dslreasoner.logic.model.builder.LogicModelInterpretation |
5 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.ConstantDeclaration | 17 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.ConstantDeclaration |
18 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.DefinedElement | ||
6 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.FunctionDeclaration | 19 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.FunctionDeclaration |
7 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.LogiclanguageFactory | 20 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.LogiclanguageFactory |
8 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.RelationDeclaration | 21 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.RelationDeclaration |
9 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Type | 22 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Type |
23 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.TypeDeclaration | ||
24 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.TypeDefinition | ||
25 | import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.impl.TypeDeclarationImpl | ||
26 | import java.util.HashMap | ||
27 | import java.util.List | ||
28 | import java.util.Map | ||
29 | |||
30 | import static extension hu.bme.mit.inf.dslreasoner.util.CollectionsUtil.* | ||
10 | 31 | ||
11 | class VampireModelInterpretation implements LogicModelInterpretation { | 32 | class 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 | } |