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