aboutsummaryrefslogtreecommitdiffstats
path: root/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/outputs
diff options
context:
space:
mode:
authorLibravatar Kristóf Marussy <marussy@mit.bme.hu>2020-05-08 18:28:19 +0200
committerLibravatar Kristóf Marussy <marussy@mit.bme.hu>2020-05-08 18:28:19 +0200
commit419e76265ecbdf65e960e0624be006d31ed1e191 (patch)
treedad200fe9fd0beae7adde969206b77691a51b85a /Tests/MODELS2020-CaseStudies/case.study.familyTree.run/outputs
parentFix check expressions in generated VIATRA (diff)
downloadVIATRA-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')
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.familyTree.run/outputs/debug/errors.txt24
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.familyTree.run/outputs/debug/generated3valued.vql_deactivated1464
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.familyTree.run/outputs/log.txt2
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.familyTree.run/outputs/models/1.gml1889
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.familyTree.run/outputs/models/1.pngbin97536 -> 90845 bytes
-rw-r--r--Tests/MODELS2020-CaseStudies/case.study.familyTree.run/outputs/models/1.xmi16
6 files changed, 1732 insertions, 1663 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 @@
1Error occured (NullPointerException): 1Error 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 @@
1import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage" 1import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage"
2import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem" 2import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem"
3import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language" 3import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language"
4 4
5////////// 5//////////
6// 0. Util 6// 0. Util
7////////// 7//////////
8private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) { 8private 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 */
16private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { 16private 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 */
25private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { 25private 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
33private pattern elementCloseWorld(element:DefinedElement) { 33private 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////////////////////////
45pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) 45pattern 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
113pattern mustEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) { 113pattern 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//////////
162private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) { 162private 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
169private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) { 169private 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
179private pattern isPrimitive(element: PrimitiveElement) { 179private 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 */
205private pattern mustInstanceOfFamilyTree_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { 205private 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}
209private pattern scopeDisallowsNewFamilyTree_class(problem:LogicProblem, interpretation:PartialInterpretation) { 209private 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 */
221private pattern mayInstanceOfFamilyTree_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) 221private 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 */
239private pattern mustInstanceOfMember_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) { 239private 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}
243private pattern scopeDisallowsNewMember_class(problem:LogicProblem, interpretation:PartialInterpretation) { 243private 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 */
255private pattern mayInstanceOfMember_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) 255private 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 */
277private pattern mustInRelationmembers_reference_FamilyTree( 277private 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 */
291private pattern mayInRelationmembers_reference_FamilyTree( 291private 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 */
313private pattern mustInRelationchildren_reference_Member( 313private 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 */
327private pattern mayInRelationchildren_reference_Member( 327private 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 */
348private pattern mustInRelationparents_reference_Member( 348private 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 */
362private pattern mayInRelationparents_reference_Member( 362private 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 */
383private pattern mustInRelationname_attribute_Member( 383private 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 */
397private pattern mayInRelationname_attribute_Member( 397private 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 */
418private pattern mustInRelationage_attribute_Member( 418private 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 */
432private pattern mayInRelationage_attribute_Member( 432private 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
455private pattern mustInRelation_pattern_queries_memberIsItsOwnParent( 455private 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); 464private 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);
472private pattern mayInRelation_pattern_queries_memberIsItsOwnParent( 472}
473 problem:LogicProblem, interpretation:PartialInterpretation, 473private 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); 483private 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
489private 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); 496private 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////////// 509private pattern currentInRelation_pattern_queries_twoMembersHaveNoParent(
510private 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);
514private 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);
518private 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 523private pattern mustInRelation_pattern_queries_memberHasParent(
524////////// 524 problem:LogicProblem, interpretation:PartialInterpretation,
525// 2.1 Invalidated by WF Queries 525 var_m)
526////////// 526{
527pattern 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 532private 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////////// 541private pattern currentInRelation_pattern_queries_memberHasParent(
542pattern 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 551private pattern mustInRelation_pattern_queries_parentTooYoung(
552////////// 552 problem:LogicProblem, interpretation:PartialInterpretation,
553private 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);
563pattern 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{ 566private 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);
575pattern 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); 585private 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
591pattern 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////////// 604private pattern mustContains2(source: DefinedElement, target: DefinedElement) {
605// 4.2 Type refinement 605 find mustContains4(_,_,source,target);
606////////// 606}
607pattern refineTypeTo_FamilyTree_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) { 607
608 find interpretation(problem,interpretation); 608private 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); 612private pattern mustTransitiveContains(source,target) {
613} 613 find mustContains2+(source,target);
614pattern 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 621pattern 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);
625pattern refineRelation_children_reference_Member_and_parents_reference_Member( 625}
626 problem:LogicProblem, interpretation:PartialInterpretation, 626pattern 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); 631pattern 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//////////
642pattern 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{ 646pattern 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); 651pattern 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} 656pattern unfinishedBy_pattern_queries_parentTooYoung(problem:LogicProblem, interpretation:PartialInterpretation,
657pattern 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); 667private 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}
677pattern 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}
693pattern 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}
705pattern 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//////////
721pattern 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}
728pattern 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//////////
739pattern 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}
756pattern 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}
771pattern 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
diff --git a/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/outputs/log.txt b/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/outputs/log.txt
index 1d3c9f62..67589bd9 100644
--- a/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/outputs/log.txt
+++ b/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/outputs/log.txt
@@ -1 +1 @@
Model generation started Model generation finished
diff --git a/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/outputs/models/1.gml b/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/outputs/models/1.gml
index 88392428..a187635b 100644
--- a/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/outputs/models/1.gml
+++ b/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/outputs/models/1.gml
@@ -1,973 +1,916 @@
1graph 1graph
2[ 2[
3 node 3 node
4 [ 4 [
5 id 0 5 id 0
6 graphics 6 graphics
7 [ 7 [
8 w 41.800000000000004 8 w 41.800000000000004
9 h 26 9 h 26
10 type "rectangle" 10 type "rectangle"
11 fill "#FFFFFF" 11 fill "#FFFFFF"
12 fill2 "#FFFFFF" 12 fill2 "#FFFFFF"
13 outline "#000000" 13 outline "#000000"
14 ] 14 ]
15 LabelGraphics 15 LabelGraphics
16 [ 16 [
17 text "true" 17 text "true"
18 outline "#000000" 18 outline "#000000"
19 fill "#FFFFFF" 19 fill "#FFFFFF"
20 fontSize 16 20 fontSize 16
21 fontName "Monospace" 21 fontName "Monospace"
22 autoSizePolicy "node_width" 22 autoSizePolicy "node_width"
23 anchor "t" 23 anchor "t"
24 borderDistance 0.0 24 borderDistance 0.0
25 ] 25 ]
26 LabelGraphics 26 LabelGraphics
27 [ 27 [
28 text " 28 text "
29 " 29 "
30 fontSize 14 30 fontSize 14
31 fontName "Consolas" 31 fontName "Consolas"
32 alignment "left" 32 alignment "left"
33 anchor "tl" 33 anchor "tl"
34 borderDistance 6 34 borderDistance 6
35 ] 35 ]
36 ] 36 ]
37 37
38 node 38 node
39 [ 39 [
40 id 1 40 id 1
41 graphics 41 graphics
42 [ 42 [
43 w 50.6 43 w 50.6
44 h 26 44 h 26
45 type "rectangle" 45 type "rectangle"
46 fill "#FFFFFF" 46 fill "#FFFFFF"
47 fill2 "#FFFFFF" 47 fill2 "#FFFFFF"
48 outline "#000000" 48 outline "#000000"
49 ] 49 ]
50 LabelGraphics 50 LabelGraphics
51 [ 51 [
52 text "false" 52 text "false"
53 outline "#000000" 53 outline "#000000"
54 fill "#FFFFFF" 54 fill "#FFFFFF"
55 fontSize 16 55 fontSize 16
56 fontName "Monospace" 56 fontName "Monospace"
57 autoSizePolicy "node_width" 57 autoSizePolicy "node_width"
58 anchor "t" 58 anchor "t"
59 borderDistance 0.0 59 borderDistance 0.0
60 ] 60 ]
61 LabelGraphics 61 LabelGraphics
62 [ 62 [
63 text " 63 text "
64 " 64 "
65 fontSize 14 65 fontSize 14
66 fontName "Consolas" 66 fontName "Consolas"
67 alignment "left" 67 alignment "left"
68 anchor "tl" 68 anchor "tl"
69 borderDistance 6 69 borderDistance 6
70 ] 70 ]
71 ] 71 ]
72 72
73 node 73 node
74 [ 74 [
75 id 2 75 id 2
76 graphics 76 graphics
77 [ 77 [
78 w 15.400000000000002 78 w 15.400000000000002
79 h 26 79 h 26
80 type "rectangle" 80 type "rectangle"
81 fill "#FFFFFF" 81 fill "#FFFFFF"
82 fill2 "#FFFFFF" 82 fill2 "#FFFFFF"
83 outline "#000000" 83 outline "#000000"
84 ] 84 ]
85 LabelGraphics 85 LabelGraphics
86 [ 86 [
87 text "1" 87 text "1"
88 outline "#000000" 88 outline "#000000"
89 fill "#FFFFFF" 89 fill "#FFFFFF"
90 fontSize 16 90 fontSize 16
91 fontName "Monospace" 91 fontName "Monospace"
92 autoSizePolicy "node_width" 92 autoSizePolicy "node_width"
93 anchor "t" 93 anchor "t"
94 borderDistance 0.0 94 borderDistance 0.0
95 ] 95 ]
96 LabelGraphics 96 LabelGraphics
97 [ 97 [
98 text " 98 text "
99 " 99 "
100 fontSize 14 100 fontSize 14
101 fontName "Consolas" 101 fontName "Consolas"
102 alignment "left" 102 alignment "left"
103 anchor "tl" 103 anchor "tl"
104 borderDistance 6 104 borderDistance 6
105 ] 105 ]
106 ] 106 ]
107 107
108 node 108 node
109 [ 109 [
110 id 3 110 id 3
111 graphics 111 graphics
112 [ 112 [
113 w 15.400000000000002 113 w 15.400000000000002
114 h 26 114 h 26
115 type "rectangle" 115 type "rectangle"
116 fill "#FFFFFF" 116 fill "#FFFFFF"
117 fill2 "#FFFFFF" 117 fill2 "#FFFFFF"
118 outline "#000000" 118 outline "#000000"
119 ] 119 ]
120 LabelGraphics 120 LabelGraphics
121 [ 121 [
122 text "2" 122 text "2"
123 outline "#000000" 123 outline "#000000"
124 fill "#FFFFFF" 124 fill "#FFFFFF"
125 fontSize 16 125 fontSize 16
126 fontName "Monospace" 126 fontName "Monospace"
127 autoSizePolicy "node_width" 127 autoSizePolicy "node_width"
128 anchor "t" 128 anchor "t"
129 borderDistance 0.0 129 borderDistance 0.0
130 ] 130 ]
131 LabelGraphics 131 LabelGraphics
132 [ 132 [
133 text " 133 text "
134 " 134 "
135 fontSize 14 135 fontSize 14
136 fontName "Consolas" 136 fontName "Consolas"
137 alignment "left" 137 alignment "left"
138 anchor "tl" 138 anchor "tl"
139 borderDistance 6 139 borderDistance 6
140 ] 140 ]
141 ] 141 ]
142 142
143 node 143 node
144 [ 144 [
145 id 4 145 id 4
146 graphics 146 graphics
147 [ 147 [
148 w 15.400000000000002 148 w 15.400000000000002
149 h 26 149 h 26
150 type "rectangle" 150 type "rectangle"
151 fill "#FFFFFF" 151 fill "#FFFFFF"
152 fill2 "#FFFFFF" 152 fill2 "#FFFFFF"
153 outline "#000000" 153 outline "#000000"
154 ] 154 ]
155 LabelGraphics 155 LabelGraphics
156 [ 156 [
157 text "3" 157 text "3"
158 outline "#000000" 158 outline "#000000"
159 fill "#FFFFFF" 159 fill "#FFFFFF"
160 fontSize 16 160 fontSize 16
161 fontName "Monospace" 161 fontName "Monospace"
162 autoSizePolicy "node_width" 162 autoSizePolicy "node_width"
163 anchor "t" 163 anchor "t"
164 borderDistance 0.0 164 borderDistance 0.0
165 ] 165 ]
166 LabelGraphics 166 LabelGraphics
167 [ 167 [
168 text " 168 text "
169 " 169 "
170 fontSize 14 170 fontSize 14
171 fontName "Consolas" 171 fontName "Consolas"
172 alignment "left" 172 alignment "left"
173 anchor "tl" 173 anchor "tl"
174 borderDistance 6 174 borderDistance 6
175 ] 175 ]
176 ] 176 ]
177 177
178 node 178 node
179 [ 179 [
180 id 5 180 id 5
181 graphics 181 graphics
182 [ 182 [
183 w 15.400000000000002 183 w 15.400000000000002
184 h 26 184 h 26
185 type "rectangle" 185 type "rectangle"
186 fill "#FFFFFF" 186 fill "#FFFFFF"
187 fill2 "#FFFFFF" 187 fill2 "#FFFFFF"
188 outline "#000000" 188 outline "#000000"
189 ] 189 ]
190 LabelGraphics 190 LabelGraphics
191 [ 191 [
192 text "4" 192 text "4"
193 outline "#000000" 193 outline "#000000"
194 fill "#FFFFFF" 194 fill "#FFFFFF"
195 fontSize 16 195 fontSize 16
196 fontName "Monospace" 196 fontName "Monospace"
197 autoSizePolicy "node_width" 197 autoSizePolicy "node_width"
198 anchor "t" 198 anchor "t"
199 borderDistance 0.0 199 borderDistance 0.0
200 ] 200 ]
201 LabelGraphics 201 LabelGraphics
202 [ 202 [
203 text " 203 text "
204 " 204 "
205 fontSize 14 205 fontSize 14
206 fontName "Consolas" 206 fontName "Consolas"
207 alignment "left" 207 alignment "left"
208 anchor "tl" 208 anchor "tl"
209 borderDistance 6 209 borderDistance 6
210 ] 210 ]
211 ] 211 ]
212 212
213 node 213 node
214 [ 214 [
215 id 6 215 id 6
216 graphics 216 graphics
217 [ 217 [
218 w 15.400000000000002 218 w 15.400000000000002
219 h 26 219 h 26
220 type "rectangle" 220 type "rectangle"
221 fill "#FFFFFF" 221 fill "#FFFFFF"
222 fill2 "#FFFFFF" 222 fill2 "#FFFFFF"
223 outline "#000000" 223 outline "#000000"
224 ] 224 ]
225 LabelGraphics 225 LabelGraphics
226 [ 226 [
227 text "5" 227 text "5"
228 outline "#000000" 228 outline "#000000"
229 fill "#FFFFFF" 229 fill "#FFFFFF"
230 fontSize 16 230 fontSize 16
231 fontName "Monospace" 231 fontName "Monospace"
232 autoSizePolicy "node_width" 232 autoSizePolicy "node_width"
233 anchor "t" 233 anchor "t"
234 borderDistance 0.0 234 borderDistance 0.0
235 ] 235 ]
236 LabelGraphics 236 LabelGraphics
237 [ 237 [
238 text " 238 text "
239 " 239 "
240 fontSize 14 240 fontSize 14
241 fontName "Consolas" 241 fontName "Consolas"
242 alignment "left" 242 alignment "left"
243 anchor "tl" 243 anchor "tl"
244 borderDistance 6 244 borderDistance 6
245 ] 245 ]
246 ] 246 ]
247 247
248 node 248 node
249 [ 249 [
250 id 7 250 id 7
251 graphics 251 graphics
252 [ 252 [
253 w 138.60000000000002 253 w 138.60000000000002
254 h 40 254 h 40
255 type "rectangle" 255 type "rectangle"
256 fill "#FFFFFF" 256 fill "#FFFFFF"
257 fill2 "#FFFFFF" 257 fill2 "#FFFFFF"
258 outline "#000000" 258 outline "#000000"
259 ] 259 ]
260 LabelGraphics 260 LabelGraphics
261 [ 261 [
262 text "null" 262 text "null"
263 outline "#000000" 263 outline "#000000"
264 fill "#FFFFFF" 264 fill "#FFFFFF"
265 fontSize 16 265 fontSize 16
266 fontName "Monospace" 266 fontName "Monospace"
267 autoSizePolicy "node_width" 267 autoSizePolicy "node_width"
268 anchor "t" 268 anchor "t"
269 borderDistance 0.0 269 borderDistance 0.0
270 ] 270 ]
271 LabelGraphics 271 LabelGraphics
272 [ 272 [
273 text " 273 text "
274 FamilyTree class 274 FamilyTree class
275 " 275 "
276 fontSize 14 276 fontSize 14
277 fontName "Consolas" 277 fontName "Consolas"
278 alignment "left" 278 alignment "left"
279 anchor "tl" 279 anchor "tl"
280 borderDistance 6 280 borderDistance 6
281 ] 281 ]
282 ] 282 ]
283 283
284 node 284 node
285 [ 285 [
286 id 8 286 id 8
287 graphics 287 graphics
288 [ 288 [
289 w 107.80000000000001 289 w 107.80000000000001
290 h 40 290 h 40
291 type "rectangle" 291 type "rectangle"
292 fill "#FFFFFF" 292 fill "#FFFFFF"
293 fill2 "#FFFFFF" 293 fill2 "#FFFFFF"
294 outline "#000000" 294 outline "#000000"
295 ] 295 ]
296 LabelGraphics 296 LabelGraphics
297 [ 297 [
298 text "null" 298 text "null"
299 outline "#000000" 299 outline "#000000"
300 fill "#FFFFFF" 300 fill "#FFFFFF"
301 fontSize 16 301 fontSize 16
302 fontName "Monospace" 302 fontName "Monospace"
303 autoSizePolicy "node_width" 303 autoSizePolicy "node_width"
304 anchor "t" 304 anchor "t"
305 borderDistance 0.0 305 borderDistance 0.0
306 ] 306 ]
307 LabelGraphics 307 LabelGraphics
308 [ 308 [
309 text " 309 text "
310 Member class 310 Member class
311 " 311 "
312 fontSize 14 312 fontSize 14
313 fontName "Consolas" 313 fontName "Consolas"
314 alignment "left" 314 alignment "left"
315 anchor "tl" 315 anchor "tl"
316 borderDistance 6 316 borderDistance 6
317 ] 317 ]
318 ] 318 ]
319 319
320 node 320 node
321 [ 321 [
322 id 9 322 id 9
323 graphics 323 graphics
324 [ 324 [
325 w 107.80000000000001 325 w 107.80000000000001
326 h 40 326 h 40
327 type "rectangle" 327 type "rectangle"
328 fill "#FFFFFF" 328 fill "#FFFFFF"
329 fill2 "#FFFFFF" 329 fill2 "#FFFFFF"
330 outline "#000000" 330 outline "#000000"
331 ] 331 ]
332 LabelGraphics 332 LabelGraphics
333 [ 333 [
334 text "null" 334 text "null"
335 outline "#000000" 335 outline "#000000"
336 fill "#FFFFFF" 336 fill "#FFFFFF"
337 fontSize 16 337 fontSize 16
338 fontName "Monospace" 338 fontName "Monospace"
339 autoSizePolicy "node_width" 339 autoSizePolicy "node_width"
340 anchor "t" 340 anchor "t"
341 borderDistance 0.0 341 borderDistance 0.0
342 ] 342 ]
343 LabelGraphics 343 LabelGraphics
344 [ 344 [
345 text " 345 text "
346 Member class 346 Member class
347 " 347 "
348 fontSize 14 348 fontSize 14
349 fontName "Consolas" 349 fontName "Consolas"
350 alignment "left" 350 alignment "left"
351 anchor "tl" 351 anchor "tl"
352 borderDistance 6 352 borderDistance 6
353 ] 353 ]
354 ] 354 ]
355 355
356 node 356 node
357 [ 357 [
358 id 10 358 id 10
359 graphics 359 graphics
360 [ 360 [
361 w 107.80000000000001 361 w 107.80000000000001
362 h 40 362 h 40
363 type "rectangle" 363 type "rectangle"
364 fill "#FFFFFF" 364 fill "#FFFFFF"
365 fill2 "#FFFFFF" 365 fill2 "#FFFFFF"
366 outline "#000000" 366 outline "#000000"
367 ] 367 ]
368 LabelGraphics 368 LabelGraphics
369 [ 369 [
370 text "null" 370 text "null"
371 outline "#000000" 371 outline "#000000"
372 fill "#FFFFFF" 372 fill "#FFFFFF"
373 fontSize 16 373 fontSize 16
374 fontName "Monospace" 374 fontName "Monospace"
375 autoSizePolicy "node_width" 375 autoSizePolicy "node_width"
376 anchor "t" 376 anchor "t"
377 borderDistance 0.0 377 borderDistance 0.0
378 ] 378 ]
379 LabelGraphics 379 LabelGraphics
380 [ 380 [
381 text " 381 text "
382 Member class 382 Member class
383 " 383 "
384 fontSize 14 384 fontSize 14
385 fontName "Consolas" 385 fontName "Consolas"
386 alignment "left" 386 alignment "left"
387 anchor "tl" 387 anchor "tl"
388 borderDistance 6 388 borderDistance 6
389 ] 389 ]
390 ] 390 ]
391 391
392 node 392 node
393 [ 393 [
394 id 11 394 id 11
395 graphics 395 graphics
396 [ 396 [
397 w 107.80000000000001 397 w 107.80000000000001
398 h 40 398 h 40
399 type "rectangle" 399 type "rectangle"
400 fill "#FFFFFF" 400 fill "#FFFFFF"
401 fill2 "#FFFFFF" 401 fill2 "#FFFFFF"
402 outline "#000000" 402 outline "#000000"
403 ] 403 ]
404 LabelGraphics 404 LabelGraphics
405 [ 405 [
406 text "null" 406 text "null"
407 outline "#000000" 407 outline "#000000"
408 fill "#FFFFFF" 408 fill "#FFFFFF"
409 fontSize 16 409 fontSize 16
410 fontName "Monospace" 410 fontName "Monospace"
411 autoSizePolicy "node_width" 411 autoSizePolicy "node_width"
412 anchor "t" 412 anchor "t"
413 borderDistance 0.0 413 borderDistance 0.0
414 ] 414 ]
415 LabelGraphics 415 LabelGraphics
416 [ 416 [
417 text " 417 text "
418 Member class 418 Member class
419 " 419 "
420 fontSize 14 420 fontSize 14
421 fontName "Consolas" 421 fontName "Consolas"
422 alignment "left" 422 alignment "left"
423 anchor "tl" 423 anchor "tl"
424 borderDistance 6 424 borderDistance 6
425 ] 425 ]
426 ] 426 ]
427 427
428 node 428 node
429 [ 429 [
430 id 12 430 id 12
431 graphics 431 graphics
432 [ 432 [
433 w 107.80000000000001 433 w 107.80000000000001
434 h 40 434 h 40
435 type "rectangle" 435 type "rectangle"
436 fill "#FFFFFF" 436 fill "#FFFFFF"
437 fill2 "#FFFFFF" 437 fill2 "#FFFFFF"
438 outline "#000000" 438 outline "#000000"
439 ] 439 ]
440 LabelGraphics 440 LabelGraphics
441 [ 441 [
442 text "null" 442 text "null"
443 outline "#000000" 443 outline "#000000"
444 fill "#FFFFFF" 444 fill "#FFFFFF"
445 fontSize 16 445 fontSize 16
446 fontName "Monospace" 446 fontName "Monospace"
447 autoSizePolicy "node_width" 447 autoSizePolicy "node_width"
448 anchor "t" 448 anchor "t"
449 borderDistance 0.0 449 borderDistance 0.0
450 ] 450 ]
451 LabelGraphics 451 LabelGraphics
452 [ 452 [
453 text " 453 text "
454 Member class 454 Member class
455 " 455 "
456 fontSize 14 456 fontSize 14
457 fontName "Consolas" 457 fontName "Consolas"
458 alignment "left" 458 alignment "left"
459 anchor "tl" 459 anchor "tl"
460 borderDistance 6 460 borderDistance 6
461 ] 461 ]
462 ] 462 ]
463 463
464 node 464 node
465 [ 465 [
466 id 13 466 id 13
467 graphics 467 graphics
468 [ 468 [
469 w 85.80000000000001 469 w 85.80000000000001
470 h 26 470 h 26
471 type "rectangle" 471 type "rectangle"
472 fill "#FFFFFF" 472 fill "#FFFFFF"
473 fill2 "#FFFFFF" 473 fill2 "#FFFFFF"
474 outline "#000000" 474 outline "#000000"
475 ] 475 ]
476 LabelGraphics 476 LabelGraphics
477 [ 477 [
478 text "New Reals" 478 text "New Reals"
479 outline "#000000" 479 outline "#000000"
480 fill "#FFFFFF" 480 fill "#FFFFFF"
481 fontSize 16 481 fontSize 16
482 fontName "Monospace" 482 fontName "Monospace"
483 autoSizePolicy "node_width" 483 autoSizePolicy "node_width"
484 anchor "t" 484 anchor "t"
485 borderDistance 0.0 485 borderDistance 0.0
486 ] 486 ]
487 LabelGraphics 487 LabelGraphics
488 [ 488 [
489 text " 489 text "
490 " 490 "
491 fontSize 14 491 fontSize 14
492 fontName "Consolas" 492 fontName "Consolas"
493 alignment "left" 493 alignment "left"
494 anchor "tl" 494 anchor "tl"
495 borderDistance 6 495 borderDistance 6
496 ] 496 ]
497 ] 497 ]
498 498
499 node 499 node
500 [ 500 [
501 id 14 501 id 14
502 graphics 502 graphics
503 [ 503 [
504 w 103.4 504 w 103.4
505 h 26 505 h 26
506 type "rectangle" 506 type "rectangle"
507 fill "#FFFFFF" 507 fill "#FFFFFF"
508 fill2 "#FFFFFF" 508 fill2 "#FFFFFF"
509 outline "#000000" 509 outline "#000000"
510 ] 510 ]
511 LabelGraphics 511 LabelGraphics
512 [ 512 [
513 text "New Strings" 513 text "New Strings"
514 outline "#000000" 514 outline "#000000"
515 fill "#FFFFFF" 515 fill "#FFFFFF"
516 fontSize 16 516 fontSize 16
517 fontName "Monospace" 517 fontName "Monospace"
518 autoSizePolicy "node_width" 518 autoSizePolicy "node_width"
519 anchor "t" 519 anchor "t"
520 borderDistance 0.0 520 borderDistance 0.0
521 ] 521 ]
522 LabelGraphics 522 LabelGraphics
523 [ 523 [
524 text " 524 text "
525 " 525 "
526 fontSize 14 526 fontSize 14
527 fontName "Consolas" 527 fontName "Consolas"
528 alignment "left" 528 alignment "left"
529 anchor "tl" 529 anchor "tl"
530 borderDistance 6 530 borderDistance 6
531 ] 531 ]
532 ] 532 ]
533 533
534 node 534 node
535 [ 535 [
536 id 15 536 id 15
537 graphics 537 graphics
538 [ 538 [
539 w 103.4 539 w 103.4
540 h 26 540 h 26
541 type "rectangle" 541 type "rectangle"
542 fill "#FFFFFF" 542 fill "#FFFFFF"
543 fill2 "#FFFFFF" 543 fill2 "#FFFFFF"
544 outline "#000000" 544 outline "#000000"
545 ] 545 ]
546 LabelGraphics 546 LabelGraphics
547 [ 547 [
548 text "New Objects" 548 text "New Objects"
549 outline "#000000" 549 outline "#000000"
550 fill "#FFFFFF" 550 fill "#FFFFFF"
551 fontSize 16 551 fontSize 16
552 fontName "Monospace" 552 fontName "Monospace"
553 autoSizePolicy "node_width" 553 autoSizePolicy "node_width"
554 anchor "t" 554 anchor "t"
555 borderDistance 0.0 555 borderDistance 0.0
556 ] 556 ]
557 LabelGraphics 557 LabelGraphics
558 [ 558 [
559 text " 559 text "
560 " 560 "
561 fontSize 14 561 fontSize 14
562 fontName "Consolas" 562 fontName "Consolas"
563 alignment "left" 563 alignment "left"
564 anchor "tl" 564 anchor "tl"
565 borderDistance 6 565 borderDistance 6
566 ] 566 ]
567 ] 567 ]
568 edge 568 edge
569 [ 569 [
570 source 7 570 source 7
571 target 8 571 target 8
572 graphics 572 graphics
573 [ 573 [
574 fill "#000000" 574 fill "#000000"
575 width 3 575 width 3
576 targetArrow "standard" 576 targetArrow "standard"
577 ] 577 ]
578 LabelGraphics 578 LabelGraphics
579 [ 579 [
580 text "members reference FamilyTree" 580 text "members reference FamilyTree"
581 fontSize 14 581 fontSize 14
582 fontName "Consolas" 582 fontName "Consolas"
583 configuration "AutoFlippingLabel" 583 configuration "AutoFlippingLabel"
584 model "six_pos" 584 model "six_pos"
585 position "thead" 585 position "thead"
586 ] 586 ]
587 ] 587 ]
588 edge 588 edge
589 [ 589 [
590 source 7 590 source 7
591 target 9 591 target 9
592 graphics 592 graphics
593 [ 593 [
594 fill "#000000" 594 fill "#000000"
595 width 3 595 width 3
596 targetArrow "standard" 596 targetArrow "standard"
597 ] 597 ]
598 LabelGraphics 598 LabelGraphics
599 [ 599 [
600 text "members reference FamilyTree" 600 text "members reference FamilyTree"
601 fontSize 14 601 fontSize 14
602 fontName "Consolas" 602 fontName "Consolas"
603 configuration "AutoFlippingLabel" 603 configuration "AutoFlippingLabel"
604 model "six_pos" 604 model "six_pos"
605 position "thead" 605 position "thead"
606 ] 606 ]
607 ] 607 ]
608 edge 608 edge
609 [ 609 [
610 source 7 610 source 7
611 target 10 611 target 10
612 graphics 612 graphics
613 [ 613 [
614 fill "#000000" 614 fill "#000000"
615 width 3 615 width 3
616 targetArrow "standard" 616 targetArrow "standard"
617 ] 617 ]
618 LabelGraphics 618 LabelGraphics
619 [ 619 [
620 text "members reference FamilyTree" 620 text "members reference FamilyTree"
621 fontSize 14 621 fontSize 14
622 fontName "Consolas" 622 fontName "Consolas"
623 configuration "AutoFlippingLabel" 623 configuration "AutoFlippingLabel"
624 model "six_pos" 624 model "six_pos"
625 position "thead" 625 position "thead"
626 ] 626 ]
627 ] 627 ]
628 edge 628 edge
629 [ 629 [
630 source 7 630 source 7
631 target 11 631 target 11
632 graphics 632 graphics
633 [ 633 [
634 fill "#000000" 634 fill "#000000"
635 width 3 635 width 3
636 targetArrow "standard" 636 targetArrow "standard"
637 ] 637 ]
638 LabelGraphics 638 LabelGraphics
639 [ 639 [
640 text "members reference FamilyTree" 640 text "members reference FamilyTree"
641 fontSize 14 641 fontSize 14
642 fontName "Consolas" 642 fontName "Consolas"
643 configuration "AutoFlippingLabel" 643 configuration "AutoFlippingLabel"
644 model "six_pos" 644 model "six_pos"
645 position "thead" 645 position "thead"
646 ] 646 ]
647 ] 647 ]
648 edge 648 edge
649 [ 649 [
650 source 7 650 source 7
651 target 12 651 target 12
652 graphics 652 graphics
653 [ 653 [
654 fill "#000000" 654 fill "#000000"
655 width 3 655 width 3
656 targetArrow "standard" 656 targetArrow "standard"
657 ] 657 ]
658 LabelGraphics 658 LabelGraphics
659 [ 659 [
660 text "members reference FamilyTree" 660 text "members reference FamilyTree"
661 fontSize 14 661 fontSize 14
662 fontName "Consolas" 662 fontName "Consolas"
663 configuration "AutoFlippingLabel" 663 configuration "AutoFlippingLabel"
664 model "six_pos" 664 model "six_pos"
665 position "thead" 665 position "thead"
666 ] 666 ]
667 ] 667 ]
668 edge 668 edge
669 [ 669 [
670 source 8 670 source 9
671 target 9 671 target 8
672 graphics 672 graphics
673 [ 673 [
674 fill "#000000" 674 fill "#000000"
675 targetArrow "standard" 675 targetArrow "standard"
676 ] 676 ]
677 LabelGraphics 677 LabelGraphics
678 [ 678 [
679 text "children reference Member" 679 text "children reference Member"
680 fontSize 14 680 fontSize 14
681 fontName "Consolas" 681 fontName "Consolas"
682 configuration "AutoFlippingLabel" 682 configuration "AutoFlippingLabel"
683 model "six_pos" 683 model "six_pos"
684 position "thead" 684 position "thead"
685 ] 685 ]
686 ] 686 ]
687 edge 687 edge
688 [ 688 [
689 source 9 689 source 8
690 target 8 690 target 9
691 graphics 691 graphics
692 [ 692 [
693 fill "#000000" 693 fill "#000000"
694 targetArrow "standard" 694 targetArrow "standard"
695 ] 695 ]
696 LabelGraphics 696 LabelGraphics
697 [ 697 [
698 text "children reference Member" 698 text "children reference Member"
699 fontSize 14 699 fontSize 14
700 fontName "Consolas" 700 fontName "Consolas"
701 configuration "AutoFlippingLabel" 701 configuration "AutoFlippingLabel"
702 model "six_pos" 702 model "six_pos"
703 position "thead" 703 position "thead"
704 ] 704 ]
705 ] 705 ]
706 edge 706 edge
707 [ 707 [
708 source 10 708 source 9
709 target 9 709 target 10
710 graphics 710 graphics
711 [ 711 [
712 fill "#000000" 712 fill "#000000"
713 targetArrow "standard" 713 targetArrow "standard"
714 ] 714 ]
715 LabelGraphics 715 LabelGraphics
716 [ 716 [
717 text "children reference Member" 717 text "children reference Member"
718 fontSize 14 718 fontSize 14
719 fontName "Consolas" 719 fontName "Consolas"
720 configuration "AutoFlippingLabel" 720 configuration "AutoFlippingLabel"
721 model "six_pos" 721 model "six_pos"
722 position "thead" 722 position "thead"
723 ] 723 ]
724 ] 724 ]
725 edge 725 edge
726 [ 726 [
727 source 10 727 source 11
728 target 8 728 target 9
729 graphics 729 graphics
730 [ 730 [
731 fill "#000000" 731 fill "#000000"
732 targetArrow "standard" 732 targetArrow "standard"
733 ] 733 ]
734 LabelGraphics 734 LabelGraphics
735 [ 735 [
736 text "children reference Member" 736 text "children reference Member"
737 fontSize 14 737 fontSize 14
738 fontName "Consolas" 738 fontName "Consolas"
739 configuration "AutoFlippingLabel" 739 configuration "AutoFlippingLabel"
740 model "six_pos" 740 model "six_pos"
741 position "thead" 741 position "thead"
742 ] 742 ]
743 ] 743 ]
744 edge 744 edge
745 [ 745 [
746 source 9 746 source 9
747 target 10 747 target 11
748 graphics 748 graphics
749 [ 749 [
750 fill "#000000" 750 fill "#000000"
751 targetArrow "standard" 751 targetArrow "standard"
752 ] 752 ]
753 LabelGraphics 753 LabelGraphics
754 [ 754 [
755 text "children reference Member" 755 text "children reference Member"
756 fontSize 14 756 fontSize 14
757 fontName "Consolas" 757 fontName "Consolas"
758 configuration "AutoFlippingLabel" 758 configuration "AutoFlippingLabel"
759 model "six_pos" 759 model "six_pos"
760 position "thead" 760 position "thead"
761 ] 761 ]
762 ] 762 ]
763 edge 763 edge
764 [ 764 [
765 source 11 765 source 8
766 target 10 766 target 9
767 graphics 767 graphics
768 [ 768 [
769 fill "#000000" 769 fill "#000000"
770 targetArrow "standard" 770 targetArrow "standard"
771 ] 771 ]
772 LabelGraphics 772 LabelGraphics
773 [ 773 [
774 text "children reference Member" 774 text "parents reference Member"
775 fontSize 14 775 fontSize 14
776 fontName "Consolas" 776 fontName "Consolas"
777 configuration "AutoFlippingLabel" 777 configuration "AutoFlippingLabel"
778 model "six_pos" 778 model "six_pos"
779 position "thead" 779 position "thead"
780 ] 780 ]
781 ] 781 ]
782 edge 782 edge
783 [ 783 [
784 source 9 784 source 9
785 target 8 785 target 8
786 graphics 786 graphics
787 [ 787 [
788 fill "#000000" 788 fill "#000000"
789 targetArrow "standard" 789 targetArrow "standard"
790 ] 790 ]
791 LabelGraphics 791 LabelGraphics
792 [ 792 [
793 text "parents reference Member" 793 text "parents reference Member"
794 fontSize 14 794 fontSize 14
795 fontName "Consolas" 795 fontName "Consolas"
796 configuration "AutoFlippingLabel" 796 configuration "AutoFlippingLabel"
797 model "six_pos" 797 model "six_pos"
798 position "thead" 798 position "thead"
799 ] 799 ]
800 ] 800 ]
801 edge 801 edge
802 [ 802 [
803 source 8 803 source 10
804 target 9 804 target 9
805 graphics 805 graphics
806 [ 806 [
807 fill "#000000" 807 fill "#000000"
808 targetArrow "standard" 808 targetArrow "standard"
809 ] 809 ]
810 LabelGraphics 810 LabelGraphics
811 [ 811 [
812 text "parents reference Member" 812 text "parents reference Member"
813 fontSize 14 813 fontSize 14
814 fontName "Consolas" 814 fontName "Consolas"
815 configuration "AutoFlippingLabel" 815 configuration "AutoFlippingLabel"
816 model "six_pos" 816 model "six_pos"
817 position "thead" 817 position "thead"
818 ] 818 ]
819 ] 819 ]
820 edge 820 edge
821 [ 821 [
822 source 9 822 source 9
823 target 10 823 target 11
824 graphics 824 graphics
825 [ 825 [
826 fill "#000000" 826 fill "#000000"
827 targetArrow "standard" 827 targetArrow "standard"
828 ] 828 ]
829 LabelGraphics 829 LabelGraphics
830 [ 830 [
831 text "parents reference Member" 831 text "parents reference Member"
832 fontSize 14 832 fontSize 14
833 fontName "Consolas" 833 fontName "Consolas"
834 configuration "AutoFlippingLabel" 834 configuration "AutoFlippingLabel"
835 model "six_pos" 835 model "six_pos"
836 position "thead" 836 position "thead"
837 ] 837 ]
838 ] 838 ]
839 edge 839 edge
840 [ 840 [
841 source 8 841 source 11
842 target 10 842 target 9
843 graphics 843 graphics
844 [ 844 [
845 fill "#000000" 845 fill "#000000"
846 targetArrow "standard" 846 targetArrow "standard"
847 ] 847 ]
848 LabelGraphics 848 LabelGraphics
849 [ 849 [
850 text "parents reference Member" 850 text "parents reference Member"
851 fontSize 14 851 fontSize 14
852 fontName "Consolas" 852 fontName "Consolas"
853 configuration "AutoFlippingLabel" 853 configuration "AutoFlippingLabel"
854 model "six_pos" 854 model "six_pos"
855 position "thead" 855 position "thead"
856 ] 856 ]
857 ] 857 ]
858 edge 858 edge
859 [ 859 [
860 source 10 860 source 8
861 target 9 861 target 6
862 graphics 862 graphics
863 [ 863 [
864 fill "#000000" 864 fill "#000000"
865 targetArrow "standard" 865 targetArrow "standard"
866 ] 866 ]
867 LabelGraphics 867 LabelGraphics
868 [ 868 [
869 text "parents reference Member" 869 text "age attribute Member"
870 fontSize 14 870 fontSize 14
871 fontName "Consolas" 871 fontName "Consolas"
872 configuration "AutoFlippingLabel" 872 configuration "AutoFlippingLabel"
873 model "six_pos" 873 model "six_pos"
874 position "thead" 874 position "thead"
875 ] 875 ]
876 ] 876 ]
877 edge 877 edge
878 [ 878 [
879 source 10 879 source 10
880 target 11 880 target 3
881 graphics 881 graphics
882 [ 882 [
883 fill "#000000" 883 fill "#000000"
884 targetArrow "standard" 884 targetArrow "standard"
885 ] 885 ]
886 LabelGraphics 886 LabelGraphics
887 [ 887 [
888 text "parents reference Member" 888 text "age attribute Member"
889 fontSize 14 889 fontSize 14
890 fontName "Consolas" 890 fontName "Consolas"
891 configuration "AutoFlippingLabel" 891 configuration "AutoFlippingLabel"
892 model "six_pos" 892 model "six_pos"
893 position "thead" 893 position "thead"
894 ] 894 ]
895 ] 895 ]
896 edge 896 edge
897 [ 897 [
898 source 9 898 source 11
899 target 5 899 target 3
900 graphics 900 graphics
901 [ 901 [
902 fill "#000000" 902 fill "#000000"
903 targetArrow "standard" 903 targetArrow "standard"
904 ] 904 ]
905 LabelGraphics 905 LabelGraphics
906 [ 906 [
907 text "age attribute Member" 907 text "age attribute Member"
908 fontSize 14 908 fontSize 14
909 fontName "Consolas" 909 fontName "Consolas"
910 configuration "AutoFlippingLabel" 910 configuration "AutoFlippingLabel"
911 model "six_pos" 911 model "six_pos"
912 position "thead" 912 position "thead"
913 ] 913 ]
914 ] 914 ]
915 edge 915]
916 [ 916
917 source 8
918 target 5
919 graphics
920 [
921 fill "#000000"
922 targetArrow "standard"
923 ]
924 LabelGraphics
925 [
926 text "age attribute Member"
927 fontSize 14
928 fontName "Consolas"
929 configuration "AutoFlippingLabel"
930 model "six_pos"
931 position "thead"
932 ]
933 ]
934 edge
935 [
936 source 10
937 target 5
938 graphics
939 [
940 fill "#000000"
941 targetArrow "standard"
942 ]
943 LabelGraphics
944 [
945 text "age attribute Member"
946 fontSize 14
947 fontName "Consolas"
948 configuration "AutoFlippingLabel"
949 model "six_pos"
950 position "thead"
951 ]
952 ]
953 edge
954 [
955 source 11
956 target 6
957 graphics
958 [
959 fill "#000000"
960 targetArrow "standard"
961 ]
962 LabelGraphics
963 [
964 text "age attribute Member"
965 fontSize 14
966 fontName "Consolas"
967 configuration "AutoFlippingLabel"
968 model "six_pos"
969 position "thead"
970 ]
971 ]
972]
973
diff --git a/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/outputs/models/1.png b/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/outputs/models/1.png
index 4c0da9fb..e99dc418 100644
--- a/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/outputs/models/1.png
+++ b/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/outputs/models/1.png
Binary files differ
diff --git a/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/outputs/models/1.xmi b/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/outputs/models/1.xmi
index 25c5bfed..c3ca6161 100644
--- a/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/outputs/models/1.xmi
+++ b/Tests/MODELS2020-CaseStudies/case.study.familyTree.run/outputs/models/1.xmi
@@ -1,8 +1,8 @@
1<?xml version="1.0" encoding="ASCII"?> 1<?xml version="1.0" encoding="ASCII"?>
2<familytree:FamilyTree xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:familytree="http://www.example.org/familytree" xsi:schemaLocation="http://www.example.org/familytree inputs/familytree.ecore"> 2<familytree:FamilyTree xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:familytree="http://www.example.org/familytree" xsi:schemaLocation="http://www.example.org/familytree inputs/familytree.ecore">
3 <members age="4" children="//@members.2 //@members.4" parents="//@members.1 //@members.2"/> 3 <members age="2" children="//@members.4" parents="//@members.4"/>
4 <members age="5" children="//@members.0"/> 4 <members age="5" children="//@members.4" parents="//@members.4"/>
5 <members age="4" children="//@members.0 //@members.4" parents="//@members.0 //@members.4"/> 5 <members age="2" parents="//@members.4"/>
6 <members/> 6 <members/>
7 <members age="4" children="//@members.2" parents="//@members.0 //@members.2"/> 7 <members children="//@members.0 //@members.1 //@members.2" parents="//@members.0 //@members.1"/>
8</familytree:FamilyTree> 8</familytree:FamilyTree>