diff options
author | 2020-05-08 18:28:19 +0200 | |
---|---|---|
committer | 2020-05-08 18:28:19 +0200 | |
commit | 419e76265ecbdf65e960e0624be006d31ed1e191 (patch) | |
tree | dad200fe9fd0beae7adde969206b77691a51b85a /Tests/MODELS2020-CaseStudies/case.study.familyTree.run/outputs/debug | |
parent | Fix check expressions in generated VIATRA (diff) | |
download | VIATRA-Generator-419e76265ecbdf65e960e0624be006d31ed1e191.tar.gz VIATRA-Generator-419e76265ecbdf65e960e0624be006d31ed1e191.tar.zst VIATRA-Generator-419e76265ecbdf65e960e0624be006d31ed1e191.zip |
Update solver language grammar
First version, still needs TokenSource and Linker to work.
Diffstat (limited to 'Tests/MODELS2020-CaseStudies/case.study.familyTree.run/outputs/debug')
2 files changed, 807 insertions, 681 deletions
diff --git a/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/outputs/debug/errors.txt b/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/outputs/debug/errors.txt index 637be9c5..87a7ed57 100644 --- a/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/outputs/debug/errors.txt +++ b/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/outputs/debug/errors.txt | |||
@@ -1,13 +1,19 @@ | |||
1 | Error occured (NullPointerException): | 1 | Error occured (IllegalArgumentException): TypeConstraint applicable for enumerable input keys only; received instead org.eclipse.viatra.query.patternlanguage.emf.types.BottomTypeKey@3ba3f40d |
2 | hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.PConstraintTransformer.hasValueExpression(PConstraintTransformer.java:487) | 2 | org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint.<init>(TypeConstraint.java:42) |
3 | hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.PConstraintTransformer._transformConstraint(PConstraintTransformer.java:614) | 3 | org.eclipse.viatra.query.patternlanguage.emf.specification.internal.EPMToPBody.acceptTypeConstraint(EPMToPBody.java:115) |
4 | hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.PConstraintTransformer.transformConstraint(PConstraintTransformer.java:689) | 4 | org.eclipse.viatra.query.patternlanguage.emf.specification.internal.PatternBodyTransformer.preprocessParameters(PatternBodyTransformer.java:168) |
5 | hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.RelationDefinitionIndexer.transformPattern(RelationDefinitionIndexer.java:169) | 5 | org.eclipse.viatra.query.patternlanguage.emf.specification.internal.PatternBodyTransformer.transform(PatternBodyTransformer.java:123) |
6 | hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.RelationDefinitionIndexer.generateRelationDefinitions(RelationDefinitionIndexer.java:51) | 6 | org.eclipse.viatra.query.patternlanguage.emf.specification.SpecificationBuilder.getBodies(SpecificationBuilder.java:300) |
7 | hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.PatternGenerator.transformBaseProperties(PatternGenerator.java:747) | 7 | org.eclipse.viatra.query.patternlanguage.emf.specification.SpecificationBuilder.buildBodies(SpecificationBuilder.java:286) |
8 | hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.PatternProvider.generateQueries(PatternProvider.java:59) | 8 | org.eclipse.viatra.query.patternlanguage.emf.specification.SpecificationBuilder.buildSpecification(SpecificationBuilder.java:197) |
9 | org.eclipse.viatra.query.patternlanguage.emf.specification.SpecificationBuilder.lambda$4(SpecificationBuilder.java:157) | ||
10 | java.util.Optional.orElseGet(Optional.java:267) | ||
11 | org.eclipse.viatra.query.patternlanguage.emf.specification.SpecificationBuilder.getOrCreateSpecification(SpecificationBuilder.java:157) | ||
12 | hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.util.ParseUtil.createSpecification(ParseUtil.java:114) | ||
13 | hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.util.ParseUtil.parse(ParseUtil.java:101) | ||
14 | hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.PatternProvider.generateQueries(PatternProvider.java:66) | ||
9 | hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.ModelGenerationMethodProvider.createModelGenerationMethod(ModelGenerationMethodProvider.java:57) | 15 | hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.ModelGenerationMethodProvider.createModelGenerationMethod(ModelGenerationMethodProvider.java:57) |
10 | hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.ViatraReasoner.solve(ViatraReasoner.java:96) | 16 | hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.ViatraReasoner.solve(ViatraReasoner.java:97) |
11 | hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:316) | 17 | hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:316) |
12 | hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:129) | 18 | hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:129) |
13 | hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:338) | 19 | hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:338) |
diff --git a/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/outputs/debug/generated3valued.vql_deactivated b/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/outputs/debug/generated3valued.vql_deactivated index bbaa6a26..315a1e15 100644 --- a/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/outputs/debug/generated3valued.vql_deactivated +++ b/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/outputs/debug/generated3valued.vql_deactivated | |||
@@ -1,672 +1,792 @@ | |||
1 | import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage" | 1 | import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage" |
2 | import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem" | 2 | import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem" |
3 | import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language" | 3 | import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language" |
4 | 4 | ||
5 | ////////// | 5 | ////////// |
6 | // 0. Util | 6 | // 0. Util |
7 | ////////// | 7 | ////////// |
8 | private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) { | 8 | private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) { |
9 | PartialInterpretation.problem(interpretation,problem); | 9 | PartialInterpretation.problem(interpretation,problem); |
10 | } | 10 | } |
11 | 11 | ||
12 | ///////////////////////// | 12 | ///////////////////////// |
13 | // 0.1 Existence | 13 | // 0.1 Existence |
14 | ///////////////////////// | 14 | ///////////////////////// |
15 | /** [[exist(element)]]=1 */ | 15 | /** [[exist(element)]]=1 */ |
16 | private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { | 16 | private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { |
17 | find interpretation(problem,interpretation); | 17 | find interpretation(problem,interpretation); |
18 | LogicProblem.elements(problem,element); | 18 | LogicProblem.elements(problem,element); |
19 | } or { | 19 | } or { |
20 | find interpretation(problem,interpretation); | 20 | find interpretation(problem,interpretation); |
21 | PartialInterpretation.newElements(interpretation,element); | 21 | PartialInterpretation.newElements(interpretation,element); |
22 | } | 22 | } |
23 | 23 | ||
24 | /** [[exist(element)]]>=1/2 */ | 24 | /** [[exist(element)]]>=1/2 */ |
25 | private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { | 25 | private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { |
26 | find mustExist(problem,interpretation,element); | 26 | find mustExist(problem,interpretation,element); |
27 | } or { | 27 | } or { |
28 | find interpretation(problem,interpretation); | 28 | find interpretation(problem,interpretation); |
29 | neg find elementCloseWorld(element); | 29 | neg find elementCloseWorld(element); |
30 | PartialInterpretation.openWorldElements(interpretation,element); | 30 | PartialInterpretation.openWorldElements(interpretation,element); |
31 | } | 31 | } |
32 | 32 | ||
33 | private pattern elementCloseWorld(element:DefinedElement) { | 33 | private pattern elementCloseWorld(element:DefinedElement) { |
34 | PartialInterpretation.openWorldElements(i,element); | 34 | PartialInterpretation.openWorldElements(i,element); |
35 | PartialInterpretation.maxNewElements(i,0); | 35 | PartialInterpretation.maxNewElements(i,0); |
36 | } or { | 36 | } or { |
37 | Scope.targetTypeInterpretation(scope,interpretation); | 37 | Scope.targetTypeInterpretation(scope,interpretation); |
38 | PartialTypeInterpratation.elements(interpretation,element); | 38 | PartialTypeInterpratation.elements(interpretation,element); |
39 | Scope.maxNewElements(scope,0); | 39 | Scope.maxNewElements(scope,0); |
40 | } | 40 | } |
41 | 41 | ||
42 | //////////////////////// | 42 | //////////////////////// |
43 | // 0.2 Equivalence | 43 | // 0.2 Equivalence |
44 | //////////////////////// | 44 | //////////////////////// |
45 | pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) | 45 | pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) |
46 | // For non-primitive type. Boolean types always must equivalent or cannot equivalent | 46 | // For non-primitive type. Boolean types always must equivalent or cannot equivalent |
47 | { | 47 | { |
48 | find mayExist(problem,interpretation,a); | 48 | find mayExist(problem,interpretation,a); |
49 | find mayExist(problem,interpretation,b); | 49 | find mayExist(problem,interpretation,b); |
50 | a == b; | 50 | a == b; |
51 | } or { | 51 | } or { |
52 | find mayExist(problem,interpretation,a); | 52 | find mayExist(problem,interpretation,a); |
53 | find mayExist(problem,interpretation,b); | 53 | find mayExist(problem,interpretation,b); |
54 | IntegerElement(a); | 54 | IntegerElement(a); |
55 | IntegerElement(b); | 55 | IntegerElement(b); |
56 | PrimitiveElement.valueSet(a,false); | 56 | PrimitiveElement.valueSet(a,false); |
57 | } or { | 57 | } or { |
58 | find mayExist(problem,interpretation,a); | 58 | find mayExist(problem,interpretation,a); |
59 | find mayExist(problem,interpretation,b); | 59 | find mayExist(problem,interpretation,b); |
60 | IntegerElement(a); | 60 | IntegerElement(a); |
61 | IntegerElement(b); | 61 | IntegerElement(b); |
62 | PrimitiveElement.valueSet(b,false); | 62 | PrimitiveElement.valueSet(b,false); |
63 | } or { | 63 | } or { |
64 | find mayExist(problem,interpretation,a); | 64 | find mayExist(problem,interpretation,a); |
65 | find mayExist(problem,interpretation,b); | 65 | find mayExist(problem,interpretation,b); |
66 | RealElement(a); | 66 | RealElement(a); |
67 | RealElement(b); | 67 | RealElement(b); |
68 | PrimitiveElement.valueSet(a,false); | 68 | PrimitiveElement.valueSet(a,false); |
69 | } or { | 69 | } or { |
70 | find mayExist(problem,interpretation,a); | 70 | find mayExist(problem,interpretation,a); |
71 | find mayExist(problem,interpretation,b); | 71 | find mayExist(problem,interpretation,b); |
72 | RealElement(a); | 72 | RealElement(a); |
73 | RealElement(b); | 73 | RealElement(b); |
74 | PrimitiveElement.valueSet(b,false); | 74 | PrimitiveElement.valueSet(b,false); |
75 | } or { | 75 | } or { |
76 | find mayExist(problem,interpretation,a); | 76 | find mayExist(problem,interpretation,a); |
77 | find mayExist(problem,interpretation,b); | 77 | find mayExist(problem,interpretation,b); |
78 | RealElement(a); | 78 | RealElement(a); |
79 | IntegerElement(b); | 79 | IntegerElement(b); |
80 | PrimitiveElement.valueSet(a,false); | 80 | PrimitiveElement.valueSet(a,false); |
81 | } or { | 81 | } or { |
82 | find mayExist(problem,interpretation,a); | 82 | find mayExist(problem,interpretation,a); |
83 | find mayExist(problem,interpretation,b); | 83 | find mayExist(problem,interpretation,b); |
84 | RealElement(a); | 84 | RealElement(a); |
85 | IntegerElement(b); | 85 | IntegerElement(b); |
86 | PrimitiveElement.valueSet(b,false); | 86 | PrimitiveElement.valueSet(b,false); |
87 | } or { | 87 | } or { |
88 | find mayExist(problem,interpretation,a); | 88 | find mayExist(problem,interpretation,a); |
89 | find mayExist(problem,interpretation,b); | 89 | find mayExist(problem,interpretation,b); |
90 | IntegerElement(a); | 90 | IntegerElement(a); |
91 | RealElement(b); | 91 | RealElement(b); |
92 | PrimitiveElement.valueSet(a,false); | 92 | PrimitiveElement.valueSet(a,false); |
93 | } or { | 93 | } or { |
94 | find mayExist(problem,interpretation,a); | 94 | find mayExist(problem,interpretation,a); |
95 | find mayExist(problem,interpretation,b); | 95 | find mayExist(problem,interpretation,b); |
96 | IntegerElement(a); | 96 | IntegerElement(a); |
97 | RealElement(b); | 97 | RealElement(b); |
98 | PrimitiveElement.valueSet(b,false); | 98 | PrimitiveElement.valueSet(b,false); |
99 | } or { | 99 | } or { |
100 | find mayExist(problem,interpretation,a); | 100 | find mayExist(problem,interpretation,a); |
101 | find mayExist(problem,interpretation,b); | 101 | find mayExist(problem,interpretation,b); |
102 | StringElement(a); | 102 | StringElement(a); |
103 | StringElement(b); | 103 | StringElement(b); |
104 | PrimitiveElement.valueSet(a,false); | 104 | PrimitiveElement.valueSet(a,false); |
105 | } or { | 105 | } or { |
106 | find mayExist(problem,interpretation,a); | 106 | find mayExist(problem,interpretation,a); |
107 | find mayExist(problem,interpretation,b); | 107 | find mayExist(problem,interpretation,b); |
108 | StringElement(a); | 108 | StringElement(a); |
109 | StringElement(b); | 109 | StringElement(b); |
110 | PrimitiveElement.valueSet(b,false); | 110 | PrimitiveElement.valueSet(b,false); |
111 | } | 111 | } |
112 | 112 | ||
113 | pattern mustEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) { | 113 | pattern mustEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) { |
114 | // For non-primitive and Boolean primitive type | 114 | // For non-primitive and Boolean primitive type |
115 | find mustExist(problem,interpretation,a); | 115 | find mustExist(problem,interpretation,a); |
116 | find mustExist(problem,interpretation,b); | 116 | find mustExist(problem,interpretation,b); |
117 | a == b; | 117 | a == b; |
118 | } or { | 118 | } or { |
119 | find mustExist(problem,interpretation,a); | 119 | find mustExist(problem,interpretation,a); |
120 | find mustExist(problem,interpretation,b); | 120 | find mustExist(problem,interpretation,b); |
121 | PrimitiveElement.valueSet(a,true); | 121 | PrimitiveElement.valueSet(a,true); |
122 | PrimitiveElement.valueSet(b,true); | 122 | PrimitiveElement.valueSet(b,true); |
123 | IntegerElement.value(a,value); | 123 | IntegerElement.value(a,value); |
124 | IntegerElement.value(b,value); | 124 | IntegerElement.value(b,value); |
125 | } or { | 125 | } or { |
126 | find mustExist(problem,interpretation,a); | 126 | find mustExist(problem,interpretation,a); |
127 | find mustExist(problem,interpretation,b); | 127 | find mustExist(problem,interpretation,b); |
128 | PrimitiveElement.valueSet(a,true); | 128 | PrimitiveElement.valueSet(a,true); |
129 | PrimitiveElement.valueSet(b,true); | 129 | PrimitiveElement.valueSet(b,true); |
130 | RealElement.value(a,value); | 130 | RealElement.value(a,value); |
131 | RealElement.value(b,value); | 131 | RealElement.value(b,value); |
132 | } or { | 132 | } or { |
133 | find mustExist(problem,interpretation,a); | 133 | find mustExist(problem,interpretation,a); |
134 | find mustExist(problem,interpretation,b); | 134 | find mustExist(problem,interpretation,b); |
135 | PrimitiveElement.valueSet(a,true); | 135 | PrimitiveElement.valueSet(a,true); |
136 | PrimitiveElement.valueSet(b,true); | 136 | PrimitiveElement.valueSet(b,true); |
137 | RealElement.value(a,value); | 137 | RealElement.value(a,value); |
138 | IntegerElement.value(b,value); | 138 | IntegerElement.value(b,value); |
139 | } or { | 139 | } or { |
140 | find mustExist(problem,interpretation,a); | 140 | find mustExist(problem,interpretation,a); |
141 | find mustExist(problem,interpretation,b); | 141 | find mustExist(problem,interpretation,b); |
142 | PrimitiveElement.valueSet(a,true); | 142 | PrimitiveElement.valueSet(a,true); |
143 | PrimitiveElement.valueSet(b,true); | 143 | PrimitiveElement.valueSet(b,true); |
144 | IntegerElement.value(a,value); | 144 | IntegerElement.value(a,value); |
145 | RealElement.value(b,value); | 145 | RealElement.value(b,value); |
146 | } or { | 146 | } or { |
147 | find mustExist(problem,interpretation,a); | 147 | find mustExist(problem,interpretation,a); |
148 | find mustExist(problem,interpretation,b); | 148 | find mustExist(problem,interpretation,b); |
149 | PrimitiveElement.valueSet(a,true); | 149 | PrimitiveElement.valueSet(a,true); |
150 | PrimitiveElement.valueSet(b,true); | 150 | PrimitiveElement.valueSet(b,true); |
151 | StringElement.value(a,value); | 151 | StringElement.value(a,value); |
152 | StringElement.value(b,value); | 152 | StringElement.value(b,value); |
153 | } | 153 | } |
154 | 154 | ||
155 | ////////// | 155 | ////////// |
156 | // 1. Problem-Specific Base Indexers | 156 | // 1. Problem-Specific Base Indexers |
157 | ////////// | 157 | ////////// |
158 | // 1.1 Type Indexers | 158 | // 1.1 Type Indexers |
159 | ////////// | 159 | ////////// |
160 | // 1.1.1 Required Patterns by TypeIndexer | 160 | // 1.1.1 Required Patterns by TypeIndexer |
161 | ////////// | 161 | ////////// |
162 | private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) { | 162 | private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) { |
163 | find interpretation(problem,interpretation); | 163 | find interpretation(problem,interpretation); |
164 | LogicProblem.types(problem,type); | 164 | LogicProblem.types(problem,type); |
165 | PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); | 165 | PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); |
166 | PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); | 166 | PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); |
167 | } | 167 | } |
168 | 168 | ||
169 | private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) { | 169 | private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) { |
170 | find interpretation(problem,interpretation); | 170 | find interpretation(problem,interpretation); |
171 | LogicProblem.types(problem,type); | 171 | LogicProblem.types(problem,type); |
172 | TypeDefinition.elements(type,element); | 172 | TypeDefinition.elements(type,element); |
173 | } or { | 173 | } or { |
174 | find interpretation(problem,interpretation); | 174 | find interpretation(problem,interpretation); |
175 | find typeInterpretation(problem,interpretation,type,typeInterpretation); | 175 | find typeInterpretation(problem,interpretation,type,typeInterpretation); |
176 | PartialComplexTypeInterpretation.elements(typeInterpretation,element); | 176 | PartialComplexTypeInterpretation.elements(typeInterpretation,element); |
177 | } | 177 | } |
178 | 178 | ||
179 | private pattern isPrimitive(element: PrimitiveElement) { | 179 | private pattern isPrimitive(element: PrimitiveElement) { |
180 | PrimitiveElement(element); | 180 | PrimitiveElement(element); |
181 | } | 181 | } |
182 | ////////// | 182 | ////////// |
183 | // 1.1.2 primitive Type Indexers | 183 | // 1.1.2 primitive Type Indexers |
184 | ////////// | 184 | ////////// |
185 | // Currently unused. Refer primitive types as: | 185 | // Currently unused. Refer primitive types as: |
186 | // > PrimitiveElement(element) | 186 | // > PrimitiveElement(element) |
187 | // specific types are referred as: | 187 | // specific types are referred as: |
188 | // > BooleanElement(variableName) | 188 | // > BooleanElement(variableName) |
189 | // > IntegerElement(variableName) | 189 | // > IntegerElement(variableName) |
190 | // > RealElement(variableName) | 190 | // > RealElement(variableName) |
191 | // > StringElement(variableName) | 191 | // > StringElement(variableName) |
192 | // And their value as | 192 | // And their value as |
193 | // > BooleanElement.value(variableName,value) | 193 | // > BooleanElement.value(variableName,value) |
194 | // > IntegerElement.value(variableName,value) | 194 | // > IntegerElement.value(variableName,value) |
195 | // > RealElement.value(variableName,value) | 195 | // > RealElement.value(variableName,value) |
196 | // > StringElement.value(variableName,value) | 196 | // > StringElement.value(variableName,value) |
197 | // Whether a value is set is defined by: | 197 | // Whether a value is set is defined by: |
198 | // > PrimitiveElement.valueSet(variableName,isFilled); | 198 | // > PrimitiveElement.valueSet(variableName,isFilled); |
199 | ////////// | 199 | ////////// |
200 | // 1.1.3 domain-specific Type Indexers | 200 | // 1.1.3 domain-specific Type Indexers |
201 | ////////// | 201 | ////////// |
202 | /** | 202 | /** |
203 | * An element must be an instance of type "FamilyTree class". | 203 | * An element must be an instance of type "FamilyTree class". |
204 | */ | 204 | */ |
205 | private pattern mustInstanceOfFamilyTree_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { | 205 | private pattern mustInstanceOfFamilyTree_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { |
206 | Type.name(type,"FamilyTree class"); | 206 | Type.name(type,"FamilyTree class"); |
207 | find directInstanceOf(problem,interpretation,element,type); | 207 | find directInstanceOf(problem,interpretation,element,type); |
208 | } | 208 | } |
209 | private pattern scopeDisallowsNewFamilyTree_class(problem:LogicProblem, interpretation:PartialInterpretation) { | 209 | private pattern scopeDisallowsNewFamilyTree_class(problem:LogicProblem, interpretation:PartialInterpretation) { |
210 | find interpretation(problem,interpretation); | 210 | find interpretation(problem,interpretation); |
211 | PartialInterpretation.scopes(interpretation,scope); | 211 | PartialInterpretation.scopes(interpretation,scope); |
212 | Scope.targetTypeInterpretation(scope,typeInterpretation); | 212 | Scope.targetTypeInterpretation(scope,typeInterpretation); |
213 | Scope.maxNewElements(scope,0); | 213 | Scope.maxNewElements(scope,0); |
214 | PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); | 214 | PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); |
215 | Type.name(type,"FamilyTree class"); | 215 | Type.name(type,"FamilyTree class"); |
216 | } | 216 | } |
217 | 217 | ||
218 | /** | 218 | /** |
219 | * An element may be an instance of type "FamilyTree class". | 219 | * An element may be an instance of type "FamilyTree class". |
220 | */ | 220 | */ |
221 | private pattern mayInstanceOfFamilyTree_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) | 221 | private pattern mayInstanceOfFamilyTree_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) |
222 | { | 222 | { |
223 | find interpretation(problem,interpretation); | 223 | find interpretation(problem,interpretation); |
224 | PartialInterpretation.newElements(interpretation,element); | 224 | PartialInterpretation.newElements(interpretation,element); |
225 | neg find mustInstanceOfMember_class(problem,interpretation,element); | 225 | neg find mustInstanceOfMember_class(problem,interpretation,element); |
226 | neg find scopeDisallowsNewFamilyTree_class(problem, interpretation); | 226 | neg find scopeDisallowsNewFamilyTree_class(problem, interpretation); |
227 | neg find isPrimitive(element); | 227 | neg find isPrimitive(element); |
228 | } or { | 228 | } or { |
229 | find interpretation(problem,interpretation); | 229 | find interpretation(problem,interpretation); |
230 | PartialInterpretation.openWorldElements(interpretation,element); | 230 | PartialInterpretation.openWorldElements(interpretation,element); |
231 | neg find mustInstanceOfMember_class(problem,interpretation,element); | 231 | neg find mustInstanceOfMember_class(problem,interpretation,element); |
232 | neg find scopeDisallowsNewFamilyTree_class(problem, interpretation); | 232 | neg find scopeDisallowsNewFamilyTree_class(problem, interpretation); |
233 | neg find isPrimitive(element); | 233 | neg find isPrimitive(element); |
234 | } or | 234 | } or |
235 | { find mustInstanceOfFamilyTree_class(problem,interpretation,element); } | 235 | { find mustInstanceOfFamilyTree_class(problem,interpretation,element); } |
236 | /** | 236 | /** |
237 | * An element must be an instance of type "Member class". | 237 | * An element must be an instance of type "Member class". |
238 | */ | 238 | */ |
239 | private pattern mustInstanceOfMember_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { | 239 | private pattern mustInstanceOfMember_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { |
240 | Type.name(type,"Member class"); | 240 | Type.name(type,"Member class"); |
241 | find directInstanceOf(problem,interpretation,element,type); | 241 | find directInstanceOf(problem,interpretation,element,type); |
242 | } | 242 | } |
243 | private pattern scopeDisallowsNewMember_class(problem:LogicProblem, interpretation:PartialInterpretation) { | 243 | private pattern scopeDisallowsNewMember_class(problem:LogicProblem, interpretation:PartialInterpretation) { |
244 | find interpretation(problem,interpretation); | 244 | find interpretation(problem,interpretation); |
245 | PartialInterpretation.scopes(interpretation,scope); | 245 | PartialInterpretation.scopes(interpretation,scope); |
246 | Scope.targetTypeInterpretation(scope,typeInterpretation); | 246 | Scope.targetTypeInterpretation(scope,typeInterpretation); |
247 | Scope.maxNewElements(scope,0); | 247 | Scope.maxNewElements(scope,0); |
248 | PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); | 248 | PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type); |
249 | Type.name(type,"Member class"); | 249 | Type.name(type,"Member class"); |
250 | } | 250 | } |
251 | 251 | ||
252 | /** | 252 | /** |
253 | * An element may be an instance of type "Member class". | 253 | * An element may be an instance of type "Member class". |
254 | */ | 254 | */ |
255 | private pattern mayInstanceOfMember_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) | 255 | private pattern mayInstanceOfMember_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) |
256 | { | 256 | { |
257 | find interpretation(problem,interpretation); | 257 | find interpretation(problem,interpretation); |
258 | PartialInterpretation.newElements(interpretation,element); | 258 | PartialInterpretation.newElements(interpretation,element); |
259 | neg find mustInstanceOfFamilyTree_class(problem,interpretation,element); | 259 | neg find mustInstanceOfFamilyTree_class(problem,interpretation,element); |
260 | neg find scopeDisallowsNewMember_class(problem, interpretation); | 260 | neg find scopeDisallowsNewMember_class(problem, interpretation); |
261 | neg find isPrimitive(element); | 261 | neg find isPrimitive(element); |
262 | } or { | 262 | } or { |
263 | find interpretation(problem,interpretation); | 263 | find interpretation(problem,interpretation); |
264 | PartialInterpretation.openWorldElements(interpretation,element); | 264 | PartialInterpretation.openWorldElements(interpretation,element); |
265 | neg find mustInstanceOfFamilyTree_class(problem,interpretation,element); | 265 | neg find mustInstanceOfFamilyTree_class(problem,interpretation,element); |
266 | neg find scopeDisallowsNewMember_class(problem, interpretation); | 266 | neg find scopeDisallowsNewMember_class(problem, interpretation); |
267 | neg find isPrimitive(element); | 267 | neg find isPrimitive(element); |
268 | } or | 268 | } or |
269 | { find mustInstanceOfMember_class(problem,interpretation,element); } | 269 | { find mustInstanceOfMember_class(problem,interpretation,element); } |
270 | 270 | ||
271 | ////////// | 271 | ////////// |
272 | // 1.2 Relation Declaration Indexers | 272 | // 1.2 Relation Declaration Indexers |
273 | ////////// | 273 | ////////// |
274 | /** | 274 | /** |
275 | * Matcher for detecting tuples t where []members reference FamilyTree(source,target) | 275 | * Matcher for detecting tuples t where []members reference FamilyTree(source,target) |
276 | */ | 276 | */ |
277 | private pattern mustInRelationmembers_reference_FamilyTree( | 277 | private pattern mustInRelationmembers_reference_FamilyTree( |
278 | problem:LogicProblem, interpretation:PartialInterpretation, | 278 | problem:LogicProblem, interpretation:PartialInterpretation, |
279 | source: DefinedElement, target:DefinedElement) | 279 | source: DefinedElement, target:DefinedElement) |
280 | { | 280 | { |
281 | find interpretation(problem,interpretation); | 281 | find interpretation(problem,interpretation); |
282 | PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); | 282 | PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); |
283 | PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"members reference FamilyTree"); | 283 | PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"members reference FamilyTree"); |
284 | PartialRelationInterpretation.relationlinks(relationIterpretation,link); | 284 | PartialRelationInterpretation.relationlinks(relationIterpretation,link); |
285 | BinaryElementRelationLink.param1(link,source); | 285 | BinaryElementRelationLink.param1(link,source); |
286 | BinaryElementRelationLink.param2(link,target); | 286 | BinaryElementRelationLink.param2(link,target); |
287 | } | 287 | } |
288 | /** | 288 | /** |
289 | * Matcher for detecting tuples t where <>members reference FamilyTree(source,target) | 289 | * Matcher for detecting tuples t where <>members reference FamilyTree(source,target) |
290 | */ | 290 | */ |
291 | private pattern mayInRelationmembers_reference_FamilyTree( | 291 | private pattern mayInRelationmembers_reference_FamilyTree( |
292 | problem:LogicProblem, interpretation:PartialInterpretation, | 292 | problem:LogicProblem, interpretation:PartialInterpretation, |
293 | source: DefinedElement, target:DefinedElement) | 293 | source: DefinedElement, target:DefinedElement) |
294 | { | 294 | { |
295 | find interpretation(problem,interpretation); | 295 | find interpretation(problem,interpretation); |
296 | // The two endpoint of the link have to exist | 296 | // The two endpoint of the link have to exist |
297 | find mayExist(problem, interpretation, source); | 297 | find mayExist(problem, interpretation, source); |
298 | find mayExist(problem, interpretation, target); | 298 | find mayExist(problem, interpretation, target); |
299 | // Type consistency | 299 | // Type consistency |
300 | find mayInstanceOfFamilyTree_class(problem,interpretation,source); | 300 | find mayInstanceOfFamilyTree_class(problem,interpretation,source); |
301 | find mayInstanceOfMember_class(problem,interpretation,target); | 301 | find mayInstanceOfMember_class(problem,interpretation,target); |
302 | // The reference is containment, then a new reference cannot be create if: | 302 | // The reference is containment, then a new reference cannot be create if: |
303 | // 1. Multiple parents | 303 | // 1. Multiple parents |
304 | neg find mustContains4(problem,interpretation,_,target); | 304 | neg find mustContains4(problem,interpretation,_,target); |
305 | // 2. Circle in the containment hierarchy | 305 | // 2. Circle in the containment hierarchy |
306 | neg find mustTransitiveContains(source,target); | 306 | neg find mustTransitiveContains(source,target); |
307 | } or { | 307 | } or { |
308 | find mustInRelationmembers_reference_FamilyTree(problem,interpretation,source,target); | 308 | find mustInRelationmembers_reference_FamilyTree(problem,interpretation,source,target); |
309 | } | 309 | } |
310 | /** | 310 | /** |
311 | * Matcher for detecting tuples t where []children reference Member(source,target) | 311 | * Matcher for detecting tuples t where []children reference Member(source,target) |
312 | */ | 312 | */ |
313 | private pattern mustInRelationchildren_reference_Member( | 313 | private pattern mustInRelationchildren_reference_Member( |
314 | problem:LogicProblem, interpretation:PartialInterpretation, | 314 | problem:LogicProblem, interpretation:PartialInterpretation, |
315 | source: DefinedElement, target:DefinedElement) | 315 | source: DefinedElement, target:DefinedElement) |
316 | { | 316 | { |
317 | find interpretation(problem,interpretation); | 317 | find interpretation(problem,interpretation); |
318 | PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); | 318 | PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); |
319 | PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"children reference Member"); | 319 | PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"children reference Member"); |
320 | PartialRelationInterpretation.relationlinks(relationIterpretation,link); | 320 | PartialRelationInterpretation.relationlinks(relationIterpretation,link); |
321 | BinaryElementRelationLink.param1(link,source); | 321 | BinaryElementRelationLink.param1(link,source); |
322 | BinaryElementRelationLink.param2(link,target); | 322 | BinaryElementRelationLink.param2(link,target); |
323 | } | 323 | } |
324 | /** | 324 | /** |
325 | * Matcher for detecting tuples t where <>children reference Member(source,target) | 325 | * Matcher for detecting tuples t where <>children reference Member(source,target) |
326 | */ | 326 | */ |
327 | private pattern mayInRelationchildren_reference_Member( | 327 | private pattern mayInRelationchildren_reference_Member( |
328 | problem:LogicProblem, interpretation:PartialInterpretation, | 328 | problem:LogicProblem, interpretation:PartialInterpretation, |
329 | source: DefinedElement, target:DefinedElement) | 329 | source: DefinedElement, target:DefinedElement) |
330 | { | 330 | { |
331 | find interpretation(problem,interpretation); | 331 | find interpretation(problem,interpretation); |
332 | // The two endpoint of the link have to exist | 332 | // The two endpoint of the link have to exist |
333 | find mayExist(problem, interpretation, source); | 333 | find mayExist(problem, interpretation, source); |
334 | find mayExist(problem, interpretation, target); | 334 | find mayExist(problem, interpretation, target); |
335 | // Type consistency | 335 | // Type consistency |
336 | find mayInstanceOfMember_class(problem,interpretation,source); | 336 | find mayInstanceOfMember_class(problem,interpretation,source); |
337 | find mayInstanceOfMember_class(problem,interpretation,target); | 337 | find mayInstanceOfMember_class(problem,interpretation,target); |
338 | // There are "numberOfExistingReferences" currently existing instances of the reference to the target, | 338 | // There are "numberOfExistingReferences" currently existing instances of the reference to the target, |
339 | // the upper bound of the opposite reference multiplicity should be considered. | 339 | // the upper bound of the opposite reference multiplicity should be considered. |
340 | numberOfExistingOppositeReferences == count find mustInRelationparents_reference_Member(problem,interpretation,target,_); | 340 | numberOfExistingOppositeReferences == count find mustInRelationparents_reference_Member(problem,interpretation,target,_); |
341 | check(numberOfExistingOppositeReferences < 2); | 341 | check(numberOfExistingOppositeReferences < 2); |
342 | } or { | 342 | } or { |
343 | find mustInRelationchildren_reference_Member(problem,interpretation,source,target); | 343 | find mustInRelationchildren_reference_Member(problem,interpretation,source,target); |
344 | } | 344 | } |
345 | /** | 345 | /** |
346 | * Matcher for detecting tuples t where []parents reference Member(source,target) | 346 | * Matcher for detecting tuples t where []parents reference Member(source,target) |
347 | */ | 347 | */ |
348 | private pattern mustInRelationparents_reference_Member( | 348 | private pattern mustInRelationparents_reference_Member( |
349 | problem:LogicProblem, interpretation:PartialInterpretation, | 349 | problem:LogicProblem, interpretation:PartialInterpretation, |
350 | source: DefinedElement, target:DefinedElement) | 350 | source: DefinedElement, target:DefinedElement) |
351 | { | 351 | { |
352 | find interpretation(problem,interpretation); | 352 | find interpretation(problem,interpretation); |
353 | PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); | 353 | PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); |
354 | PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"parents reference Member"); | 354 | PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"parents reference Member"); |
355 | PartialRelationInterpretation.relationlinks(relationIterpretation,link); | 355 | PartialRelationInterpretation.relationlinks(relationIterpretation,link); |
356 | BinaryElementRelationLink.param1(link,source); | 356 | BinaryElementRelationLink.param1(link,source); |
357 | BinaryElementRelationLink.param2(link,target); | 357 | BinaryElementRelationLink.param2(link,target); |
358 | } | 358 | } |
359 | /** | 359 | /** |
360 | * Matcher for detecting tuples t where <>parents reference Member(source,target) | 360 | * Matcher for detecting tuples t where <>parents reference Member(source,target) |
361 | */ | 361 | */ |
362 | private pattern mayInRelationparents_reference_Member( | 362 | private pattern mayInRelationparents_reference_Member( |
363 | problem:LogicProblem, interpretation:PartialInterpretation, | 363 | problem:LogicProblem, interpretation:PartialInterpretation, |
364 | source: DefinedElement, target:DefinedElement) | 364 | source: DefinedElement, target:DefinedElement) |
365 | { | 365 | { |
366 | find interpretation(problem,interpretation); | 366 | find interpretation(problem,interpretation); |
367 | // The two endpoint of the link have to exist | 367 | // The two endpoint of the link have to exist |
368 | find mayExist(problem, interpretation, source); | 368 | find mayExist(problem, interpretation, source); |
369 | find mayExist(problem, interpretation, target); | 369 | find mayExist(problem, interpretation, target); |
370 | // Type consistency | 370 | // Type consistency |
371 | find mayInstanceOfMember_class(problem,interpretation,source); | 371 | find mayInstanceOfMember_class(problem,interpretation,source); |
372 | find mayInstanceOfMember_class(problem,interpretation,target); | 372 | find mayInstanceOfMember_class(problem,interpretation,target); |
373 | // There are "numberOfExistingReferences" currently existing instances of the reference from the source, | 373 | // There are "numberOfExistingReferences" currently existing instances of the reference from the source, |
374 | // the upper bound of the multiplicity should be considered. | 374 | // the upper bound of the multiplicity should be considered. |
375 | numberOfExistingReferences == count find mustInRelationparents_reference_Member(problem,interpretation,source,_); | 375 | numberOfExistingReferences == count find mustInRelationparents_reference_Member(problem,interpretation,source,_); |
376 | check(numberOfExistingReferences < 2); | 376 | check(numberOfExistingReferences < 2); |
377 | } or { | 377 | } or { |
378 | find mustInRelationparents_reference_Member(problem,interpretation,source,target); | 378 | find mustInRelationparents_reference_Member(problem,interpretation,source,target); |
379 | } | 379 | } |
380 | /** | 380 | /** |
381 | * Matcher for detecting tuples t where []name attribute Member(source,target) | 381 | * Matcher for detecting tuples t where []name attribute Member(source,target) |
382 | */ | 382 | */ |
383 | private pattern mustInRelationname_attribute_Member( | 383 | private pattern mustInRelationname_attribute_Member( |
384 | problem:LogicProblem, interpretation:PartialInterpretation, | 384 | problem:LogicProblem, interpretation:PartialInterpretation, |
385 | source: DefinedElement, target:DefinedElement) | 385 | source: DefinedElement, target:DefinedElement) |
386 | { | 386 | { |
387 | find interpretation(problem,interpretation); | 387 | find interpretation(problem,interpretation); |
388 | PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); | 388 | PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); |
389 | PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"name attribute Member"); | 389 | PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"name attribute Member"); |
390 | PartialRelationInterpretation.relationlinks(relationIterpretation,link); | 390 | PartialRelationInterpretation.relationlinks(relationIterpretation,link); |
391 | BinaryElementRelationLink.param1(link,source); | 391 | BinaryElementRelationLink.param1(link,source); |
392 | BinaryElementRelationLink.param2(link,target); | 392 | BinaryElementRelationLink.param2(link,target); |
393 | } | 393 | } |
394 | /** | 394 | /** |
395 | * Matcher for detecting tuples t where <>name attribute Member(source,target) | 395 | * Matcher for detecting tuples t where <>name attribute Member(source,target) |
396 | */ | 396 | */ |
397 | private pattern mayInRelationname_attribute_Member( | 397 | private pattern mayInRelationname_attribute_Member( |
398 | problem:LogicProblem, interpretation:PartialInterpretation, | 398 | problem:LogicProblem, interpretation:PartialInterpretation, |
399 | source: DefinedElement, target:DefinedElement) | 399 | source: DefinedElement, target:DefinedElement) |
400 | { | 400 | { |
401 | find interpretation(problem,interpretation); | 401 | find interpretation(problem,interpretation); |
402 | // The two endpoint of the link have to exist | 402 | // The two endpoint of the link have to exist |
403 | find mayExist(problem, interpretation, source); | 403 | find mayExist(problem, interpretation, source); |
404 | find mayExist(problem, interpretation, target); | 404 | find mayExist(problem, interpretation, target); |
405 | // Type consistency | 405 | // Type consistency |
406 | find mayInstanceOfMember_class(problem,interpretation,source); | 406 | find mayInstanceOfMember_class(problem,interpretation,source); |
407 | StringElement(target); | 407 | StringElement(target); |
408 | // There are "numberOfExistingReferences" currently existing instances of the reference from the source, | 408 | // There are "numberOfExistingReferences" currently existing instances of the reference from the source, |
409 | // the upper bound of the multiplicity should be considered. | 409 | // the upper bound of the multiplicity should be considered. |
410 | numberOfExistingReferences == count find mustInRelationname_attribute_Member(problem,interpretation,source,_); | 410 | numberOfExistingReferences == count find mustInRelationname_attribute_Member(problem,interpretation,source,_); |
411 | check(numberOfExistingReferences < 1); | 411 | check(numberOfExistingReferences < 1); |
412 | } or { | 412 | } or { |
413 | find mustInRelationname_attribute_Member(problem,interpretation,source,target); | 413 | find mustInRelationname_attribute_Member(problem,interpretation,source,target); |
414 | } | 414 | } |
415 | /** | 415 | /** |
416 | * Matcher for detecting tuples t where []age attribute Member(source,target) | 416 | * Matcher for detecting tuples t where []age attribute Member(source,target) |
417 | */ | 417 | */ |
418 | private pattern mustInRelationage_attribute_Member( | 418 | private pattern mustInRelationage_attribute_Member( |
419 | problem:LogicProblem, interpretation:PartialInterpretation, | 419 | problem:LogicProblem, interpretation:PartialInterpretation, |
420 | source: DefinedElement, target:DefinedElement) | 420 | source: DefinedElement, target:DefinedElement) |
421 | { | 421 | { |
422 | find interpretation(problem,interpretation); | 422 | find interpretation(problem,interpretation); |
423 | PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); | 423 | PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); |
424 | PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"age attribute Member"); | 424 | PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"age attribute Member"); |
425 | PartialRelationInterpretation.relationlinks(relationIterpretation,link); | 425 | PartialRelationInterpretation.relationlinks(relationIterpretation,link); |
426 | BinaryElementRelationLink.param1(link,source); | 426 | BinaryElementRelationLink.param1(link,source); |
427 | BinaryElementRelationLink.param2(link,target); | 427 | BinaryElementRelationLink.param2(link,target); |
428 | } | 428 | } |
429 | /** | 429 | /** |
430 | * Matcher for detecting tuples t where <>age attribute Member(source,target) | 430 | * Matcher for detecting tuples t where <>age attribute Member(source,target) |
431 | */ | 431 | */ |
432 | private pattern mayInRelationage_attribute_Member( | 432 | private pattern mayInRelationage_attribute_Member( |
433 | problem:LogicProblem, interpretation:PartialInterpretation, | 433 | problem:LogicProblem, interpretation:PartialInterpretation, |
434 | source: DefinedElement, target:DefinedElement) | 434 | source: DefinedElement, target:DefinedElement) |
435 | { | 435 | { |
436 | find interpretation(problem,interpretation); | 436 | find interpretation(problem,interpretation); |
437 | // The two endpoint of the link have to exist | 437 | // The two endpoint of the link have to exist |
438 | find mayExist(problem, interpretation, source); | 438 | find mayExist(problem, interpretation, source); |
439 | find mayExist(problem, interpretation, target); | 439 | find mayExist(problem, interpretation, target); |
440 | // Type consistency | 440 | // Type consistency |
441 | find mayInstanceOfMember_class(problem,interpretation,source); | 441 | find mayInstanceOfMember_class(problem,interpretation,source); |
442 | IntegerElement(target); | 442 | IntegerElement(target); |
443 | // There are "numberOfExistingReferences" currently existing instances of the reference from the source, | 443 | // There are "numberOfExistingReferences" currently existing instances of the reference from the source, |
444 | // the upper bound of the multiplicity should be considered. | 444 | // the upper bound of the multiplicity should be considered. |
445 | numberOfExistingReferences == count find mustInRelationage_attribute_Member(problem,interpretation,source,_); | 445 | numberOfExistingReferences == count find mustInRelationage_attribute_Member(problem,interpretation,source,_); |
446 | check(numberOfExistingReferences < 1); | 446 | check(numberOfExistingReferences < 1); |
447 | } or { | 447 | } or { |
448 | find mustInRelationage_attribute_Member(problem,interpretation,source,target); | 448 | find mustInRelationage_attribute_Member(problem,interpretation,source,target); |
449 | } | 449 | } |
450 | 450 | ||
451 | ////////// | 451 | ////////// |
452 | // 1.3 Relation Definition Indexers | 452 | // 1.3 Relation Definition Indexers |
453 | ////////// | 453 | ////////// |
454 | // Must, May and Current queries for pattern queries memberIsItsOwnParent | 454 | // Must, May and Current queries for pattern queries memberIsItsOwnParent |
455 | private pattern mustInRelation_pattern_queries_memberIsItsOwnParent( | 455 | private pattern mustInRelation_pattern_queries_memberIsItsOwnParent( |
456 | problem:LogicProblem, interpretation:PartialInterpretation, | 456 | problem:LogicProblem, interpretation:PartialInterpretation, |
457 | var_m) | 457 | var_m) |
458 | { | 458 | { |
459 | find interpretation(problem,interpretation); | 459 | find interpretation(problem,interpretation); |
460 | find mustInstanceOfMember_class(problem,interpretation,var_m); | 460 | var_m == var_p; |
461 | // m is exported | 461 | find mustInRelationmembers_reference_FamilyTree(problem,interpretation,_var__0,var_p); |
462 | find mustInstanceOfFamilyTree_class(problem,interpretation,var__0); | 462 | find mustInRelationparents_reference_Member(problem,interpretation,var_p,var_p); |
463 | find mustInRelationmembers_reference_FamilyTree(problem,interpretation,var__0,var_virtual0); | 463 | } |
464 | find mustInstanceOfMember_class(problem,interpretation,var_virtual0); | 464 | private pattern mayInRelation_pattern_queries_memberIsItsOwnParent( |
465 | find mustEquivalent(problem, interpretation, var_virtual0, var_m); | 465 | problem:LogicProblem, interpretation:PartialInterpretation, |
466 | find mustInstanceOfMember_class(problem,interpretation,var_m); | 466 | var_m) |
467 | find mustInRelationparents_reference_Member(problem,interpretation,var_m,var_virtual1); | 467 | { |
468 | find mustInstanceOfMember_class(problem,interpretation,var_virtual1); | 468 | find interpretation(problem,interpretation); |
469 | find mustEquivalent(problem, interpretation, var_virtual1, var_p); | 469 | var_m == var_p; |
470 | find mustEquivalent(problem, interpretation, var_m, var_p); | 470 | find mayInRelationmembers_reference_FamilyTree(problem,interpretation,_var__0,var_p); |
471 | } | 471 | find mayInRelationparents_reference_Member(problem,interpretation,var_p,var_p); |
472 | private pattern mayInRelation_pattern_queries_memberIsItsOwnParent( | 472 | } |
473 | problem:LogicProblem, interpretation:PartialInterpretation, | 473 | private pattern currentInRelation_pattern_queries_memberIsItsOwnParent( |
474 | var_m) | 474 | problem:LogicProblem, interpretation:PartialInterpretation, |
475 | { | 475 | var_m) |
476 | find interpretation(problem,interpretation); | 476 | { |
477 | find mayInstanceOfMember_class(problem,interpretation,var_m); | 477 | find interpretation(problem,interpretation); |
478 | // m is exported | 478 | var_m == var_p; |
479 | find mayInstanceOfFamilyTree_class(problem,interpretation,var__0); | 479 | find mustInRelationmembers_reference_FamilyTree(problem,interpretation,_var__0,var_p); |
480 | find mayInRelationmembers_reference_FamilyTree(problem,interpretation,var__0,var_virtual0); | 480 | find mustInRelationparents_reference_Member(problem,interpretation,var_p,var_p); |
481 | find mayInstanceOfMember_class(problem,interpretation,var_virtual0); | 481 | } |
482 | find mayEquivalent(problem, interpretation, var_virtual0, var_m); | 482 | // Must, May and Current queries for pattern queries twoMembersHaveNoParent |
483 | find mayInstanceOfMember_class(problem,interpretation,var_m); | 483 | private pattern mustInRelation_pattern_queries_twoMembersHaveNoParent( |
484 | find mayInRelationparents_reference_Member(problem,interpretation,var_m,var_virtual1); | 484 | problem:LogicProblem, interpretation:PartialInterpretation, |
485 | find mayInstanceOfMember_class(problem,interpretation,var_virtual1); | 485 | var_m1, var_m2) |
486 | find mayEquivalent(problem, interpretation, var_virtual1, var_p); | 486 | { |
487 | find mayEquivalent(problem, interpretation, var_m, var_p); | 487 | find interpretation(problem,interpretation); |
488 | } | 488 | // var_m1 exported |
489 | private pattern currentInRelation_pattern_queries_memberIsItsOwnParent( | 489 | // var_m2 exported |
490 | problem:LogicProblem, interpretation:PartialInterpretation, | 490 | find mustInstanceOfMember_class(problem,interpretation,var_m1); |
491 | var_m) | 491 | find mustInstanceOfMember_class(problem,interpretation,var_m2); |
492 | { | 492 | neg find mayInRelation_pattern_queries_memberHasParent(problem,interpretation,var_m1); |
493 | find interpretation(problem,interpretation); | 493 | neg find mayInRelation_pattern_queries_memberHasParent(problem,interpretation,var_m2); |
494 | find mustInstanceOfMember_class(problem,interpretation,var_m); | 494 | neg find mayEquivalent(problem, interpretation, var_m1, var_m2); |
495 | // m is exported | 495 | } |
496 | find mustInstanceOfFamilyTree_class(problem,interpretation,var__0); | 496 | private pattern mayInRelation_pattern_queries_twoMembersHaveNoParent( |
497 | find mustInRelationmembers_reference_FamilyTree(problem,interpretation,var__0,var_virtual0); | 497 | problem:LogicProblem, interpretation:PartialInterpretation, |
498 | find mustInstanceOfMember_class(problem,interpretation,var_virtual0); | 498 | var_m1, var_m2) |
499 | find mustEquivalent(problem, interpretation, var_virtual0, var_m); | 499 | { |
500 | find mustInstanceOfMember_class(problem,interpretation,var_m); | 500 | find interpretation(problem,interpretation); |
501 | find mustInRelationparents_reference_Member(problem,interpretation,var_m,var_virtual1); | 501 | // var_m1 exported |
502 | find mustInstanceOfMember_class(problem,interpretation,var_virtual1); | 502 | // var_m2 exported |
503 | find mustEquivalent(problem, interpretation, var_virtual1, var_p); | 503 | find mayInstanceOfMember_class(problem,interpretation,var_m1); |
504 | find mustEquivalent(problem, interpretation, var_m, var_p); | 504 | find mayInstanceOfMember_class(problem,interpretation,var_m2); |
505 | } | 505 | neg find mustInRelation_pattern_queries_memberHasParent(problem,interpretation,var_m1); |
506 | 506 | neg find mustInRelation_pattern_queries_memberHasParent(problem,interpretation,var_m2); | |
507 | ////////// | 507 | neg find mustEquivalent(problem, interpretation, var_m1, var_m2); |
508 | // 1.4 Containment Indexer | 508 | } |
509 | ////////// | 509 | private pattern currentInRelation_pattern_queries_twoMembersHaveNoParent( |
510 | private pattern mustContains2(source: DefinedElement, target: DefinedElement) { | 510 | problem:LogicProblem, interpretation:PartialInterpretation, |
511 | find mustContains4(_,_,source,target); | 511 | var_m1, var_m2) |
512 | } | 512 | { |
513 | 513 | find interpretation(problem,interpretation); | |
514 | private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation, | 514 | // var_m1 exported |
515 | source: DefinedElement, target: DefinedElement) | 515 | // var_m2 exported |
516 | { find mustInRelationmembers_reference_FamilyTree(problem,interpretation,source,target); } | 516 | find mustInstanceOfMember_class(problem,interpretation,var_m1); |
517 | 517 | find mustInstanceOfMember_class(problem,interpretation,var_m2); | |
518 | private pattern mustTransitiveContains(source,target) { | 518 | neg find currentInRelation_pattern_queries_memberHasParent(problem,interpretation,var_m1); |
519 | find mustContains2+(source,target); | 519 | neg find currentInRelation_pattern_queries_memberHasParent(problem,interpretation,var_m2); |
520 | } | 520 | neg find mustEquivalent(problem, interpretation, var_m1, var_m2); |
521 | 521 | } | |
522 | ////////// | 522 | // Must, May and Current queries for pattern queries memberHasParent |
523 | // 2. Invalidation Indexers | 523 | private pattern mustInRelation_pattern_queries_memberHasParent( |
524 | ////////// | 524 | problem:LogicProblem, interpretation:PartialInterpretation, |
525 | // 2.1 Invalidated by WF Queries | 525 | var_m) |
526 | ////////// | 526 | { |
527 | pattern invalidatedBy_pattern_queries_memberIsItsOwnParent(problem:LogicProblem, interpretation:PartialInterpretation, | 527 | find interpretation(problem,interpretation); |
528 | var_m) | 528 | // var_m exported |
529 | { | 529 | find mustInRelationparents_reference_Member(problem,interpretation,var_m,var__0); |
530 | find mustInRelation_pattern_queries_memberIsItsOwnParent(problem,interpretation,var_m); | 530 | find mustInstanceOfMember_class(problem,interpretation,var__0); |
531 | } | 531 | } |
532 | 532 | private pattern mayInRelation_pattern_queries_memberHasParent( | |
533 | ////////// | 533 | problem:LogicProblem, interpretation:PartialInterpretation, |
534 | // 3. Unfinishedness Indexers | 534 | var_m) |
535 | ////////// | 535 | { |
536 | // 3.1 Unfinishedness Measured by Multiplicity | 536 | find interpretation(problem,interpretation); |
537 | ////////// | 537 | // var_m exported |
538 | 538 | find mayInRelationparents_reference_Member(problem,interpretation,var_m,var__0); | |
539 | ////////// | 539 | find mayInstanceOfMember_class(problem,interpretation,var__0); |
540 | // 3.2 Unfinishedness Measured by WF Queries | 540 | } |
541 | ////////// | 541 | private pattern currentInRelation_pattern_queries_memberHasParent( |
542 | pattern unfinishedBy_pattern_queries_memberIsItsOwnParent(problem:LogicProblem, interpretation:PartialInterpretation, | 542 | problem:LogicProblem, interpretation:PartialInterpretation, |
543 | var_m) | 543 | var_m) |
544 | { | 544 | { |
545 | find currentInRelation_pattern_queries_memberIsItsOwnParent(problem,interpretation,var_m); | 545 | find interpretation(problem,interpretation); |
546 | } | 546 | // var_m exported |
547 | 547 | find mustInRelationparents_reference_Member(problem,interpretation,var_m,var__0); | |
548 | ////////// | 548 | find mustInstanceOfMember_class(problem,interpretation,var__0); |
549 | // 4. Refinement Indexers | 549 | } |
550 | ////////// | 550 | // Must, May and Current queries for pattern queries parentTooYoung |
551 | // 4.1 Object constructors | 551 | private pattern mustInRelation_pattern_queries_parentTooYoung( |
552 | ////////// | 552 | problem:LogicProblem, interpretation:PartialInterpretation, |
553 | private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation) | 553 | var_m, var_p) |
554 | { | 554 | { |
555 | find interpretation(problem,interpretation); | 555 | find interpretation(problem,interpretation); |
556 | find mustInstanceOfFamilyTree_class(problem,interpretation,root); | 556 | // var_m exported |
557 | find mustExist(problem, interpretation, root); | 557 | // var_p exported |
558 | }or{ | 558 | find mustInRelationmembers_reference_FamilyTree(problem,interpretation,_var__0,var_m); |
559 | find interpretation(problem,interpretation); | 559 | find mustInRelationparents_reference_Member(problem,interpretation,var_m,var_p); |
560 | find mustInstanceOfMember_class(problem,interpretation,root); | 560 | find mustInRelationage_attribute_Member(problem,interpretation,var_m,var_mAge); |
561 | find mustExist(problem, interpretation, root); | 561 | find mustInRelationage_attribute_Member(problem,interpretation,var_p,var_pAge); |
562 | } | 562 | PrimitiveElement.valueSet(var_mAge,true); IntegerElement.value(var_mAge,value_var_mAge); |
563 | pattern createObject_FamilyTree_class( | 563 | PrimitiveElement.valueSet(var_pAge,true); IntegerElement.value(var_pAge,value_var_pAge); |
564 | problem:LogicProblem, interpretation:PartialInterpretation, | 564 | check((value_var_mAge<=(value_var_pAge+12))); |
565 | typeInterpretation:PartialComplexTypeInterpretation) | 565 | } |
566 | { | 566 | private pattern mayInRelation_pattern_queries_parentTooYoung( |
567 | find interpretation(problem,interpretation); | 567 | problem:LogicProblem, interpretation:PartialInterpretation, |
568 | neg find hasElementInContainment(problem,interpretation); | 568 | var_m, var_p) |
569 | PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); | 569 | { |
570 | PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FamilyTree class"); | 570 | find interpretation(problem,interpretation); |
571 | find mayInstanceOfFamilyTree_class(problem,interpretation,newObject); | 571 | // var_m exported |
572 | find mayExist(problem, interpretation, newObject); | 572 | // var_p exported |
573 | neg find mustExist(problem, interpretation, newObject); | 573 | find mayInRelationmembers_reference_FamilyTree(problem,interpretation,_var__0,var_m); |
574 | } | 574 | find mayInRelationparents_reference_Member(problem,interpretation,var_m,var_p); |
575 | pattern createObject_Member_class_by_members_reference_FamilyTree( | 575 | find mayInRelationage_attribute_Member(problem,interpretation,var_m,var_mAge); |
576 | problem:LogicProblem, interpretation:PartialInterpretation, | 576 | find mayInRelationage_attribute_Member(problem,interpretation,var_p,var_pAge); |
577 | relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, | 577 | PrimitiveElement.valueSet(var_mAge,setted_var_mAge); IntegerElement.value(var_mAge,value_var_mAge); |
578 | container:DefinedElement) | 578 | PrimitiveElement.valueSet(var_pAge,setted_var_pAge); IntegerElement.value(var_pAge,value_var_pAge); |
579 | { | 579 | check( |
580 | find interpretation(problem,interpretation); | 580 | !setted_var_mAge || !setted_var_pAge |
581 | PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); | 581 | || |
582 | PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Member class"); | 582 | ((value_var_mAge<=(value_var_pAge+12))) |
583 | PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); | 583 | ); |
584 | PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"members reference FamilyTree"); | 584 | } |
585 | find mustInstanceOfFamilyTree_class(problem,interpretation,container); | 585 | private pattern currentInRelation_pattern_queries_parentTooYoung( |
586 | find mayInstanceOfMember_class(problem,interpretation,newObject); | 586 | problem:LogicProblem, interpretation:PartialInterpretation, |
587 | find mayInRelationmembers_reference_FamilyTree(problem,interpretation,container,newObject); | 587 | var_m, var_p) |
588 | find mustExist(problem, interpretation, container); | 588 | { |
589 | neg find mustExist(problem, interpretation, newObject); | 589 | find interpretation(problem,interpretation); |
590 | } | 590 | // var_m exported |
591 | pattern createObject_Member_class( | 591 | // var_p exported |
592 | problem:LogicProblem, interpretation:PartialInterpretation, | 592 | find mustInRelationmembers_reference_FamilyTree(problem,interpretation,_var__0,var_m); |
593 | typeInterpretation:PartialComplexTypeInterpretation) | 593 | find mustInRelationparents_reference_Member(problem,interpretation,var_m,var_p); |
594 | { | 594 | find mustInRelationage_attribute_Member(problem,interpretation,var_m,var_mAge); |
595 | find interpretation(problem,interpretation); | 595 | find mustInRelationage_attribute_Member(problem,interpretation,var_p,var_pAge); |
596 | neg find hasElementInContainment(problem,interpretation); | 596 | PrimitiveElement.valueSet(var_mAge,true); IntegerElement.value(var_mAge,value_var_mAge); |
597 | PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); | 597 | PrimitiveElement.valueSet(var_pAge,true); IntegerElement.value(var_pAge,value_var_pAge); |
598 | PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Member class"); | 598 | check((value_var_mAge<=(value_var_pAge+12))); |
599 | find mayInstanceOfMember_class(problem,interpretation,newObject); | 599 | } |
600 | find mayExist(problem, interpretation, newObject); | 600 | |
601 | neg find mustExist(problem, interpretation, newObject); | 601 | ////////// |
602 | } | 602 | // 1.4 Containment Indexer |
603 | 603 | ////////// | |
604 | ////////// | 604 | private pattern mustContains2(source: DefinedElement, target: DefinedElement) { |
605 | // 4.2 Type refinement | 605 | find mustContains4(_,_,source,target); |
606 | ////////// | 606 | } |
607 | pattern refineTypeTo_FamilyTree_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { | 607 | |
608 | find interpretation(problem,interpretation); | 608 | private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation, |
609 | PartialInterpretation.newElements(interpretation,element); | 609 | source: DefinedElement, target: DefinedElement) |
610 | find mayInstanceOfFamilyTree_class(problem,interpretation,element); | 610 | { find mustInRelationmembers_reference_FamilyTree(problem,interpretation,source,target); } |
611 | neg find mustInstanceOfFamilyTree_class(problem,interpretation,element); | 611 | |
612 | neg find mustInstanceOfMember_class(problem,interpretation,element); | 612 | private pattern mustTransitiveContains(source,target) { |
613 | } | 613 | find mustContains2+(source,target); |
614 | pattern refineTypeTo_Member_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { | 614 | } |
615 | find interpretation(problem,interpretation); | 615 | |
616 | PartialInterpretation.newElements(interpretation,element); | 616 | ////////// |
617 | find mayInstanceOfMember_class(problem,interpretation,element); | 617 | // 2. Invalidation Indexers |
618 | neg find mustInstanceOfFamilyTree_class(problem,interpretation,element); | 618 | ////////// |
619 | neg find mustInstanceOfMember_class(problem,interpretation,element); | 619 | // 2.1 Invalidated by WF Queries |
620 | } | 620 | ////////// |
621 | 621 | pattern invalidatedBy_pattern_queries_memberIsItsOwnParent(problem:LogicProblem, interpretation:PartialInterpretation, | |
622 | ////////// | 622 | var_m) |
623 | // 4.3 Relation refinement | 623 | { |
624 | ////////// | 624 | find mustInRelation_pattern_queries_memberIsItsOwnParent(problem,interpretation,var_m); |
625 | pattern refineRelation_children_reference_Member_and_parents_reference_Member( | 625 | } |
626 | problem:LogicProblem, interpretation:PartialInterpretation, | 626 | pattern invalidatedBy_pattern_queries_twoMembersHaveNoParent(problem:LogicProblem, interpretation:PartialInterpretation, |
627 | relationIterpretation:PartialRelationInterpretation, oppositeInterpretation:PartialRelationInterpretation, | 627 | var_m1, var_m2) |
628 | from: DefinedElement, to: DefinedElement) | 628 | { |
629 | { | 629 | find mustInRelation_pattern_queries_twoMembersHaveNoParent(problem,interpretation,var_m1,var_m2); |
630 | find interpretation(problem,interpretation); | 630 | } |
631 | PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); | 631 | pattern invalidatedBy_pattern_queries_parentTooYoung(problem:LogicProblem, interpretation:PartialInterpretation, |
632 | PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"children reference Member"); | 632 | var_m, var_p) |
633 | PartialInterpretation.partialrelationinterpretation(interpretation,oppositeInterpretation); | 633 | { |
634 | PartialRelationInterpretation.interpretationOf.name(oppositeInterpretation,"parents reference Member"); | 634 | find mustInRelation_pattern_queries_parentTooYoung(problem,interpretation,var_m,var_p); |
635 | find mustExist(problem, interpretation, from); | 635 | } |
636 | find mustExist(problem, interpretation, to); | 636 | |
637 | find mustInstanceOfMember_class(problem,interpretation,from); | 637 | ////////// |
638 | find mustInstanceOfMember_class(problem,interpretation,to); | 638 | // 3. Unfinishedness Indexers |
639 | find mayInRelationchildren_reference_Member(problem,interpretation,from,to); | 639 | ////////// |
640 | neg find mustInRelationchildren_reference_Member(problem,interpretation,from,to); | 640 | // 3.1 Unfinishedness Measured by Multiplicity |
641 | } | 641 | ////////// |
642 | pattern refineRelation_name_attribute_Member( | 642 | |
643 | problem:LogicProblem, interpretation:PartialInterpretation, | 643 | ////////// |
644 | relationIterpretation:PartialRelationInterpretation, | 644 | // 3.2 Unfinishedness Measured by WF Queries |
645 | from: DefinedElement, to: DefinedElement) | 645 | ////////// |
646 | { | 646 | pattern unfinishedBy_pattern_queries_memberIsItsOwnParent(problem:LogicProblem, interpretation:PartialInterpretation, |
647 | find interpretation(problem,interpretation); | 647 | var_m) |
648 | PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); | 648 | { |
649 | PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"name attribute Member"); | 649 | find currentInRelation_pattern_queries_memberIsItsOwnParent(problem,interpretation,var_m); |
650 | find mustExist(problem, interpretation, from); | 650 | } |
651 | find mustExist(problem, interpretation, to); | 651 | pattern unfinishedBy_pattern_queries_twoMembersHaveNoParent(problem:LogicProblem, interpretation:PartialInterpretation, |
652 | find mustInstanceOfMember_class(problem,interpretation,from); | 652 | var_m1, var_m2) |
653 | StringElement(to); | 653 | { |
654 | find mayInRelationname_attribute_Member(problem,interpretation,from,to); | 654 | find currentInRelation_pattern_queries_twoMembersHaveNoParent(problem,interpretation,var_m1,var_m2); |
655 | neg find mustInRelationname_attribute_Member(problem,interpretation,from,to); | 655 | } |
656 | } | 656 | pattern unfinishedBy_pattern_queries_parentTooYoung(problem:LogicProblem, interpretation:PartialInterpretation, |
657 | pattern refineRelation_age_attribute_Member( | 657 | var_m, var_p) |
658 | problem:LogicProblem, interpretation:PartialInterpretation, | 658 | { |
659 | relationIterpretation:PartialRelationInterpretation, | 659 | find currentInRelation_pattern_queries_parentTooYoung(problem,interpretation,var_m,var_p); |
660 | from: DefinedElement, to: DefinedElement) | 660 | } |
661 | { | 661 | |
662 | find interpretation(problem,interpretation); | 662 | ////////// |
663 | PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); | 663 | // 4. Refinement Indexers |
664 | PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"age attribute Member"); | 664 | ////////// |
665 | find mustExist(problem, interpretation, from); | 665 | // 4.1 Object constructors |
666 | find mustExist(problem, interpretation, to); | 666 | ////////// |
667 | find mustInstanceOfMember_class(problem,interpretation,from); | 667 | private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation) |
668 | IntegerElement(to); | 668 | { |
669 | find mayInRelationage_attribute_Member(problem,interpretation,from,to); | 669 | find interpretation(problem,interpretation); |
670 | neg find mustInRelationage_attribute_Member(problem,interpretation,from,to); | 670 | find mustInstanceOfFamilyTree_class(problem,interpretation,root); |
671 | } | 671 | find mustExist(problem, interpretation, root); |
672 | 672 | }or{ | |
673 | find interpretation(problem,interpretation); | ||
674 | find mustInstanceOfMember_class(problem,interpretation,root); | ||
675 | find mustExist(problem, interpretation, root); | ||
676 | } | ||
677 | pattern createObject_Member_class_by_members_reference_FamilyTree( | ||
678 | problem:LogicProblem, interpretation:PartialInterpretation, | ||
679 | relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation, | ||
680 | container:DefinedElement) | ||
681 | { | ||
682 | find interpretation(problem,interpretation); | ||
683 | PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); | ||
684 | PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Member class"); | ||
685 | PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation); | ||
686 | PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"members reference FamilyTree"); | ||
687 | find mustInstanceOfFamilyTree_class(problem,interpretation,container); | ||
688 | find mayInstanceOfMember_class(problem,interpretation,newObject); | ||
689 | find mayInRelationmembers_reference_FamilyTree(problem,interpretation,container,newObject); | ||
690 | find mustExist(problem, interpretation, container); | ||
691 | neg find mustExist(problem, interpretation, newObject); | ||
692 | } | ||
693 | pattern createObject_Member_class( | ||
694 | problem:LogicProblem, interpretation:PartialInterpretation, | ||
695 | typeInterpretation:PartialComplexTypeInterpretation) | ||
696 | { | ||
697 | find interpretation(problem,interpretation); | ||
698 | neg find hasElementInContainment(problem,interpretation); | ||
699 | PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); | ||
700 | PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Member class"); | ||
701 | find mayInstanceOfMember_class(problem,interpretation,newObject); | ||
702 | find mayExist(problem, interpretation, newObject); | ||
703 | neg find mustExist(problem, interpretation, newObject); | ||
704 | } | ||
705 | pattern createObject_FamilyTree_class( | ||
706 | problem:LogicProblem, interpretation:PartialInterpretation, | ||
707 | typeInterpretation:PartialComplexTypeInterpretation) | ||
708 | { | ||
709 | find interpretation(problem,interpretation); | ||
710 | neg find hasElementInContainment(problem,interpretation); | ||
711 | PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation); | ||
712 | PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FamilyTree class"); | ||
713 | find mayInstanceOfFamilyTree_class(problem,interpretation,newObject); | ||
714 | find mayExist(problem, interpretation, newObject); | ||
715 | neg find mustExist(problem, interpretation, newObject); | ||
716 | } | ||
717 | |||
718 | ////////// | ||
719 | // 4.2 Type refinement | ||
720 | ////////// | ||
721 | pattern refineTypeTo_Member_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { | ||
722 | find interpretation(problem,interpretation); | ||
723 | PartialInterpretation.newElements(interpretation,element); | ||
724 | find mayInstanceOfMember_class(problem,interpretation,element); | ||
725 | neg find mustInstanceOfMember_class(problem,interpretation,element); | ||
726 | neg find mustInstanceOfFamilyTree_class(problem,interpretation,element); | ||
727 | } | ||
728 | pattern refineTypeTo_FamilyTree_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { | ||
729 | find interpretation(problem,interpretation); | ||
730 | PartialInterpretation.newElements(interpretation,element); | ||
731 | find mayInstanceOfFamilyTree_class(problem,interpretation,element); | ||
732 | neg find mustInstanceOfMember_class(problem,interpretation,element); | ||
733 | neg find mustInstanceOfFamilyTree_class(problem,interpretation,element); | ||
734 | } | ||
735 | |||
736 | ////////// | ||
737 | // 4.3 Relation refinement | ||
738 | ////////// | ||
739 | pattern refineRelation_children_reference_Member_and_parents_reference_Member( | ||
740 | problem:LogicProblem, interpretation:PartialInterpretation, | ||
741 | relationIterpretation:PartialRelationInterpretation, oppositeInterpretation:PartialRelationInterpretation, | ||
742 | from: DefinedElement, to: DefinedElement) | ||
743 | { | ||
744 | find interpretation(problem,interpretation); | ||
745 | PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); | ||
746 | PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"children reference Member"); | ||
747 | PartialInterpretation.partialrelationinterpretation(interpretation,oppositeInterpretation); | ||
748 | PartialRelationInterpretation.interpretationOf.name(oppositeInterpretation,"parents reference Member"); | ||
749 | find mustExist(problem, interpretation, from); | ||
750 | find mustExist(problem, interpretation, to); | ||
751 | find mustInstanceOfMember_class(problem,interpretation,from); | ||
752 | find mustInstanceOfMember_class(problem,interpretation,to); | ||
753 | find mayInRelationchildren_reference_Member(problem,interpretation,from,to); | ||
754 | neg find mustInRelationchildren_reference_Member(problem,interpretation,from,to); | ||
755 | } | ||
756 | pattern refineRelation_name_attribute_Member( | ||
757 | problem:LogicProblem, interpretation:PartialInterpretation, | ||
758 | relationIterpretation:PartialRelationInterpretation, | ||
759 | from: DefinedElement, to: DefinedElement) | ||
760 | { | ||
761 | find interpretation(problem,interpretation); | ||
762 | PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); | ||
763 | PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"name attribute Member"); | ||
764 | find mustExist(problem, interpretation, from); | ||
765 | find mustExist(problem, interpretation, to); | ||
766 | find mustInstanceOfMember_class(problem,interpretation,from); | ||
767 | StringElement(to); | ||
768 | find mayInRelationname_attribute_Member(problem,interpretation,from,to); | ||
769 | neg find mustInRelationname_attribute_Member(problem,interpretation,from,to); | ||
770 | } | ||
771 | pattern refineRelation_age_attribute_Member( | ||
772 | problem:LogicProblem, interpretation:PartialInterpretation, | ||
773 | relationIterpretation:PartialRelationInterpretation, | ||
774 | from: DefinedElement, to: DefinedElement) | ||
775 | { | ||
776 | find interpretation(problem,interpretation); | ||
777 | PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation); | ||
778 | PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"age attribute Member"); | ||
779 | find mustExist(problem, interpretation, from); | ||
780 | find mustExist(problem, interpretation, to); | ||
781 | find mustInstanceOfMember_class(problem,interpretation,from); | ||
782 | IntegerElement(to); | ||
783 | find mayInRelationage_attribute_Member(problem,interpretation,from,to); | ||
784 | neg find mustInRelationage_attribute_Member(problem,interpretation,from,to); | ||
785 | } | ||
786 | |||
787 | ////////// | ||
788 | // 5 Unit Propagations | ||
789 | ////////// | ||
790 | |||
791 | // Main propagations: | ||
792 | |||