aboutsummaryrefslogtreecommitdiffstats
path: root/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/src/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/Logic2VampireLanguageMapper_TypeMapper_FilteredTypes.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_TypeMapper_FilteredTypes.xtend')
-rw-r--r--Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/src/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/Logic2VampireLanguageMapper_TypeMapper_FilteredTypes.xtend71
1 files changed, 25 insertions, 46 deletions
diff --git a/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/src/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/Logic2VampireLanguageMapper_TypeMapper_FilteredTypes.xtend b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/src/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/Logic2VampireLanguageMapper_TypeMapper_FilteredTypes.xtend
index 88e1e23a..ea72940e 100644
--- a/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/src/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/Logic2VampireLanguageMapper_TypeMapper_FilteredTypes.xtend
+++ b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/src/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/Logic2VampireLanguageMapper_TypeMapper_FilteredTypes.xtend
@@ -22,21 +22,20 @@ class Logic2VampireLanguageMapper_TypeMapper_FilteredTypes implements Logic2Vamp
22 LogicproblemPackage.eINSTANCE.class 22 LogicproblemPackage.eINSTANCE.class
23 } 23 }
24 24
25 override transformTypes(Collection<Type> types, Collection<DefinedElement> elements, 25 override transformTypes(Collection<Type> types, Collection<DefinedElement> elements, Logic2VampireLanguageMapper mapper, Logic2VampireLanguageMapperTrace trace) {
26 Logic2VampireLanguageMapper mapper, Logic2VampireLanguageMapperTrace trace) { 26
27 val typeTrace = new Logic2VampireLanguageMapper_TypeMapperTrace_FilteredTypes 27// val typeTrace = new Logic2VampireLanguageMapper_TypeMapperTrace_FilteredTypes
28 trace.typeMapperTrace = typeTrace 28// trace.typeMapperTrace = typeTrace
29
30 // The variable
31 val VLSVariable variable = createVLSVariable => [it.name = "A"] 29 val VLSVariable variable = createVLSVariable => [it.name = "A"]
32 30
33 // 1. Each type (class) is a predicate with a single variable as input 31 // 1. Each type (class) is a predicate with a single variable as input
34 for (type : types) { 32 for (type : types) {
35 val typePred = createVLSFunction => [ 33 val typePred = createVLSFunction => [
36 it.constant = support.toIDMultiple("t", type.name) 34 it.constant = support.toIDMultiple("t", type.name.split(" ").get(0))
37 it.terms += support.duplicate(variable) 35 it.terms += support.duplicate(variable)
38 ] 36 ]
39 typeTrace.type2Predicate.put(type, typePred) 37// typeTrace.type2Predicate.put(type, typePred)
38 trace.type2Predicate.put(type, typePred)
40 } 39 }
41 40
42 // 2. Map each ENUM type definition to fof formula 41 // 2. Map each ENUM type definition to fof formula
@@ -44,15 +43,16 @@ class Logic2VampireLanguageMapper_TypeMapper_FilteredTypes implements Logic2Vamp
44 val List<VLSFunction> orElems = newArrayList 43 val List<VLSFunction> orElems = newArrayList
45 for (e : type.elements) { 44 for (e : type.elements) {
46 val enumElemPred = createVLSFunction => [ 45 val enumElemPred = createVLSFunction => [
47 it.constant = support.toIDMultiple("e", e.name, type.name) 46 it.constant = support.toIDMultiple("e", e.name.split(" ").get(0), e.name.split(" ").get(2))
48 it.terms += support.duplicate(variable) 47 it.terms += support.duplicate(variable)
49 ] 48 ]
50 typeTrace.element2Predicate.put(e, enumElemPred) 49// typeTrace.element2Predicate.put(e, enumElemPred)
50 trace.element2Predicate.put(e, enumElemPred)
51 orElems.add(enumElemPred) 51 orElems.add(enumElemPred)
52 } 52 }
53 53
54 val res = createVLSFofFormula => [ 54 val res = createVLSFofFormula => [
55 it.name = support.toIDMultiple("typeDef", type.name) 55 it.name = support.toIDMultiple("typeDef", type.name.split(" ").get(0))
56 // below is temporary solution 56 // below is temporary solution
57 it.fofRole = "axiom" 57 it.fofRole = "axiom"
58 it.fofFormula = createVLSUniversalQuantifier => [ 58 it.fofFormula = createVLSUniversalQuantifier => [
@@ -62,7 +62,8 @@ class Logic2VampireLanguageMapper_TypeMapper_FilteredTypes implements Logic2Vamp
62// it.constant = type.lookup(typeTrace.type2Predicate).constant 62// it.constant = type.lookup(typeTrace.type2Predicate).constant
63// it.terms += createVLSVariable => [it.name = "A"] 63// it.terms += createVLSVariable => [it.name = "A"]
64// ] 64// ]
65 it.left = type.lookup(typeTrace.type2Predicate) 65// it.left = type.lookup(typeTrace.type2Predicate)
66 it.left = type.lookup(trace.type2Predicate)
66 67
67 it.right = support.unfoldOr(orElems) 68 it.right = support.unfoldOr(orElems)
68 69
@@ -92,31 +93,23 @@ class Logic2VampireLanguageMapper_TypeMapper_FilteredTypes implements Logic2Vamp
92 for (t1 : types.filter[!isIsAbstract]) { 93 for (t1 : types.filter[!isIsAbstract]) {
93 for (t2 : types) { 94 for (t2 : types) {
94 // possible improvement: check all supertypes and decide if negated or not based on negations/not negations of supertypes 95 // possible improvement: check all supertypes and decide if negated or not based on negations/not negations of supertypes
95 if (t1 == t2 || dfsSupertypeCheck(t1, t2)) { 96 if (t1 == t2 || support.dfsSupertypeCheck(t1, t2)) {
96 typeTrace.type2PossibleNot.put(t2, createVLSFunction => [ 97// typeTrace.type2PossibleNot.put(t2, support.duplicate(t2.lookup(typeTrace.type2Predicate)))
97 it.constant = t2.lookup(typeTrace.type2Predicate).constant 98 trace.type2PossibleNot.put(t2, support.duplicate(t2.lookup(trace.type2Predicate)))
98 it.terms += support.duplicate(variable)
99 ])
100 } else { 99 } else {
101 typeTrace.type2PossibleNot.put(t2, createVLSUnaryNegation => [ 100// typeTrace.type2PossibleNot.put(t2, createVLSUnaryNegation => [
102 it.operand = createVLSFunction => [ 101 trace.type2PossibleNot.put(t2, createVLSUnaryNegation => [
103 it.constant = t2.lookup(typeTrace.type2Predicate).constant 102 it.operand = support.duplicate(t2.lookup(trace.type2Predicate))
104 it.terms += support.duplicate(variable)
105 ]
106 ]) 103 ])
107 } 104 }
108// typeTrace.type2PossibleNot.put(type2, type2.lookup(typeTrace.type2Predicate))
109 } 105 }
110 typeTrace.type2And.put(t1, support.unfoldAnd(new ArrayList<VLSTerm>(typeTrace.type2PossibleNot.values))) 106// typeTrace.type2And.put(t1, support.unfoldAnd(new ArrayList<VLSTerm>(typeTrace.type2PossibleNot.values)))
111// typeTrace.type2And.put(type, type.lookup(typeTrace.type2Predicate) ) 107// typeTrace.type2PossibleNot.clear
112 typeTrace.type2PossibleNot.clear 108 trace.type2And.put(t1, support.unfoldAnd(new ArrayList<VLSTerm>(trace.type2PossibleNot.values)))
109 trace.type2PossibleNot.clear
113 } 110 }
114 111
115 // 5. create fof function that is an or with all the elements in map 112 // 5. create fof function that is an or with all the elements in map
116
117
118
119
120 val hierarch = createVLSFofFormula => [ 113 val hierarch = createVLSFofFormula => [
121 it.name = "hierarchyHandler" 114 it.name = "hierarchyHandler"
122 it.fofRole = "axiom" 115 it.fofRole = "axiom"
@@ -124,7 +117,8 @@ class Logic2VampireLanguageMapper_TypeMapper_FilteredTypes implements Logic2Vamp
124 it.variables += support.duplicate(variable) 117 it.variables += support.duplicate(variable)
125 it.operand = createVLSEquivalent => [ 118 it.operand = createVLSEquivalent => [
126 it.left = support.topLevelTypeFunc 119 it.left = support.topLevelTypeFunc
127 it.right = support.unfoldOr(new ArrayList<VLSTerm>(typeTrace.type2And.values)) 120// it.right = support.unfoldOr(new ArrayList<VLSTerm>(typeTrace.type2And.values))
121 it.right = support.unfoldOr(new ArrayList<VLSTerm>(trace.type2And.values))
128 ] 122 ]
129 ] 123 ]
130 ] 124 ]
@@ -133,21 +127,6 @@ class Logic2VampireLanguageMapper_TypeMapper_FilteredTypes implements Logic2Vamp
133 127
134 } 128 }
135 129
136 def boolean dfsSupertypeCheck(Type type, Type type2) {
137 // There is surely a better way to do this
138 if (type.supertypes.isEmpty)
139 return false
140 else {
141 if (type.supertypes.contains(type2))
142 return true
143 else {
144 for (supertype : type.supertypes) {
145 if(dfsSupertypeCheck(supertype, type2)) return true
146 }
147 }
148 }
149 }
150
151 override transformTypeReference(Type referred, Logic2VampireLanguageMapper mapper, 130 override transformTypeReference(Type referred, Logic2VampireLanguageMapper mapper,
152 Logic2VampireLanguageMapperTrace trace) { 131 Logic2VampireLanguageMapperTrace trace) {
153 throw new UnsupportedOperationException("TODO: auto-generated method stub") 132 throw new UnsupportedOperationException("TODO: auto-generated method stub")