aboutsummaryrefslogtreecommitdiffstats
path: root/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/src/ca/mcgill/ecse/dslreasoner
diff options
context:
space:
mode:
authorLibravatar ArenBabikian <aren.babikian@mail.mcgill.ca>2019-04-05 03:32:48 -0400
committerLibravatar ArenBabikian <aren.babikian@mail.mcgill.ca>2020-06-07 19:36:25 -0400
commitb1bbb821c0e5a3f721de211826dab19c7d9dca4f (patch)
treeac4a87adba243916973a96141354adbed6f72979 /Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/src/ca/mcgill/ecse/dslreasoner
parenttest push (diff)
downloadVIATRA-Generator-b1bbb821c0e5a3f721de211826dab19c7d9dca4f.tar.gz
VIATRA-Generator-b1bbb821c0e5a3f721de211826dab19c7d9dca4f.tar.zst
VIATRA-Generator-b1bbb821c0e5a3f721de211826dab19c7d9dca4f.zip
Implement containment circularity avoidance #20
Diffstat (limited to 'Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/src/ca/mcgill/ecse/dslreasoner')
-rw-r--r--Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/src/ca/mcgill/ecse/dslreasoner/vampire/reasoner/VampireAnalyzerConfiguration.xtend3
-rw-r--r--Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/src/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/Logic2VampireLanguageMapper.xtend2
-rw-r--r--Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/src/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/Logic2VampireLanguageMapper_ContainmentMapper.xtend46
-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.xtend8
5 files changed, 54 insertions, 18 deletions
diff --git a/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/src/ca/mcgill/ecse/dslreasoner/vampire/reasoner/VampireAnalyzerConfiguration.xtend b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/src/ca/mcgill/ecse/dslreasoner/vampire/reasoner/VampireAnalyzerConfiguration.xtend
index 618980a3..98967181 100644
--- a/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/src/ca/mcgill/ecse/dslreasoner/vampire/reasoner/VampireAnalyzerConfiguration.xtend
+++ b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/src/ca/mcgill/ecse/dslreasoner/vampire/reasoner/VampireAnalyzerConfiguration.xtend
@@ -4,7 +4,8 @@ import hu.bme.mit.inf.dslreasoner.logic.model.builder.LogicSolverConfiguration
4 4
5class VampireSolverConfiguration extends LogicSolverConfiguration { 5class VampireSolverConfiguration extends LogicSolverConfiguration {
6 6
7 //public var int symmetry = 0 // by default 7 public var int contCycleLevel = 0
8 public var boolean uniquenessDuplicates = false
8 //choose needed backend solver 9 //choose needed backend solver
9// public var VampireBackendSolver solver = VampireBackendSolver.SAT4J 10// public var VampireBackendSolver solver = VampireBackendSolver.SAT4J
10} 11}
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
index b7ad8f3d..2be6c093 100644
--- 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
@@ -87,7 +87,7 @@ class Logic2VampireLanguageMapper {
87 problem.relations.forEach[this.relationMapper.transformRelation(it, trace)] 87 problem.relations.forEach[this.relationMapper.transformRelation(it, trace)]
88 88
89 // CONTAINMENT MAPPER 89 // CONTAINMENT MAPPER
90 containmentMapper.transformContainment(problem.containmentHierarchies, trace) 90 containmentMapper.transformContainment(config,problem.containmentHierarchies, trace)
91 91
92 // CONSTANT MAPPER 92 // CONSTANT MAPPER
93 // only transforms definitions 93 // only transforms definitions
diff --git a/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/src/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/Logic2VampireLanguageMapper_ContainmentMapper.xtend b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/src/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/Logic2VampireLanguageMapper_ContainmentMapper.xtend
index 48ee8789..395b4305 100644
--- a/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/src/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/Logic2VampireLanguageMapper_ContainmentMapper.xtend
+++ b/Solvers/Vampire-Solver/ca.mcgill.ecse.dslreasoner.vampire.reasoner/src/ca/mcgill/ecse/dslreasoner/vampire/reasoner/builder/Logic2VampireLanguageMapper_ContainmentMapper.xtend
@@ -1,6 +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.VLSAnd 3import ca.mcgill.ecse.dslreasoner.vampire.reasoner.VampireSolverConfiguration
4import ca.mcgill.ecse.dslreasoner.vampireLanguage.VLSFunction 4import ca.mcgill.ecse.dslreasoner.vampireLanguage.VLSFunction
5import ca.mcgill.ecse.dslreasoner.vampireLanguage.VLSTerm 5import ca.mcgill.ecse.dslreasoner.vampireLanguage.VLSTerm
6import ca.mcgill.ecse.dslreasoner.vampireLanguage.VLSVariable 6import ca.mcgill.ecse.dslreasoner.vampireLanguage.VLSVariable
@@ -25,9 +25,9 @@ class Logic2VampireLanguageMapper_ContainmentMapper {
25 this.base = base 25 this.base = base
26 } 26 }
27 27
28 def public void transformContainment(List<ContainmentHierarchy> hierarchies, 28 def public void transformContainment(VampireSolverConfiguration config, List<ContainmentHierarchy> hierarchies,
29 Logic2VampireLanguageMapperTrace trace) { 29 Logic2VampireLanguageMapperTrace trace) {
30 //TODO throw error is there exists a circular containment that does not involve hierarchy 30 // TODO throw error is there exists a circular containment that does not involve hierarchy
31 // TODO CONSIDER CASE WHERE MULTIPLE CONTAINMMENT HIERARCHIES EXIST 31 // TODO CONSIDER CASE WHERE MULTIPLE CONTAINMMENT HIERARCHIES EXIST
32 // TEMP 32 // TEMP
33 val hierarchy = hierarchies.get(0) 33 val hierarchy = hierarchies.get(0)
@@ -94,7 +94,6 @@ class Logic2VampireLanguageMapper_ContainmentMapper {
94// for (c : support.listSubtypes(toType)) { 94// for (c : support.listSubtypes(toType)) {
95// addToMap(type2cont, toFunc, rel) 95// addToMap(type2cont, toFunc, rel)
96// } 96// }
97
98// val listForAnd = newArrayList 97// val listForAnd = newArrayList
99//// listForAnd.add(support.duplicate(fromType.lookup(trace.type2Predicate), varB)) 98//// listForAnd.add(support.duplicate(fromType.lookup(trace.type2Predicate), varB))
100// listForAnd.add(support.duplicate((l as RelationDeclaration).lookup(trace.rel2Predicate), varList)) 99// listForAnd.add(support.duplicate((l as RelationDeclaration).lookup(trace.rel2Predicate), varList))
@@ -111,7 +110,7 @@ class Logic2VampireLanguageMapper_ContainmentMapper {
111 // STEP 3 110 // STEP 3
112 // Ensure that an objct only has 1 parent 111 // Ensure that an objct only has 1 parent
113 val relFormula = createVLSFofFormula => [ 112 val relFormula = createVLSFofFormula => [
114 it.name = support.toIDMultiple("noDupCont", rel.constant.toString) 113 it.name = support.toIDMultiple("containment_noDup", rel.constant.toString)
115 it.fofRole = "axiom" 114 it.fofRole = "axiom"
116 it.fofFormula = createVLSExistentialQuantifier => [ 115 it.fofFormula = createVLSExistentialQuantifier => [
117 it.variables += support.duplicate(varA) 116 it.variables += support.duplicate(varA)
@@ -133,7 +132,7 @@ class Logic2VampireLanguageMapper_ContainmentMapper {
133 132
134 } 133 }
135 134
136// STEP CONT'D 135// STEP 2 CONT'D
137 for (e : type2cont.entrySet) { 136 for (e : type2cont.entrySet) {
138 val relFormula = createVLSFofFormula => [ 137 val relFormula = createVLSFofFormula => [
139 it.name = support.toIDMultiple("containment", e.key.constant.toString) 138 it.name = support.toIDMultiple("containment", e.key.constant.toString)
@@ -159,8 +158,39 @@ class Logic2VampireLanguageMapper_ContainmentMapper {
159 158
160 } 159 }
161 160
162 // STEP 4 161 // STEP 4
163 // Ensure that there are no cycles in the hierarchy (maybe same as for step3?) 162 // Ensure that there are no cycles in the hierarchy (maybe same as for step3?)
163 // Attempt 1: all possibilities, even the impossible one, based on MM constraints, are listed
164
165
166 val variables = newArrayList
167 val disjunctionList = newArrayList
168 val conjunctionList = newArrayList
169 for (var i = 1; i <= config.contCycleLevel; i++) {
170 val ind = i
171 variables.add(createVLSVariable => [it.name = ("V"+Integer.toString(ind))])
172 for ( var j = 0; j < i;j++){
173 for (l : relationsList) {
174 val rel = support.duplicate((l as RelationDeclaration).lookup(trace.rel2Predicate), newArrayList(variables.get(j), variables.get((j+1)%i)))
175 disjunctionList.add(rel)
176 }
177 conjunctionList.add(support.unfoldOr(disjunctionList))
178 disjunctionList.clear
179 }
180
181 val contCycleForm = createVLSFofFormula => [
182 it.name = support.toIDMultiple("containment_noCycle", Integer.toString(ind))
183 it.fofRole = "axiom"
184 it.fofFormula = createVLSUnaryNegation => [
185 it.operand = createVLSExistentialQuantifier => [
186 it.variables += support.duplicate(variables)
187 it.operand = support.unfoldAnd(conjunctionList)
188 ]
189 ]
190 ]
191 trace.specification.formulas += contCycleForm
192 conjunctionList.clear
193 }
164 } 194 }
165 195
166 protected def VLSTerm makeUnique(List<VLSFunction> list) { 196 protected def VLSTerm makeUnique(List<VLSFunction> list) {
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 0d0be576..0a8812e4 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
@@ -1,17 +1,15 @@
1package ca.mcgill.ecse.dslreasoner.vampire.reasoner.builder 1package ca.mcgill.ecse.dslreasoner.vampire.reasoner.builder
2 2
3import ca.mcgill.ecse.dslreasoner.vampireLanguage.VLSFunction 3import ca.mcgill.ecse.dslreasoner.vampire.reasoner.VampireSolverConfiguration
4import ca.mcgill.ecse.dslreasoner.vampireLanguage.VLSTerm
4import ca.mcgill.ecse.dslreasoner.vampireLanguage.VLSVariable 5import ca.mcgill.ecse.dslreasoner.vampireLanguage.VLSVariable
5import ca.mcgill.ecse.dslreasoner.vampireLanguage.VampireLanguageFactory 6import ca.mcgill.ecse.dslreasoner.vampireLanguage.VampireLanguageFactory
6import hu.bme.mit.inf.dslreasoner.logic.model.builder.LogicSolverConfiguration
7import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Type 7import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Type
8import java.util.ArrayList 8import java.util.ArrayList
9import java.util.HashMap
9import java.util.Map 10import java.util.Map
10 11
11import static extension hu.bme.mit.inf.dslreasoner.util.CollectionsUtil.* 12import static extension hu.bme.mit.inf.dslreasoner.util.CollectionsUtil.*
12import java.util.HashMap
13import ca.mcgill.ecse.dslreasoner.vampireLanguage.VLSTerm
14import java.util.List
15 13
16class Logic2VampireLanguageMapper_ScopeMapper { 14class Logic2VampireLanguageMapper_ScopeMapper {
17 private val extension VampireLanguageFactory factory = VampireLanguageFactory.eINSTANCE 15 private val extension VampireLanguageFactory factory = VampireLanguageFactory.eINSTANCE
@@ -23,7 +21,7 @@ class Logic2VampireLanguageMapper_ScopeMapper {
23 this.base = base 21 this.base = base
24 } 22 }
25 23
26 def dispatch public void transformScope(LogicSolverConfiguration config, Logic2VampireLanguageMapperTrace trace) { 24 def dispatch public void transformScope(VampireSolverConfiguration config, Logic2VampireLanguageMapperTrace trace) {
27 val ABSOLUTE_MIN = 0 25 val ABSOLUTE_MIN = 0
28 val ABSOLUTE_MAX = Integer.MAX_VALUE 26 val ABSOLUTE_MAX = Integer.MAX_VALUE
29 27
@@ -40,7 +38,6 @@ class Logic2VampireLanguageMapper_ScopeMapper {
40 38
41 // Handling Minimum_General 39 // Handling Minimum_General
42 if (GLOBAL_MIN != ABSOLUTE_MIN) { 40 if (GLOBAL_MIN != ABSOLUTE_MIN) {
43 // *
44 getInstanceConstants(GLOBAL_MIN, 0, localInstances, trace, true, !consistant) 41 getInstanceConstants(GLOBAL_MIN, 0, localInstances, trace, true, !consistant)
45 if (consistant) { 42 if (consistant) {
46 for (i : trace.uniqueInstances) { 43 for (i : trace.uniqueInstances) {
@@ -94,7 +91,7 @@ class Logic2VampireLanguageMapper_ScopeMapper {
94 91
95// 3. Specify uniqueness of elements 92// 3. Specify uniqueness of elements
96 // TEMP 93 // TEMP
97 val DUPLICATES = false 94 val DUPLICATES = config.uniquenessDuplicates
98 95
99 val numInst = trace.uniqueInstances.length 96 val numInst = trace.uniqueInstances.length
100 var ind = 1 97 var ind = 1
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 dd88a53a..195b89bb 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
@@ -77,6 +77,14 @@ class Logic2VampireLanguageMapper_Support {
77 it.terms += duplicate(v) 77 it.terms += duplicate(v)
78 ] 78 ]
79 } 79 }
80
81 def protected List<VLSVariable> duplicate(List<VLSVariable> vars) {
82 var newList = newArrayList
83 for (v : vars) {
84 newList.add(duplicate(v))
85 }
86 return newList
87 }
80 88
81 def protected VLSConstant toConstant(VLSFunctionAsTerm term) { 89 def protected VLSConstant toConstant(VLSFunctionAsTerm term) {
82 return createVLSConstant => [ 90 return createVLSConstant => [