aboutsummaryrefslogtreecommitdiffstats
path: root/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/src/ca/mcgill/ecse/dslreasoner/vampire
diff options
context:
space:
mode:
Diffstat (limited to 'Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/src/ca/mcgill/ecse/dslreasoner/vampire')
-rw-r--r--Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/src/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/Logic2VampireLanguageMapperTrace.xtend5
-rw-r--r--Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/src/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/Logic2VampireLanguageMapper_ScopeMapper.xtend13
-rw-r--r--Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/src/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/Logic2VampireLanguageMapper_Support.xtend29
-rw-r--r--Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/src/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/Logic2VampireLanguageMapper_TypeMapper.xtend48
4 files changed, 79 insertions, 16 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 3c672f4b..22bd4ab5 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
@@ -1,5 +1,6 @@
1package ca.mcgill.ecse.dslreasoner.vampire.reasoner.builder 1package ca.mcgill.ecse.dslreasoner.vampire.reasoner.builder
2 2
3import ca.mcgill.ecse.dslreasoner.vampireLanguage.VLSConstant
3import ca.mcgill.ecse.dslreasoner.vampireLanguage.VLSFofFormula 4import ca.mcgill.ecse.dslreasoner.vampireLanguage.VLSFofFormula
4import ca.mcgill.ecse.dslreasoner.vampireLanguage.VLSFunction 5import ca.mcgill.ecse.dslreasoner.vampireLanguage.VLSFunction
5import ca.mcgill.ecse.dslreasoner.vampireLanguage.VLSTerm 6import ca.mcgill.ecse.dslreasoner.vampireLanguage.VLSTerm
@@ -13,6 +14,7 @@ import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.RelationDefinition
13import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Type 14import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Type
14import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Variable 15import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Variable
15import java.util.HashMap 16import java.util.HashMap
17import java.util.List
16import java.util.Map 18import java.util.Map
17 19
18interface Logic2VampireLanguageMapper_TypeMapperTrace {} 20interface Logic2VampireLanguageMapper_TypeMapperTrace {}
@@ -32,6 +34,9 @@ class Logic2VampireLanguageMapperTrace {
32 public val Map<DefinedElement, VLSFunction> element2Predicate = new HashMap 34 public val Map<DefinedElement, VLSFunction> element2Predicate = new HashMap
33 public val Map<Type, VLSTerm> type2PossibleNot = new HashMap 35 public val Map<Type, VLSTerm> type2PossibleNot = new HashMap
34 public val Map<Type, VLSTerm> type2And = new HashMap 36 public val Map<Type, VLSTerm> type2And = new HashMap
37 //Uniqueness
38 public val List<VLSConstant> uniqueInstances = newArrayList
39
35 40
36 public var Map<ConstantDeclaration, ConstantDefinition> constantDefinitions 41 public var Map<ConstantDeclaration, ConstantDefinition> constantDefinitions
37 public var Map<RelationDeclaration, RelationDefinition> relationDefinitions 42 public var Map<RelationDeclaration, RelationDefinition> relationDefinitions
diff --git a/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/src/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/Logic2VampireLanguageMapper_ScopeMapper.xtend b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/src/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/Logic2VampireLanguageMapper_ScopeMapper.xtend
index 4b7ea3d0..e5dfbf08 100644
--- a/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/src/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/Logic2VampireLanguageMapper_ScopeMapper.xtend
+++ b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/src/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/Logic2VampireLanguageMapper_ScopeMapper.xtend
@@ -19,13 +19,14 @@ class Logic2VampireLanguageMapper_ScopeMapper {
19 val VLSVariable variable = createVLSVariable => [it.name = "A"] 19 val VLSVariable variable = createVLSVariable => [it.name = "A"]
20 20
21 // 1. make a list of constants equaling the min number of specified objects 21 // 1. make a list of constants equaling the min number of specified objects
22 val List<VLSConstant> instances = newArrayList 22 val localInstances = newArrayList
23 for (var i = 0; i < config.typeScopes.minNewElements; i++) { 23 for (var i = 0; i < config.typeScopes.minNewElements; i++) {
24 val num = i + 1 24 val num = i + 1
25 val cst = createVLSConstant => [ 25 val cst = createVLSConstant => [
26 it.name = "o" + num 26 it.name = "o" + num
27 ] 27 ]
28 instances.add(cst) 28 trace.uniqueInstances.add(cst)
29 localInstances.add(cst)
29 } 30 }
30 31
31 // TODO: specify for the max 32 // TODO: specify for the max
@@ -37,14 +38,14 @@ class Logic2VampireLanguageMapper_ScopeMapper {
37 it.fofFormula = createVLSUniversalQuantifier => [ 38 it.fofFormula = createVLSUniversalQuantifier => [
38 it.variables += support.duplicate(variable) 39 it.variables += support.duplicate(variable)
39 // check below 40 // check below
40 it.operand = createVLSEquivalent => [ 41 it.operand = createVLSImplies => [
41 it.left = support.topLevelTypeFunc 42 it.left = support.unfoldOr(localInstances.map [ i |
42 it.right = support.unfoldOr(instances.map [ i |
43 createVLSEquality => [ 43 createVLSEquality => [
44 it.left = createVLSVariable => [it.name = variable.name] 44 it.left = createVLSVariable => [it.name = variable.name]
45 it.right = i 45 it.right = i
46 ] 46 ]
47 ]) 47 ])
48 it.right = support.topLevelTypeFunc
48 ] 49 ]
49 ] 50 ]
50 ] 51 ]
@@ -55,7 +56,7 @@ class Logic2VampireLanguageMapper_ScopeMapper {
55 val uniqueness = createVLSFofFormula => [ 56 val uniqueness = createVLSFofFormula => [
56 it.name = "typeUniqueness" 57 it.name = "typeUniqueness"
57 it.fofRole = "axiom" 58 it.fofRole = "axiom"
58 it.fofFormula = support.establishUniqueness(instances) 59 it.fofFormula = support.establishUniqueness(trace.uniqueInstances)
59 ] 60 ]
60 trace.specification.formulas += uniqueness 61 trace.specification.formulas += uniqueness
61 } 62 }
diff --git a/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/src/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/Logic2VampireLanguageMapper_Support.xtend b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/src/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/Logic2VampireLanguageMapper_Support.xtend
index d3595a73..021cb0ea 100644
--- a/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/src/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/Logic2VampireLanguageMapper_Support.xtend
+++ b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/src/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/Logic2VampireLanguageMapper_Support.xtend
@@ -2,6 +2,7 @@ package ca.mcgill.ecse.dslreasoner.vampire.reasoner.builder
2 2
3import ca.mcgill.ecse.dslreasoner.vampireLanguage.VLSConstant 3import ca.mcgill.ecse.dslreasoner.vampireLanguage.VLSConstant
4import ca.mcgill.ecse.dslreasoner.vampireLanguage.VLSFunction 4import ca.mcgill.ecse.dslreasoner.vampireLanguage.VLSFunction
5import ca.mcgill.ecse.dslreasoner.vampireLanguage.VLSFunctionAsTerm
5import ca.mcgill.ecse.dslreasoner.vampireLanguage.VLSInequality 6import ca.mcgill.ecse.dslreasoner.vampireLanguage.VLSInequality
6import ca.mcgill.ecse.dslreasoner.vampireLanguage.VLSTerm 7import ca.mcgill.ecse.dslreasoner.vampireLanguage.VLSTerm
7import ca.mcgill.ecse.dslreasoner.vampireLanguage.VLSVariable 8import ca.mcgill.ecse.dslreasoner.vampireLanguage.VLSVariable
@@ -36,6 +37,14 @@ class Logic2VampireLanguageMapper_Support {
36 def protected VLSVariable duplicate(VLSVariable term) { 37 def protected VLSVariable duplicate(VLSVariable term) {
37 return createVLSVariable => [it.name = term.name] 38 return createVLSVariable => [it.name = term.name]
38 } 39 }
40
41 def protected VLSFunctionAsTerm duplicate(VLSFunctionAsTerm term) {
42 return createVLSFunctionAsTerm => [it.functor = term.functor]
43 }
44
45 def protected VLSConstant duplicate(VLSConstant term) {
46 return createVLSConstant => [it.name = term.name]
47 }
39 48
40 def protected VLSFunction duplicate(VLSFunction term) { 49 def protected VLSFunction duplicate(VLSFunction term) {
41 return createVLSFunction => [ 50 return createVLSFunction => [
@@ -52,6 +61,19 @@ class Logic2VampireLanguageMapper_Support {
52 it.terms += duplicate(v) 61 it.terms += duplicate(v)
53 ] 62 ]
54 } 63 }
64
65 def protected VLSFunction duplicate(VLSFunction term, VLSFunctionAsTerm v) {
66 return createVLSFunction => [
67 it.constant = term.constant
68 it.terms += duplicate(v)
69 ]
70 }
71
72 def protected VLSConstant toConstant(VLSFunctionAsTerm term) {
73 return createVLSConstant => [
74 it.name = term.functor
75 ]
76 }
55 77
56 def protected VLSFunction topLevelTypeFunc() { 78 def protected VLSFunction topLevelTypeFunc() {
57 return createVLSFunction => [ 79 return createVLSFunction => [
@@ -61,6 +83,13 @@ class Logic2VampireLanguageMapper_Support {
61 ] 83 ]
62 ] 84 ]
63 } 85 }
86
87 def protected VLSFunction topLevelTypeFunc(VLSFunctionAsTerm v) {
88 return createVLSFunction => [
89 it.constant = "object"
90 it.terms += duplicate(v)
91 ]
92 }
64 93
65 // TODO Make more general 94 // TODO Make more general
66 def establishUniqueness(List<VLSConstant> terms) { 95 def establishUniqueness(List<VLSConstant> terms) {
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 bc0b3e23..f2a7b3f2 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
@@ -14,8 +14,9 @@ import java.util.Collection
14import java.util.List 14import java.util.List
15 15
16import static extension hu.bme.mit.inf.dslreasoner.util.CollectionsUtil.* 16import static extension hu.bme.mit.inf.dslreasoner.util.CollectionsUtil.*
17import java.util.Collections
17 18
18class Logic2VampireLanguageMapper_TypeMapper { 19class Logic2VampireLanguageMapper_TypeMapper {
19 private val extension VampireLanguageFactory factory = VampireLanguageFactory.eINSTANCE 20 private val extension VampireLanguageFactory factory = VampireLanguageFactory.eINSTANCE
20 private val Logic2VampireLanguageMapper_Support support = new Logic2VampireLanguageMapper_Support 21 private val Logic2VampireLanguageMapper_Support support = new Logic2VampireLanguageMapper_Support
21 val Logic2VampireLanguageMapper base 22 val Logic2VampireLanguageMapper base
@@ -25,8 +26,9 @@ class Logic2VampireLanguageMapper_TypeMapper {
25 this.base = base 26 this.base = base
26 } 27 }
27 28
28 def protected transformTypes(Collection<Type> types, Collection<DefinedElement> elements, Logic2VampireLanguageMapper mapper, Logic2VampireLanguageMapperTrace trace) { 29 def protected transformTypes(Collection<Type> types, Collection<DefinedElement> elements,
29 30 Logic2VampireLanguageMapper mapper, Logic2VampireLanguageMapperTrace trace) {
31
30// val typeTrace = new Logic2VampireLanguageMapper_TypeMapperTrace_FilteredTypes 32// val typeTrace = new Logic2VampireLanguageMapper_TypeMapperTrace_FilteredTypes
31// trace.typeMapperTrace = typeTrace 33// trace.typeMapperTrace = typeTrace
32 val VLSVariable variable = createVLSVariable => [it.name = "A"] 34 val VLSVariable variable = createVLSVariable => [it.name = "A"]
@@ -86,14 +88,38 @@ class Logic2VampireLanguageMapper_TypeMapper {
86 88
87 ] 89 ]
88 trace.specification.formulas += res 90 trace.specification.formulas += res
91
92 // Create objects for the enum elements
93 val List<VLSFunction> enumScopeElems = newArrayList
94 for (var i = 0; i < type.elements.length; i++) {
95 val num = i + 1
96 val cstTerm = createVLSFunctionAsTerm => [
97 it.functor = "eo" + num
98 ]
99 val cst = support.toConstant(cstTerm)
100 trace.uniqueInstances.add(cst)
101 val fct = support.duplicate(type.elements.get(i).lookup(trace.element2Predicate), cstTerm)
102 enumScopeElems.add(fct)
103// enumScopeElems.add(support.topLevelTypeFunc(cstTerm))
104 }
105
106
107
108 val enumScope = createVLSFofFormula => [
109 it.name = support.toIDMultiple("enumScope", type.name.split(" ").get(0))
110 // below is temporary solution
111 it.fofRole = "axiom"
112 it.fofFormula = support.unfoldAnd(enumScopeElems)
113 ]
114
115 trace.specification.formulas += enumScope
89 } 116 }
90 117
91 //HIERARCHY HANDLER 118 // HIERARCHY HANDLER
92
93
94 // 3. For each non-abstract type, create an and sequence containing all typedeclaration predicates 119 // 3. For each non-abstract type, create an and sequence containing all typedeclaration predicates
95 // and store in a map 120 // and store in a map
96 for (t1 : types.filter[!isIsAbstract]) { 121// println(types.filter[!isIsAbstract])
122 for (t1 : types.filter[!isIsAbstract].filter(TypeDeclaration)) {
97 for (t2 : types) { 123 for (t2 : types) {
98 // possible improvement: check all supertypes and decide if negated or not based on negations/not negations of supertypes 124 // possible improvement: check all supertypes and decide if negated or not based on negations/not negations of supertypes
99 if (t1 == t2 || support.dfsSupertypeCheck(t1, t2)) { 125 if (t1 == t2 || support.dfsSupertypeCheck(t1, t2)) {
@@ -121,7 +147,9 @@ class Logic2VampireLanguageMapper_TypeMapper {
121 it.operand = createVLSEquivalent => [ 147 it.operand = createVLSEquivalent => [
122 it.left = support.topLevelTypeFunc 148 it.left = support.topLevelTypeFunc
123// it.right = support.unfoldOr(new ArrayList<VLSTerm>(typeTrace.type2And.values)) 149// it.right = support.unfoldOr(new ArrayList<VLSTerm>(typeTrace.type2And.values))
124 it.right = support.unfoldOr(new ArrayList<VLSTerm>(trace.type2And.values)) 150 val reversedList = new ArrayList<VLSTerm>(trace.type2And.values)
151// Collections.reverse(reversedList)
152 it.right = support.unfoldOr(reversedList)
125 ] 153 ]
126 ] 154 ]
127 ] 155 ]
@@ -130,7 +158,7 @@ class Logic2VampireLanguageMapper_TypeMapper {
130 158
131 } 159 }
132 160
133 //below are from previous interface 161 // below are from previous interface
134 def protected transformTypeReference(Type referred, Logic2VampireLanguageMapper mapper, 162 def protected transformTypeReference(Type referred, Logic2VampireLanguageMapper mapper,
135 Logic2VampireLanguageMapperTrace trace) { 163 Logic2VampireLanguageMapperTrace trace) {
136 throw new UnsupportedOperationException("TODO: auto-generated method stub") 164 throw new UnsupportedOperationException("TODO: auto-generated method stub")