aboutsummaryrefslogtreecommitdiffstats
path: root/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/rules/RefinementRuleProvider.xtend
diff options
context:
space:
mode:
Diffstat (limited to 'Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/rules/RefinementRuleProvider.xtend')
-rw-r--r--Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/rules/RefinementRuleProvider.xtend27
1 files changed, 21 insertions, 6 deletions
diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/rules/RefinementRuleProvider.xtend b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/rules/RefinementRuleProvider.xtend
index 0a21d99e..20d24b77 100644
--- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/rules/RefinementRuleProvider.xtend
+++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra/src/hu/bme/mit/inf/dslreasoner/viatrasolver/logic2viatra/rules/RefinementRuleProvider.xtend
@@ -6,6 +6,7 @@ import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Relation
6import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.RelationDeclaration 6import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.RelationDeclaration
7import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Type 7import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Type
8import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.ModelGenerationStatistics 8import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.ModelGenerationStatistics
9import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.ScopePropagator
9import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.GeneratedPatterns 10import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.GeneratedPatterns
10import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.ObjectCreationPrecondition 11import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.ObjectCreationPrecondition
11import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialComplexTypeInterpretation 12import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialComplexTypeInterpretation
@@ -31,6 +32,7 @@ class RefinementRuleProvider {
31 def LinkedHashMap<ObjectCreationPrecondition, BatchTransformationRule<GenericPatternMatch, ViatraQueryMatcher<GenericPatternMatch>>> 32 def LinkedHashMap<ObjectCreationPrecondition, BatchTransformationRule<GenericPatternMatch, ViatraQueryMatcher<GenericPatternMatch>>>
32 createObjectRefinementRules( 33 createObjectRefinementRules(
33 GeneratedPatterns patterns, 34 GeneratedPatterns patterns,
35 ScopePropagator scopePropagator,
34 boolean nameNewElement, 36 boolean nameNewElement,
35 ModelGenerationStatistics statistics 37 ModelGenerationStatistics statistics
36 ) 38 )
@@ -41,7 +43,7 @@ class RefinementRuleProvider {
41 val inverseRelation = LHSEntry.key.inverseContainment 43 val inverseRelation = LHSEntry.key.inverseContainment
42 val type = LHSEntry.key.newType 44 val type = LHSEntry.key.newType
43 val lhs = LHSEntry.value as IQuerySpecification<ViatraQueryMatcher<GenericPatternMatch>> 45 val lhs = LHSEntry.value as IQuerySpecification<ViatraQueryMatcher<GenericPatternMatch>>
44 val rule = createObjectCreationRule(containmentRelation,inverseRelation,type,lhs,nameNewElement,statistics) 46 val rule = createObjectCreationRule(containmentRelation,inverseRelation,type,lhs,nameNewElement,scopePropagator,statistics)
45 res.put(LHSEntry.key,rule) 47 res.put(LHSEntry.key,rule)
46 } 48 }
47 return res 49 return res
@@ -53,6 +55,7 @@ class RefinementRuleProvider {
53 Type type, 55 Type type,
54 IQuerySpecification<ViatraQueryMatcher<GenericPatternMatch>> lhs, 56 IQuerySpecification<ViatraQueryMatcher<GenericPatternMatch>> lhs,
55 boolean nameNewElement, 57 boolean nameNewElement,
58 ScopePropagator scopePropagator,
56 ModelGenerationStatistics statistics) 59 ModelGenerationStatistics statistics)
57 { 60 {
58 val name = '''addObject_«type.name.canonizeName»« 61 val name = '''addObject_«type.name.canonizeName»«
@@ -80,10 +83,10 @@ class RefinementRuleProvider {
80 83
81 // Existence 84 // Existence
82 interpretation.newElements+=newElement 85 interpretation.newElements+=newElement
83 interpretation.maxNewElements=interpretation.maxNewElements-1 86 /*interpretation.maxNewElements=interpretation.maxNewElements-1
84 if(interpretation.minNewElements > 0) { 87 if(interpretation.minNewElements > 0) {
85 interpretation.minNewElements=interpretation.minNewElements-1 88 interpretation.minNewElements=interpretation.minNewElements-1
86 } 89 }*/
87 90
88 // Types 91 // Types
89 typeInterpretation.elements += newElement 92 typeInterpretation.elements += newElement
@@ -94,6 +97,10 @@ class RefinementRuleProvider {
94 // Inverse Containment 97 // Inverse Containment
95 val newLink2 = factory2.createBinaryElementRelationLink => [it.param1 = newElement it.param2 = container] 98 val newLink2 = factory2.createBinaryElementRelationLink => [it.param1 = newElement it.param2 = container]
96 inverseRelationInterpretation.relationlinks+=newLink2 99 inverseRelationInterpretation.relationlinks+=newLink2
100
101 // Scope propagation
102 scopePropagator.propagateAdditionToType(typeInterpretation)
103
97 statistics.addExecutionTime(System.nanoTime-startTime) 104 statistics.addExecutionTime(System.nanoTime-startTime)
98 ] 105 ]
99 } else { 106 } else {
@@ -113,10 +120,10 @@ class RefinementRuleProvider {
113 120
114 // Existence 121 // Existence
115 interpretation.newElements+=newElement 122 interpretation.newElements+=newElement
116 interpretation.maxNewElements=interpretation.maxNewElements-1 123 /*interpretation.maxNewElements=interpretation.maxNewElements-1
117 if(interpretation.minNewElements > 0) { 124 if(interpretation.minNewElements > 0) {
118 interpretation.minNewElements=interpretation.minNewElements-1 125 interpretation.minNewElements=interpretation.minNewElements-1
119 } 126 }*/
120 127
121 // Types 128 // Types
122 typeInterpretation.elements += newElement 129 typeInterpretation.elements += newElement
@@ -124,6 +131,10 @@ class RefinementRuleProvider {
124 // ContainmentRelation 131 // ContainmentRelation
125 val newLink = factory2.createBinaryElementRelationLink => [it.param1 = container it.param2 = newElement] 132 val newLink = factory2.createBinaryElementRelationLink => [it.param1 = container it.param2 = newElement]
126 relationInterpretation.relationlinks+=newLink 133 relationInterpretation.relationlinks+=newLink
134
135 // Scope propagation
136 scopePropagator.propagateAdditionToType(typeInterpretation)
137
127 statistics.addExecutionTime(System.nanoTime-startTime) 138 statistics.addExecutionTime(System.nanoTime-startTime)
128 ] 139 ]
129 } 140 }
@@ -141,15 +152,19 @@ class RefinementRuleProvider {
141 152
142 // Existence 153 // Existence
143 interpretation.newElements+=newElement 154 interpretation.newElements+=newElement
155 /*
144 interpretation.maxNewElements=interpretation.maxNewElements-1 156 interpretation.maxNewElements=interpretation.maxNewElements-1
145 if(interpretation.minNewElements > 0) { 157 if(interpretation.minNewElements > 0) {
146 interpretation.minNewElements=interpretation.minNewElements-1 158 interpretation.minNewElements=interpretation.minNewElements-1
147 } 159 }*/
148 160
149 // Types 161 // Types
150 typeInterpretation.elements += newElement 162 typeInterpretation.elements += newElement
151 typeInterpretation.supertypeInterpretation.forEach[it.elements += newElement] 163 typeInterpretation.supertypeInterpretation.forEach[it.elements += newElement]
152 164
165 // Scope propagation
166 scopePropagator.propagateAdditionToType(typeInterpretation)
167
153 statistics.addExecutionTime(System.nanoTime-startTime) 168 statistics.addExecutionTime(System.nanoTime-startTime)
154 ] 169 ]
155 } 170 }