aboutsummaryrefslogtreecommitdiffstats
path: root/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam
diff options
context:
space:
mode:
Diffstat (limited to 'Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam')
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/debug/errors.txt195
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/debug/generated3valued.vql_deactivated31733
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/debug/generation.logicproblem2059
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/debug/init.partialmodel497
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/log.txt1
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/1.gml7641
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/1.pngbin0 -> 141462 bytes
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/1.xmi9
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/2.gml4762
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/2.pngbin0 -> 151601 bytes
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/2.xmi9
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/3.gml2069
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/3.pngbin0 -> 157309 bytes
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/3.xmi9
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/4.gml1184
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/4.pngbin0 -> 162587 bytes
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/4.xmi9
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/5.gml1203
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/5.pngbin0 -> 168585 bytes
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/5.xmi9
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/statistics.csv32
21 files changed, 51421 insertions, 0 deletions
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/debug/errors.txt b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/debug/errors.txt
new file mode 100644
index 00000000..94b0f4e3
--- /dev/null
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/debug/errors.txt
@@ -0,0 +1,195 @@
1Error occured (IllegalStateException): Query ca.mcgill.ecse.dslreasoner.standalone.test.fam.terminatorAndInformation contains errors.
2 org.eclipse.viatra.query.runtime.matchers.util.Preconditions.checkState(Preconditions.java:144)
3 org.eclipse.viatra.query.patternlanguage.emf.specification.GenericEMFPatternPQuery.getDisjunctBodies(GenericEMFPatternPQuery.java:161)
4 org.eclipse.viatra.query.runtime.matchers.psystem.rewriters.PDisjunctionRewriter.rewrite(PDisjunctionRewriter.java:26)
5 hu.bme.mit.inf.dslreasoner.viatra2logic.Viatra2Logic.transformQueries(Viatra2Logic.java:111)
6 hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:196)
7 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:130)
8 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:339)
9 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111)
10 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73)
11 org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)Error occured (NullPointerException):
12 hu.bme.mit.inf.dslreasoner.application.execution.QueryLoader.lambda$8(QueryLoader.java:108)
13 org.eclipse.xtext.xbase.lib.internal.BooleanFunctionDelegate.apply(BooleanFunctionDelegate.java:41)
14 com.google.common.collect.Iterators$6.computeNext(Iterators.java:617)
15 com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:145)
16 com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:140)
17 com.google.common.collect.Iterators.addAll(Iterators.java:366)
18 com.google.common.collect.Iterables.addAll(Iterables.java:332)
19 com.google.common.collect.Sets.newLinkedHashSet(Sets.java:383)
20 org.eclipse.xtext.xbase.lib.IterableExtensions.toSet(IterableExtensions.java:592)
21 hu.bme.mit.inf.dslreasoner.application.execution.QueryLoader._getPatterns(QueryLoader.java:84)
22 hu.bme.mit.inf.dslreasoner.application.execution.QueryLoader.getPatterns(QueryLoader.java:213)
23 hu.bme.mit.inf.dslreasoner.application.execution.QueryLoader.loadQueries(QueryLoader.java:54)
24 hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:167)
25 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:130)
26 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:339)
27 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111)
28 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73)
29 org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)Error occured (IllegalStateException): Query ca.mcgill.ecse.dslreasoner.standalone.test.fam.terminatorAndInformation contains errors.
30 org.eclipse.viatra.query.runtime.matchers.util.Preconditions.checkState(Preconditions.java:144)
31 org.eclipse.viatra.query.patternlanguage.emf.specification.GenericEMFPatternPQuery.getDisjunctBodies(GenericEMFPatternPQuery.java:161)
32 org.eclipse.viatra.query.runtime.matchers.psystem.rewriters.PDisjunctionRewriter.rewrite(PDisjunctionRewriter.java:26)
33 hu.bme.mit.inf.dslreasoner.viatra2logic.Viatra2Logic.transformQueries(Viatra2Logic.java:111)
34 hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:196)
35 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:130)
36 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:339)
37 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111)
38 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73)
39 org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)Error occured (IllegalStateException): Query ca.mcgill.ecse.dslreasoner.standalone.test.fam.terminatorAndInformation contains errors.
40 org.eclipse.viatra.query.runtime.matchers.util.Preconditions.checkState(Preconditions.java:144)
41 org.eclipse.viatra.query.patternlanguage.emf.specification.GenericEMFPatternPQuery.getDisjunctBodies(GenericEMFPatternPQuery.java:161)
42 org.eclipse.viatra.query.runtime.matchers.psystem.rewriters.PDisjunctionRewriter.rewrite(PDisjunctionRewriter.java:26)
43 hu.bme.mit.inf.dslreasoner.viatra2logic.Viatra2Logic.transformQueries(Viatra2Logic.java:111)
44 hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:196)
45 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:130)
46 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:339)
47 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111)
48 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73)
49 org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)Error occured (IllegalStateException): Query ca.mcgill.ecse.dslreasoner.standalone.test.fam.terminatorAndInformation contains errors.
50 org.eclipse.viatra.query.runtime.matchers.util.Preconditions.checkState(Preconditions.java:144)
51 org.eclipse.viatra.query.patternlanguage.emf.specification.GenericEMFPatternPQuery.getDisjunctBodies(GenericEMFPatternPQuery.java:161)
52 org.eclipse.viatra.query.runtime.matchers.psystem.rewriters.PDisjunctionRewriter.rewrite(PDisjunctionRewriter.java:26)
53 hu.bme.mit.inf.dslreasoner.viatra2logic.Viatra2Logic.transformQueries(Viatra2Logic.java:111)
54 hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:196)
55 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:130)
56 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:339)
57 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111)
58 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73)
59 org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)Error occured (IllegalStateException): Query ca.mcgill.ecse.dslreasoner.standalone.test.fam.terminatorAndInformation contains errors.
60 org.eclipse.viatra.query.runtime.matchers.util.Preconditions.checkState(Preconditions.java:144)
61 org.eclipse.viatra.query.patternlanguage.emf.specification.GenericEMFPatternPQuery.getDisjunctBodies(GenericEMFPatternPQuery.java:161)
62 org.eclipse.viatra.query.runtime.matchers.psystem.rewriters.PDisjunctionRewriter.rewrite(PDisjunctionRewriter.java:26)
63 hu.bme.mit.inf.dslreasoner.viatra2logic.Viatra2Logic.transformQueries(Viatra2Logic.java:111)
64 hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:196)
65 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:130)
66 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:339)
67 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111)
68 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73)
69 org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)Error occured (IllegalStateException): Query ca.mcgill.ecse.dslreasoner.standalone.test.fam.terminatorAndInformation contains errors.
70 org.eclipse.viatra.query.runtime.matchers.util.Preconditions.checkState(Preconditions.java:144)
71 org.eclipse.viatra.query.patternlanguage.emf.specification.GenericEMFPatternPQuery.getDisjunctBodies(GenericEMFPatternPQuery.java:161)
72 org.eclipse.viatra.query.runtime.matchers.psystem.rewriters.PDisjunctionRewriter.rewrite(PDisjunctionRewriter.java:26)
73 hu.bme.mit.inf.dslreasoner.viatra2logic.Viatra2Logic.transformQueries(Viatra2Logic.java:111)
74 hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:196)
75 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:130)
76 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:339)
77 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111)
78 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73)
79 org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)Error occured (IllegalStateException): Query ca.mcgill.ecse.dslreasoner.standalone.test.fam.terminatorAndInformation contains errors.
80 org.eclipse.viatra.query.runtime.matchers.util.Preconditions.checkState(Preconditions.java:144)
81 org.eclipse.viatra.query.patternlanguage.emf.specification.GenericEMFPatternPQuery.getDisjunctBodies(GenericEMFPatternPQuery.java:161)
82 org.eclipse.viatra.query.runtime.matchers.psystem.rewriters.PDisjunctionRewriter.rewrite(PDisjunctionRewriter.java:26)
83 hu.bme.mit.inf.dslreasoner.viatra2logic.Viatra2Logic.transformQueries(Viatra2Logic.java:111)
84 hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:196)
85 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:130)
86 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:339)
87 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111)
88 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73)
89 org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)Error occured (IllegalStateException): Query ca.mcgill.ecse.dslreasoner.standalone.test.fam.terminatorAndInformation contains errors.
90 org.eclipse.viatra.query.runtime.matchers.util.Preconditions.checkState(Preconditions.java:144)
91 org.eclipse.viatra.query.patternlanguage.emf.specification.GenericEMFPatternPQuery.getDisjunctBodies(GenericEMFPatternPQuery.java:161)
92 org.eclipse.viatra.query.runtime.matchers.psystem.rewriters.PDisjunctionRewriter.rewrite(PDisjunctionRewriter.java:26)
93 hu.bme.mit.inf.dslreasoner.viatra2logic.Viatra2Logic.transformQueries(Viatra2Logic.java:111)
94 hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:196)
95 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:130)
96 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:339)
97 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111)
98 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73)
99 org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)Error occured (IllegalStateException): Query ca.mcgill.ecse.dslreasoner.standalone.test.fam.terminatorAndInformation contains errors.
100 org.eclipse.viatra.query.runtime.matchers.util.Preconditions.checkState(Preconditions.java:144)
101 org.eclipse.viatra.query.patternlanguage.emf.specification.GenericEMFPatternPQuery.getDisjunctBodies(GenericEMFPatternPQuery.java:161)
102 org.eclipse.viatra.query.runtime.matchers.psystem.rewriters.PDisjunctionRewriter.rewrite(PDisjunctionRewriter.java:26)
103 hu.bme.mit.inf.dslreasoner.viatra2logic.Viatra2Logic.transformQueries(Viatra2Logic.java:111)
104 hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:196)
105 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:130)
106 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:339)
107 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111)
108 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73)
109 org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)Error occured (IllegalStateException): Query ca.mcgill.ecse.dslreasoner.standalone.test.fam.terminatorAndInformation contains errors.
110 org.eclipse.viatra.query.runtime.matchers.util.Preconditions.checkState(Preconditions.java:144)
111 org.eclipse.viatra.query.patternlanguage.emf.specification.GenericEMFPatternPQuery.getDisjunctBodies(GenericEMFPatternPQuery.java:161)
112 org.eclipse.viatra.query.runtime.matchers.psystem.rewriters.PDisjunctionRewriter.rewrite(PDisjunctionRewriter.java:26)
113 hu.bme.mit.inf.dslreasoner.viatra2logic.Viatra2Logic.transformQueries(Viatra2Logic.java:111)
114 hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:196)
115 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:130)
116 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:339)
117 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111)
118 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73)
119 org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)Error occured (IllegalStateException): Query ca.mcgill.ecse.dslreasoner.standalone.test.fam.terminatorAndInformation contains errors.
120 org.eclipse.viatra.query.runtime.matchers.util.Preconditions.checkState(Preconditions.java:144)
121 org.eclipse.viatra.query.patternlanguage.emf.specification.GenericEMFPatternPQuery.getDisjunctBodies(GenericEMFPatternPQuery.java:161)
122 org.eclipse.viatra.query.runtime.matchers.psystem.rewriters.PDisjunctionRewriter.rewrite(PDisjunctionRewriter.java:26)
123 hu.bme.mit.inf.dslreasoner.viatra2logic.Viatra2Logic.transformQueries(Viatra2Logic.java:111)
124 hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:196)
125 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:130)
126 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:339)
127 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111)
128 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73)
129 org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)Error occured (IllegalStateException): Query ca.mcgill.ecse.dslreasoner.standalone.test.xyz.terminatorAndInformation contains errors.
130 org.eclipse.viatra.query.runtime.matchers.util.Preconditions.checkState(Preconditions.java:144)
131 org.eclipse.viatra.query.patternlanguage.emf.specification.GenericEMFPatternPQuery.getDisjunctBodies(GenericEMFPatternPQuery.java:161)
132 org.eclipse.viatra.query.runtime.matchers.psystem.rewriters.PDisjunctionRewriter.rewrite(PDisjunctionRewriter.java:26)
133 hu.bme.mit.inf.dslreasoner.viatra2logic.Viatra2Logic.transformQueries(Viatra2Logic.java:111)
134 hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:196)
135 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:130)
136 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:339)
137 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111)
138 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73)
139 org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)Error occured (IllegalStateException): Query ca.mcgill.ecse.dslreasoner.standalone.test.xyz.terminatorAndInformation contains errors.
140 org.eclipse.viatra.query.runtime.matchers.util.Preconditions.checkState(Preconditions.java:144)
141 org.eclipse.viatra.query.patternlanguage.emf.specification.GenericEMFPatternPQuery.getDisjunctBodies(GenericEMFPatternPQuery.java:161)
142 org.eclipse.viatra.query.runtime.matchers.psystem.rewriters.PDisjunctionRewriter.rewrite(PDisjunctionRewriter.java:26)
143 hu.bme.mit.inf.dslreasoner.viatra2logic.Viatra2Logic.transformQueries(Viatra2Logic.java:111)
144 hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:196)
145 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:130)
146 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:339)
147 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111)
148 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73)
149 org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)Error occured (NullPointerException):
150 hu.bme.mit.inf.dslreasoner.application.execution.QueryLoader.lambda$8(QueryLoader.java:108)
151 org.eclipse.xtext.xbase.lib.internal.BooleanFunctionDelegate.apply(BooleanFunctionDelegate.java:41)
152 com.google.common.collect.Iterators$6.computeNext(Iterators.java:617)
153 com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:145)
154 com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:140)
155 com.google.common.collect.Iterators.addAll(Iterators.java:366)
156 com.google.common.collect.Iterables.addAll(Iterables.java:332)
157 com.google.common.collect.Sets.newLinkedHashSet(Sets.java:383)
158 org.eclipse.xtext.xbase.lib.IterableExtensions.toSet(IterableExtensions.java:592)
159 hu.bme.mit.inf.dslreasoner.application.execution.QueryLoader._getPatterns(QueryLoader.java:84)
160 hu.bme.mit.inf.dslreasoner.application.execution.QueryLoader.getPatterns(QueryLoader.java:213)
161 hu.bme.mit.inf.dslreasoner.application.execution.QueryLoader.loadQueries(QueryLoader.java:54)
162 hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:167)
163 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:130)
164 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:339)
165 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111)
166 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73)
167 org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)Error occured (NullPointerException):
168 hu.bme.mit.inf.dslreasoner.application.execution.QueryLoader.lambda$8(QueryLoader.java:108)
169 org.eclipse.xtext.xbase.lib.internal.BooleanFunctionDelegate.apply(BooleanFunctionDelegate.java:41)
170 com.google.common.collect.Iterators$6.computeNext(Iterators.java:617)
171 com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:145)
172 com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:140)
173 com.google.common.collect.Iterators.addAll(Iterators.java:366)
174 com.google.common.collect.Iterables.addAll(Iterables.java:332)
175 com.google.common.collect.Sets.newLinkedHashSet(Sets.java:383)
176 org.eclipse.xtext.xbase.lib.IterableExtensions.toSet(IterableExtensions.java:592)
177 hu.bme.mit.inf.dslreasoner.application.execution.QueryLoader._getPatterns(QueryLoader.java:84)
178 hu.bme.mit.inf.dslreasoner.application.execution.QueryLoader.getPatterns(QueryLoader.java:213)
179 hu.bme.mit.inf.dslreasoner.application.execution.QueryLoader.loadQueries(QueryLoader.java:54)
180 hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:167)
181 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:130)
182 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:339)
183 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111)
184 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73)
185 org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)Error occured (UnsupportedOperationException): Unsupported attribute type: EJavaClass of org.eclipse.emf.ecore.impl.EcorePackageImpl@eddc9bb (name: ecore) (nsURI: http://www.eclipse.org/emf/2002/Ecore, nsPrefix: ecore)::EClassifier.instanceClass
186 hu.bme.mit.inf.dslreasoner.ecore2logic.EAttributeMapper_RelationsOverTypes.TypeOfRange(EAttributeMapper_RelationsOverTypes.java:237)
187 hu.bme.mit.inf.dslreasoner.ecore2logic.EAttributeMapper_RelationsOverTypes.transformEAttributes(EAttributeMapper_RelationsOverTypes.java:70)
188 hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2Logic.transformEAttributes(Ecore2Logic.java:140)
189 hu.bme.mit.inf.dslreasoner.ecore2logic.Ecore2Logic.transformMetamodel(Ecore2Logic.java:83)
190 hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:189)
191 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:130)
192 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:339)
193 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111)
194 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73)
195 org.eclipse.core.internal.jobs.Worker.run(Worker.java:56) \ No newline at end of file
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/debug/generated3valued.vql_deactivated b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/debug/generated3valued.vql_deactivated
new file mode 100644
index 00000000..88497c64
--- /dev/null
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/debug/generated3valued.vql_deactivated
@@ -0,0 +1,31733 @@
1import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage"
2import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem"
3import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language"
4
5//////////
6// 0. Util
7//////////
8private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) {
9 PartialInterpretation.problem(interpretation,problem);
10}
11
12/////////////////////////
13// 0.1 Existence
14/////////////////////////
15private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
16 find interpretation(problem,interpretation);
17 LogicProblem.elements(problem,element);
18} or {
19 find interpretation(problem,interpretation);
20 PartialInterpretation.newElements(interpretation,element);
21}
22
23private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
24 find mustExist(problem,interpretation,element);
25} or {
26 find interpretation(problem,interpretation);
27 neg find elementCloseWorld(element);
28 PartialInterpretation.openWorldElements(interpretation,element);
29}
30
31private pattern elementCloseWorld(element:DefinedElement) {
32 PartialInterpretation.openWorldElements(i,element);
33 PartialInterpretation.maxNewElements(i,0);
34} or {
35 Scope.targetTypeInterpretation(scope,interpretation);
36 PartialTypeInterpratation.elements(interpretation,element);
37 Scope.maxNewElements(scope,0);
38}
39
40////////////////////////
41// 0.2 Equivalence
42////////////////////////
43pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) {
44 find mayExist(problem,interpretation,a);
45 find mayExist(problem,interpretation,b);
46 a == b;
47}
48
49////////////////////////
50// 0.3 Required Patterns by TypeIndexer
51////////////////////////
52private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) {
53 find interpretation(problem,interpretation);
54 LogicProblem.types(problem,type);
55 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
56 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
57}
58
59private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) {
60 find interpretation(problem,interpretation);
61 LogicProblem.types(problem,type);
62 TypeDefinition.elements(type,element);
63} or {
64 find interpretation(problem,interpretation);
65 find typeInterpretation(problem,interpretation,type,typeInterpretation);
66 PartialComplexTypeInterpretation.elements(typeInterpretation,element);
67}
68
69private pattern isPrimitive(element: PrimitiveElement) {
70 PrimitiveElement(element);
71}
72
73//////////
74// 1. Problem-Specific Base Indexers
75//////////
76// 1.1 Type Indexers
77//////////
78// 1.1.1 primitive Type Indexers
79//////////
80
81//////////
82// 1.1.2 domain-specific Type Indexers
83//////////
84/**
85 * An element must be an instance of type "FunctionalElement class".
86 */
87private pattern mustInstanceOfFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
88 Type.name(type,"FunctionalElement class");
89 find directInstanceOf(problem,interpretation,element,type);
90}
91private pattern scopeDisallowsNewFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation) {
92 find interpretation(problem,interpretation);
93 PartialInterpretation.scopes(interpretation,scope);
94 Scope.targetTypeInterpretation(scope,typeInterpretation);
95 Scope.maxNewElements(scope,0);
96 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
97 Type.name(type,"FunctionalElement class");
98}
99
100/**
101 * An element may be an instance of type "FunctionalElement class".
102 */
103private pattern mayInstanceOfFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
104{
105 find interpretation(problem,interpretation);
106 PartialInterpretation.newElements(interpretation,element);
107 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
108 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
109 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
110 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
111 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
112 neg find mustInstanceOfFunction_class(problem,interpretation,element);
113 neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation);
114 neg find isPrimitive(element);
115} or {
116 find interpretation(problem,interpretation);
117 PartialInterpretation.openWorldElements(interpretation,element);
118 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
119 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
120 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
121 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
122 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
123 neg find mustInstanceOfFunction_class(problem,interpretation,element);
124 neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation);
125 neg find isPrimitive(element);
126} or
127{ find mustInstanceOfFunctionalElement_class(problem,interpretation,element); }
128/**
129 * An element must be an instance of type "FunctionalArchitectureModel class".
130 */
131private pattern mustInstanceOfFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
132 Type.name(type,"FunctionalArchitectureModel class");
133 find directInstanceOf(problem,interpretation,element,type);
134}
135private pattern scopeDisallowsNewFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation) {
136 find interpretation(problem,interpretation);
137 PartialInterpretation.scopes(interpretation,scope);
138 Scope.targetTypeInterpretation(scope,typeInterpretation);
139 Scope.maxNewElements(scope,0);
140 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
141 Type.name(type,"FunctionalArchitectureModel class");
142}
143
144/**
145 * An element may be an instance of type "FunctionalArchitectureModel class".
146 */
147private pattern mayInstanceOfFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
148{
149 find interpretation(problem,interpretation);
150 PartialInterpretation.newElements(interpretation,element);
151 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
152 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
153 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
154 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
155 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
156 neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element);
157 neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation);
158 neg find isPrimitive(element);
159} or {
160 find interpretation(problem,interpretation);
161 PartialInterpretation.openWorldElements(interpretation,element);
162 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
163 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
164 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
165 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
166 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
167 neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element);
168 neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation);
169 neg find isPrimitive(element);
170} or
171{ find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); }
172/**
173 * An element must be an instance of type "Function class".
174 */
175private pattern mustInstanceOfFunction_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
176 Type.name(type,"Function class");
177 find directInstanceOf(problem,interpretation,element,type);
178}
179private pattern scopeDisallowsNewFunction_class(problem:LogicProblem, interpretation:PartialInterpretation) {
180 find interpretation(problem,interpretation);
181 PartialInterpretation.scopes(interpretation,scope);
182 Scope.targetTypeInterpretation(scope,typeInterpretation);
183 Scope.maxNewElements(scope,0);
184 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
185 Type.name(type,"Function class");
186}
187
188/**
189 * An element may be an instance of type "Function class".
190 */
191private pattern mayInstanceOfFunction_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
192{
193 find interpretation(problem,interpretation);
194 PartialInterpretation.newElements(interpretation,element);
195 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
196 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
197 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
198 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
199 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
200 neg find scopeDisallowsNewFunction_class(problem, interpretation);
201 neg find isPrimitive(element);
202} or {
203 find interpretation(problem,interpretation);
204 PartialInterpretation.openWorldElements(interpretation,element);
205 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
206 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
207 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
208 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
209 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
210 neg find scopeDisallowsNewFunction_class(problem, interpretation);
211 neg find isPrimitive(element);
212} or
213{ find mustInstanceOfFunction_class(problem,interpretation,element); }
214/**
215 * An element must be an instance of type "FAMTerminator class".
216 */
217private pattern mustInstanceOfFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
218 Type.name(type,"FAMTerminator class");
219 find directInstanceOf(problem,interpretation,element,type);
220}
221private pattern scopeDisallowsNewFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation) {
222 find interpretation(problem,interpretation);
223 PartialInterpretation.scopes(interpretation,scope);
224 Scope.targetTypeInterpretation(scope,typeInterpretation);
225 Scope.maxNewElements(scope,0);
226 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
227 Type.name(type,"FAMTerminator class");
228}
229
230/**
231 * An element may be an instance of type "FAMTerminator class".
232 */
233private pattern mayInstanceOfFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
234{
235 find interpretation(problem,interpretation);
236 PartialInterpretation.newElements(interpretation,element);
237 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
238 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
239 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
240 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
241 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
242 neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation);
243 neg find isPrimitive(element);
244} or {
245 find interpretation(problem,interpretation);
246 PartialInterpretation.openWorldElements(interpretation,element);
247 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
248 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
249 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
250 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
251 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
252 neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation);
253 neg find isPrimitive(element);
254} or
255{ find mustInstanceOfFAMTerminator_class(problem,interpretation,element); }
256/**
257 * An element must be an instance of type "InformationLink class".
258 */
259private pattern mustInstanceOfInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
260 Type.name(type,"InformationLink class");
261 find directInstanceOf(problem,interpretation,element,type);
262}
263private pattern scopeDisallowsNewInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation) {
264 find interpretation(problem,interpretation);
265 PartialInterpretation.scopes(interpretation,scope);
266 Scope.targetTypeInterpretation(scope,typeInterpretation);
267 Scope.maxNewElements(scope,0);
268 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
269 Type.name(type,"InformationLink class");
270}
271
272/**
273 * An element may be an instance of type "InformationLink class".
274 */
275private pattern mayInstanceOfInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
276{
277 find interpretation(problem,interpretation);
278 PartialInterpretation.newElements(interpretation,element);
279 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
280 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
281 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
282 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
283 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
284 neg find scopeDisallowsNewInformationLink_class(problem, interpretation);
285 neg find isPrimitive(element);
286} or {
287 find interpretation(problem,interpretation);
288 PartialInterpretation.openWorldElements(interpretation,element);
289 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
290 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
291 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
292 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
293 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
294 neg find scopeDisallowsNewInformationLink_class(problem, interpretation);
295 neg find isPrimitive(element);
296} or
297{ find mustInstanceOfInformationLink_class(problem,interpretation,element); }
298/**
299 * An element must be an instance of type "FunctionalInterface class".
300 */
301private pattern mustInstanceOfFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
302 Type.name(type,"FunctionalInterface class");
303 find directInstanceOf(problem,interpretation,element,type);
304}
305private pattern scopeDisallowsNewFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation) {
306 find interpretation(problem,interpretation);
307 PartialInterpretation.scopes(interpretation,scope);
308 Scope.targetTypeInterpretation(scope,typeInterpretation);
309 Scope.maxNewElements(scope,0);
310 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
311 Type.name(type,"FunctionalInterface class");
312}
313
314/**
315 * An element may be an instance of type "FunctionalInterface class".
316 */
317private pattern mayInstanceOfFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
318{
319 find interpretation(problem,interpretation);
320 PartialInterpretation.newElements(interpretation,element);
321 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
322 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
323 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
324 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
325 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
326 neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation);
327 neg find isPrimitive(element);
328} or {
329 find interpretation(problem,interpretation);
330 PartialInterpretation.openWorldElements(interpretation,element);
331 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
332 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
333 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
334 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
335 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
336 neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation);
337 neg find isPrimitive(element);
338} or
339{ find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); }
340/**
341 * An element must be an instance of type "FunctionalInput class".
342 */
343private pattern mustInstanceOfFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
344 Type.name(type,"FunctionalInput class");
345 find directInstanceOf(problem,interpretation,element,type);
346}
347private pattern scopeDisallowsNewFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation) {
348 find interpretation(problem,interpretation);
349 PartialInterpretation.scopes(interpretation,scope);
350 Scope.targetTypeInterpretation(scope,typeInterpretation);
351 Scope.maxNewElements(scope,0);
352 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
353 Type.name(type,"FunctionalInput class");
354}
355
356/**
357 * An element may be an instance of type "FunctionalInput class".
358 */
359private pattern mayInstanceOfFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
360{
361 find interpretation(problem,interpretation);
362 PartialInterpretation.newElements(interpretation,element);
363 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
364 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
365 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
366 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
367 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
368 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
369 neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation);
370 neg find isPrimitive(element);
371} or {
372 find interpretation(problem,interpretation);
373 PartialInterpretation.openWorldElements(interpretation,element);
374 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
375 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
376 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
377 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
378 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
379 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
380 neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation);
381 neg find isPrimitive(element);
382} or
383{ find mustInstanceOfFunctionalInput_class(problem,interpretation,element); }
384/**
385 * An element must be an instance of type "FunctionalOutput class".
386 */
387private pattern mustInstanceOfFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
388 Type.name(type,"FunctionalOutput class");
389 find directInstanceOf(problem,interpretation,element,type);
390}
391private pattern scopeDisallowsNewFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation) {
392 find interpretation(problem,interpretation);
393 PartialInterpretation.scopes(interpretation,scope);
394 Scope.targetTypeInterpretation(scope,typeInterpretation);
395 Scope.maxNewElements(scope,0);
396 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
397 Type.name(type,"FunctionalOutput class");
398}
399
400/**
401 * An element may be an instance of type "FunctionalOutput class".
402 */
403private pattern mayInstanceOfFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
404{
405 find interpretation(problem,interpretation);
406 PartialInterpretation.newElements(interpretation,element);
407 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
408 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
409 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
410 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
411 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
412 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
413 neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation);
414 neg find isPrimitive(element);
415} or {
416 find interpretation(problem,interpretation);
417 PartialInterpretation.openWorldElements(interpretation,element);
418 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
419 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
420 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
421 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
422 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
423 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
424 neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation);
425 neg find isPrimitive(element);
426} or
427{ find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); }
428/**
429 * An element must be an instance of type "FunctionalData class".
430 */
431private pattern mustInstanceOfFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
432 Type.name(type,"FunctionalData class");
433 find directInstanceOf(problem,interpretation,element,type);
434}
435private pattern scopeDisallowsNewFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation) {
436 find interpretation(problem,interpretation);
437 PartialInterpretation.scopes(interpretation,scope);
438 Scope.targetTypeInterpretation(scope,typeInterpretation);
439 Scope.maxNewElements(scope,0);
440 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
441 Type.name(type,"FunctionalData class");
442}
443
444/**
445 * An element may be an instance of type "FunctionalData class".
446 */
447private pattern mayInstanceOfFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
448{
449 find interpretation(problem,interpretation);
450 PartialInterpretation.newElements(interpretation,element);
451 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
452 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
453 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
454 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
455 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
456 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
457 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
458 neg find scopeDisallowsNewFunctionalData_class(problem, interpretation);
459 neg find isPrimitive(element);
460} or {
461 find interpretation(problem,interpretation);
462 PartialInterpretation.openWorldElements(interpretation,element);
463 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
464 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
465 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
466 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
467 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
468 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
469 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
470 neg find scopeDisallowsNewFunctionalData_class(problem, interpretation);
471 neg find isPrimitive(element);
472} or
473{ find mustInstanceOfFunctionalData_class(problem,interpretation,element); }
474/**
475 * An element must be an instance of type "FunctionType enum".
476 */
477private pattern mustInstanceOfFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
478 Type.name(type,"FunctionType enum");
479 find directInstanceOf(problem,interpretation,element,type);
480}
481private pattern scopeDisallowsNewFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation) {
482 find interpretation(problem,interpretation);
483 PartialInterpretation.scopes(interpretation,scope);
484 Scope.targetTypeInterpretation(scope,typeInterpretation);
485 Scope.maxNewElements(scope,0);
486 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
487 Type.name(type,"FunctionType enum");
488}
489
490/**
491 * An element may be an instance of type "FunctionType enum".
492 */
493private pattern mayInstanceOfFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
494{ find mustInstanceOfFunctionType_enum(problem,interpretation,element); }
495/**
496 * An element must be an instance of type "FunctionalArchitectureModel class DefinedPart".
497 */
498private pattern mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
499 Type.name(type,"FunctionalArchitectureModel class DefinedPart");
500 find directInstanceOf(problem,interpretation,element,type);
501}
502private pattern scopeDisallowsNewFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
503 find interpretation(problem,interpretation);
504 PartialInterpretation.scopes(interpretation,scope);
505 Scope.targetTypeInterpretation(scope,typeInterpretation);
506 Scope.maxNewElements(scope,0);
507 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
508 Type.name(type,"FunctionalArchitectureModel class DefinedPart");
509}
510
511/**
512 * An element may be an instance of type "FunctionalArchitectureModel class DefinedPart".
513 */
514private pattern mayInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
515{ find mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem,interpretation,element); }
516/**
517 * An element must be an instance of type "FunctionalArchitectureModel class UndefinedPart".
518 */
519private pattern mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
520 Type.name(type,"FunctionalArchitectureModel class UndefinedPart");
521 find directInstanceOf(problem,interpretation,element,type);
522}
523private pattern scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
524 find interpretation(problem,interpretation);
525 PartialInterpretation.scopes(interpretation,scope);
526 Scope.targetTypeInterpretation(scope,typeInterpretation);
527 Scope.maxNewElements(scope,0);
528 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
529 Type.name(type,"FunctionalArchitectureModel class UndefinedPart");
530}
531
532/**
533 * An element may be an instance of type "FunctionalArchitectureModel class UndefinedPart".
534 */
535private pattern mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
536{
537 find interpretation(problem,interpretation);
538 PartialInterpretation.newElements(interpretation,element);
539 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
540 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
541 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
542 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
543 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
544 neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation);
545 neg find isPrimitive(element);
546} or {
547 find interpretation(problem,interpretation);
548 PartialInterpretation.openWorldElements(interpretation,element);
549 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
550 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
551 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
552 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
553 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
554 neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation);
555 neg find isPrimitive(element);
556} or
557{ find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); }
558
559//////////
560// 1.2 Relation Declaration Indexers
561//////////
562/**
563 * Matcher for detecting tuples t where []interface reference FunctionalElement(source,target)
564 */
565private pattern mustInRelationinterface_reference_FunctionalElement(
566 problem:LogicProblem, interpretation:PartialInterpretation,
567 source: DefinedElement, target:DefinedElement)
568{
569 find interpretation(problem,interpretation);
570 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
571 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface reference FunctionalElement");
572 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
573 BinaryElementRelationLink.param1(link,source);
574 BinaryElementRelationLink.param2(link,target);
575}
576/**
577 * Matcher for detecting tuples t where <>interface reference FunctionalElement(source,target)
578 */
579private pattern mayInRelationinterface_reference_FunctionalElement(
580 problem:LogicProblem, interpretation:PartialInterpretation,
581 source: DefinedElement, target:DefinedElement)
582{
583 find interpretation(problem,interpretation);
584 // The two endpoint of the link have to exist
585 find mayExist(problem, interpretation, source);
586 find mayExist(problem, interpretation, target);
587 // Type consistency
588 find mayInstanceOfFunctionalElement_class(problem,interpretation,source);
589 find mayInstanceOfFunctionalInterface_class(problem,interpretation,target);
590 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
591 // the upper bound of the multiplicity should be considered.
592 numberOfExistingReferences == count find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,_);
593 check(numberOfExistingReferences < 1);
594 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
595 // the upper bound of the opposite reference multiplicity should be considered.
596 numberOfExistingOppositeReferences == count find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,target,_);
597 check(numberOfExistingOppositeReferences < 1);
598 // The reference is containment, then a new reference cannot be create if:
599 // 1. Multiple parents
600 neg find mustContains4(problem,interpretation,_,target);
601 // 2. Circle in the containment hierarchy
602 neg find mustTransitiveContains(source,target);
603} or {
604 find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,target);
605}
606/**
607 * Matcher for detecting tuples t where []model reference FunctionalElement(source,target)
608 */
609 private pattern mustInRelationmodel_reference_FunctionalElement(
610 problem:LogicProblem, interpretation:PartialInterpretation,
611 source: DefinedElement, target:DefinedElement)
612 {
613 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_model(problem,interpretation,source,target);
614 }
615/**
616 * Matcher for detecting tuples t where []model reference FunctionalElement(source,target)
617 */
618 private pattern mayInRelationmodel_reference_FunctionalElement(
619 problem:LogicProblem, interpretation:PartialInterpretation,
620 source: DefinedElement, target:DefinedElement)
621 {
622 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_model(problem,interpretation,source,target);
623 }
624/**
625 * Matcher for detecting tuples t where []parent reference FunctionalElement(source,target)
626 */
627private pattern mustInRelationparent_reference_FunctionalElement(
628 problem:LogicProblem, interpretation:PartialInterpretation,
629 source: DefinedElement, target:DefinedElement)
630{
631 find interpretation(problem,interpretation);
632 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
633 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"parent reference FunctionalElement");
634 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
635 BinaryElementRelationLink.param1(link,source);
636 BinaryElementRelationLink.param2(link,target);
637}
638/**
639 * Matcher for detecting tuples t where <>parent reference FunctionalElement(source,target)
640 */
641private pattern mayInRelationparent_reference_FunctionalElement(
642 problem:LogicProblem, interpretation:PartialInterpretation,
643 source: DefinedElement, target:DefinedElement)
644{
645 find interpretation(problem,interpretation);
646 // The two endpoint of the link have to exist
647 find mayExist(problem, interpretation, source);
648 find mayExist(problem, interpretation, target);
649 // Type consistency
650 find mayInstanceOfFunctionalElement_class(problem,interpretation,source);
651 find mayInstanceOfFunction_class(problem,interpretation,target);
652 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
653 // the upper bound of the multiplicity should be considered.
654 numberOfExistingReferences == count find mustInRelationparent_reference_FunctionalElement(problem,interpretation,source,_);
655 check(numberOfExistingReferences < 1);
656 // The eOpposite of the reference is containment, then a referene cannot be created if
657 // 1. Multiple parents
658 neg find mustContains4(problem,interpretation,source,_);
659 // 2. Circle in the containment hierarchy
660 neg find mustTransitiveContains(source,target);
661} or {
662 find mustInRelationparent_reference_FunctionalElement(problem,interpretation,source,target);
663}
664/**
665 * Matcher for detecting tuples t where []rootElements reference FunctionalArchitectureModel(source,target)
666 */
667private pattern mustInRelationrootElements_reference_FunctionalArchitectureModel(
668 problem:LogicProblem, interpretation:PartialInterpretation,
669 source: DefinedElement, target:DefinedElement)
670{
671 find interpretation(problem,interpretation);
672 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
673 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"rootElements reference FunctionalArchitectureModel");
674 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
675 BinaryElementRelationLink.param1(link,source);
676 BinaryElementRelationLink.param2(link,target);
677}
678/**
679 * Matcher for detecting tuples t where <>rootElements reference FunctionalArchitectureModel(source,target)
680 */
681private pattern mayInRelationrootElements_reference_FunctionalArchitectureModel(
682 problem:LogicProblem, interpretation:PartialInterpretation,
683 source: DefinedElement, target:DefinedElement)
684{
685 find interpretation(problem,interpretation);
686 // The two endpoint of the link have to exist
687 find mayExist(problem, interpretation, source);
688 find mayExist(problem, interpretation, target);
689 // Type consistency
690 find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,source);
691 find mayInstanceOfFunctionalElement_class(problem,interpretation,target);
692 // The reference is containment, then a new reference cannot be create if:
693 // 1. Multiple parents
694 neg find mustContains4(problem,interpretation,_,target);
695 // 2. Circle in the containment hierarchy
696 neg find mustTransitiveContains(source,target);
697} or {
698 find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,source,target);
699}
700/**
701 * Matcher for detecting tuples t where []subElements reference Function(source,target)
702 */
703private pattern mustInRelationsubElements_reference_Function(
704 problem:LogicProblem, interpretation:PartialInterpretation,
705 source: DefinedElement, target:DefinedElement)
706{
707 find interpretation(problem,interpretation);
708 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
709 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"subElements reference Function");
710 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
711 BinaryElementRelationLink.param1(link,source);
712 BinaryElementRelationLink.param2(link,target);
713}
714/**
715 * Matcher for detecting tuples t where <>subElements reference Function(source,target)
716 */
717private pattern mayInRelationsubElements_reference_Function(
718 problem:LogicProblem, interpretation:PartialInterpretation,
719 source: DefinedElement, target:DefinedElement)
720{
721 find interpretation(problem,interpretation);
722 // The two endpoint of the link have to exist
723 find mayExist(problem, interpretation, source);
724 find mayExist(problem, interpretation, target);
725 // Type consistency
726 find mayInstanceOfFunction_class(problem,interpretation,source);
727 find mayInstanceOfFunctionalElement_class(problem,interpretation,target);
728 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
729 // the upper bound of the opposite reference multiplicity should be considered.
730 numberOfExistingOppositeReferences == count find mustInRelationparent_reference_FunctionalElement(problem,interpretation,target,_);
731 check(numberOfExistingOppositeReferences < 1);
732 // The reference is containment, then a new reference cannot be create if:
733 // 1. Multiple parents
734 neg find mustContains4(problem,interpretation,_,target);
735 // 2. Circle in the containment hierarchy
736 neg find mustTransitiveContains(source,target);
737} or {
738 find mustInRelationsubElements_reference_Function(problem,interpretation,source,target);
739}
740/**
741 * Matcher for detecting tuples t where []data reference FAMTerminator(source,target)
742 */
743private pattern mustInRelationdata_reference_FAMTerminator(
744 problem:LogicProblem, interpretation:PartialInterpretation,
745 source: DefinedElement, target:DefinedElement)
746{
747 find interpretation(problem,interpretation);
748 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
749 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"data reference FAMTerminator");
750 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
751 BinaryElementRelationLink.param1(link,source);
752 BinaryElementRelationLink.param2(link,target);
753}
754/**
755 * Matcher for detecting tuples t where <>data reference FAMTerminator(source,target)
756 */
757private pattern mayInRelationdata_reference_FAMTerminator(
758 problem:LogicProblem, interpretation:PartialInterpretation,
759 source: DefinedElement, target:DefinedElement)
760{
761 find interpretation(problem,interpretation);
762 // The two endpoint of the link have to exist
763 find mayExist(problem, interpretation, source);
764 find mayExist(problem, interpretation, target);
765 // Type consistency
766 find mayInstanceOfFAMTerminator_class(problem,interpretation,source);
767 find mayInstanceOfFunctionalData_class(problem,interpretation,target);
768 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
769 // the upper bound of the multiplicity should be considered.
770 numberOfExistingReferences == count find mustInRelationdata_reference_FAMTerminator(problem,interpretation,source,_);
771 check(numberOfExistingReferences < 1);
772 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
773 // the upper bound of the opposite reference multiplicity should be considered.
774 numberOfExistingOppositeReferences == count find mustInRelationterminator_reference_FunctionalData(problem,interpretation,target,_);
775 check(numberOfExistingOppositeReferences < 1);
776 // The eOpposite of the reference is containment, then a referene cannot be created if
777 // 1. Multiple parents
778 neg find mustContains4(problem,interpretation,source,_);
779 // 2. Circle in the containment hierarchy
780 neg find mustTransitiveContains(source,target);
781} or {
782 find mustInRelationdata_reference_FAMTerminator(problem,interpretation,source,target);
783}
784/**
785 * Matcher for detecting tuples t where []from reference InformationLink(source,target)
786 */
787private pattern mustInRelationfrom_reference_InformationLink(
788 problem:LogicProblem, interpretation:PartialInterpretation,
789 source: DefinedElement, target:DefinedElement)
790{
791 find interpretation(problem,interpretation);
792 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
793 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"from reference InformationLink");
794 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
795 BinaryElementRelationLink.param1(link,source);
796 BinaryElementRelationLink.param2(link,target);
797}
798/**
799 * Matcher for detecting tuples t where <>from reference InformationLink(source,target)
800 */
801private pattern mayInRelationfrom_reference_InformationLink(
802 problem:LogicProblem, interpretation:PartialInterpretation,
803 source: DefinedElement, target:DefinedElement)
804{
805 find interpretation(problem,interpretation);
806 // The two endpoint of the link have to exist
807 find mayExist(problem, interpretation, source);
808 find mayExist(problem, interpretation, target);
809 // Type consistency
810 find mayInstanceOfInformationLink_class(problem,interpretation,source);
811 find mayInstanceOfFunctionalOutput_class(problem,interpretation,target);
812 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
813 // the upper bound of the multiplicity should be considered.
814 numberOfExistingReferences == count find mustInRelationfrom_reference_InformationLink(problem,interpretation,source,_);
815 check(numberOfExistingReferences < 1);
816 // The eOpposite of the reference is containment, then a referene cannot be created if
817 // 1. Multiple parents
818 neg find mustContains4(problem,interpretation,source,_);
819 // 2. Circle in the containment hierarchy
820 neg find mustTransitiveContains(source,target);
821} or {
822 find mustInRelationfrom_reference_InformationLink(problem,interpretation,source,target);
823}
824/**
825 * Matcher for detecting tuples t where []to reference InformationLink(source,target)
826 */
827private pattern mustInRelationto_reference_InformationLink(
828 problem:LogicProblem, interpretation:PartialInterpretation,
829 source: DefinedElement, target:DefinedElement)
830{
831 find interpretation(problem,interpretation);
832 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
833 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"to reference InformationLink");
834 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
835 BinaryElementRelationLink.param1(link,source);
836 BinaryElementRelationLink.param2(link,target);
837}
838/**
839 * Matcher for detecting tuples t where <>to reference InformationLink(source,target)
840 */
841private pattern mayInRelationto_reference_InformationLink(
842 problem:LogicProblem, interpretation:PartialInterpretation,
843 source: DefinedElement, target:DefinedElement)
844{
845 find interpretation(problem,interpretation);
846 // The two endpoint of the link have to exist
847 find mayExist(problem, interpretation, source);
848 find mayExist(problem, interpretation, target);
849 // Type consistency
850 find mayInstanceOfInformationLink_class(problem,interpretation,source);
851 find mayInstanceOfFunctionalInput_class(problem,interpretation,target);
852 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
853 // the upper bound of the multiplicity should be considered.
854 numberOfExistingReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,source,_);
855 check(numberOfExistingReferences < 1);
856} or {
857 find mustInRelationto_reference_InformationLink(problem,interpretation,source,target);
858}
859/**
860 * Matcher for detecting tuples t where []data reference FunctionalInterface(source,target)
861 */
862private pattern mustInRelationdata_reference_FunctionalInterface(
863 problem:LogicProblem, interpretation:PartialInterpretation,
864 source: DefinedElement, target:DefinedElement)
865{
866 find interpretation(problem,interpretation);
867 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
868 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"data reference FunctionalInterface");
869 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
870 BinaryElementRelationLink.param1(link,source);
871 BinaryElementRelationLink.param2(link,target);
872}
873/**
874 * Matcher for detecting tuples t where <>data reference FunctionalInterface(source,target)
875 */
876private pattern mayInRelationdata_reference_FunctionalInterface(
877 problem:LogicProblem, interpretation:PartialInterpretation,
878 source: DefinedElement, target:DefinedElement)
879{
880 find interpretation(problem,interpretation);
881 // The two endpoint of the link have to exist
882 find mayExist(problem, interpretation, source);
883 find mayExist(problem, interpretation, target);
884 // Type consistency
885 find mayInstanceOfFunctionalInterface_class(problem,interpretation,source);
886 find mayInstanceOfFunctionalData_class(problem,interpretation,target);
887 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
888 // the upper bound of the opposite reference multiplicity should be considered.
889 numberOfExistingOppositeReferences == count find mustInRelationinterface_reference_FunctionalData(problem,interpretation,target,_);
890 check(numberOfExistingOppositeReferences < 1);
891 // The reference is containment, then a new reference cannot be create if:
892 // 1. Multiple parents
893 neg find mustContains4(problem,interpretation,_,target);
894 // 2. Circle in the containment hierarchy
895 neg find mustTransitiveContains(source,target);
896} or {
897 find mustInRelationdata_reference_FunctionalInterface(problem,interpretation,source,target);
898}
899/**
900 * Matcher for detecting tuples t where []element reference FunctionalInterface(source,target)
901 */
902private pattern mustInRelationelement_reference_FunctionalInterface(
903 problem:LogicProblem, interpretation:PartialInterpretation,
904 source: DefinedElement, target:DefinedElement)
905{
906 find interpretation(problem,interpretation);
907 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
908 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"element reference FunctionalInterface");
909 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
910 BinaryElementRelationLink.param1(link,source);
911 BinaryElementRelationLink.param2(link,target);
912}
913/**
914 * Matcher for detecting tuples t where <>element reference FunctionalInterface(source,target)
915 */
916private pattern mayInRelationelement_reference_FunctionalInterface(
917 problem:LogicProblem, interpretation:PartialInterpretation,
918 source: DefinedElement, target:DefinedElement)
919{
920 find interpretation(problem,interpretation);
921 // The two endpoint of the link have to exist
922 find mayExist(problem, interpretation, source);
923 find mayExist(problem, interpretation, target);
924 // Type consistency
925 find mayInstanceOfFunctionalInterface_class(problem,interpretation,source);
926 find mayInstanceOfFunctionalElement_class(problem,interpretation,target);
927 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
928 // the upper bound of the multiplicity should be considered.
929 numberOfExistingReferences == count find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,source,_);
930 check(numberOfExistingReferences < 1);
931 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
932 // the upper bound of the opposite reference multiplicity should be considered.
933 numberOfExistingOppositeReferences == count find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,target,_);
934 check(numberOfExistingOppositeReferences < 1);
935 // The eOpposite of the reference is containment, then a referene cannot be created if
936 // 1. Multiple parents
937 neg find mustContains4(problem,interpretation,source,_);
938 // 2. Circle in the containment hierarchy
939 neg find mustTransitiveContains(source,target);
940} or {
941 find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,source,target);
942}
943/**
944 * Matcher for detecting tuples t where []IncomingLinks reference FunctionalInput(source,target)
945 */
946private pattern mustInRelationIncomingLinks_reference_FunctionalInput(
947 problem:LogicProblem, interpretation:PartialInterpretation,
948 source: DefinedElement, target:DefinedElement)
949{
950 find interpretation(problem,interpretation);
951 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
952 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"IncomingLinks reference FunctionalInput");
953 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
954 BinaryElementRelationLink.param1(link,source);
955 BinaryElementRelationLink.param2(link,target);
956}
957/**
958 * Matcher for detecting tuples t where <>IncomingLinks reference FunctionalInput(source,target)
959 */
960private pattern mayInRelationIncomingLinks_reference_FunctionalInput(
961 problem:LogicProblem, interpretation:PartialInterpretation,
962 source: DefinedElement, target:DefinedElement)
963{
964 find interpretation(problem,interpretation);
965 // The two endpoint of the link have to exist
966 find mayExist(problem, interpretation, source);
967 find mayExist(problem, interpretation, target);
968 // Type consistency
969 find mayInstanceOfFunctionalInput_class(problem,interpretation,source);
970 find mayInstanceOfInformationLink_class(problem,interpretation,target);
971 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
972 // the upper bound of the opposite reference multiplicity should be considered.
973 numberOfExistingOppositeReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,target,_);
974 check(numberOfExistingOppositeReferences < 1);
975} or {
976 find mustInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,source,target);
977}
978/**
979 * Matcher for detecting tuples t where []outgoingLinks reference FunctionalOutput(source,target)
980 */
981private pattern mustInRelationoutgoingLinks_reference_FunctionalOutput(
982 problem:LogicProblem, interpretation:PartialInterpretation,
983 source: DefinedElement, target:DefinedElement)
984{
985 find interpretation(problem,interpretation);
986 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
987 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"outgoingLinks reference FunctionalOutput");
988 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
989 BinaryElementRelationLink.param1(link,source);
990 BinaryElementRelationLink.param2(link,target);
991}
992/**
993 * Matcher for detecting tuples t where <>outgoingLinks reference FunctionalOutput(source,target)
994 */
995private pattern mayInRelationoutgoingLinks_reference_FunctionalOutput(
996 problem:LogicProblem, interpretation:PartialInterpretation,
997 source: DefinedElement, target:DefinedElement)
998{
999 find interpretation(problem,interpretation);
1000 // The two endpoint of the link have to exist
1001 find mayExist(problem, interpretation, source);
1002 find mayExist(problem, interpretation, target);
1003 // Type consistency
1004 find mayInstanceOfFunctionalOutput_class(problem,interpretation,source);
1005 find mayInstanceOfInformationLink_class(problem,interpretation,target);
1006 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
1007 // the upper bound of the opposite reference multiplicity should be considered.
1008 numberOfExistingOppositeReferences == count find mustInRelationfrom_reference_InformationLink(problem,interpretation,target,_);
1009 check(numberOfExistingOppositeReferences < 1);
1010 // The reference is containment, then a new reference cannot be create if:
1011 // 1. Multiple parents
1012 neg find mustContains4(problem,interpretation,_,target);
1013 // 2. Circle in the containment hierarchy
1014 neg find mustTransitiveContains(source,target);
1015} or {
1016 find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,source,target);
1017}
1018/**
1019 * Matcher for detecting tuples t where []terminator reference FunctionalData(source,target)
1020 */
1021private pattern mustInRelationterminator_reference_FunctionalData(
1022 problem:LogicProblem, interpretation:PartialInterpretation,
1023 source: DefinedElement, target:DefinedElement)
1024{
1025 find interpretation(problem,interpretation);
1026 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
1027 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"terminator reference FunctionalData");
1028 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
1029 BinaryElementRelationLink.param1(link,source);
1030 BinaryElementRelationLink.param2(link,target);
1031}
1032/**
1033 * Matcher for detecting tuples t where <>terminator reference FunctionalData(source,target)
1034 */
1035private pattern mayInRelationterminator_reference_FunctionalData(
1036 problem:LogicProblem, interpretation:PartialInterpretation,
1037 source: DefinedElement, target:DefinedElement)
1038{
1039 find interpretation(problem,interpretation);
1040 // The two endpoint of the link have to exist
1041 find mayExist(problem, interpretation, source);
1042 find mayExist(problem, interpretation, target);
1043 // Type consistency
1044 find mayInstanceOfFunctionalData_class(problem,interpretation,source);
1045 find mayInstanceOfFAMTerminator_class(problem,interpretation,target);
1046 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
1047 // the upper bound of the multiplicity should be considered.
1048 numberOfExistingReferences == count find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,_);
1049 check(numberOfExistingReferences < 1);
1050 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
1051 // the upper bound of the opposite reference multiplicity should be considered.
1052 numberOfExistingOppositeReferences == count find mustInRelationdata_reference_FAMTerminator(problem,interpretation,target,_);
1053 check(numberOfExistingOppositeReferences < 1);
1054 // The reference is containment, then a new reference cannot be create if:
1055 // 1. Multiple parents
1056 neg find mustContains4(problem,interpretation,_,target);
1057 // 2. Circle in the containment hierarchy
1058 neg find mustTransitiveContains(source,target);
1059} or {
1060 find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,target);
1061}
1062/**
1063 * Matcher for detecting tuples t where []interface reference FunctionalData(source,target)
1064 */
1065private pattern mustInRelationinterface_reference_FunctionalData(
1066 problem:LogicProblem, interpretation:PartialInterpretation,
1067 source: DefinedElement, target:DefinedElement)
1068{
1069 find interpretation(problem,interpretation);
1070 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
1071 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface reference FunctionalData");
1072 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
1073 BinaryElementRelationLink.param1(link,source);
1074 BinaryElementRelationLink.param2(link,target);
1075}
1076/**
1077 * Matcher for detecting tuples t where <>interface reference FunctionalData(source,target)
1078 */
1079private pattern mayInRelationinterface_reference_FunctionalData(
1080 problem:LogicProblem, interpretation:PartialInterpretation,
1081 source: DefinedElement, target:DefinedElement)
1082{
1083 find interpretation(problem,interpretation);
1084 // The two endpoint of the link have to exist
1085 find mayExist(problem, interpretation, source);
1086 find mayExist(problem, interpretation, target);
1087 // Type consistency
1088 find mayInstanceOfFunctionalData_class(problem,interpretation,source);
1089 find mayInstanceOfFunctionalInterface_class(problem,interpretation,target);
1090 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
1091 // the upper bound of the multiplicity should be considered.
1092 numberOfExistingReferences == count find mustInRelationinterface_reference_FunctionalData(problem,interpretation,source,_);
1093 check(numberOfExistingReferences < 1);
1094 // The eOpposite of the reference is containment, then a referene cannot be created if
1095 // 1. Multiple parents
1096 neg find mustContains4(problem,interpretation,source,_);
1097 // 2. Circle in the containment hierarchy
1098 neg find mustTransitiveContains(source,target);
1099} or {
1100 find mustInRelationinterface_reference_FunctionalData(problem,interpretation,source,target);
1101}
1102/**
1103 * Matcher for detecting tuples t where []type attribute Function(source,target)
1104 */
1105 private pattern mustInRelationtype_attribute_Function(
1106 problem:LogicProblem, interpretation:PartialInterpretation,
1107 source: DefinedElement, target:DefinedElement)
1108 {
1109 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_type(problem,interpretation,source,target);
1110 }
1111/**
1112 * Matcher for detecting tuples t where []type attribute Function(source,target)
1113 */
1114 private pattern mayInRelationtype_attribute_Function(
1115 problem:LogicProblem, interpretation:PartialInterpretation,
1116 source: DefinedElement, target:DefinedElement)
1117 {
1118 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_type(problem,interpretation,source,target);
1119 }
1120
1121//////////
1122// 1.3 Relation Definition Indexers
1123//////////
1124// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test fam terminatorAndInformation
1125private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_terminatorAndInformation(
1126 problem:LogicProblem, interpretation:PartialInterpretation,
1127 var_T, var_I)
1128{
1129 find interpretation(problem,interpretation);
1130 find mustInstanceOfFAMTerminator_class(problem,interpretation,var_T);
1131 find mustInstanceOfInformationLink_class(problem,interpretation,var_I);
1132 // T is exported
1133 // I is exported
1134 find mustInstanceOfFunctionalOutput_class(problem,interpretation,var_Out);
1135 find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,var_Out,var_virtual0);
1136 find mustInstanceOfInformationLink_class(problem,interpretation,var_virtual0);
1137 var_virtual0 == var_I;
1138 find mustInstanceOfFunctionalOutput_class(problem,interpretation,var_Out);
1139 find mustInRelationterminator_reference_FunctionalData(problem,interpretation,var_Out,var_virtual1);
1140 find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1);
1141 var_virtual1 == var_T;
1142}or{
1143 find interpretation(problem,interpretation);
1144 find mustInstanceOfFAMTerminator_class(problem,interpretation,var_T);
1145 find mustInstanceOfInformationLink_class(problem,interpretation,var_I);
1146 // T is exported
1147 // I is exported
1148 find mustInstanceOfInformationLink_class(problem,interpretation,var_I);
1149 find mustInRelationto_reference_InformationLink(problem,interpretation,var_I,var_virtual0);
1150 find mustInstanceOfFunctionalInput_class(problem,interpretation,var_virtual0);
1151 var_virtual0 == var_In;
1152 find mustInstanceOfFunctionalInput_class(problem,interpretation,var_In);
1153 find mustInRelationterminator_reference_FunctionalData(problem,interpretation,var_In,var_virtual1);
1154 find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1);
1155 var_virtual1 == var_T;
1156}
1157private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_terminatorAndInformation(
1158 problem:LogicProblem, interpretation:PartialInterpretation,
1159 var_T, var_I)
1160{
1161 find interpretation(problem,interpretation);
1162 find mayInstanceOfFAMTerminator_class(problem,interpretation,var_T);
1163 find mayInstanceOfInformationLink_class(problem,interpretation,var_I);
1164 // T is exported
1165 // I is exported
1166 find mayInstanceOfFunctionalOutput_class(problem,interpretation,var_Out);
1167 find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,var_Out,var_virtual0);
1168 find mayInstanceOfInformationLink_class(problem,interpretation,var_virtual0);
1169 find mayEquivalent(problem, interpretation, var_virtual0, var_I);
1170 find mayInstanceOfFunctionalOutput_class(problem,interpretation,var_Out);
1171 find mayInRelationterminator_reference_FunctionalData(problem,interpretation,var_Out,var_virtual1);
1172 find mayInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1);
1173 find mayEquivalent(problem, interpretation, var_virtual1, var_T);
1174}or{
1175 find interpretation(problem,interpretation);
1176 find mayInstanceOfFAMTerminator_class(problem,interpretation,var_T);
1177 find mayInstanceOfInformationLink_class(problem,interpretation,var_I);
1178 // T is exported
1179 // I is exported
1180 find mayInstanceOfInformationLink_class(problem,interpretation,var_I);
1181 find mayInRelationto_reference_InformationLink(problem,interpretation,var_I,var_virtual0);
1182 find mayInstanceOfFunctionalInput_class(problem,interpretation,var_virtual0);
1183 find mayEquivalent(problem, interpretation, var_virtual0, var_In);
1184 find mayInstanceOfFunctionalInput_class(problem,interpretation,var_In);
1185 find mayInRelationterminator_reference_FunctionalData(problem,interpretation,var_In,var_virtual1);
1186 find mayInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1);
1187 find mayEquivalent(problem, interpretation, var_virtual1, var_T);
1188}
1189private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_terminatorAndInformation(
1190 problem:LogicProblem, interpretation:PartialInterpretation,
1191 var_T, var_I)
1192{
1193 find interpretation(problem,interpretation);
1194 find mustInstanceOfFAMTerminator_class(problem,interpretation,var_T);
1195 find mustInstanceOfInformationLink_class(problem,interpretation,var_I);
1196 // T is exported
1197 // I is exported
1198 find mustInstanceOfFunctionalOutput_class(problem,interpretation,var_Out);
1199 find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,var_Out,var_virtual0);
1200 find mustInstanceOfInformationLink_class(problem,interpretation,var_virtual0);
1201 var_virtual0 == var_I;
1202 find mustInstanceOfFunctionalOutput_class(problem,interpretation,var_Out);
1203 find mustInRelationterminator_reference_FunctionalData(problem,interpretation,var_Out,var_virtual1);
1204 find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1);
1205 var_virtual1 == var_T;
1206}or{
1207 find interpretation(problem,interpretation);
1208 find mustInstanceOfFAMTerminator_class(problem,interpretation,var_T);
1209 find mustInstanceOfInformationLink_class(problem,interpretation,var_I);
1210 // T is exported
1211 // I is exported
1212 find mustInstanceOfInformationLink_class(problem,interpretation,var_I);
1213 find mustInRelationto_reference_InformationLink(problem,interpretation,var_I,var_virtual0);
1214 find mustInstanceOfFunctionalInput_class(problem,interpretation,var_virtual0);
1215 var_virtual0 == var_In;
1216 find mustInstanceOfFunctionalInput_class(problem,interpretation,var_In);
1217 find mustInRelationterminator_reference_FunctionalData(problem,interpretation,var_In,var_virtual1);
1218 find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1);
1219 var_virtual1 == var_T;
1220}
1221// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test fam type
1222private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_type(
1223 problem:LogicProblem, interpretation:PartialInterpretation,
1224 var_This, var_Target)
1225{
1226 find interpretation(problem,interpretation);
1227 find mustInstanceOfFunction_class(problem,interpretation,var_This);
1228 // type constraint is enforced by construction
1229 // This is exported
1230 // Target is exported
1231 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(problem,interpretation,_var__Model,var_This);
1232 var_virtual0 == const_Root_FunctionType;DefinedElement.name(const_Root_FunctionType,"Root FunctionType"); //LogicProblem.elements(problem,const_Root_FunctionType);
1233 var_Target == var_virtual0;
1234}or{
1235 find interpretation(problem,interpretation);
1236 find mustInstanceOfFunction_class(problem,interpretation,var_This);
1237 // type constraint is enforced by construction
1238 // This is exported
1239 // Target is exported
1240 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,_var__Child,var_This);
1241 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(problem,interpretation,_var__Model,var_This);
1242 var_virtual0 == const_Leaf_FunctionType;DefinedElement.name(const_Leaf_FunctionType,"Leaf FunctionType"); //LogicProblem.elements(problem,const_Leaf_FunctionType);
1243 var_Target == var_virtual0;
1244}or{
1245 find interpretation(problem,interpretation);
1246 find mustInstanceOfFunction_class(problem,interpretation,var_This);
1247 // type constraint is enforced by construction
1248 // This is exported
1249 // Target is exported
1250 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,var_This,_var__Par);
1251 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,_var__Child,var_This);
1252 var_virtual0 == const_Intermediate_FunctionType;DefinedElement.name(const_Intermediate_FunctionType,"Intermediate FunctionType"); //LogicProblem.elements(problem,const_Intermediate_FunctionType);
1253 var_Target == var_virtual0;
1254}
1255private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_type(
1256 problem:LogicProblem, interpretation:PartialInterpretation,
1257 var_This, var_Target)
1258{
1259 find interpretation(problem,interpretation);
1260 find mayInstanceOfFunction_class(problem,interpretation,var_This);
1261 // type constraint is enforced by construction
1262 // This is exported
1263 // Target is exported
1264 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(problem,interpretation,_var__Model,var_This);
1265 var_virtual0 == const_Root_FunctionType;DefinedElement.name(const_Root_FunctionType,"Root FunctionType"); //LogicProblem.elements(problem,const_Root_FunctionType);
1266 find mayEquivalent(problem, interpretation, var_Target, var_virtual0);
1267}or{
1268 find interpretation(problem,interpretation);
1269 find mayInstanceOfFunction_class(problem,interpretation,var_This);
1270 // type constraint is enforced by construction
1271 // This is exported
1272 // Target is exported
1273 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,_var__Child,var_This);
1274 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(problem,interpretation,_var__Model,var_This);
1275 var_virtual0 == const_Leaf_FunctionType;DefinedElement.name(const_Leaf_FunctionType,"Leaf FunctionType"); //LogicProblem.elements(problem,const_Leaf_FunctionType);
1276 find mayEquivalent(problem, interpretation, var_Target, var_virtual0);
1277}or{
1278 find interpretation(problem,interpretation);
1279 find mayInstanceOfFunction_class(problem,interpretation,var_This);
1280 // type constraint is enforced by construction
1281 // This is exported
1282 // Target is exported
1283 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,var_This,_var__Par);
1284 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,_var__Child,var_This);
1285 var_virtual0 == const_Intermediate_FunctionType;DefinedElement.name(const_Intermediate_FunctionType,"Intermediate FunctionType"); //LogicProblem.elements(problem,const_Intermediate_FunctionType);
1286 find mayEquivalent(problem, interpretation, var_Target, var_virtual0);
1287}
1288private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_type(
1289 problem:LogicProblem, interpretation:PartialInterpretation,
1290 var_This, var_Target)
1291{
1292 find interpretation(problem,interpretation);
1293 find mustInstanceOfFunction_class(problem,interpretation,var_This);
1294 // type constraint is enforced by construction
1295 // This is exported
1296 // Target is exported
1297 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(problem,interpretation,_var__Model,var_This);
1298 var_virtual0 == const_Root_FunctionType;DefinedElement.name(const_Root_FunctionType,"Root FunctionType"); //LogicProblem.elements(problem,const_Root_FunctionType);
1299 var_Target == var_virtual0;
1300}or{
1301 find interpretation(problem,interpretation);
1302 find mustInstanceOfFunction_class(problem,interpretation,var_This);
1303 // type constraint is enforced by construction
1304 // This is exported
1305 // Target is exported
1306 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,_var__Child,var_This);
1307 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(problem,interpretation,_var__Model,var_This);
1308 var_virtual0 == const_Leaf_FunctionType;DefinedElement.name(const_Leaf_FunctionType,"Leaf FunctionType"); //LogicProblem.elements(problem,const_Leaf_FunctionType);
1309 var_Target == var_virtual0;
1310}or{
1311 find interpretation(problem,interpretation);
1312 find mustInstanceOfFunction_class(problem,interpretation,var_This);
1313 // type constraint is enforced by construction
1314 // This is exported
1315 // Target is exported
1316 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,var_This,_var__Par);
1317 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,_var__Child,var_This);
1318 var_virtual0 == const_Intermediate_FunctionType;DefinedElement.name(const_Intermediate_FunctionType,"Intermediate FunctionType"); //LogicProblem.elements(problem,const_Intermediate_FunctionType);
1319 var_Target == var_virtual0;
1320}
1321// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test fam rootElements
1322private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(
1323 problem:LogicProblem, interpretation:PartialInterpretation,
1324 var_Model, var_Root)
1325{
1326 find interpretation(problem,interpretation);
1327 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Model);
1328 find mustInstanceOfFunction_class(problem,interpretation,var_Root);
1329 // Model is exported
1330 // Root is exported
1331 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Model);
1332 find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,var_Model,var_virtual0);
1333 find mustInstanceOfFunctionalElement_class(problem,interpretation,var_virtual0);
1334 var_virtual0 == var_Root;
1335}
1336private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(
1337 problem:LogicProblem, interpretation:PartialInterpretation,
1338 var_Model, var_Root)
1339{
1340 find interpretation(problem,interpretation);
1341 find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Model);
1342 find mayInstanceOfFunction_class(problem,interpretation,var_Root);
1343 // Model is exported
1344 // Root is exported
1345 find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Model);
1346 find mayInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,var_Model,var_virtual0);
1347 find mayInstanceOfFunctionalElement_class(problem,interpretation,var_virtual0);
1348 find mayEquivalent(problem, interpretation, var_virtual0, var_Root);
1349}
1350private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(
1351 problem:LogicProblem, interpretation:PartialInterpretation,
1352 var_Model, var_Root)
1353{
1354 find interpretation(problem,interpretation);
1355 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Model);
1356 find mustInstanceOfFunction_class(problem,interpretation,var_Root);
1357 // Model is exported
1358 // Root is exported
1359 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Model);
1360 find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,var_Model,var_virtual0);
1361 find mustInstanceOfFunctionalElement_class(problem,interpretation,var_virtual0);
1362 var_virtual0 == var_Root;
1363}
1364// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test fam parent
1365private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(
1366 problem:LogicProblem, interpretation:PartialInterpretation,
1367 var_Func, var_Par)
1368{
1369 find interpretation(problem,interpretation);
1370 find mustInstanceOfFunction_class(problem,interpretation,var_Func);
1371 find mustInstanceOfFunction_class(problem,interpretation,var_Par);
1372 // Func is exported
1373 // Par is exported
1374 find mustInstanceOfFunction_class(problem,interpretation,var_Func);
1375 find mustInRelationparent_reference_FunctionalElement(problem,interpretation,var_Func,var_virtual0);
1376 find mustInstanceOfFunction_class(problem,interpretation,var_virtual0);
1377 var_virtual0 == var_Par;
1378}
1379private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(
1380 problem:LogicProblem, interpretation:PartialInterpretation,
1381 var_Func, var_Par)
1382{
1383 find interpretation(problem,interpretation);
1384 find mayInstanceOfFunction_class(problem,interpretation,var_Func);
1385 find mayInstanceOfFunction_class(problem,interpretation,var_Par);
1386 // Func is exported
1387 // Par is exported
1388 find mayInstanceOfFunction_class(problem,interpretation,var_Func);
1389 find mayInRelationparent_reference_FunctionalElement(problem,interpretation,var_Func,var_virtual0);
1390 find mayInstanceOfFunction_class(problem,interpretation,var_virtual0);
1391 find mayEquivalent(problem, interpretation, var_virtual0, var_Par);
1392}
1393private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(
1394 problem:LogicProblem, interpretation:PartialInterpretation,
1395 var_Func, var_Par)
1396{
1397 find interpretation(problem,interpretation);
1398 find mustInstanceOfFunction_class(problem,interpretation,var_Func);
1399 find mustInstanceOfFunction_class(problem,interpretation,var_Par);
1400 // Func is exported
1401 // Par is exported
1402 find mustInstanceOfFunction_class(problem,interpretation,var_Func);
1403 find mustInRelationparent_reference_FunctionalElement(problem,interpretation,var_Func,var_virtual0);
1404 find mustInstanceOfFunction_class(problem,interpretation,var_virtual0);
1405 var_virtual0 == var_Par;
1406}
1407// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test fam model
1408private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_model(
1409 problem:LogicProblem, interpretation:PartialInterpretation,
1410 var_This, var_Target)
1411{
1412 find interpretation(problem,interpretation);
1413 find mustInstanceOfFunctionalElement_class(problem,interpretation,var_This);
1414 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Target);
1415 // This is exported
1416 // Target is exported
1417 find mustInstanceOfFunctionalElement_class(problem,interpretation,var_This);
1418 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Target);
1419}
1420private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_model(
1421 problem:LogicProblem, interpretation:PartialInterpretation,
1422 var_This, var_Target)
1423{
1424 find interpretation(problem,interpretation);
1425 find mayInstanceOfFunctionalElement_class(problem,interpretation,var_This);
1426 find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Target);
1427 // This is exported
1428 // Target is exported
1429 find mayInstanceOfFunctionalElement_class(problem,interpretation,var_This);
1430 find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Target);
1431}
1432private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_model(
1433 problem:LogicProblem, interpretation:PartialInterpretation,
1434 var_This, var_Target)
1435{
1436 find interpretation(problem,interpretation);
1437 find mustInstanceOfFunctionalElement_class(problem,interpretation,var_This);
1438 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Target);
1439 // This is exported
1440 // Target is exported
1441 find mustInstanceOfFunctionalElement_class(problem,interpretation,var_This);
1442 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Target);
1443}
1444
1445//////////
1446// 1.4 Containment Indexer
1447//////////
1448private pattern mustContains2(source: DefinedElement, target: DefinedElement) {
1449 find mustContains4(_,_,source,target);
1450}
1451
1452private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation,
1453 source: DefinedElement, target: DefinedElement)
1454 { find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,target); }or
1455
1456 { find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,source,target); }or
1457
1458 { find mustInRelationsubElements_reference_Function(problem,interpretation,source,target); }or
1459
1460 { find mustInRelationdata_reference_FunctionalInterface(problem,interpretation,source,target); }or
1461
1462 { find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,source,target); }or
1463
1464 { find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,target); }
1465
1466private pattern mustTransitiveContains(source,target) {
1467 find mustContains2+(source,target);
1468}
1469
1470//////////
1471// 2. Invalidation Indexers
1472//////////
1473// 2.1 Invalidated by WF Queries
1474//////////
1475pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_terminatorAndInformation(problem:LogicProblem, interpretation:PartialInterpretation,
1476 var_T, var_I)
1477{
1478 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_terminatorAndInformation(problem,interpretation,var_T,var_I);
1479}
1480
1481//////////
1482// 3. Unfinishedness Indexers
1483//////////
1484// 3.1 Unfinishedness Measured by Multiplicity
1485//////////
1486pattern unfinishedLowerMultiplicity_to_reference_InformationLink(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) {
1487 find interpretation(problem,interpretation);
1488 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
1489 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"to reference InformationLink");
1490 find mustInstanceOfInformationLink_class(problem,interpretation,object);
1491 numberOfExistingReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,object,_);
1492 check(numberOfExistingReferences < 1);
1493 missingMultiplicity == eval(1-numberOfExistingReferences);
1494}
1495
1496//////////
1497// 3.2 Unfinishedness Measured by WF Queries
1498//////////
1499pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_terminatorAndInformation(problem:LogicProblem, interpretation:PartialInterpretation,
1500 var_T, var_I)
1501{
1502 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_terminatorAndInformation(problem,interpretation,var_T,var_I);
1503}
1504
1505//////////
1506// 4. Refinement Indexers
1507//////////
1508// 4.1 Object constructors
1509//////////
1510private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation)
1511{
1512 find interpretation(problem,interpretation);
1513 find mustInstanceOfFunctionalElement_class(problem,interpretation,root);
1514 find mustExist(problem, interpretation, root);
1515}or{
1516 find interpretation(problem,interpretation);
1517 find mustInstanceOfFunctionalInput_class(problem,interpretation,root);
1518 find mustExist(problem, interpretation, root);
1519}or{
1520 find interpretation(problem,interpretation);
1521 find mustInstanceOfFunctionalOutput_class(problem,interpretation,root);
1522 find mustExist(problem, interpretation, root);
1523}or{
1524 find interpretation(problem,interpretation);
1525 find mustInstanceOfInformationLink_class(problem,interpretation,root);
1526 find mustExist(problem, interpretation, root);
1527}or{
1528 find interpretation(problem,interpretation);
1529 find mustInstanceOfFAMTerminator_class(problem,interpretation,root);
1530 find mustExist(problem, interpretation, root);
1531}or{
1532 find interpretation(problem,interpretation);
1533 find mustInstanceOfFunctionalData_class(problem,interpretation,root);
1534 find mustExist(problem, interpretation, root);
1535}or{
1536 find interpretation(problem,interpretation);
1537 find mustInstanceOfFunction_class(problem,interpretation,root);
1538 find mustExist(problem, interpretation, root);
1539}or{
1540 find interpretation(problem,interpretation);
1541 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,root);
1542 find mustExist(problem, interpretation, root);
1543}or{
1544 find interpretation(problem,interpretation);
1545 find mustInstanceOfFunctionalInterface_class(problem,interpretation,root);
1546 find mustExist(problem, interpretation, root);
1547}or{
1548 find interpretation(problem,interpretation);
1549 find mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem,interpretation,root);
1550 find mustExist(problem, interpretation, root);
1551}or{
1552 find interpretation(problem,interpretation);
1553 find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,root);
1554 find mustExist(problem, interpretation, root);
1555}
1556pattern createObject_FAMTerminator_class_by_terminator_reference_FunctionalData_with_data_reference_FAMTerminator(
1557 problem:LogicProblem, interpretation:PartialInterpretation,
1558 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
1559 container:DefinedElement)
1560{
1561 find interpretation(problem,interpretation);
1562 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
1563 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class");
1564 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
1565 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"terminator reference FunctionalData");
1566 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
1567 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"data reference FAMTerminator");
1568 find mustInstanceOfFunctionalData_class(problem,interpretation,container);
1569 find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject);
1570 find mayInRelationterminator_reference_FunctionalData(problem,interpretation,container,newObject);
1571 find mustExist(problem, interpretation, container);
1572 neg find mustExist(problem, interpretation, newObject);
1573}
1574pattern createObject_FAMTerminator_class(
1575 problem:LogicProblem, interpretation:PartialInterpretation,
1576 typeInterpretation:PartialComplexTypeInterpretation)
1577{
1578 find interpretation(problem,interpretation);
1579 neg find hasElementInContainment(problem,interpretation);
1580 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
1581 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class");
1582 find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject);
1583 find mayExist(problem, interpretation, newObject);
1584 neg find mustExist(problem, interpretation, newObject);
1585}
1586pattern createObject_FunctionalInput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData(
1587 problem:LogicProblem, interpretation:PartialInterpretation,
1588 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
1589 container:DefinedElement)
1590{
1591 find interpretation(problem,interpretation);
1592 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
1593 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class");
1594 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
1595 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface");
1596 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
1597 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData");
1598 find mustInstanceOfFunctionalInterface_class(problem,interpretation,container);
1599 find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject);
1600 find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject);
1601 find mustExist(problem, interpretation, container);
1602 neg find mustExist(problem, interpretation, newObject);
1603}
1604pattern createObject_FunctionalInput_class(
1605 problem:LogicProblem, interpretation:PartialInterpretation,
1606 typeInterpretation:PartialComplexTypeInterpretation)
1607{
1608 find interpretation(problem,interpretation);
1609 neg find hasElementInContainment(problem,interpretation);
1610 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
1611 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class");
1612 find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject);
1613 find mayExist(problem, interpretation, newObject);
1614 neg find mustExist(problem, interpretation, newObject);
1615}
1616pattern createObject_FunctionalInterface_class_by_interface_reference_FunctionalElement_with_element_reference_FunctionalInterface(
1617 problem:LogicProblem, interpretation:PartialInterpretation,
1618 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
1619 container:DefinedElement)
1620{
1621 find interpretation(problem,interpretation);
1622 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
1623 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class");
1624 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
1625 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"interface reference FunctionalElement");
1626 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
1627 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"element reference FunctionalInterface");
1628 find mustInstanceOfFunctionalElement_class(problem,interpretation,container);
1629 find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject);
1630 find mayInRelationinterface_reference_FunctionalElement(problem,interpretation,container,newObject);
1631 find mustExist(problem, interpretation, container);
1632 neg find mustExist(problem, interpretation, newObject);
1633}
1634pattern createObject_FunctionalInterface_class(
1635 problem:LogicProblem, interpretation:PartialInterpretation,
1636 typeInterpretation:PartialComplexTypeInterpretation)
1637{
1638 find interpretation(problem,interpretation);
1639 neg find hasElementInContainment(problem,interpretation);
1640 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
1641 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class");
1642 find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject);
1643 find mayExist(problem, interpretation, newObject);
1644 neg find mustExist(problem, interpretation, newObject);
1645}
1646pattern createObject_FunctionalOutput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData(
1647 problem:LogicProblem, interpretation:PartialInterpretation,
1648 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
1649 container:DefinedElement)
1650{
1651 find interpretation(problem,interpretation);
1652 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
1653 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class");
1654 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
1655 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface");
1656 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
1657 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData");
1658 find mustInstanceOfFunctionalInterface_class(problem,interpretation,container);
1659 find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject);
1660 find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject);
1661 find mustExist(problem, interpretation, container);
1662 neg find mustExist(problem, interpretation, newObject);
1663}
1664pattern createObject_FunctionalOutput_class(
1665 problem:LogicProblem, interpretation:PartialInterpretation,
1666 typeInterpretation:PartialComplexTypeInterpretation)
1667{
1668 find interpretation(problem,interpretation);
1669 neg find hasElementInContainment(problem,interpretation);
1670 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
1671 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class");
1672 find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject);
1673 find mayExist(problem, interpretation, newObject);
1674 neg find mustExist(problem, interpretation, newObject);
1675}
1676pattern createObject_InformationLink_class_by_outgoingLinks_reference_FunctionalOutput_with_from_reference_InformationLink(
1677 problem:LogicProblem, interpretation:PartialInterpretation,
1678 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
1679 container:DefinedElement)
1680{
1681 find interpretation(problem,interpretation);
1682 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
1683 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class");
1684 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
1685 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingLinks reference FunctionalOutput");
1686 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
1687 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"from reference InformationLink");
1688 find mustInstanceOfFunctionalOutput_class(problem,interpretation,container);
1689 find mayInstanceOfInformationLink_class(problem,interpretation,newObject);
1690 find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,container,newObject);
1691 find mustExist(problem, interpretation, container);
1692 neg find mustExist(problem, interpretation, newObject);
1693}
1694pattern createObject_InformationLink_class(
1695 problem:LogicProblem, interpretation:PartialInterpretation,
1696 typeInterpretation:PartialComplexTypeInterpretation)
1697{
1698 find interpretation(problem,interpretation);
1699 neg find hasElementInContainment(problem,interpretation);
1700 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
1701 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class");
1702 find mayInstanceOfInformationLink_class(problem,interpretation,newObject);
1703 find mayExist(problem, interpretation, newObject);
1704 neg find mustExist(problem, interpretation, newObject);
1705}
1706pattern createObject_FunctionalArchitectureModel_class_UndefinedPart(
1707 problem:LogicProblem, interpretation:PartialInterpretation,
1708 typeInterpretation:PartialComplexTypeInterpretation)
1709{
1710 find interpretation(problem,interpretation);
1711 neg find hasElementInContainment(problem,interpretation);
1712 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
1713 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalArchitectureModel class UndefinedPart");
1714 find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,newObject);
1715 find mayExist(problem, interpretation, newObject);
1716 neg find mustExist(problem, interpretation, newObject);
1717}
1718pattern createObject_Function_class_by_rootElements_reference_FunctionalArchitectureModel(
1719 problem:LogicProblem, interpretation:PartialInterpretation,
1720 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
1721 container:DefinedElement)
1722{
1723 find interpretation(problem,interpretation);
1724 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
1725 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class");
1726 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
1727 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"rootElements reference FunctionalArchitectureModel");
1728 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,container);
1729 find mayInstanceOfFunction_class(problem,interpretation,newObject);
1730 find mayInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,container,newObject);
1731 find mustExist(problem, interpretation, container);
1732 neg find mustExist(problem, interpretation, newObject);
1733}
1734pattern createObject_Function_class_by_subElements_reference_Function_with_parent_reference_FunctionalElement(
1735 problem:LogicProblem, interpretation:PartialInterpretation,
1736 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
1737 container:DefinedElement)
1738{
1739 find interpretation(problem,interpretation);
1740 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
1741 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class");
1742 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
1743 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"subElements reference Function");
1744 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
1745 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FunctionalElement");
1746 find mustInstanceOfFunction_class(problem,interpretation,container);
1747 find mayInstanceOfFunction_class(problem,interpretation,newObject);
1748 find mayInRelationsubElements_reference_Function(problem,interpretation,container,newObject);
1749 find mustExist(problem, interpretation, container);
1750 neg find mustExist(problem, interpretation, newObject);
1751}
1752pattern createObject_Function_class(
1753 problem:LogicProblem, interpretation:PartialInterpretation,
1754 typeInterpretation:PartialComplexTypeInterpretation)
1755{
1756 find interpretation(problem,interpretation);
1757 neg find hasElementInContainment(problem,interpretation);
1758 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
1759 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class");
1760 find mayInstanceOfFunction_class(problem,interpretation,newObject);
1761 find mayExist(problem, interpretation, newObject);
1762 neg find mustExist(problem, interpretation, newObject);
1763}
1764
1765//////////
1766// 4.2 Type refinement
1767//////////
1768pattern refineTypeTo_FAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
1769 find interpretation(problem,interpretation);
1770 PartialInterpretation.newElements(interpretation,element);
1771 find mayInstanceOfFAMTerminator_class(problem,interpretation,element);
1772 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
1773 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
1774 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
1775 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
1776 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
1777 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
1778}
1779pattern refineTypeTo_FunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
1780 find interpretation(problem,interpretation);
1781 PartialInterpretation.newElements(interpretation,element);
1782 find mayInstanceOfFunctionalInput_class(problem,interpretation,element);
1783 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
1784 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
1785 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
1786 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
1787 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
1788 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
1789 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
1790}
1791pattern refineTypeTo_FunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
1792 find interpretation(problem,interpretation);
1793 PartialInterpretation.newElements(interpretation,element);
1794 find mayInstanceOfFunctionalInterface_class(problem,interpretation,element);
1795 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
1796 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
1797 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
1798 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
1799 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
1800 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
1801}
1802pattern refineTypeTo_FunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
1803 find interpretation(problem,interpretation);
1804 PartialInterpretation.newElements(interpretation,element);
1805 find mayInstanceOfFunctionalOutput_class(problem,interpretation,element);
1806 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
1807 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
1808 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
1809 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
1810 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
1811 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
1812 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
1813}
1814pattern refineTypeTo_InformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
1815 find interpretation(problem,interpretation);
1816 PartialInterpretation.newElements(interpretation,element);
1817 find mayInstanceOfInformationLink_class(problem,interpretation,element);
1818 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
1819 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
1820 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
1821 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
1822 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
1823 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
1824}
1825pattern refineTypeTo_FunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
1826 find interpretation(problem,interpretation);
1827 PartialInterpretation.newElements(interpretation,element);
1828 find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element);
1829 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
1830 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
1831 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
1832 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
1833 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
1834 neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element);
1835}
1836pattern refineTypeTo_Function_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
1837 find interpretation(problem,interpretation);
1838 PartialInterpretation.newElements(interpretation,element);
1839 find mayInstanceOfFunction_class(problem,interpretation,element);
1840 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
1841 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
1842 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
1843 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
1844 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
1845 neg find mustInstanceOfFunction_class(problem,interpretation,element);
1846}
1847
1848//////////
1849// 4.3 Relation refinement
1850//////////
1851pattern refineRelation_model_reference_FunctionalElement(
1852 problem:LogicProblem, interpretation:PartialInterpretation,
1853 relationIterpretation:PartialRelationInterpretation,
1854 from: DefinedElement, to: DefinedElement)
1855{
1856 find interpretation(problem,interpretation);
1857 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
1858 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement");
1859 find mustExist(problem, interpretation, from);
1860 find mustExist(problem, interpretation, to);
1861 find mustInstanceOfFunctionalElement_class(problem,interpretation,from);
1862 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,to);
1863 find mayInRelationmodel_reference_FunctionalElement(problem,interpretation,from,to);
1864 neg find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,from,to);
1865}
1866pattern refineRelation_IncomingLinks_reference_FunctionalInput_and_to_reference_InformationLink(
1867 problem:LogicProblem, interpretation:PartialInterpretation,
1868 relationIterpretation:PartialRelationInterpretation, oppositeInterpretation:PartialRelationInterpretation,
1869 from: DefinedElement, to: DefinedElement)
1870{
1871 find interpretation(problem,interpretation);
1872 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
1873 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"IncomingLinks reference FunctionalInput");
1874 PartialInterpretation.partialrelationinterpretation(interpretation,oppositeInterpretation);
1875 PartialRelationInterpretation.interpretationOf.name(oppositeInterpretation,"to reference InformationLink");
1876 find mustExist(problem, interpretation, from);
1877 find mustExist(problem, interpretation, to);
1878 find mustInstanceOfFunctionalInput_class(problem,interpretation,from);
1879 find mustInstanceOfInformationLink_class(problem,interpretation,to);
1880 find mayInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,from,to);
1881 neg find mustInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,from,to);
1882}
1883pattern refineRelation_type_attribute_Function(
1884 problem:LogicProblem, interpretation:PartialInterpretation,
1885 relationIterpretation:PartialRelationInterpretation,
1886 from: DefinedElement, to: DefinedElement)
1887{
1888 find interpretation(problem,interpretation);
1889 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
1890 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function");
1891 find mustExist(problem, interpretation, from);
1892 find mustExist(problem, interpretation, to);
1893 find mustInstanceOfFunction_class(problem,interpretation,from);
1894 find mustInstanceOfFunctionType_enum(problem,interpretation,to);
1895 find mayInRelationtype_attribute_Function(problem,interpretation,from,to);
1896 neg find mustInRelationtype_attribute_Function(problem,interpretation,from,to);
1897}import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage"
1898import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem"
1899import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language"
1900
1901//////////
1902// 0. Util
1903//////////
1904private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) {
1905 PartialInterpretation.problem(interpretation,problem);
1906}
1907
1908/////////////////////////
1909// 0.1 Existence
1910/////////////////////////
1911private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
1912 find interpretation(problem,interpretation);
1913 LogicProblem.elements(problem,element);
1914} or {
1915 find interpretation(problem,interpretation);
1916 PartialInterpretation.newElements(interpretation,element);
1917}
1918
1919private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
1920 find mustExist(problem,interpretation,element);
1921} or {
1922 find interpretation(problem,interpretation);
1923 neg find elementCloseWorld(element);
1924 PartialInterpretation.openWorldElements(interpretation,element);
1925}
1926
1927private pattern elementCloseWorld(element:DefinedElement) {
1928 PartialInterpretation.openWorldElements(i,element);
1929 PartialInterpretation.maxNewElements(i,0);
1930} or {
1931 Scope.targetTypeInterpretation(scope,interpretation);
1932 PartialTypeInterpratation.elements(interpretation,element);
1933 Scope.maxNewElements(scope,0);
1934}
1935
1936////////////////////////
1937// 0.2 Equivalence
1938////////////////////////
1939pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) {
1940 find mayExist(problem,interpretation,a);
1941 find mayExist(problem,interpretation,b);
1942 a == b;
1943}
1944
1945////////////////////////
1946// 0.3 Required Patterns by TypeIndexer
1947////////////////////////
1948private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) {
1949 find interpretation(problem,interpretation);
1950 LogicProblem.types(problem,type);
1951 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
1952 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
1953}
1954
1955private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) {
1956 find interpretation(problem,interpretation);
1957 LogicProblem.types(problem,type);
1958 TypeDefinition.elements(type,element);
1959} or {
1960 find interpretation(problem,interpretation);
1961 find typeInterpretation(problem,interpretation,type,typeInterpretation);
1962 PartialComplexTypeInterpretation.elements(typeInterpretation,element);
1963}
1964
1965private pattern isPrimitive(element: PrimitiveElement) {
1966 PrimitiveElement(element);
1967}
1968
1969//////////
1970// 1. Problem-Specific Base Indexers
1971//////////
1972// 1.1 Type Indexers
1973//////////
1974// 1.1.1 primitive Type Indexers
1975//////////
1976
1977//////////
1978// 1.1.2 domain-specific Type Indexers
1979//////////
1980/**
1981 * An element must be an instance of type "FunctionalElement class".
1982 */
1983private pattern mustInstanceOfFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
1984 Type.name(type,"FunctionalElement class");
1985 find directInstanceOf(problem,interpretation,element,type);
1986}
1987private pattern scopeDisallowsNewFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation) {
1988 find interpretation(problem,interpretation);
1989 PartialInterpretation.scopes(interpretation,scope);
1990 Scope.targetTypeInterpretation(scope,typeInterpretation);
1991 Scope.maxNewElements(scope,0);
1992 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
1993 Type.name(type,"FunctionalElement class");
1994}
1995
1996/**
1997 * An element may be an instance of type "FunctionalElement class".
1998 */
1999private pattern mayInstanceOfFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
2000{
2001 find interpretation(problem,interpretation);
2002 PartialInterpretation.newElements(interpretation,element);
2003 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
2004 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
2005 neg find mustInstanceOfFunction_class(problem,interpretation,element);
2006 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
2007 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
2008 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
2009 neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation);
2010 neg find isPrimitive(element);
2011} or {
2012 find interpretation(problem,interpretation);
2013 PartialInterpretation.openWorldElements(interpretation,element);
2014 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
2015 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
2016 neg find mustInstanceOfFunction_class(problem,interpretation,element);
2017 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
2018 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
2019 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
2020 neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation);
2021 neg find isPrimitive(element);
2022} or
2023{ find mustInstanceOfFunctionalElement_class(problem,interpretation,element); }
2024/**
2025 * An element must be an instance of type "FunctionalArchitectureModel class".
2026 */
2027private pattern mustInstanceOfFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
2028 Type.name(type,"FunctionalArchitectureModel class");
2029 find directInstanceOf(problem,interpretation,element,type);
2030}
2031private pattern scopeDisallowsNewFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation) {
2032 find interpretation(problem,interpretation);
2033 PartialInterpretation.scopes(interpretation,scope);
2034 Scope.targetTypeInterpretation(scope,typeInterpretation);
2035 Scope.maxNewElements(scope,0);
2036 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
2037 Type.name(type,"FunctionalArchitectureModel class");
2038}
2039
2040/**
2041 * An element may be an instance of type "FunctionalArchitectureModel class".
2042 */
2043private pattern mayInstanceOfFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
2044{
2045 find interpretation(problem,interpretation);
2046 PartialInterpretation.newElements(interpretation,element);
2047 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
2048 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
2049 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
2050 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
2051 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
2052 neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element);
2053 neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation);
2054 neg find isPrimitive(element);
2055} or {
2056 find interpretation(problem,interpretation);
2057 PartialInterpretation.openWorldElements(interpretation,element);
2058 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
2059 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
2060 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
2061 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
2062 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
2063 neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element);
2064 neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation);
2065 neg find isPrimitive(element);
2066} or
2067{ find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); }
2068/**
2069 * An element must be an instance of type "Function class".
2070 */
2071private pattern mustInstanceOfFunction_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
2072 Type.name(type,"Function class");
2073 find directInstanceOf(problem,interpretation,element,type);
2074}
2075private pattern scopeDisallowsNewFunction_class(problem:LogicProblem, interpretation:PartialInterpretation) {
2076 find interpretation(problem,interpretation);
2077 PartialInterpretation.scopes(interpretation,scope);
2078 Scope.targetTypeInterpretation(scope,typeInterpretation);
2079 Scope.maxNewElements(scope,0);
2080 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
2081 Type.name(type,"Function class");
2082}
2083
2084/**
2085 * An element may be an instance of type "Function class".
2086 */
2087private pattern mayInstanceOfFunction_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
2088{
2089 find interpretation(problem,interpretation);
2090 PartialInterpretation.newElements(interpretation,element);
2091 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
2092 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
2093 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
2094 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
2095 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
2096 neg find scopeDisallowsNewFunction_class(problem, interpretation);
2097 neg find isPrimitive(element);
2098} or {
2099 find interpretation(problem,interpretation);
2100 PartialInterpretation.openWorldElements(interpretation,element);
2101 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
2102 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
2103 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
2104 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
2105 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
2106 neg find scopeDisallowsNewFunction_class(problem, interpretation);
2107 neg find isPrimitive(element);
2108} or
2109{ find mustInstanceOfFunction_class(problem,interpretation,element); }
2110/**
2111 * An element must be an instance of type "FAMTerminator class".
2112 */
2113private pattern mustInstanceOfFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
2114 Type.name(type,"FAMTerminator class");
2115 find directInstanceOf(problem,interpretation,element,type);
2116}
2117private pattern scopeDisallowsNewFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation) {
2118 find interpretation(problem,interpretation);
2119 PartialInterpretation.scopes(interpretation,scope);
2120 Scope.targetTypeInterpretation(scope,typeInterpretation);
2121 Scope.maxNewElements(scope,0);
2122 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
2123 Type.name(type,"FAMTerminator class");
2124}
2125
2126/**
2127 * An element may be an instance of type "FAMTerminator class".
2128 */
2129private pattern mayInstanceOfFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
2130{
2131 find interpretation(problem,interpretation);
2132 PartialInterpretation.newElements(interpretation,element);
2133 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
2134 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
2135 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
2136 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
2137 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
2138 neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation);
2139 neg find isPrimitive(element);
2140} or {
2141 find interpretation(problem,interpretation);
2142 PartialInterpretation.openWorldElements(interpretation,element);
2143 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
2144 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
2145 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
2146 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
2147 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
2148 neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation);
2149 neg find isPrimitive(element);
2150} or
2151{ find mustInstanceOfFAMTerminator_class(problem,interpretation,element); }
2152/**
2153 * An element must be an instance of type "InformationLink class".
2154 */
2155private pattern mustInstanceOfInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
2156 Type.name(type,"InformationLink class");
2157 find directInstanceOf(problem,interpretation,element,type);
2158}
2159private pattern scopeDisallowsNewInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation) {
2160 find interpretation(problem,interpretation);
2161 PartialInterpretation.scopes(interpretation,scope);
2162 Scope.targetTypeInterpretation(scope,typeInterpretation);
2163 Scope.maxNewElements(scope,0);
2164 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
2165 Type.name(type,"InformationLink class");
2166}
2167
2168/**
2169 * An element may be an instance of type "InformationLink class".
2170 */
2171private pattern mayInstanceOfInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
2172{
2173 find interpretation(problem,interpretation);
2174 PartialInterpretation.newElements(interpretation,element);
2175 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
2176 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
2177 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
2178 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
2179 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
2180 neg find scopeDisallowsNewInformationLink_class(problem, interpretation);
2181 neg find isPrimitive(element);
2182} or {
2183 find interpretation(problem,interpretation);
2184 PartialInterpretation.openWorldElements(interpretation,element);
2185 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
2186 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
2187 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
2188 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
2189 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
2190 neg find scopeDisallowsNewInformationLink_class(problem, interpretation);
2191 neg find isPrimitive(element);
2192} or
2193{ find mustInstanceOfInformationLink_class(problem,interpretation,element); }
2194/**
2195 * An element must be an instance of type "FunctionalInterface class".
2196 */
2197private pattern mustInstanceOfFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
2198 Type.name(type,"FunctionalInterface class");
2199 find directInstanceOf(problem,interpretation,element,type);
2200}
2201private pattern scopeDisallowsNewFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation) {
2202 find interpretation(problem,interpretation);
2203 PartialInterpretation.scopes(interpretation,scope);
2204 Scope.targetTypeInterpretation(scope,typeInterpretation);
2205 Scope.maxNewElements(scope,0);
2206 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
2207 Type.name(type,"FunctionalInterface class");
2208}
2209
2210/**
2211 * An element may be an instance of type "FunctionalInterface class".
2212 */
2213private pattern mayInstanceOfFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
2214{
2215 find interpretation(problem,interpretation);
2216 PartialInterpretation.newElements(interpretation,element);
2217 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
2218 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
2219 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
2220 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
2221 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
2222 neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation);
2223 neg find isPrimitive(element);
2224} or {
2225 find interpretation(problem,interpretation);
2226 PartialInterpretation.openWorldElements(interpretation,element);
2227 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
2228 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
2229 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
2230 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
2231 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
2232 neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation);
2233 neg find isPrimitive(element);
2234} or
2235{ find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); }
2236/**
2237 * An element must be an instance of type "FunctionalInput class".
2238 */
2239private pattern mustInstanceOfFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
2240 Type.name(type,"FunctionalInput class");
2241 find directInstanceOf(problem,interpretation,element,type);
2242}
2243private pattern scopeDisallowsNewFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation) {
2244 find interpretation(problem,interpretation);
2245 PartialInterpretation.scopes(interpretation,scope);
2246 Scope.targetTypeInterpretation(scope,typeInterpretation);
2247 Scope.maxNewElements(scope,0);
2248 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
2249 Type.name(type,"FunctionalInput class");
2250}
2251
2252/**
2253 * An element may be an instance of type "FunctionalInput class".
2254 */
2255private pattern mayInstanceOfFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
2256{
2257 find interpretation(problem,interpretation);
2258 PartialInterpretation.newElements(interpretation,element);
2259 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
2260 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
2261 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
2262 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
2263 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
2264 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
2265 neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation);
2266 neg find isPrimitive(element);
2267} or {
2268 find interpretation(problem,interpretation);
2269 PartialInterpretation.openWorldElements(interpretation,element);
2270 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
2271 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
2272 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
2273 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
2274 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
2275 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
2276 neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation);
2277 neg find isPrimitive(element);
2278} or
2279{ find mustInstanceOfFunctionalInput_class(problem,interpretation,element); }
2280/**
2281 * An element must be an instance of type "FunctionalOutput class".
2282 */
2283private pattern mustInstanceOfFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
2284 Type.name(type,"FunctionalOutput class");
2285 find directInstanceOf(problem,interpretation,element,type);
2286}
2287private pattern scopeDisallowsNewFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation) {
2288 find interpretation(problem,interpretation);
2289 PartialInterpretation.scopes(interpretation,scope);
2290 Scope.targetTypeInterpretation(scope,typeInterpretation);
2291 Scope.maxNewElements(scope,0);
2292 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
2293 Type.name(type,"FunctionalOutput class");
2294}
2295
2296/**
2297 * An element may be an instance of type "FunctionalOutput class".
2298 */
2299private pattern mayInstanceOfFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
2300{
2301 find interpretation(problem,interpretation);
2302 PartialInterpretation.newElements(interpretation,element);
2303 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
2304 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
2305 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
2306 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
2307 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
2308 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
2309 neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation);
2310 neg find isPrimitive(element);
2311} or {
2312 find interpretation(problem,interpretation);
2313 PartialInterpretation.openWorldElements(interpretation,element);
2314 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
2315 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
2316 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
2317 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
2318 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
2319 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
2320 neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation);
2321 neg find isPrimitive(element);
2322} or
2323{ find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); }
2324/**
2325 * An element must be an instance of type "FunctionalData class".
2326 */
2327private pattern mustInstanceOfFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
2328 Type.name(type,"FunctionalData class");
2329 find directInstanceOf(problem,interpretation,element,type);
2330}
2331private pattern scopeDisallowsNewFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation) {
2332 find interpretation(problem,interpretation);
2333 PartialInterpretation.scopes(interpretation,scope);
2334 Scope.targetTypeInterpretation(scope,typeInterpretation);
2335 Scope.maxNewElements(scope,0);
2336 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
2337 Type.name(type,"FunctionalData class");
2338}
2339
2340/**
2341 * An element may be an instance of type "FunctionalData class".
2342 */
2343private pattern mayInstanceOfFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
2344{
2345 find interpretation(problem,interpretation);
2346 PartialInterpretation.newElements(interpretation,element);
2347 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
2348 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
2349 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
2350 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
2351 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
2352 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
2353 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
2354 neg find scopeDisallowsNewFunctionalData_class(problem, interpretation);
2355 neg find isPrimitive(element);
2356} or {
2357 find interpretation(problem,interpretation);
2358 PartialInterpretation.openWorldElements(interpretation,element);
2359 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
2360 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
2361 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
2362 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
2363 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
2364 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
2365 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
2366 neg find scopeDisallowsNewFunctionalData_class(problem, interpretation);
2367 neg find isPrimitive(element);
2368} or
2369{ find mustInstanceOfFunctionalData_class(problem,interpretation,element); }
2370/**
2371 * An element must be an instance of type "FunctionType enum".
2372 */
2373private pattern mustInstanceOfFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
2374 Type.name(type,"FunctionType enum");
2375 find directInstanceOf(problem,interpretation,element,type);
2376}
2377private pattern scopeDisallowsNewFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation) {
2378 find interpretation(problem,interpretation);
2379 PartialInterpretation.scopes(interpretation,scope);
2380 Scope.targetTypeInterpretation(scope,typeInterpretation);
2381 Scope.maxNewElements(scope,0);
2382 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
2383 Type.name(type,"FunctionType enum");
2384}
2385
2386/**
2387 * An element may be an instance of type "FunctionType enum".
2388 */
2389private pattern mayInstanceOfFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
2390{ find mustInstanceOfFunctionType_enum(problem,interpretation,element); }
2391/**
2392 * An element must be an instance of type "FunctionalArchitectureModel class DefinedPart".
2393 */
2394private pattern mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
2395 Type.name(type,"FunctionalArchitectureModel class DefinedPart");
2396 find directInstanceOf(problem,interpretation,element,type);
2397}
2398private pattern scopeDisallowsNewFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
2399 find interpretation(problem,interpretation);
2400 PartialInterpretation.scopes(interpretation,scope);
2401 Scope.targetTypeInterpretation(scope,typeInterpretation);
2402 Scope.maxNewElements(scope,0);
2403 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
2404 Type.name(type,"FunctionalArchitectureModel class DefinedPart");
2405}
2406
2407/**
2408 * An element may be an instance of type "FunctionalArchitectureModel class DefinedPart".
2409 */
2410private pattern mayInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
2411{ find mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem,interpretation,element); }
2412/**
2413 * An element must be an instance of type "FunctionalArchitectureModel class UndefinedPart".
2414 */
2415private pattern mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
2416 Type.name(type,"FunctionalArchitectureModel class UndefinedPart");
2417 find directInstanceOf(problem,interpretation,element,type);
2418}
2419private pattern scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
2420 find interpretation(problem,interpretation);
2421 PartialInterpretation.scopes(interpretation,scope);
2422 Scope.targetTypeInterpretation(scope,typeInterpretation);
2423 Scope.maxNewElements(scope,0);
2424 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
2425 Type.name(type,"FunctionalArchitectureModel class UndefinedPart");
2426}
2427
2428/**
2429 * An element may be an instance of type "FunctionalArchitectureModel class UndefinedPart".
2430 */
2431private pattern mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
2432{
2433 find interpretation(problem,interpretation);
2434 PartialInterpretation.newElements(interpretation,element);
2435 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
2436 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
2437 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
2438 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
2439 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
2440 neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation);
2441 neg find isPrimitive(element);
2442} or {
2443 find interpretation(problem,interpretation);
2444 PartialInterpretation.openWorldElements(interpretation,element);
2445 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
2446 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
2447 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
2448 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
2449 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
2450 neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation);
2451 neg find isPrimitive(element);
2452} or
2453{ find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); }
2454
2455//////////
2456// 1.2 Relation Declaration Indexers
2457//////////
2458/**
2459 * Matcher for detecting tuples t where []interface reference FunctionalElement(source,target)
2460 */
2461private pattern mustInRelationinterface_reference_FunctionalElement(
2462 problem:LogicProblem, interpretation:PartialInterpretation,
2463 source: DefinedElement, target:DefinedElement)
2464{
2465 find interpretation(problem,interpretation);
2466 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
2467 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface reference FunctionalElement");
2468 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
2469 BinaryElementRelationLink.param1(link,source);
2470 BinaryElementRelationLink.param2(link,target);
2471}
2472/**
2473 * Matcher for detecting tuples t where <>interface reference FunctionalElement(source,target)
2474 */
2475private pattern mayInRelationinterface_reference_FunctionalElement(
2476 problem:LogicProblem, interpretation:PartialInterpretation,
2477 source: DefinedElement, target:DefinedElement)
2478{
2479 find interpretation(problem,interpretation);
2480 // The two endpoint of the link have to exist
2481 find mayExist(problem, interpretation, source);
2482 find mayExist(problem, interpretation, target);
2483 // Type consistency
2484 find mayInstanceOfFunctionalElement_class(problem,interpretation,source);
2485 find mayInstanceOfFunctionalInterface_class(problem,interpretation,target);
2486 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
2487 // the upper bound of the multiplicity should be considered.
2488 numberOfExistingReferences == count find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,_);
2489 check(numberOfExistingReferences < 1);
2490 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
2491 // the upper bound of the opposite reference multiplicity should be considered.
2492 numberOfExistingOppositeReferences == count find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,target,_);
2493 check(numberOfExistingOppositeReferences < 1);
2494 // The reference is containment, then a new reference cannot be create if:
2495 // 1. Multiple parents
2496 neg find mustContains4(problem,interpretation,_,target);
2497 // 2. Circle in the containment hierarchy
2498 neg find mustTransitiveContains(source,target);
2499} or {
2500 find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,target);
2501}
2502/**
2503 * Matcher for detecting tuples t where []model reference FunctionalElement(source,target)
2504 */
2505 private pattern mustInRelationmodel_reference_FunctionalElement(
2506 problem:LogicProblem, interpretation:PartialInterpretation,
2507 source: DefinedElement, target:DefinedElement)
2508 {
2509 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_model(problem,interpretation,source,target);
2510 }
2511/**
2512 * Matcher for detecting tuples t where []model reference FunctionalElement(source,target)
2513 */
2514 private pattern mayInRelationmodel_reference_FunctionalElement(
2515 problem:LogicProblem, interpretation:PartialInterpretation,
2516 source: DefinedElement, target:DefinedElement)
2517 {
2518 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_model(problem,interpretation,source,target);
2519 }
2520/**
2521 * Matcher for detecting tuples t where []parent reference FunctionalElement(source,target)
2522 */
2523private pattern mustInRelationparent_reference_FunctionalElement(
2524 problem:LogicProblem, interpretation:PartialInterpretation,
2525 source: DefinedElement, target:DefinedElement)
2526{
2527 find interpretation(problem,interpretation);
2528 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
2529 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"parent reference FunctionalElement");
2530 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
2531 BinaryElementRelationLink.param1(link,source);
2532 BinaryElementRelationLink.param2(link,target);
2533}
2534/**
2535 * Matcher for detecting tuples t where <>parent reference FunctionalElement(source,target)
2536 */
2537private pattern mayInRelationparent_reference_FunctionalElement(
2538 problem:LogicProblem, interpretation:PartialInterpretation,
2539 source: DefinedElement, target:DefinedElement)
2540{
2541 find interpretation(problem,interpretation);
2542 // The two endpoint of the link have to exist
2543 find mayExist(problem, interpretation, source);
2544 find mayExist(problem, interpretation, target);
2545 // Type consistency
2546 find mayInstanceOfFunctionalElement_class(problem,interpretation,source);
2547 find mayInstanceOfFunction_class(problem,interpretation,target);
2548 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
2549 // the upper bound of the multiplicity should be considered.
2550 numberOfExistingReferences == count find mustInRelationparent_reference_FunctionalElement(problem,interpretation,source,_);
2551 check(numberOfExistingReferences < 1);
2552 // The eOpposite of the reference is containment, then a referene cannot be created if
2553 // 1. Multiple parents
2554 neg find mustContains4(problem,interpretation,source,_);
2555 // 2. Circle in the containment hierarchy
2556 neg find mustTransitiveContains(source,target);
2557} or {
2558 find mustInRelationparent_reference_FunctionalElement(problem,interpretation,source,target);
2559}
2560/**
2561 * Matcher for detecting tuples t where []rootElements reference FunctionalArchitectureModel(source,target)
2562 */
2563private pattern mustInRelationrootElements_reference_FunctionalArchitectureModel(
2564 problem:LogicProblem, interpretation:PartialInterpretation,
2565 source: DefinedElement, target:DefinedElement)
2566{
2567 find interpretation(problem,interpretation);
2568 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
2569 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"rootElements reference FunctionalArchitectureModel");
2570 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
2571 BinaryElementRelationLink.param1(link,source);
2572 BinaryElementRelationLink.param2(link,target);
2573}
2574/**
2575 * Matcher for detecting tuples t where <>rootElements reference FunctionalArchitectureModel(source,target)
2576 */
2577private pattern mayInRelationrootElements_reference_FunctionalArchitectureModel(
2578 problem:LogicProblem, interpretation:PartialInterpretation,
2579 source: DefinedElement, target:DefinedElement)
2580{
2581 find interpretation(problem,interpretation);
2582 // The two endpoint of the link have to exist
2583 find mayExist(problem, interpretation, source);
2584 find mayExist(problem, interpretation, target);
2585 // Type consistency
2586 find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,source);
2587 find mayInstanceOfFunctionalElement_class(problem,interpretation,target);
2588 // The reference is containment, then a new reference cannot be create if:
2589 // 1. Multiple parents
2590 neg find mustContains4(problem,interpretation,_,target);
2591 // 2. Circle in the containment hierarchy
2592 neg find mustTransitiveContains(source,target);
2593} or {
2594 find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,source,target);
2595}
2596/**
2597 * Matcher for detecting tuples t where []subElements reference Function(source,target)
2598 */
2599private pattern mustInRelationsubElements_reference_Function(
2600 problem:LogicProblem, interpretation:PartialInterpretation,
2601 source: DefinedElement, target:DefinedElement)
2602{
2603 find interpretation(problem,interpretation);
2604 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
2605 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"subElements reference Function");
2606 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
2607 BinaryElementRelationLink.param1(link,source);
2608 BinaryElementRelationLink.param2(link,target);
2609}
2610/**
2611 * Matcher for detecting tuples t where <>subElements reference Function(source,target)
2612 */
2613private pattern mayInRelationsubElements_reference_Function(
2614 problem:LogicProblem, interpretation:PartialInterpretation,
2615 source: DefinedElement, target:DefinedElement)
2616{
2617 find interpretation(problem,interpretation);
2618 // The two endpoint of the link have to exist
2619 find mayExist(problem, interpretation, source);
2620 find mayExist(problem, interpretation, target);
2621 // Type consistency
2622 find mayInstanceOfFunction_class(problem,interpretation,source);
2623 find mayInstanceOfFunctionalElement_class(problem,interpretation,target);
2624 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
2625 // the upper bound of the opposite reference multiplicity should be considered.
2626 numberOfExistingOppositeReferences == count find mustInRelationparent_reference_FunctionalElement(problem,interpretation,target,_);
2627 check(numberOfExistingOppositeReferences < 1);
2628 // The reference is containment, then a new reference cannot be create if:
2629 // 1. Multiple parents
2630 neg find mustContains4(problem,interpretation,_,target);
2631 // 2. Circle in the containment hierarchy
2632 neg find mustTransitiveContains(source,target);
2633} or {
2634 find mustInRelationsubElements_reference_Function(problem,interpretation,source,target);
2635}
2636/**
2637 * Matcher for detecting tuples t where []data reference FAMTerminator(source,target)
2638 */
2639private pattern mustInRelationdata_reference_FAMTerminator(
2640 problem:LogicProblem, interpretation:PartialInterpretation,
2641 source: DefinedElement, target:DefinedElement)
2642{
2643 find interpretation(problem,interpretation);
2644 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
2645 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"data reference FAMTerminator");
2646 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
2647 BinaryElementRelationLink.param1(link,source);
2648 BinaryElementRelationLink.param2(link,target);
2649}
2650/**
2651 * Matcher for detecting tuples t where <>data reference FAMTerminator(source,target)
2652 */
2653private pattern mayInRelationdata_reference_FAMTerminator(
2654 problem:LogicProblem, interpretation:PartialInterpretation,
2655 source: DefinedElement, target:DefinedElement)
2656{
2657 find interpretation(problem,interpretation);
2658 // The two endpoint of the link have to exist
2659 find mayExist(problem, interpretation, source);
2660 find mayExist(problem, interpretation, target);
2661 // Type consistency
2662 find mayInstanceOfFAMTerminator_class(problem,interpretation,source);
2663 find mayInstanceOfFunctionalData_class(problem,interpretation,target);
2664 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
2665 // the upper bound of the multiplicity should be considered.
2666 numberOfExistingReferences == count find mustInRelationdata_reference_FAMTerminator(problem,interpretation,source,_);
2667 check(numberOfExistingReferences < 1);
2668 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
2669 // the upper bound of the opposite reference multiplicity should be considered.
2670 numberOfExistingOppositeReferences == count find mustInRelationterminator_reference_FunctionalData(problem,interpretation,target,_);
2671 check(numberOfExistingOppositeReferences < 1);
2672 // The eOpposite of the reference is containment, then a referene cannot be created if
2673 // 1. Multiple parents
2674 neg find mustContains4(problem,interpretation,source,_);
2675 // 2. Circle in the containment hierarchy
2676 neg find mustTransitiveContains(source,target);
2677} or {
2678 find mustInRelationdata_reference_FAMTerminator(problem,interpretation,source,target);
2679}
2680/**
2681 * Matcher for detecting tuples t where []from reference InformationLink(source,target)
2682 */
2683private pattern mustInRelationfrom_reference_InformationLink(
2684 problem:LogicProblem, interpretation:PartialInterpretation,
2685 source: DefinedElement, target:DefinedElement)
2686{
2687 find interpretation(problem,interpretation);
2688 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
2689 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"from reference InformationLink");
2690 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
2691 BinaryElementRelationLink.param1(link,source);
2692 BinaryElementRelationLink.param2(link,target);
2693}
2694/**
2695 * Matcher for detecting tuples t where <>from reference InformationLink(source,target)
2696 */
2697private pattern mayInRelationfrom_reference_InformationLink(
2698 problem:LogicProblem, interpretation:PartialInterpretation,
2699 source: DefinedElement, target:DefinedElement)
2700{
2701 find interpretation(problem,interpretation);
2702 // The two endpoint of the link have to exist
2703 find mayExist(problem, interpretation, source);
2704 find mayExist(problem, interpretation, target);
2705 // Type consistency
2706 find mayInstanceOfInformationLink_class(problem,interpretation,source);
2707 find mayInstanceOfFunctionalOutput_class(problem,interpretation,target);
2708 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
2709 // the upper bound of the multiplicity should be considered.
2710 numberOfExistingReferences == count find mustInRelationfrom_reference_InformationLink(problem,interpretation,source,_);
2711 check(numberOfExistingReferences < 1);
2712 // The eOpposite of the reference is containment, then a referene cannot be created if
2713 // 1. Multiple parents
2714 neg find mustContains4(problem,interpretation,source,_);
2715 // 2. Circle in the containment hierarchy
2716 neg find mustTransitiveContains(source,target);
2717} or {
2718 find mustInRelationfrom_reference_InformationLink(problem,interpretation,source,target);
2719}
2720/**
2721 * Matcher for detecting tuples t where []to reference InformationLink(source,target)
2722 */
2723private pattern mustInRelationto_reference_InformationLink(
2724 problem:LogicProblem, interpretation:PartialInterpretation,
2725 source: DefinedElement, target:DefinedElement)
2726{
2727 find interpretation(problem,interpretation);
2728 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
2729 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"to reference InformationLink");
2730 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
2731 BinaryElementRelationLink.param1(link,source);
2732 BinaryElementRelationLink.param2(link,target);
2733}
2734/**
2735 * Matcher for detecting tuples t where <>to reference InformationLink(source,target)
2736 */
2737private pattern mayInRelationto_reference_InformationLink(
2738 problem:LogicProblem, interpretation:PartialInterpretation,
2739 source: DefinedElement, target:DefinedElement)
2740{
2741 find interpretation(problem,interpretation);
2742 // The two endpoint of the link have to exist
2743 find mayExist(problem, interpretation, source);
2744 find mayExist(problem, interpretation, target);
2745 // Type consistency
2746 find mayInstanceOfInformationLink_class(problem,interpretation,source);
2747 find mayInstanceOfFunctionalInput_class(problem,interpretation,target);
2748 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
2749 // the upper bound of the multiplicity should be considered.
2750 numberOfExistingReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,source,_);
2751 check(numberOfExistingReferences < 1);
2752} or {
2753 find mustInRelationto_reference_InformationLink(problem,interpretation,source,target);
2754}
2755/**
2756 * Matcher for detecting tuples t where []data reference FunctionalInterface(source,target)
2757 */
2758private pattern mustInRelationdata_reference_FunctionalInterface(
2759 problem:LogicProblem, interpretation:PartialInterpretation,
2760 source: DefinedElement, target:DefinedElement)
2761{
2762 find interpretation(problem,interpretation);
2763 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
2764 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"data reference FunctionalInterface");
2765 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
2766 BinaryElementRelationLink.param1(link,source);
2767 BinaryElementRelationLink.param2(link,target);
2768}
2769/**
2770 * Matcher for detecting tuples t where <>data reference FunctionalInterface(source,target)
2771 */
2772private pattern mayInRelationdata_reference_FunctionalInterface(
2773 problem:LogicProblem, interpretation:PartialInterpretation,
2774 source: DefinedElement, target:DefinedElement)
2775{
2776 find interpretation(problem,interpretation);
2777 // The two endpoint of the link have to exist
2778 find mayExist(problem, interpretation, source);
2779 find mayExist(problem, interpretation, target);
2780 // Type consistency
2781 find mayInstanceOfFunctionalInterface_class(problem,interpretation,source);
2782 find mayInstanceOfFunctionalData_class(problem,interpretation,target);
2783 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
2784 // the upper bound of the opposite reference multiplicity should be considered.
2785 numberOfExistingOppositeReferences == count find mustInRelationinterface_reference_FunctionalData(problem,interpretation,target,_);
2786 check(numberOfExistingOppositeReferences < 1);
2787 // The reference is containment, then a new reference cannot be create if:
2788 // 1. Multiple parents
2789 neg find mustContains4(problem,interpretation,_,target);
2790 // 2. Circle in the containment hierarchy
2791 neg find mustTransitiveContains(source,target);
2792} or {
2793 find mustInRelationdata_reference_FunctionalInterface(problem,interpretation,source,target);
2794}
2795/**
2796 * Matcher for detecting tuples t where []element reference FunctionalInterface(source,target)
2797 */
2798private pattern mustInRelationelement_reference_FunctionalInterface(
2799 problem:LogicProblem, interpretation:PartialInterpretation,
2800 source: DefinedElement, target:DefinedElement)
2801{
2802 find interpretation(problem,interpretation);
2803 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
2804 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"element reference FunctionalInterface");
2805 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
2806 BinaryElementRelationLink.param1(link,source);
2807 BinaryElementRelationLink.param2(link,target);
2808}
2809/**
2810 * Matcher for detecting tuples t where <>element reference FunctionalInterface(source,target)
2811 */
2812private pattern mayInRelationelement_reference_FunctionalInterface(
2813 problem:LogicProblem, interpretation:PartialInterpretation,
2814 source: DefinedElement, target:DefinedElement)
2815{
2816 find interpretation(problem,interpretation);
2817 // The two endpoint of the link have to exist
2818 find mayExist(problem, interpretation, source);
2819 find mayExist(problem, interpretation, target);
2820 // Type consistency
2821 find mayInstanceOfFunctionalInterface_class(problem,interpretation,source);
2822 find mayInstanceOfFunctionalElement_class(problem,interpretation,target);
2823 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
2824 // the upper bound of the multiplicity should be considered.
2825 numberOfExistingReferences == count find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,source,_);
2826 check(numberOfExistingReferences < 1);
2827 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
2828 // the upper bound of the opposite reference multiplicity should be considered.
2829 numberOfExistingOppositeReferences == count find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,target,_);
2830 check(numberOfExistingOppositeReferences < 1);
2831 // The eOpposite of the reference is containment, then a referene cannot be created if
2832 // 1. Multiple parents
2833 neg find mustContains4(problem,interpretation,source,_);
2834 // 2. Circle in the containment hierarchy
2835 neg find mustTransitiveContains(source,target);
2836} or {
2837 find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,source,target);
2838}
2839/**
2840 * Matcher for detecting tuples t where []IncomingLinks reference FunctionalInput(source,target)
2841 */
2842private pattern mustInRelationIncomingLinks_reference_FunctionalInput(
2843 problem:LogicProblem, interpretation:PartialInterpretation,
2844 source: DefinedElement, target:DefinedElement)
2845{
2846 find interpretation(problem,interpretation);
2847 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
2848 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"IncomingLinks reference FunctionalInput");
2849 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
2850 BinaryElementRelationLink.param1(link,source);
2851 BinaryElementRelationLink.param2(link,target);
2852}
2853/**
2854 * Matcher for detecting tuples t where <>IncomingLinks reference FunctionalInput(source,target)
2855 */
2856private pattern mayInRelationIncomingLinks_reference_FunctionalInput(
2857 problem:LogicProblem, interpretation:PartialInterpretation,
2858 source: DefinedElement, target:DefinedElement)
2859{
2860 find interpretation(problem,interpretation);
2861 // The two endpoint of the link have to exist
2862 find mayExist(problem, interpretation, source);
2863 find mayExist(problem, interpretation, target);
2864 // Type consistency
2865 find mayInstanceOfFunctionalInput_class(problem,interpretation,source);
2866 find mayInstanceOfInformationLink_class(problem,interpretation,target);
2867 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
2868 // the upper bound of the opposite reference multiplicity should be considered.
2869 numberOfExistingOppositeReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,target,_);
2870 check(numberOfExistingOppositeReferences < 1);
2871} or {
2872 find mustInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,source,target);
2873}
2874/**
2875 * Matcher for detecting tuples t where []outgoingLinks reference FunctionalOutput(source,target)
2876 */
2877private pattern mustInRelationoutgoingLinks_reference_FunctionalOutput(
2878 problem:LogicProblem, interpretation:PartialInterpretation,
2879 source: DefinedElement, target:DefinedElement)
2880{
2881 find interpretation(problem,interpretation);
2882 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
2883 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"outgoingLinks reference FunctionalOutput");
2884 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
2885 BinaryElementRelationLink.param1(link,source);
2886 BinaryElementRelationLink.param2(link,target);
2887}
2888/**
2889 * Matcher for detecting tuples t where <>outgoingLinks reference FunctionalOutput(source,target)
2890 */
2891private pattern mayInRelationoutgoingLinks_reference_FunctionalOutput(
2892 problem:LogicProblem, interpretation:PartialInterpretation,
2893 source: DefinedElement, target:DefinedElement)
2894{
2895 find interpretation(problem,interpretation);
2896 // The two endpoint of the link have to exist
2897 find mayExist(problem, interpretation, source);
2898 find mayExist(problem, interpretation, target);
2899 // Type consistency
2900 find mayInstanceOfFunctionalOutput_class(problem,interpretation,source);
2901 find mayInstanceOfInformationLink_class(problem,interpretation,target);
2902 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
2903 // the upper bound of the opposite reference multiplicity should be considered.
2904 numberOfExistingOppositeReferences == count find mustInRelationfrom_reference_InformationLink(problem,interpretation,target,_);
2905 check(numberOfExistingOppositeReferences < 1);
2906 // The reference is containment, then a new reference cannot be create if:
2907 // 1. Multiple parents
2908 neg find mustContains4(problem,interpretation,_,target);
2909 // 2. Circle in the containment hierarchy
2910 neg find mustTransitiveContains(source,target);
2911} or {
2912 find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,source,target);
2913}
2914/**
2915 * Matcher for detecting tuples t where []terminator reference FunctionalData(source,target)
2916 */
2917private pattern mustInRelationterminator_reference_FunctionalData(
2918 problem:LogicProblem, interpretation:PartialInterpretation,
2919 source: DefinedElement, target:DefinedElement)
2920{
2921 find interpretation(problem,interpretation);
2922 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
2923 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"terminator reference FunctionalData");
2924 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
2925 BinaryElementRelationLink.param1(link,source);
2926 BinaryElementRelationLink.param2(link,target);
2927}
2928/**
2929 * Matcher for detecting tuples t where <>terminator reference FunctionalData(source,target)
2930 */
2931private pattern mayInRelationterminator_reference_FunctionalData(
2932 problem:LogicProblem, interpretation:PartialInterpretation,
2933 source: DefinedElement, target:DefinedElement)
2934{
2935 find interpretation(problem,interpretation);
2936 // The two endpoint of the link have to exist
2937 find mayExist(problem, interpretation, source);
2938 find mayExist(problem, interpretation, target);
2939 // Type consistency
2940 find mayInstanceOfFunctionalData_class(problem,interpretation,source);
2941 find mayInstanceOfFAMTerminator_class(problem,interpretation,target);
2942 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
2943 // the upper bound of the multiplicity should be considered.
2944 numberOfExistingReferences == count find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,_);
2945 check(numberOfExistingReferences < 1);
2946 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
2947 // the upper bound of the opposite reference multiplicity should be considered.
2948 numberOfExistingOppositeReferences == count find mustInRelationdata_reference_FAMTerminator(problem,interpretation,target,_);
2949 check(numberOfExistingOppositeReferences < 1);
2950 // The reference is containment, then a new reference cannot be create if:
2951 // 1. Multiple parents
2952 neg find mustContains4(problem,interpretation,_,target);
2953 // 2. Circle in the containment hierarchy
2954 neg find mustTransitiveContains(source,target);
2955} or {
2956 find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,target);
2957}
2958/**
2959 * Matcher for detecting tuples t where []interface reference FunctionalData(source,target)
2960 */
2961private pattern mustInRelationinterface_reference_FunctionalData(
2962 problem:LogicProblem, interpretation:PartialInterpretation,
2963 source: DefinedElement, target:DefinedElement)
2964{
2965 find interpretation(problem,interpretation);
2966 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
2967 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface reference FunctionalData");
2968 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
2969 BinaryElementRelationLink.param1(link,source);
2970 BinaryElementRelationLink.param2(link,target);
2971}
2972/**
2973 * Matcher for detecting tuples t where <>interface reference FunctionalData(source,target)
2974 */
2975private pattern mayInRelationinterface_reference_FunctionalData(
2976 problem:LogicProblem, interpretation:PartialInterpretation,
2977 source: DefinedElement, target:DefinedElement)
2978{
2979 find interpretation(problem,interpretation);
2980 // The two endpoint of the link have to exist
2981 find mayExist(problem, interpretation, source);
2982 find mayExist(problem, interpretation, target);
2983 // Type consistency
2984 find mayInstanceOfFunctionalData_class(problem,interpretation,source);
2985 find mayInstanceOfFunctionalInterface_class(problem,interpretation,target);
2986 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
2987 // the upper bound of the multiplicity should be considered.
2988 numberOfExistingReferences == count find mustInRelationinterface_reference_FunctionalData(problem,interpretation,source,_);
2989 check(numberOfExistingReferences < 1);
2990 // The eOpposite of the reference is containment, then a referene cannot be created if
2991 // 1. Multiple parents
2992 neg find mustContains4(problem,interpretation,source,_);
2993 // 2. Circle in the containment hierarchy
2994 neg find mustTransitiveContains(source,target);
2995} or {
2996 find mustInRelationinterface_reference_FunctionalData(problem,interpretation,source,target);
2997}
2998/**
2999 * Matcher for detecting tuples t where []type attribute Function(source,target)
3000 */
3001 private pattern mustInRelationtype_attribute_Function(
3002 problem:LogicProblem, interpretation:PartialInterpretation,
3003 source: DefinedElement, target:DefinedElement)
3004 {
3005 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_type(problem,interpretation,source,target);
3006 }
3007/**
3008 * Matcher for detecting tuples t where []type attribute Function(source,target)
3009 */
3010 private pattern mayInRelationtype_attribute_Function(
3011 problem:LogicProblem, interpretation:PartialInterpretation,
3012 source: DefinedElement, target:DefinedElement)
3013 {
3014 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_type(problem,interpretation,source,target);
3015 }
3016
3017//////////
3018// 1.3 Relation Definition Indexers
3019//////////
3020// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test fam terminatorAndInformation
3021private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_terminatorAndInformation(
3022 problem:LogicProblem, interpretation:PartialInterpretation,
3023 var_T, var_I)
3024{
3025 find interpretation(problem,interpretation);
3026 find mustInstanceOfFAMTerminator_class(problem,interpretation,var_T);
3027 find mustInstanceOfInformationLink_class(problem,interpretation,var_I);
3028 // T is exported
3029 // I is exported
3030 find mustInstanceOfFunctionalOutput_class(problem,interpretation,var_Out);
3031 find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,var_Out,var_virtual0);
3032 find mustInstanceOfInformationLink_class(problem,interpretation,var_virtual0);
3033 var_virtual0 == var_I;
3034 find mustInstanceOfFunctionalOutput_class(problem,interpretation,var_Out);
3035 find mustInRelationterminator_reference_FunctionalData(problem,interpretation,var_Out,var_virtual1);
3036 find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1);
3037 var_virtual1 == var_T;
3038}or{
3039 find interpretation(problem,interpretation);
3040 find mustInstanceOfFAMTerminator_class(problem,interpretation,var_T);
3041 find mustInstanceOfInformationLink_class(problem,interpretation,var_I);
3042 // T is exported
3043 // I is exported
3044 find mustInstanceOfInformationLink_class(problem,interpretation,var_I);
3045 find mustInRelationto_reference_InformationLink(problem,interpretation,var_I,var_virtual0);
3046 find mustInstanceOfFunctionalInput_class(problem,interpretation,var_virtual0);
3047 var_virtual0 == var_In;
3048 find mustInstanceOfFunctionalInput_class(problem,interpretation,var_In);
3049 find mustInRelationterminator_reference_FunctionalData(problem,interpretation,var_In,var_virtual1);
3050 find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1);
3051 var_virtual1 == var_T;
3052}
3053private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_terminatorAndInformation(
3054 problem:LogicProblem, interpretation:PartialInterpretation,
3055 var_T, var_I)
3056{
3057 find interpretation(problem,interpretation);
3058 find mayInstanceOfFAMTerminator_class(problem,interpretation,var_T);
3059 find mayInstanceOfInformationLink_class(problem,interpretation,var_I);
3060 // T is exported
3061 // I is exported
3062 find mayInstanceOfFunctionalOutput_class(problem,interpretation,var_Out);
3063 find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,var_Out,var_virtual0);
3064 find mayInstanceOfInformationLink_class(problem,interpretation,var_virtual0);
3065 find mayEquivalent(problem, interpretation, var_virtual0, var_I);
3066 find mayInstanceOfFunctionalOutput_class(problem,interpretation,var_Out);
3067 find mayInRelationterminator_reference_FunctionalData(problem,interpretation,var_Out,var_virtual1);
3068 find mayInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1);
3069 find mayEquivalent(problem, interpretation, var_virtual1, var_T);
3070}or{
3071 find interpretation(problem,interpretation);
3072 find mayInstanceOfFAMTerminator_class(problem,interpretation,var_T);
3073 find mayInstanceOfInformationLink_class(problem,interpretation,var_I);
3074 // T is exported
3075 // I is exported
3076 find mayInstanceOfInformationLink_class(problem,interpretation,var_I);
3077 find mayInRelationto_reference_InformationLink(problem,interpretation,var_I,var_virtual0);
3078 find mayInstanceOfFunctionalInput_class(problem,interpretation,var_virtual0);
3079 find mayEquivalent(problem, interpretation, var_virtual0, var_In);
3080 find mayInstanceOfFunctionalInput_class(problem,interpretation,var_In);
3081 find mayInRelationterminator_reference_FunctionalData(problem,interpretation,var_In,var_virtual1);
3082 find mayInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1);
3083 find mayEquivalent(problem, interpretation, var_virtual1, var_T);
3084}
3085private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_terminatorAndInformation(
3086 problem:LogicProblem, interpretation:PartialInterpretation,
3087 var_T, var_I)
3088{
3089 find interpretation(problem,interpretation);
3090 find mustInstanceOfFAMTerminator_class(problem,interpretation,var_T);
3091 find mustInstanceOfInformationLink_class(problem,interpretation,var_I);
3092 // T is exported
3093 // I is exported
3094 find mustInstanceOfFunctionalOutput_class(problem,interpretation,var_Out);
3095 find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,var_Out,var_virtual0);
3096 find mustInstanceOfInformationLink_class(problem,interpretation,var_virtual0);
3097 var_virtual0 == var_I;
3098 find mustInstanceOfFunctionalOutput_class(problem,interpretation,var_Out);
3099 find mustInRelationterminator_reference_FunctionalData(problem,interpretation,var_Out,var_virtual1);
3100 find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1);
3101 var_virtual1 == var_T;
3102}or{
3103 find interpretation(problem,interpretation);
3104 find mustInstanceOfFAMTerminator_class(problem,interpretation,var_T);
3105 find mustInstanceOfInformationLink_class(problem,interpretation,var_I);
3106 // T is exported
3107 // I is exported
3108 find mustInstanceOfInformationLink_class(problem,interpretation,var_I);
3109 find mustInRelationto_reference_InformationLink(problem,interpretation,var_I,var_virtual0);
3110 find mustInstanceOfFunctionalInput_class(problem,interpretation,var_virtual0);
3111 var_virtual0 == var_In;
3112 find mustInstanceOfFunctionalInput_class(problem,interpretation,var_In);
3113 find mustInRelationterminator_reference_FunctionalData(problem,interpretation,var_In,var_virtual1);
3114 find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1);
3115 var_virtual1 == var_T;
3116}
3117// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test fam type
3118private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_type(
3119 problem:LogicProblem, interpretation:PartialInterpretation,
3120 var_This, var_Target)
3121{
3122 find interpretation(problem,interpretation);
3123 find mustInstanceOfFunction_class(problem,interpretation,var_This);
3124 // type constraint is enforced by construction
3125 // This is exported
3126 // Target is exported
3127 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(problem,interpretation,_var__Model,var_This);
3128 var_virtual0 == const_Root_FunctionType;DefinedElement.name(const_Root_FunctionType,"Root FunctionType"); //LogicProblem.elements(problem,const_Root_FunctionType);
3129 var_Target == var_virtual0;
3130}or{
3131 find interpretation(problem,interpretation);
3132 find mustInstanceOfFunction_class(problem,interpretation,var_This);
3133 // type constraint is enforced by construction
3134 // This is exported
3135 // Target is exported
3136 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,_var__Child,var_This);
3137 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(problem,interpretation,_var__Model,var_This);
3138 var_virtual0 == const_Leaf_FunctionType;DefinedElement.name(const_Leaf_FunctionType,"Leaf FunctionType"); //LogicProblem.elements(problem,const_Leaf_FunctionType);
3139 var_Target == var_virtual0;
3140}or{
3141 find interpretation(problem,interpretation);
3142 find mustInstanceOfFunction_class(problem,interpretation,var_This);
3143 // type constraint is enforced by construction
3144 // This is exported
3145 // Target is exported
3146 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,var_This,_var__Par);
3147 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,_var__Child,var_This);
3148 var_virtual0 == const_Intermediate_FunctionType;DefinedElement.name(const_Intermediate_FunctionType,"Intermediate FunctionType"); //LogicProblem.elements(problem,const_Intermediate_FunctionType);
3149 var_Target == var_virtual0;
3150}
3151private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_type(
3152 problem:LogicProblem, interpretation:PartialInterpretation,
3153 var_This, var_Target)
3154{
3155 find interpretation(problem,interpretation);
3156 find mayInstanceOfFunction_class(problem,interpretation,var_This);
3157 // type constraint is enforced by construction
3158 // This is exported
3159 // Target is exported
3160 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(problem,interpretation,_var__Model,var_This);
3161 var_virtual0 == const_Root_FunctionType;DefinedElement.name(const_Root_FunctionType,"Root FunctionType"); //LogicProblem.elements(problem,const_Root_FunctionType);
3162 find mayEquivalent(problem, interpretation, var_Target, var_virtual0);
3163}or{
3164 find interpretation(problem,interpretation);
3165 find mayInstanceOfFunction_class(problem,interpretation,var_This);
3166 // type constraint is enforced by construction
3167 // This is exported
3168 // Target is exported
3169 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,_var__Child,var_This);
3170 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(problem,interpretation,_var__Model,var_This);
3171 var_virtual0 == const_Leaf_FunctionType;DefinedElement.name(const_Leaf_FunctionType,"Leaf FunctionType"); //LogicProblem.elements(problem,const_Leaf_FunctionType);
3172 find mayEquivalent(problem, interpretation, var_Target, var_virtual0);
3173}or{
3174 find interpretation(problem,interpretation);
3175 find mayInstanceOfFunction_class(problem,interpretation,var_This);
3176 // type constraint is enforced by construction
3177 // This is exported
3178 // Target is exported
3179 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,var_This,_var__Par);
3180 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,_var__Child,var_This);
3181 var_virtual0 == const_Intermediate_FunctionType;DefinedElement.name(const_Intermediate_FunctionType,"Intermediate FunctionType"); //LogicProblem.elements(problem,const_Intermediate_FunctionType);
3182 find mayEquivalent(problem, interpretation, var_Target, var_virtual0);
3183}
3184private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_type(
3185 problem:LogicProblem, interpretation:PartialInterpretation,
3186 var_This, var_Target)
3187{
3188 find interpretation(problem,interpretation);
3189 find mustInstanceOfFunction_class(problem,interpretation,var_This);
3190 // type constraint is enforced by construction
3191 // This is exported
3192 // Target is exported
3193 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(problem,interpretation,_var__Model,var_This);
3194 var_virtual0 == const_Root_FunctionType;DefinedElement.name(const_Root_FunctionType,"Root FunctionType"); //LogicProblem.elements(problem,const_Root_FunctionType);
3195 var_Target == var_virtual0;
3196}or{
3197 find interpretation(problem,interpretation);
3198 find mustInstanceOfFunction_class(problem,interpretation,var_This);
3199 // type constraint is enforced by construction
3200 // This is exported
3201 // Target is exported
3202 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,_var__Child,var_This);
3203 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(problem,interpretation,_var__Model,var_This);
3204 var_virtual0 == const_Leaf_FunctionType;DefinedElement.name(const_Leaf_FunctionType,"Leaf FunctionType"); //LogicProblem.elements(problem,const_Leaf_FunctionType);
3205 var_Target == var_virtual0;
3206}or{
3207 find interpretation(problem,interpretation);
3208 find mustInstanceOfFunction_class(problem,interpretation,var_This);
3209 // type constraint is enforced by construction
3210 // This is exported
3211 // Target is exported
3212 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,var_This,_var__Par);
3213 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,_var__Child,var_This);
3214 var_virtual0 == const_Intermediate_FunctionType;DefinedElement.name(const_Intermediate_FunctionType,"Intermediate FunctionType"); //LogicProblem.elements(problem,const_Intermediate_FunctionType);
3215 var_Target == var_virtual0;
3216}
3217// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test fam rootElements
3218private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(
3219 problem:LogicProblem, interpretation:PartialInterpretation,
3220 var_Model, var_Root)
3221{
3222 find interpretation(problem,interpretation);
3223 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Model);
3224 find mustInstanceOfFunction_class(problem,interpretation,var_Root);
3225 // Model is exported
3226 // Root is exported
3227 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Model);
3228 find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,var_Model,var_virtual0);
3229 find mustInstanceOfFunctionalElement_class(problem,interpretation,var_virtual0);
3230 var_virtual0 == var_Root;
3231}
3232private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(
3233 problem:LogicProblem, interpretation:PartialInterpretation,
3234 var_Model, var_Root)
3235{
3236 find interpretation(problem,interpretation);
3237 find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Model);
3238 find mayInstanceOfFunction_class(problem,interpretation,var_Root);
3239 // Model is exported
3240 // Root is exported
3241 find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Model);
3242 find mayInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,var_Model,var_virtual0);
3243 find mayInstanceOfFunctionalElement_class(problem,interpretation,var_virtual0);
3244 find mayEquivalent(problem, interpretation, var_virtual0, var_Root);
3245}
3246private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(
3247 problem:LogicProblem, interpretation:PartialInterpretation,
3248 var_Model, var_Root)
3249{
3250 find interpretation(problem,interpretation);
3251 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Model);
3252 find mustInstanceOfFunction_class(problem,interpretation,var_Root);
3253 // Model is exported
3254 // Root is exported
3255 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Model);
3256 find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,var_Model,var_virtual0);
3257 find mustInstanceOfFunctionalElement_class(problem,interpretation,var_virtual0);
3258 var_virtual0 == var_Root;
3259}
3260// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test fam parent
3261private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(
3262 problem:LogicProblem, interpretation:PartialInterpretation,
3263 var_Func, var_Par)
3264{
3265 find interpretation(problem,interpretation);
3266 find mustInstanceOfFunction_class(problem,interpretation,var_Func);
3267 find mustInstanceOfFunction_class(problem,interpretation,var_Par);
3268 // Func is exported
3269 // Par is exported
3270 find mustInstanceOfFunction_class(problem,interpretation,var_Func);
3271 find mustInRelationparent_reference_FunctionalElement(problem,interpretation,var_Func,var_virtual0);
3272 find mustInstanceOfFunction_class(problem,interpretation,var_virtual0);
3273 var_virtual0 == var_Par;
3274}
3275private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(
3276 problem:LogicProblem, interpretation:PartialInterpretation,
3277 var_Func, var_Par)
3278{
3279 find interpretation(problem,interpretation);
3280 find mayInstanceOfFunction_class(problem,interpretation,var_Func);
3281 find mayInstanceOfFunction_class(problem,interpretation,var_Par);
3282 // Func is exported
3283 // Par is exported
3284 find mayInstanceOfFunction_class(problem,interpretation,var_Func);
3285 find mayInRelationparent_reference_FunctionalElement(problem,interpretation,var_Func,var_virtual0);
3286 find mayInstanceOfFunction_class(problem,interpretation,var_virtual0);
3287 find mayEquivalent(problem, interpretation, var_virtual0, var_Par);
3288}
3289private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(
3290 problem:LogicProblem, interpretation:PartialInterpretation,
3291 var_Func, var_Par)
3292{
3293 find interpretation(problem,interpretation);
3294 find mustInstanceOfFunction_class(problem,interpretation,var_Func);
3295 find mustInstanceOfFunction_class(problem,interpretation,var_Par);
3296 // Func is exported
3297 // Par is exported
3298 find mustInstanceOfFunction_class(problem,interpretation,var_Func);
3299 find mustInRelationparent_reference_FunctionalElement(problem,interpretation,var_Func,var_virtual0);
3300 find mustInstanceOfFunction_class(problem,interpretation,var_virtual0);
3301 var_virtual0 == var_Par;
3302}
3303// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test fam model
3304private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_model(
3305 problem:LogicProblem, interpretation:PartialInterpretation,
3306 var_This, var_Target)
3307{
3308 find interpretation(problem,interpretation);
3309 find mustInstanceOfFunctionalElement_class(problem,interpretation,var_This);
3310 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Target);
3311 // This is exported
3312 // Target is exported
3313 find mustInstanceOfFunctionalElement_class(problem,interpretation,var_This);
3314 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Target);
3315}
3316private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_model(
3317 problem:LogicProblem, interpretation:PartialInterpretation,
3318 var_This, var_Target)
3319{
3320 find interpretation(problem,interpretation);
3321 find mayInstanceOfFunctionalElement_class(problem,interpretation,var_This);
3322 find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Target);
3323 // This is exported
3324 // Target is exported
3325 find mayInstanceOfFunctionalElement_class(problem,interpretation,var_This);
3326 find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Target);
3327}
3328private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_model(
3329 problem:LogicProblem, interpretation:PartialInterpretation,
3330 var_This, var_Target)
3331{
3332 find interpretation(problem,interpretation);
3333 find mustInstanceOfFunctionalElement_class(problem,interpretation,var_This);
3334 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Target);
3335 // This is exported
3336 // Target is exported
3337 find mustInstanceOfFunctionalElement_class(problem,interpretation,var_This);
3338 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Target);
3339}
3340
3341//////////
3342// 1.4 Containment Indexer
3343//////////
3344private pattern mustContains2(source: DefinedElement, target: DefinedElement) {
3345 find mustContains4(_,_,source,target);
3346}
3347
3348private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation,
3349 source: DefinedElement, target: DefinedElement)
3350 { find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,target); }or
3351
3352 { find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,source,target); }or
3353
3354 { find mustInRelationsubElements_reference_Function(problem,interpretation,source,target); }or
3355
3356 { find mustInRelationdata_reference_FunctionalInterface(problem,interpretation,source,target); }or
3357
3358 { find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,source,target); }or
3359
3360 { find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,target); }
3361
3362private pattern mustTransitiveContains(source,target) {
3363 find mustContains2+(source,target);
3364}
3365
3366//////////
3367// 2. Invalidation Indexers
3368//////////
3369// 2.1 Invalidated by WF Queries
3370//////////
3371pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_terminatorAndInformation(problem:LogicProblem, interpretation:PartialInterpretation,
3372 var_T, var_I)
3373{
3374 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_terminatorAndInformation(problem,interpretation,var_T,var_I);
3375}
3376
3377//////////
3378// 3. Unfinishedness Indexers
3379//////////
3380// 3.1 Unfinishedness Measured by Multiplicity
3381//////////
3382pattern unfinishedLowerMultiplicity_to_reference_InformationLink(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) {
3383 find interpretation(problem,interpretation);
3384 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
3385 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"to reference InformationLink");
3386 find mustInstanceOfInformationLink_class(problem,interpretation,object);
3387 numberOfExistingReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,object,_);
3388 check(numberOfExistingReferences < 1);
3389 missingMultiplicity == eval(1-numberOfExistingReferences);
3390}
3391
3392//////////
3393// 3.2 Unfinishedness Measured by WF Queries
3394//////////
3395pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_terminatorAndInformation(problem:LogicProblem, interpretation:PartialInterpretation,
3396 var_T, var_I)
3397{
3398 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_terminatorAndInformation(problem,interpretation,var_T,var_I);
3399}
3400
3401//////////
3402// 4. Refinement Indexers
3403//////////
3404// 4.1 Object constructors
3405//////////
3406private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation)
3407{
3408 find interpretation(problem,interpretation);
3409 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,root);
3410 find mustExist(problem, interpretation, root);
3411}or{
3412 find interpretation(problem,interpretation);
3413 find mustInstanceOfFunctionalElement_class(problem,interpretation,root);
3414 find mustExist(problem, interpretation, root);
3415}or{
3416 find interpretation(problem,interpretation);
3417 find mustInstanceOfFunctionalInput_class(problem,interpretation,root);
3418 find mustExist(problem, interpretation, root);
3419}or{
3420 find interpretation(problem,interpretation);
3421 find mustInstanceOfFunction_class(problem,interpretation,root);
3422 find mustExist(problem, interpretation, root);
3423}or{
3424 find interpretation(problem,interpretation);
3425 find mustInstanceOfFunctionalInterface_class(problem,interpretation,root);
3426 find mustExist(problem, interpretation, root);
3427}or{
3428 find interpretation(problem,interpretation);
3429 find mustInstanceOfFAMTerminator_class(problem,interpretation,root);
3430 find mustExist(problem, interpretation, root);
3431}or{
3432 find interpretation(problem,interpretation);
3433 find mustInstanceOfInformationLink_class(problem,interpretation,root);
3434 find mustExist(problem, interpretation, root);
3435}or{
3436 find interpretation(problem,interpretation);
3437 find mustInstanceOfFunctionalOutput_class(problem,interpretation,root);
3438 find mustExist(problem, interpretation, root);
3439}or{
3440 find interpretation(problem,interpretation);
3441 find mustInstanceOfFunctionalData_class(problem,interpretation,root);
3442 find mustExist(problem, interpretation, root);
3443}or{
3444 find interpretation(problem,interpretation);
3445 find mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem,interpretation,root);
3446 find mustExist(problem, interpretation, root);
3447}or{
3448 find interpretation(problem,interpretation);
3449 find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,root);
3450 find mustExist(problem, interpretation, root);
3451}
3452pattern createObject_FunctionalInput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData(
3453 problem:LogicProblem, interpretation:PartialInterpretation,
3454 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
3455 container:DefinedElement)
3456{
3457 find interpretation(problem,interpretation);
3458 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
3459 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class");
3460 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
3461 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface");
3462 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
3463 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData");
3464 find mustInstanceOfFunctionalInterface_class(problem,interpretation,container);
3465 find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject);
3466 find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject);
3467 find mustExist(problem, interpretation, container);
3468 neg find mustExist(problem, interpretation, newObject);
3469}
3470pattern createObject_FunctionalInput_class(
3471 problem:LogicProblem, interpretation:PartialInterpretation,
3472 typeInterpretation:PartialComplexTypeInterpretation)
3473{
3474 find interpretation(problem,interpretation);
3475 neg find hasElementInContainment(problem,interpretation);
3476 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
3477 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class");
3478 find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject);
3479 find mayExist(problem, interpretation, newObject);
3480 neg find mustExist(problem, interpretation, newObject);
3481}
3482pattern createObject_FunctionalInterface_class_by_interface_reference_FunctionalElement_with_element_reference_FunctionalInterface(
3483 problem:LogicProblem, interpretation:PartialInterpretation,
3484 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
3485 container:DefinedElement)
3486{
3487 find interpretation(problem,interpretation);
3488 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
3489 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class");
3490 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
3491 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"interface reference FunctionalElement");
3492 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
3493 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"element reference FunctionalInterface");
3494 find mustInstanceOfFunctionalElement_class(problem,interpretation,container);
3495 find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject);
3496 find mayInRelationinterface_reference_FunctionalElement(problem,interpretation,container,newObject);
3497 find mustExist(problem, interpretation, container);
3498 neg find mustExist(problem, interpretation, newObject);
3499}
3500pattern createObject_FunctionalInterface_class(
3501 problem:LogicProblem, interpretation:PartialInterpretation,
3502 typeInterpretation:PartialComplexTypeInterpretation)
3503{
3504 find interpretation(problem,interpretation);
3505 neg find hasElementInContainment(problem,interpretation);
3506 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
3507 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class");
3508 find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject);
3509 find mayExist(problem, interpretation, newObject);
3510 neg find mustExist(problem, interpretation, newObject);
3511}
3512pattern createObject_Function_class_by_rootElements_reference_FunctionalArchitectureModel(
3513 problem:LogicProblem, interpretation:PartialInterpretation,
3514 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
3515 container:DefinedElement)
3516{
3517 find interpretation(problem,interpretation);
3518 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
3519 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class");
3520 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
3521 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"rootElements reference FunctionalArchitectureModel");
3522 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,container);
3523 find mayInstanceOfFunction_class(problem,interpretation,newObject);
3524 find mayInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,container,newObject);
3525 find mustExist(problem, interpretation, container);
3526 neg find mustExist(problem, interpretation, newObject);
3527}
3528pattern createObject_Function_class_by_subElements_reference_Function_with_parent_reference_FunctionalElement(
3529 problem:LogicProblem, interpretation:PartialInterpretation,
3530 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
3531 container:DefinedElement)
3532{
3533 find interpretation(problem,interpretation);
3534 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
3535 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class");
3536 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
3537 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"subElements reference Function");
3538 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
3539 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FunctionalElement");
3540 find mustInstanceOfFunction_class(problem,interpretation,container);
3541 find mayInstanceOfFunction_class(problem,interpretation,newObject);
3542 find mayInRelationsubElements_reference_Function(problem,interpretation,container,newObject);
3543 find mustExist(problem, interpretation, container);
3544 neg find mustExist(problem, interpretation, newObject);
3545}
3546pattern createObject_Function_class(
3547 problem:LogicProblem, interpretation:PartialInterpretation,
3548 typeInterpretation:PartialComplexTypeInterpretation)
3549{
3550 find interpretation(problem,interpretation);
3551 neg find hasElementInContainment(problem,interpretation);
3552 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
3553 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class");
3554 find mayInstanceOfFunction_class(problem,interpretation,newObject);
3555 find mayExist(problem, interpretation, newObject);
3556 neg find mustExist(problem, interpretation, newObject);
3557}
3558pattern createObject_FAMTerminator_class_by_terminator_reference_FunctionalData_with_data_reference_FAMTerminator(
3559 problem:LogicProblem, interpretation:PartialInterpretation,
3560 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
3561 container:DefinedElement)
3562{
3563 find interpretation(problem,interpretation);
3564 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
3565 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class");
3566 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
3567 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"terminator reference FunctionalData");
3568 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
3569 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"data reference FAMTerminator");
3570 find mustInstanceOfFunctionalData_class(problem,interpretation,container);
3571 find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject);
3572 find mayInRelationterminator_reference_FunctionalData(problem,interpretation,container,newObject);
3573 find mustExist(problem, interpretation, container);
3574 neg find mustExist(problem, interpretation, newObject);
3575}
3576pattern createObject_FAMTerminator_class(
3577 problem:LogicProblem, interpretation:PartialInterpretation,
3578 typeInterpretation:PartialComplexTypeInterpretation)
3579{
3580 find interpretation(problem,interpretation);
3581 neg find hasElementInContainment(problem,interpretation);
3582 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
3583 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class");
3584 find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject);
3585 find mayExist(problem, interpretation, newObject);
3586 neg find mustExist(problem, interpretation, newObject);
3587}
3588pattern createObject_InformationLink_class_by_outgoingLinks_reference_FunctionalOutput_with_from_reference_InformationLink(
3589 problem:LogicProblem, interpretation:PartialInterpretation,
3590 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
3591 container:DefinedElement)
3592{
3593 find interpretation(problem,interpretation);
3594 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
3595 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class");
3596 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
3597 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingLinks reference FunctionalOutput");
3598 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
3599 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"from reference InformationLink");
3600 find mustInstanceOfFunctionalOutput_class(problem,interpretation,container);
3601 find mayInstanceOfInformationLink_class(problem,interpretation,newObject);
3602 find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,container,newObject);
3603 find mustExist(problem, interpretation, container);
3604 neg find mustExist(problem, interpretation, newObject);
3605}
3606pattern createObject_InformationLink_class(
3607 problem:LogicProblem, interpretation:PartialInterpretation,
3608 typeInterpretation:PartialComplexTypeInterpretation)
3609{
3610 find interpretation(problem,interpretation);
3611 neg find hasElementInContainment(problem,interpretation);
3612 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
3613 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class");
3614 find mayInstanceOfInformationLink_class(problem,interpretation,newObject);
3615 find mayExist(problem, interpretation, newObject);
3616 neg find mustExist(problem, interpretation, newObject);
3617}
3618pattern createObject_FunctionalArchitectureModel_class_UndefinedPart(
3619 problem:LogicProblem, interpretation:PartialInterpretation,
3620 typeInterpretation:PartialComplexTypeInterpretation)
3621{
3622 find interpretation(problem,interpretation);
3623 neg find hasElementInContainment(problem,interpretation);
3624 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
3625 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalArchitectureModel class UndefinedPart");
3626 find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,newObject);
3627 find mayExist(problem, interpretation, newObject);
3628 neg find mustExist(problem, interpretation, newObject);
3629}
3630pattern createObject_FunctionalOutput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData(
3631 problem:LogicProblem, interpretation:PartialInterpretation,
3632 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
3633 container:DefinedElement)
3634{
3635 find interpretation(problem,interpretation);
3636 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
3637 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class");
3638 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
3639 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface");
3640 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
3641 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData");
3642 find mustInstanceOfFunctionalInterface_class(problem,interpretation,container);
3643 find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject);
3644 find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject);
3645 find mustExist(problem, interpretation, container);
3646 neg find mustExist(problem, interpretation, newObject);
3647}
3648pattern createObject_FunctionalOutput_class(
3649 problem:LogicProblem, interpretation:PartialInterpretation,
3650 typeInterpretation:PartialComplexTypeInterpretation)
3651{
3652 find interpretation(problem,interpretation);
3653 neg find hasElementInContainment(problem,interpretation);
3654 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
3655 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class");
3656 find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject);
3657 find mayExist(problem, interpretation, newObject);
3658 neg find mustExist(problem, interpretation, newObject);
3659}
3660
3661//////////
3662// 4.2 Type refinement
3663//////////
3664pattern refineTypeTo_FunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
3665 find interpretation(problem,interpretation);
3666 PartialInterpretation.newElements(interpretation,element);
3667 find mayInstanceOfFunctionalInput_class(problem,interpretation,element);
3668 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
3669 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
3670 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
3671 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
3672 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
3673 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
3674 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
3675}
3676pattern refineTypeTo_FunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
3677 find interpretation(problem,interpretation);
3678 PartialInterpretation.newElements(interpretation,element);
3679 find mayInstanceOfFunctionalInterface_class(problem,interpretation,element);
3680 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
3681 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
3682 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
3683 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
3684 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
3685 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
3686}
3687pattern refineTypeTo_Function_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
3688 find interpretation(problem,interpretation);
3689 PartialInterpretation.newElements(interpretation,element);
3690 find mayInstanceOfFunction_class(problem,interpretation,element);
3691 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
3692 neg find mustInstanceOfFunction_class(problem,interpretation,element);
3693 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
3694 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
3695 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
3696 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
3697}
3698pattern refineTypeTo_FAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
3699 find interpretation(problem,interpretation);
3700 PartialInterpretation.newElements(interpretation,element);
3701 find mayInstanceOfFAMTerminator_class(problem,interpretation,element);
3702 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
3703 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
3704 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
3705 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
3706 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
3707 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
3708}
3709pattern refineTypeTo_InformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
3710 find interpretation(problem,interpretation);
3711 PartialInterpretation.newElements(interpretation,element);
3712 find mayInstanceOfInformationLink_class(problem,interpretation,element);
3713 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
3714 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
3715 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
3716 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
3717 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
3718 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
3719}
3720pattern refineTypeTo_FunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
3721 find interpretation(problem,interpretation);
3722 PartialInterpretation.newElements(interpretation,element);
3723 find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element);
3724 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
3725 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
3726 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
3727 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
3728 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
3729 neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element);
3730}
3731pattern refineTypeTo_FunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
3732 find interpretation(problem,interpretation);
3733 PartialInterpretation.newElements(interpretation,element);
3734 find mayInstanceOfFunctionalOutput_class(problem,interpretation,element);
3735 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
3736 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
3737 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
3738 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
3739 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
3740 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
3741 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
3742}
3743
3744//////////
3745// 4.3 Relation refinement
3746//////////
3747pattern refineRelation_model_reference_FunctionalElement(
3748 problem:LogicProblem, interpretation:PartialInterpretation,
3749 relationIterpretation:PartialRelationInterpretation,
3750 from: DefinedElement, to: DefinedElement)
3751{
3752 find interpretation(problem,interpretation);
3753 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
3754 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement");
3755 find mustExist(problem, interpretation, from);
3756 find mustExist(problem, interpretation, to);
3757 find mustInstanceOfFunctionalElement_class(problem,interpretation,from);
3758 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,to);
3759 find mayInRelationmodel_reference_FunctionalElement(problem,interpretation,from,to);
3760 neg find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,from,to);
3761}
3762pattern refineRelation_IncomingLinks_reference_FunctionalInput_and_to_reference_InformationLink(
3763 problem:LogicProblem, interpretation:PartialInterpretation,
3764 relationIterpretation:PartialRelationInterpretation, oppositeInterpretation:PartialRelationInterpretation,
3765 from: DefinedElement, to: DefinedElement)
3766{
3767 find interpretation(problem,interpretation);
3768 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
3769 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"IncomingLinks reference FunctionalInput");
3770 PartialInterpretation.partialrelationinterpretation(interpretation,oppositeInterpretation);
3771 PartialRelationInterpretation.interpretationOf.name(oppositeInterpretation,"to reference InformationLink");
3772 find mustExist(problem, interpretation, from);
3773 find mustExist(problem, interpretation, to);
3774 find mustInstanceOfFunctionalInput_class(problem,interpretation,from);
3775 find mustInstanceOfInformationLink_class(problem,interpretation,to);
3776 find mayInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,from,to);
3777 neg find mustInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,from,to);
3778}
3779pattern refineRelation_type_attribute_Function(
3780 problem:LogicProblem, interpretation:PartialInterpretation,
3781 relationIterpretation:PartialRelationInterpretation,
3782 from: DefinedElement, to: DefinedElement)
3783{
3784 find interpretation(problem,interpretation);
3785 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
3786 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function");
3787 find mustExist(problem, interpretation, from);
3788 find mustExist(problem, interpretation, to);
3789 find mustInstanceOfFunction_class(problem,interpretation,from);
3790 find mustInstanceOfFunctionType_enum(problem,interpretation,to);
3791 find mayInRelationtype_attribute_Function(problem,interpretation,from,to);
3792 neg find mustInRelationtype_attribute_Function(problem,interpretation,from,to);
3793}
3794import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage"
3795import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem"
3796import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language"
3797
3798//////////
3799// 0. Util
3800//////////
3801private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) {
3802 PartialInterpretation.problem(interpretation,problem);
3803}
3804
3805/////////////////////////
3806// 0.1 Existence
3807/////////////////////////
3808private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
3809 find interpretation(problem,interpretation);
3810 LogicProblem.elements(problem,element);
3811} or {
3812 find interpretation(problem,interpretation);
3813 PartialInterpretation.newElements(interpretation,element);
3814}
3815
3816private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
3817 find mustExist(problem,interpretation,element);
3818} or {
3819 find interpretation(problem,interpretation);
3820 neg find elementCloseWorld(element);
3821 PartialInterpretation.openWorldElements(interpretation,element);
3822}
3823
3824private pattern elementCloseWorld(element:DefinedElement) {
3825 PartialInterpretation.openWorldElements(i,element);
3826 PartialInterpretation.maxNewElements(i,0);
3827} or {
3828 Scope.targetTypeInterpretation(scope,interpretation);
3829 PartialTypeInterpratation.elements(interpretation,element);
3830 Scope.maxNewElements(scope,0);
3831}
3832
3833////////////////////////
3834// 0.2 Equivalence
3835////////////////////////
3836pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) {
3837 find mayExist(problem,interpretation,a);
3838 find mayExist(problem,interpretation,b);
3839 a == b;
3840}
3841
3842////////////////////////
3843// 0.3 Required Patterns by TypeIndexer
3844////////////////////////
3845private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) {
3846 find interpretation(problem,interpretation);
3847 LogicProblem.types(problem,type);
3848 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
3849 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
3850}
3851
3852private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) {
3853 find interpretation(problem,interpretation);
3854 LogicProblem.types(problem,type);
3855 TypeDefinition.elements(type,element);
3856} or {
3857 find interpretation(problem,interpretation);
3858 find typeInterpretation(problem,interpretation,type,typeInterpretation);
3859 PartialComplexTypeInterpretation.elements(typeInterpretation,element);
3860}
3861
3862private pattern isPrimitive(element: PrimitiveElement) {
3863 PrimitiveElement(element);
3864}
3865
3866//////////
3867// 1. Problem-Specific Base Indexers
3868//////////
3869// 1.1 Type Indexers
3870//////////
3871// 1.1.1 primitive Type Indexers
3872//////////
3873
3874//////////
3875// 1.1.2 domain-specific Type Indexers
3876//////////
3877/**
3878 * An element must be an instance of type "FunctionalElement class".
3879 */
3880private pattern mustInstanceOfFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
3881 Type.name(type,"FunctionalElement class");
3882 find directInstanceOf(problem,interpretation,element,type);
3883}
3884private pattern scopeDisallowsNewFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation) {
3885 find interpretation(problem,interpretation);
3886 PartialInterpretation.scopes(interpretation,scope);
3887 Scope.targetTypeInterpretation(scope,typeInterpretation);
3888 Scope.maxNewElements(scope,0);
3889 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
3890 Type.name(type,"FunctionalElement class");
3891}
3892
3893/**
3894 * An element may be an instance of type "FunctionalElement class".
3895 */
3896private pattern mayInstanceOfFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
3897{
3898 find interpretation(problem,interpretation);
3899 PartialInterpretation.newElements(interpretation,element);
3900 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
3901 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
3902 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
3903 neg find mustInstanceOfFunction_class(problem,interpretation,element);
3904 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
3905 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
3906 neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation);
3907 neg find isPrimitive(element);
3908} or {
3909 find interpretation(problem,interpretation);
3910 PartialInterpretation.openWorldElements(interpretation,element);
3911 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
3912 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
3913 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
3914 neg find mustInstanceOfFunction_class(problem,interpretation,element);
3915 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
3916 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
3917 neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation);
3918 neg find isPrimitive(element);
3919} or
3920{ find mustInstanceOfFunctionalElement_class(problem,interpretation,element); }
3921/**
3922 * An element must be an instance of type "FunctionalArchitectureModel class".
3923 */
3924private pattern mustInstanceOfFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
3925 Type.name(type,"FunctionalArchitectureModel class");
3926 find directInstanceOf(problem,interpretation,element,type);
3927}
3928private pattern scopeDisallowsNewFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation) {
3929 find interpretation(problem,interpretation);
3930 PartialInterpretation.scopes(interpretation,scope);
3931 Scope.targetTypeInterpretation(scope,typeInterpretation);
3932 Scope.maxNewElements(scope,0);
3933 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
3934 Type.name(type,"FunctionalArchitectureModel class");
3935}
3936
3937/**
3938 * An element may be an instance of type "FunctionalArchitectureModel class".
3939 */
3940private pattern mayInstanceOfFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
3941{
3942 find interpretation(problem,interpretation);
3943 PartialInterpretation.newElements(interpretation,element);
3944 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
3945 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
3946 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
3947 neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element);
3948 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
3949 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
3950 neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation);
3951 neg find isPrimitive(element);
3952} or {
3953 find interpretation(problem,interpretation);
3954 PartialInterpretation.openWorldElements(interpretation,element);
3955 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
3956 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
3957 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
3958 neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element);
3959 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
3960 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
3961 neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation);
3962 neg find isPrimitive(element);
3963} or
3964{ find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); }
3965/**
3966 * An element must be an instance of type "Function class".
3967 */
3968private pattern mustInstanceOfFunction_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
3969 Type.name(type,"Function class");
3970 find directInstanceOf(problem,interpretation,element,type);
3971}
3972private pattern scopeDisallowsNewFunction_class(problem:LogicProblem, interpretation:PartialInterpretation) {
3973 find interpretation(problem,interpretation);
3974 PartialInterpretation.scopes(interpretation,scope);
3975 Scope.targetTypeInterpretation(scope,typeInterpretation);
3976 Scope.maxNewElements(scope,0);
3977 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
3978 Type.name(type,"Function class");
3979}
3980
3981/**
3982 * An element may be an instance of type "Function class".
3983 */
3984private pattern mayInstanceOfFunction_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
3985{
3986 find interpretation(problem,interpretation);
3987 PartialInterpretation.newElements(interpretation,element);
3988 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
3989 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
3990 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
3991 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
3992 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
3993 neg find scopeDisallowsNewFunction_class(problem, interpretation);
3994 neg find isPrimitive(element);
3995} or {
3996 find interpretation(problem,interpretation);
3997 PartialInterpretation.openWorldElements(interpretation,element);
3998 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
3999 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
4000 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
4001 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
4002 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
4003 neg find scopeDisallowsNewFunction_class(problem, interpretation);
4004 neg find isPrimitive(element);
4005} or
4006{ find mustInstanceOfFunction_class(problem,interpretation,element); }
4007/**
4008 * An element must be an instance of type "FAMTerminator class".
4009 */
4010private pattern mustInstanceOfFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
4011 Type.name(type,"FAMTerminator class");
4012 find directInstanceOf(problem,interpretation,element,type);
4013}
4014private pattern scopeDisallowsNewFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation) {
4015 find interpretation(problem,interpretation);
4016 PartialInterpretation.scopes(interpretation,scope);
4017 Scope.targetTypeInterpretation(scope,typeInterpretation);
4018 Scope.maxNewElements(scope,0);
4019 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
4020 Type.name(type,"FAMTerminator class");
4021}
4022
4023/**
4024 * An element may be an instance of type "FAMTerminator class".
4025 */
4026private pattern mayInstanceOfFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
4027{
4028 find interpretation(problem,interpretation);
4029 PartialInterpretation.newElements(interpretation,element);
4030 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
4031 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
4032 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
4033 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
4034 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
4035 neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation);
4036 neg find isPrimitive(element);
4037} or {
4038 find interpretation(problem,interpretation);
4039 PartialInterpretation.openWorldElements(interpretation,element);
4040 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
4041 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
4042 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
4043 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
4044 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
4045 neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation);
4046 neg find isPrimitive(element);
4047} or
4048{ find mustInstanceOfFAMTerminator_class(problem,interpretation,element); }
4049/**
4050 * An element must be an instance of type "InformationLink class".
4051 */
4052private pattern mustInstanceOfInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
4053 Type.name(type,"InformationLink class");
4054 find directInstanceOf(problem,interpretation,element,type);
4055}
4056private pattern scopeDisallowsNewInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation) {
4057 find interpretation(problem,interpretation);
4058 PartialInterpretation.scopes(interpretation,scope);
4059 Scope.targetTypeInterpretation(scope,typeInterpretation);
4060 Scope.maxNewElements(scope,0);
4061 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
4062 Type.name(type,"InformationLink class");
4063}
4064
4065/**
4066 * An element may be an instance of type "InformationLink class".
4067 */
4068private pattern mayInstanceOfInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
4069{
4070 find interpretation(problem,interpretation);
4071 PartialInterpretation.newElements(interpretation,element);
4072 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
4073 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
4074 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
4075 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
4076 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
4077 neg find scopeDisallowsNewInformationLink_class(problem, interpretation);
4078 neg find isPrimitive(element);
4079} or {
4080 find interpretation(problem,interpretation);
4081 PartialInterpretation.openWorldElements(interpretation,element);
4082 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
4083 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
4084 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
4085 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
4086 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
4087 neg find scopeDisallowsNewInformationLink_class(problem, interpretation);
4088 neg find isPrimitive(element);
4089} or
4090{ find mustInstanceOfInformationLink_class(problem,interpretation,element); }
4091/**
4092 * An element must be an instance of type "FunctionalInterface class".
4093 */
4094private pattern mustInstanceOfFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
4095 Type.name(type,"FunctionalInterface class");
4096 find directInstanceOf(problem,interpretation,element,type);
4097}
4098private pattern scopeDisallowsNewFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation) {
4099 find interpretation(problem,interpretation);
4100 PartialInterpretation.scopes(interpretation,scope);
4101 Scope.targetTypeInterpretation(scope,typeInterpretation);
4102 Scope.maxNewElements(scope,0);
4103 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
4104 Type.name(type,"FunctionalInterface class");
4105}
4106
4107/**
4108 * An element may be an instance of type "FunctionalInterface class".
4109 */
4110private pattern mayInstanceOfFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
4111{
4112 find interpretation(problem,interpretation);
4113 PartialInterpretation.newElements(interpretation,element);
4114 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
4115 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
4116 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
4117 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
4118 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
4119 neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation);
4120 neg find isPrimitive(element);
4121} or {
4122 find interpretation(problem,interpretation);
4123 PartialInterpretation.openWorldElements(interpretation,element);
4124 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
4125 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
4126 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
4127 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
4128 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
4129 neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation);
4130 neg find isPrimitive(element);
4131} or
4132{ find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); }
4133/**
4134 * An element must be an instance of type "FunctionalInput class".
4135 */
4136private pattern mustInstanceOfFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
4137 Type.name(type,"FunctionalInput class");
4138 find directInstanceOf(problem,interpretation,element,type);
4139}
4140private pattern scopeDisallowsNewFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation) {
4141 find interpretation(problem,interpretation);
4142 PartialInterpretation.scopes(interpretation,scope);
4143 Scope.targetTypeInterpretation(scope,typeInterpretation);
4144 Scope.maxNewElements(scope,0);
4145 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
4146 Type.name(type,"FunctionalInput class");
4147}
4148
4149/**
4150 * An element may be an instance of type "FunctionalInput class".
4151 */
4152private pattern mayInstanceOfFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
4153{
4154 find interpretation(problem,interpretation);
4155 PartialInterpretation.newElements(interpretation,element);
4156 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
4157 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
4158 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
4159 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
4160 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
4161 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
4162 neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation);
4163 neg find isPrimitive(element);
4164} or {
4165 find interpretation(problem,interpretation);
4166 PartialInterpretation.openWorldElements(interpretation,element);
4167 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
4168 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
4169 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
4170 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
4171 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
4172 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
4173 neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation);
4174 neg find isPrimitive(element);
4175} or
4176{ find mustInstanceOfFunctionalInput_class(problem,interpretation,element); }
4177/**
4178 * An element must be an instance of type "FunctionalOutput class".
4179 */
4180private pattern mustInstanceOfFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
4181 Type.name(type,"FunctionalOutput class");
4182 find directInstanceOf(problem,interpretation,element,type);
4183}
4184private pattern scopeDisallowsNewFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation) {
4185 find interpretation(problem,interpretation);
4186 PartialInterpretation.scopes(interpretation,scope);
4187 Scope.targetTypeInterpretation(scope,typeInterpretation);
4188 Scope.maxNewElements(scope,0);
4189 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
4190 Type.name(type,"FunctionalOutput class");
4191}
4192
4193/**
4194 * An element may be an instance of type "FunctionalOutput class".
4195 */
4196private pattern mayInstanceOfFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
4197{
4198 find interpretation(problem,interpretation);
4199 PartialInterpretation.newElements(interpretation,element);
4200 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
4201 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
4202 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
4203 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
4204 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
4205 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
4206 neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation);
4207 neg find isPrimitive(element);
4208} or {
4209 find interpretation(problem,interpretation);
4210 PartialInterpretation.openWorldElements(interpretation,element);
4211 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
4212 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
4213 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
4214 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
4215 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
4216 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
4217 neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation);
4218 neg find isPrimitive(element);
4219} or
4220{ find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); }
4221/**
4222 * An element must be an instance of type "FunctionalData class".
4223 */
4224private pattern mustInstanceOfFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
4225 Type.name(type,"FunctionalData class");
4226 find directInstanceOf(problem,interpretation,element,type);
4227}
4228private pattern scopeDisallowsNewFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation) {
4229 find interpretation(problem,interpretation);
4230 PartialInterpretation.scopes(interpretation,scope);
4231 Scope.targetTypeInterpretation(scope,typeInterpretation);
4232 Scope.maxNewElements(scope,0);
4233 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
4234 Type.name(type,"FunctionalData class");
4235}
4236
4237/**
4238 * An element may be an instance of type "FunctionalData class".
4239 */
4240private pattern mayInstanceOfFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
4241{
4242 find interpretation(problem,interpretation);
4243 PartialInterpretation.newElements(interpretation,element);
4244 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
4245 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
4246 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
4247 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
4248 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
4249 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
4250 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
4251 neg find scopeDisallowsNewFunctionalData_class(problem, interpretation);
4252 neg find isPrimitive(element);
4253} or {
4254 find interpretation(problem,interpretation);
4255 PartialInterpretation.openWorldElements(interpretation,element);
4256 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
4257 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
4258 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
4259 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
4260 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
4261 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
4262 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
4263 neg find scopeDisallowsNewFunctionalData_class(problem, interpretation);
4264 neg find isPrimitive(element);
4265} or
4266{ find mustInstanceOfFunctionalData_class(problem,interpretation,element); }
4267/**
4268 * An element must be an instance of type "FunctionType enum".
4269 */
4270private pattern mustInstanceOfFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
4271 Type.name(type,"FunctionType enum");
4272 find directInstanceOf(problem,interpretation,element,type);
4273}
4274private pattern scopeDisallowsNewFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation) {
4275 find interpretation(problem,interpretation);
4276 PartialInterpretation.scopes(interpretation,scope);
4277 Scope.targetTypeInterpretation(scope,typeInterpretation);
4278 Scope.maxNewElements(scope,0);
4279 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
4280 Type.name(type,"FunctionType enum");
4281}
4282
4283/**
4284 * An element may be an instance of type "FunctionType enum".
4285 */
4286private pattern mayInstanceOfFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
4287{ find mustInstanceOfFunctionType_enum(problem,interpretation,element); }
4288/**
4289 * An element must be an instance of type "FunctionalArchitectureModel class DefinedPart".
4290 */
4291private pattern mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
4292 Type.name(type,"FunctionalArchitectureModel class DefinedPart");
4293 find directInstanceOf(problem,interpretation,element,type);
4294}
4295private pattern scopeDisallowsNewFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
4296 find interpretation(problem,interpretation);
4297 PartialInterpretation.scopes(interpretation,scope);
4298 Scope.targetTypeInterpretation(scope,typeInterpretation);
4299 Scope.maxNewElements(scope,0);
4300 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
4301 Type.name(type,"FunctionalArchitectureModel class DefinedPart");
4302}
4303
4304/**
4305 * An element may be an instance of type "FunctionalArchitectureModel class DefinedPart".
4306 */
4307private pattern mayInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
4308{ find mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem,interpretation,element); }
4309/**
4310 * An element must be an instance of type "FunctionalArchitectureModel class UndefinedPart".
4311 */
4312private pattern mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
4313 Type.name(type,"FunctionalArchitectureModel class UndefinedPart");
4314 find directInstanceOf(problem,interpretation,element,type);
4315}
4316private pattern scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
4317 find interpretation(problem,interpretation);
4318 PartialInterpretation.scopes(interpretation,scope);
4319 Scope.targetTypeInterpretation(scope,typeInterpretation);
4320 Scope.maxNewElements(scope,0);
4321 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
4322 Type.name(type,"FunctionalArchitectureModel class UndefinedPart");
4323}
4324
4325/**
4326 * An element may be an instance of type "FunctionalArchitectureModel class UndefinedPart".
4327 */
4328private pattern mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
4329{
4330 find interpretation(problem,interpretation);
4331 PartialInterpretation.newElements(interpretation,element);
4332 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
4333 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
4334 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
4335 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
4336 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
4337 neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation);
4338 neg find isPrimitive(element);
4339} or {
4340 find interpretation(problem,interpretation);
4341 PartialInterpretation.openWorldElements(interpretation,element);
4342 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
4343 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
4344 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
4345 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
4346 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
4347 neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation);
4348 neg find isPrimitive(element);
4349} or
4350{ find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); }
4351
4352//////////
4353// 1.2 Relation Declaration Indexers
4354//////////
4355/**
4356 * Matcher for detecting tuples t where []interface reference FunctionalElement(source,target)
4357 */
4358private pattern mustInRelationinterface_reference_FunctionalElement(
4359 problem:LogicProblem, interpretation:PartialInterpretation,
4360 source: DefinedElement, target:DefinedElement)
4361{
4362 find interpretation(problem,interpretation);
4363 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
4364 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface reference FunctionalElement");
4365 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
4366 BinaryElementRelationLink.param1(link,source);
4367 BinaryElementRelationLink.param2(link,target);
4368}
4369/**
4370 * Matcher for detecting tuples t where <>interface reference FunctionalElement(source,target)
4371 */
4372private pattern mayInRelationinterface_reference_FunctionalElement(
4373 problem:LogicProblem, interpretation:PartialInterpretation,
4374 source: DefinedElement, target:DefinedElement)
4375{
4376 find interpretation(problem,interpretation);
4377 // The two endpoint of the link have to exist
4378 find mayExist(problem, interpretation, source);
4379 find mayExist(problem, interpretation, target);
4380 // Type consistency
4381 find mayInstanceOfFunctionalElement_class(problem,interpretation,source);
4382 find mayInstanceOfFunctionalInterface_class(problem,interpretation,target);
4383 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
4384 // the upper bound of the multiplicity should be considered.
4385 numberOfExistingReferences == count find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,_);
4386 check(numberOfExistingReferences < 1);
4387 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
4388 // the upper bound of the opposite reference multiplicity should be considered.
4389 numberOfExistingOppositeReferences == count find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,target,_);
4390 check(numberOfExistingOppositeReferences < 1);
4391 // The reference is containment, then a new reference cannot be create if:
4392 // 1. Multiple parents
4393 neg find mustContains4(problem,interpretation,_,target);
4394 // 2. Circle in the containment hierarchy
4395 neg find mustTransitiveContains(source,target);
4396} or {
4397 find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,target);
4398}
4399/**
4400 * Matcher for detecting tuples t where []model reference FunctionalElement(source,target)
4401 */
4402 private pattern mustInRelationmodel_reference_FunctionalElement(
4403 problem:LogicProblem, interpretation:PartialInterpretation,
4404 source: DefinedElement, target:DefinedElement)
4405 {
4406 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_model(problem,interpretation,source,target);
4407 }
4408/**
4409 * Matcher for detecting tuples t where []model reference FunctionalElement(source,target)
4410 */
4411 private pattern mayInRelationmodel_reference_FunctionalElement(
4412 problem:LogicProblem, interpretation:PartialInterpretation,
4413 source: DefinedElement, target:DefinedElement)
4414 {
4415 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_model(problem,interpretation,source,target);
4416 }
4417/**
4418 * Matcher for detecting tuples t where []parent reference FunctionalElement(source,target)
4419 */
4420private pattern mustInRelationparent_reference_FunctionalElement(
4421 problem:LogicProblem, interpretation:PartialInterpretation,
4422 source: DefinedElement, target:DefinedElement)
4423{
4424 find interpretation(problem,interpretation);
4425 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
4426 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"parent reference FunctionalElement");
4427 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
4428 BinaryElementRelationLink.param1(link,source);
4429 BinaryElementRelationLink.param2(link,target);
4430}
4431/**
4432 * Matcher for detecting tuples t where <>parent reference FunctionalElement(source,target)
4433 */
4434private pattern mayInRelationparent_reference_FunctionalElement(
4435 problem:LogicProblem, interpretation:PartialInterpretation,
4436 source: DefinedElement, target:DefinedElement)
4437{
4438 find interpretation(problem,interpretation);
4439 // The two endpoint of the link have to exist
4440 find mayExist(problem, interpretation, source);
4441 find mayExist(problem, interpretation, target);
4442 // Type consistency
4443 find mayInstanceOfFunctionalElement_class(problem,interpretation,source);
4444 find mayInstanceOfFunction_class(problem,interpretation,target);
4445 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
4446 // the upper bound of the multiplicity should be considered.
4447 numberOfExistingReferences == count find mustInRelationparent_reference_FunctionalElement(problem,interpretation,source,_);
4448 check(numberOfExistingReferences < 1);
4449 // The eOpposite of the reference is containment, then a referene cannot be created if
4450 // 1. Multiple parents
4451 neg find mustContains4(problem,interpretation,source,_);
4452 // 2. Circle in the containment hierarchy
4453 neg find mustTransitiveContains(source,target);
4454} or {
4455 find mustInRelationparent_reference_FunctionalElement(problem,interpretation,source,target);
4456}
4457/**
4458 * Matcher for detecting tuples t where []rootElements reference FunctionalArchitectureModel(source,target)
4459 */
4460private pattern mustInRelationrootElements_reference_FunctionalArchitectureModel(
4461 problem:LogicProblem, interpretation:PartialInterpretation,
4462 source: DefinedElement, target:DefinedElement)
4463{
4464 find interpretation(problem,interpretation);
4465 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
4466 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"rootElements reference FunctionalArchitectureModel");
4467 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
4468 BinaryElementRelationLink.param1(link,source);
4469 BinaryElementRelationLink.param2(link,target);
4470}
4471/**
4472 * Matcher for detecting tuples t where <>rootElements reference FunctionalArchitectureModel(source,target)
4473 */
4474private pattern mayInRelationrootElements_reference_FunctionalArchitectureModel(
4475 problem:LogicProblem, interpretation:PartialInterpretation,
4476 source: DefinedElement, target:DefinedElement)
4477{
4478 find interpretation(problem,interpretation);
4479 // The two endpoint of the link have to exist
4480 find mayExist(problem, interpretation, source);
4481 find mayExist(problem, interpretation, target);
4482 // Type consistency
4483 find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,source);
4484 find mayInstanceOfFunctionalElement_class(problem,interpretation,target);
4485 // The reference is containment, then a new reference cannot be create if:
4486 // 1. Multiple parents
4487 neg find mustContains4(problem,interpretation,_,target);
4488 // 2. Circle in the containment hierarchy
4489 neg find mustTransitiveContains(source,target);
4490} or {
4491 find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,source,target);
4492}
4493/**
4494 * Matcher for detecting tuples t where []subElements reference Function(source,target)
4495 */
4496private pattern mustInRelationsubElements_reference_Function(
4497 problem:LogicProblem, interpretation:PartialInterpretation,
4498 source: DefinedElement, target:DefinedElement)
4499{
4500 find interpretation(problem,interpretation);
4501 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
4502 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"subElements reference Function");
4503 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
4504 BinaryElementRelationLink.param1(link,source);
4505 BinaryElementRelationLink.param2(link,target);
4506}
4507/**
4508 * Matcher for detecting tuples t where <>subElements reference Function(source,target)
4509 */
4510private pattern mayInRelationsubElements_reference_Function(
4511 problem:LogicProblem, interpretation:PartialInterpretation,
4512 source: DefinedElement, target:DefinedElement)
4513{
4514 find interpretation(problem,interpretation);
4515 // The two endpoint of the link have to exist
4516 find mayExist(problem, interpretation, source);
4517 find mayExist(problem, interpretation, target);
4518 // Type consistency
4519 find mayInstanceOfFunction_class(problem,interpretation,source);
4520 find mayInstanceOfFunctionalElement_class(problem,interpretation,target);
4521 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
4522 // the upper bound of the opposite reference multiplicity should be considered.
4523 numberOfExistingOppositeReferences == count find mustInRelationparent_reference_FunctionalElement(problem,interpretation,target,_);
4524 check(numberOfExistingOppositeReferences < 1);
4525 // The reference is containment, then a new reference cannot be create if:
4526 // 1. Multiple parents
4527 neg find mustContains4(problem,interpretation,_,target);
4528 // 2. Circle in the containment hierarchy
4529 neg find mustTransitiveContains(source,target);
4530} or {
4531 find mustInRelationsubElements_reference_Function(problem,interpretation,source,target);
4532}
4533/**
4534 * Matcher for detecting tuples t where []data reference FAMTerminator(source,target)
4535 */
4536private pattern mustInRelationdata_reference_FAMTerminator(
4537 problem:LogicProblem, interpretation:PartialInterpretation,
4538 source: DefinedElement, target:DefinedElement)
4539{
4540 find interpretation(problem,interpretation);
4541 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
4542 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"data reference FAMTerminator");
4543 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
4544 BinaryElementRelationLink.param1(link,source);
4545 BinaryElementRelationLink.param2(link,target);
4546}
4547/**
4548 * Matcher for detecting tuples t where <>data reference FAMTerminator(source,target)
4549 */
4550private pattern mayInRelationdata_reference_FAMTerminator(
4551 problem:LogicProblem, interpretation:PartialInterpretation,
4552 source: DefinedElement, target:DefinedElement)
4553{
4554 find interpretation(problem,interpretation);
4555 // The two endpoint of the link have to exist
4556 find mayExist(problem, interpretation, source);
4557 find mayExist(problem, interpretation, target);
4558 // Type consistency
4559 find mayInstanceOfFAMTerminator_class(problem,interpretation,source);
4560 find mayInstanceOfFunctionalData_class(problem,interpretation,target);
4561 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
4562 // the upper bound of the multiplicity should be considered.
4563 numberOfExistingReferences == count find mustInRelationdata_reference_FAMTerminator(problem,interpretation,source,_);
4564 check(numberOfExistingReferences < 1);
4565 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
4566 // the upper bound of the opposite reference multiplicity should be considered.
4567 numberOfExistingOppositeReferences == count find mustInRelationterminator_reference_FunctionalData(problem,interpretation,target,_);
4568 check(numberOfExistingOppositeReferences < 1);
4569 // The eOpposite of the reference is containment, then a referene cannot be created if
4570 // 1. Multiple parents
4571 neg find mustContains4(problem,interpretation,source,_);
4572 // 2. Circle in the containment hierarchy
4573 neg find mustTransitiveContains(source,target);
4574} or {
4575 find mustInRelationdata_reference_FAMTerminator(problem,interpretation,source,target);
4576}
4577/**
4578 * Matcher for detecting tuples t where []from reference InformationLink(source,target)
4579 */
4580private pattern mustInRelationfrom_reference_InformationLink(
4581 problem:LogicProblem, interpretation:PartialInterpretation,
4582 source: DefinedElement, target:DefinedElement)
4583{
4584 find interpretation(problem,interpretation);
4585 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
4586 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"from reference InformationLink");
4587 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
4588 BinaryElementRelationLink.param1(link,source);
4589 BinaryElementRelationLink.param2(link,target);
4590}
4591/**
4592 * Matcher for detecting tuples t where <>from reference InformationLink(source,target)
4593 */
4594private pattern mayInRelationfrom_reference_InformationLink(
4595 problem:LogicProblem, interpretation:PartialInterpretation,
4596 source: DefinedElement, target:DefinedElement)
4597{
4598 find interpretation(problem,interpretation);
4599 // The two endpoint of the link have to exist
4600 find mayExist(problem, interpretation, source);
4601 find mayExist(problem, interpretation, target);
4602 // Type consistency
4603 find mayInstanceOfInformationLink_class(problem,interpretation,source);
4604 find mayInstanceOfFunctionalOutput_class(problem,interpretation,target);
4605 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
4606 // the upper bound of the multiplicity should be considered.
4607 numberOfExistingReferences == count find mustInRelationfrom_reference_InformationLink(problem,interpretation,source,_);
4608 check(numberOfExistingReferences < 1);
4609 // The eOpposite of the reference is containment, then a referene cannot be created if
4610 // 1. Multiple parents
4611 neg find mustContains4(problem,interpretation,source,_);
4612 // 2. Circle in the containment hierarchy
4613 neg find mustTransitiveContains(source,target);
4614} or {
4615 find mustInRelationfrom_reference_InformationLink(problem,interpretation,source,target);
4616}
4617/**
4618 * Matcher for detecting tuples t where []to reference InformationLink(source,target)
4619 */
4620private pattern mustInRelationto_reference_InformationLink(
4621 problem:LogicProblem, interpretation:PartialInterpretation,
4622 source: DefinedElement, target:DefinedElement)
4623{
4624 find interpretation(problem,interpretation);
4625 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
4626 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"to reference InformationLink");
4627 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
4628 BinaryElementRelationLink.param1(link,source);
4629 BinaryElementRelationLink.param2(link,target);
4630}
4631/**
4632 * Matcher for detecting tuples t where <>to reference InformationLink(source,target)
4633 */
4634private pattern mayInRelationto_reference_InformationLink(
4635 problem:LogicProblem, interpretation:PartialInterpretation,
4636 source: DefinedElement, target:DefinedElement)
4637{
4638 find interpretation(problem,interpretation);
4639 // The two endpoint of the link have to exist
4640 find mayExist(problem, interpretation, source);
4641 find mayExist(problem, interpretation, target);
4642 // Type consistency
4643 find mayInstanceOfInformationLink_class(problem,interpretation,source);
4644 find mayInstanceOfFunctionalInput_class(problem,interpretation,target);
4645 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
4646 // the upper bound of the multiplicity should be considered.
4647 numberOfExistingReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,source,_);
4648 check(numberOfExistingReferences < 1);
4649} or {
4650 find mustInRelationto_reference_InformationLink(problem,interpretation,source,target);
4651}
4652/**
4653 * Matcher for detecting tuples t where []data reference FunctionalInterface(source,target)
4654 */
4655private pattern mustInRelationdata_reference_FunctionalInterface(
4656 problem:LogicProblem, interpretation:PartialInterpretation,
4657 source: DefinedElement, target:DefinedElement)
4658{
4659 find interpretation(problem,interpretation);
4660 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
4661 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"data reference FunctionalInterface");
4662 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
4663 BinaryElementRelationLink.param1(link,source);
4664 BinaryElementRelationLink.param2(link,target);
4665}
4666/**
4667 * Matcher for detecting tuples t where <>data reference FunctionalInterface(source,target)
4668 */
4669private pattern mayInRelationdata_reference_FunctionalInterface(
4670 problem:LogicProblem, interpretation:PartialInterpretation,
4671 source: DefinedElement, target:DefinedElement)
4672{
4673 find interpretation(problem,interpretation);
4674 // The two endpoint of the link have to exist
4675 find mayExist(problem, interpretation, source);
4676 find mayExist(problem, interpretation, target);
4677 // Type consistency
4678 find mayInstanceOfFunctionalInterface_class(problem,interpretation,source);
4679 find mayInstanceOfFunctionalData_class(problem,interpretation,target);
4680 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
4681 // the upper bound of the opposite reference multiplicity should be considered.
4682 numberOfExistingOppositeReferences == count find mustInRelationinterface_reference_FunctionalData(problem,interpretation,target,_);
4683 check(numberOfExistingOppositeReferences < 1);
4684 // The reference is containment, then a new reference cannot be create if:
4685 // 1. Multiple parents
4686 neg find mustContains4(problem,interpretation,_,target);
4687 // 2. Circle in the containment hierarchy
4688 neg find mustTransitiveContains(source,target);
4689} or {
4690 find mustInRelationdata_reference_FunctionalInterface(problem,interpretation,source,target);
4691}
4692/**
4693 * Matcher for detecting tuples t where []element reference FunctionalInterface(source,target)
4694 */
4695private pattern mustInRelationelement_reference_FunctionalInterface(
4696 problem:LogicProblem, interpretation:PartialInterpretation,
4697 source: DefinedElement, target:DefinedElement)
4698{
4699 find interpretation(problem,interpretation);
4700 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
4701 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"element reference FunctionalInterface");
4702 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
4703 BinaryElementRelationLink.param1(link,source);
4704 BinaryElementRelationLink.param2(link,target);
4705}
4706/**
4707 * Matcher for detecting tuples t where <>element reference FunctionalInterface(source,target)
4708 */
4709private pattern mayInRelationelement_reference_FunctionalInterface(
4710 problem:LogicProblem, interpretation:PartialInterpretation,
4711 source: DefinedElement, target:DefinedElement)
4712{
4713 find interpretation(problem,interpretation);
4714 // The two endpoint of the link have to exist
4715 find mayExist(problem, interpretation, source);
4716 find mayExist(problem, interpretation, target);
4717 // Type consistency
4718 find mayInstanceOfFunctionalInterface_class(problem,interpretation,source);
4719 find mayInstanceOfFunctionalElement_class(problem,interpretation,target);
4720 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
4721 // the upper bound of the multiplicity should be considered.
4722 numberOfExistingReferences == count find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,source,_);
4723 check(numberOfExistingReferences < 1);
4724 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
4725 // the upper bound of the opposite reference multiplicity should be considered.
4726 numberOfExistingOppositeReferences == count find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,target,_);
4727 check(numberOfExistingOppositeReferences < 1);
4728 // The eOpposite of the reference is containment, then a referene cannot be created if
4729 // 1. Multiple parents
4730 neg find mustContains4(problem,interpretation,source,_);
4731 // 2. Circle in the containment hierarchy
4732 neg find mustTransitiveContains(source,target);
4733} or {
4734 find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,source,target);
4735}
4736/**
4737 * Matcher for detecting tuples t where []IncomingLinks reference FunctionalInput(source,target)
4738 */
4739private pattern mustInRelationIncomingLinks_reference_FunctionalInput(
4740 problem:LogicProblem, interpretation:PartialInterpretation,
4741 source: DefinedElement, target:DefinedElement)
4742{
4743 find interpretation(problem,interpretation);
4744 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
4745 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"IncomingLinks reference FunctionalInput");
4746 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
4747 BinaryElementRelationLink.param1(link,source);
4748 BinaryElementRelationLink.param2(link,target);
4749}
4750/**
4751 * Matcher for detecting tuples t where <>IncomingLinks reference FunctionalInput(source,target)
4752 */
4753private pattern mayInRelationIncomingLinks_reference_FunctionalInput(
4754 problem:LogicProblem, interpretation:PartialInterpretation,
4755 source: DefinedElement, target:DefinedElement)
4756{
4757 find interpretation(problem,interpretation);
4758 // The two endpoint of the link have to exist
4759 find mayExist(problem, interpretation, source);
4760 find mayExist(problem, interpretation, target);
4761 // Type consistency
4762 find mayInstanceOfFunctionalInput_class(problem,interpretation,source);
4763 find mayInstanceOfInformationLink_class(problem,interpretation,target);
4764 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
4765 // the upper bound of the opposite reference multiplicity should be considered.
4766 numberOfExistingOppositeReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,target,_);
4767 check(numberOfExistingOppositeReferences < 1);
4768} or {
4769 find mustInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,source,target);
4770}
4771/**
4772 * Matcher for detecting tuples t where []outgoingLinks reference FunctionalOutput(source,target)
4773 */
4774private pattern mustInRelationoutgoingLinks_reference_FunctionalOutput(
4775 problem:LogicProblem, interpretation:PartialInterpretation,
4776 source: DefinedElement, target:DefinedElement)
4777{
4778 find interpretation(problem,interpretation);
4779 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
4780 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"outgoingLinks reference FunctionalOutput");
4781 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
4782 BinaryElementRelationLink.param1(link,source);
4783 BinaryElementRelationLink.param2(link,target);
4784}
4785/**
4786 * Matcher for detecting tuples t where <>outgoingLinks reference FunctionalOutput(source,target)
4787 */
4788private pattern mayInRelationoutgoingLinks_reference_FunctionalOutput(
4789 problem:LogicProblem, interpretation:PartialInterpretation,
4790 source: DefinedElement, target:DefinedElement)
4791{
4792 find interpretation(problem,interpretation);
4793 // The two endpoint of the link have to exist
4794 find mayExist(problem, interpretation, source);
4795 find mayExist(problem, interpretation, target);
4796 // Type consistency
4797 find mayInstanceOfFunctionalOutput_class(problem,interpretation,source);
4798 find mayInstanceOfInformationLink_class(problem,interpretation,target);
4799 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
4800 // the upper bound of the opposite reference multiplicity should be considered.
4801 numberOfExistingOppositeReferences == count find mustInRelationfrom_reference_InformationLink(problem,interpretation,target,_);
4802 check(numberOfExistingOppositeReferences < 1);
4803 // The reference is containment, then a new reference cannot be create if:
4804 // 1. Multiple parents
4805 neg find mustContains4(problem,interpretation,_,target);
4806 // 2. Circle in the containment hierarchy
4807 neg find mustTransitiveContains(source,target);
4808} or {
4809 find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,source,target);
4810}
4811/**
4812 * Matcher for detecting tuples t where []terminator reference FunctionalData(source,target)
4813 */
4814private pattern mustInRelationterminator_reference_FunctionalData(
4815 problem:LogicProblem, interpretation:PartialInterpretation,
4816 source: DefinedElement, target:DefinedElement)
4817{
4818 find interpretation(problem,interpretation);
4819 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
4820 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"terminator reference FunctionalData");
4821 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
4822 BinaryElementRelationLink.param1(link,source);
4823 BinaryElementRelationLink.param2(link,target);
4824}
4825/**
4826 * Matcher for detecting tuples t where <>terminator reference FunctionalData(source,target)
4827 */
4828private pattern mayInRelationterminator_reference_FunctionalData(
4829 problem:LogicProblem, interpretation:PartialInterpretation,
4830 source: DefinedElement, target:DefinedElement)
4831{
4832 find interpretation(problem,interpretation);
4833 // The two endpoint of the link have to exist
4834 find mayExist(problem, interpretation, source);
4835 find mayExist(problem, interpretation, target);
4836 // Type consistency
4837 find mayInstanceOfFunctionalData_class(problem,interpretation,source);
4838 find mayInstanceOfFAMTerminator_class(problem,interpretation,target);
4839 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
4840 // the upper bound of the multiplicity should be considered.
4841 numberOfExistingReferences == count find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,_);
4842 check(numberOfExistingReferences < 1);
4843 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
4844 // the upper bound of the opposite reference multiplicity should be considered.
4845 numberOfExistingOppositeReferences == count find mustInRelationdata_reference_FAMTerminator(problem,interpretation,target,_);
4846 check(numberOfExistingOppositeReferences < 1);
4847 // The reference is containment, then a new reference cannot be create if:
4848 // 1. Multiple parents
4849 neg find mustContains4(problem,interpretation,_,target);
4850 // 2. Circle in the containment hierarchy
4851 neg find mustTransitiveContains(source,target);
4852} or {
4853 find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,target);
4854}
4855/**
4856 * Matcher for detecting tuples t where []interface reference FunctionalData(source,target)
4857 */
4858private pattern mustInRelationinterface_reference_FunctionalData(
4859 problem:LogicProblem, interpretation:PartialInterpretation,
4860 source: DefinedElement, target:DefinedElement)
4861{
4862 find interpretation(problem,interpretation);
4863 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
4864 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface reference FunctionalData");
4865 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
4866 BinaryElementRelationLink.param1(link,source);
4867 BinaryElementRelationLink.param2(link,target);
4868}
4869/**
4870 * Matcher for detecting tuples t where <>interface reference FunctionalData(source,target)
4871 */
4872private pattern mayInRelationinterface_reference_FunctionalData(
4873 problem:LogicProblem, interpretation:PartialInterpretation,
4874 source: DefinedElement, target:DefinedElement)
4875{
4876 find interpretation(problem,interpretation);
4877 // The two endpoint of the link have to exist
4878 find mayExist(problem, interpretation, source);
4879 find mayExist(problem, interpretation, target);
4880 // Type consistency
4881 find mayInstanceOfFunctionalData_class(problem,interpretation,source);
4882 find mayInstanceOfFunctionalInterface_class(problem,interpretation,target);
4883 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
4884 // the upper bound of the multiplicity should be considered.
4885 numberOfExistingReferences == count find mustInRelationinterface_reference_FunctionalData(problem,interpretation,source,_);
4886 check(numberOfExistingReferences < 1);
4887 // The eOpposite of the reference is containment, then a referene cannot be created if
4888 // 1. Multiple parents
4889 neg find mustContains4(problem,interpretation,source,_);
4890 // 2. Circle in the containment hierarchy
4891 neg find mustTransitiveContains(source,target);
4892} or {
4893 find mustInRelationinterface_reference_FunctionalData(problem,interpretation,source,target);
4894}
4895/**
4896 * Matcher for detecting tuples t where []type attribute Function(source,target)
4897 */
4898 private pattern mustInRelationtype_attribute_Function(
4899 problem:LogicProblem, interpretation:PartialInterpretation,
4900 source: DefinedElement, target:DefinedElement)
4901 {
4902 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_type(problem,interpretation,source,target);
4903 }
4904/**
4905 * Matcher for detecting tuples t where []type attribute Function(source,target)
4906 */
4907 private pattern mayInRelationtype_attribute_Function(
4908 problem:LogicProblem, interpretation:PartialInterpretation,
4909 source: DefinedElement, target:DefinedElement)
4910 {
4911 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_type(problem,interpretation,source,target);
4912 }
4913
4914//////////
4915// 1.3 Relation Definition Indexers
4916//////////
4917// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test fam terminatorAndInformation
4918private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_terminatorAndInformation(
4919 problem:LogicProblem, interpretation:PartialInterpretation,
4920 var_T, var_I)
4921{
4922 find interpretation(problem,interpretation);
4923 find mustInstanceOfFAMTerminator_class(problem,interpretation,var_T);
4924 find mustInstanceOfInformationLink_class(problem,interpretation,var_I);
4925 // T is exported
4926 // I is exported
4927 find mustInstanceOfFunctionalOutput_class(problem,interpretation,var_Out);
4928 find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,var_Out,var_virtual0);
4929 find mustInstanceOfInformationLink_class(problem,interpretation,var_virtual0);
4930 var_virtual0 == var_I;
4931 find mustInstanceOfFunctionalOutput_class(problem,interpretation,var_Out);
4932 find mustInRelationterminator_reference_FunctionalData(problem,interpretation,var_Out,var_virtual1);
4933 find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1);
4934 var_virtual1 == var_T;
4935}or{
4936 find interpretation(problem,interpretation);
4937 find mustInstanceOfFAMTerminator_class(problem,interpretation,var_T);
4938 find mustInstanceOfInformationLink_class(problem,interpretation,var_I);
4939 // T is exported
4940 // I is exported
4941 find mustInstanceOfInformationLink_class(problem,interpretation,var_I);
4942 find mustInRelationto_reference_InformationLink(problem,interpretation,var_I,var_virtual0);
4943 find mustInstanceOfFunctionalInput_class(problem,interpretation,var_virtual0);
4944 var_virtual0 == var_In;
4945 find mustInstanceOfFunctionalInput_class(problem,interpretation,var_In);
4946 find mustInRelationterminator_reference_FunctionalData(problem,interpretation,var_In,var_virtual1);
4947 find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1);
4948 var_virtual1 == var_T;
4949}
4950private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_terminatorAndInformation(
4951 problem:LogicProblem, interpretation:PartialInterpretation,
4952 var_T, var_I)
4953{
4954 find interpretation(problem,interpretation);
4955 find mayInstanceOfFAMTerminator_class(problem,interpretation,var_T);
4956 find mayInstanceOfInformationLink_class(problem,interpretation,var_I);
4957 // T is exported
4958 // I is exported
4959 find mayInstanceOfFunctionalOutput_class(problem,interpretation,var_Out);
4960 find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,var_Out,var_virtual0);
4961 find mayInstanceOfInformationLink_class(problem,interpretation,var_virtual0);
4962 find mayEquivalent(problem, interpretation, var_virtual0, var_I);
4963 find mayInstanceOfFunctionalOutput_class(problem,interpretation,var_Out);
4964 find mayInRelationterminator_reference_FunctionalData(problem,interpretation,var_Out,var_virtual1);
4965 find mayInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1);
4966 find mayEquivalent(problem, interpretation, var_virtual1, var_T);
4967}or{
4968 find interpretation(problem,interpretation);
4969 find mayInstanceOfFAMTerminator_class(problem,interpretation,var_T);
4970 find mayInstanceOfInformationLink_class(problem,interpretation,var_I);
4971 // T is exported
4972 // I is exported
4973 find mayInstanceOfInformationLink_class(problem,interpretation,var_I);
4974 find mayInRelationto_reference_InformationLink(problem,interpretation,var_I,var_virtual0);
4975 find mayInstanceOfFunctionalInput_class(problem,interpretation,var_virtual0);
4976 find mayEquivalent(problem, interpretation, var_virtual0, var_In);
4977 find mayInstanceOfFunctionalInput_class(problem,interpretation,var_In);
4978 find mayInRelationterminator_reference_FunctionalData(problem,interpretation,var_In,var_virtual1);
4979 find mayInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1);
4980 find mayEquivalent(problem, interpretation, var_virtual1, var_T);
4981}
4982private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_terminatorAndInformation(
4983 problem:LogicProblem, interpretation:PartialInterpretation,
4984 var_T, var_I)
4985{
4986 find interpretation(problem,interpretation);
4987 find mustInstanceOfFAMTerminator_class(problem,interpretation,var_T);
4988 find mustInstanceOfInformationLink_class(problem,interpretation,var_I);
4989 // T is exported
4990 // I is exported
4991 find mustInstanceOfFunctionalOutput_class(problem,interpretation,var_Out);
4992 find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,var_Out,var_virtual0);
4993 find mustInstanceOfInformationLink_class(problem,interpretation,var_virtual0);
4994 var_virtual0 == var_I;
4995 find mustInstanceOfFunctionalOutput_class(problem,interpretation,var_Out);
4996 find mustInRelationterminator_reference_FunctionalData(problem,interpretation,var_Out,var_virtual1);
4997 find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1);
4998 var_virtual1 == var_T;
4999}or{
5000 find interpretation(problem,interpretation);
5001 find mustInstanceOfFAMTerminator_class(problem,interpretation,var_T);
5002 find mustInstanceOfInformationLink_class(problem,interpretation,var_I);
5003 // T is exported
5004 // I is exported
5005 find mustInstanceOfInformationLink_class(problem,interpretation,var_I);
5006 find mustInRelationto_reference_InformationLink(problem,interpretation,var_I,var_virtual0);
5007 find mustInstanceOfFunctionalInput_class(problem,interpretation,var_virtual0);
5008 var_virtual0 == var_In;
5009 find mustInstanceOfFunctionalInput_class(problem,interpretation,var_In);
5010 find mustInRelationterminator_reference_FunctionalData(problem,interpretation,var_In,var_virtual1);
5011 find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1);
5012 var_virtual1 == var_T;
5013}
5014// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test fam type
5015private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_type(
5016 problem:LogicProblem, interpretation:PartialInterpretation,
5017 var_This, var_Target)
5018{
5019 find interpretation(problem,interpretation);
5020 find mustInstanceOfFunction_class(problem,interpretation,var_This);
5021 // type constraint is enforced by construction
5022 // This is exported
5023 // Target is exported
5024 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(problem,interpretation,_var__Model,var_This);
5025 var_virtual0 == const_Root_FunctionType;DefinedElement.name(const_Root_FunctionType,"Root FunctionType"); //LogicProblem.elements(problem,const_Root_FunctionType);
5026 var_Target == var_virtual0;
5027}or{
5028 find interpretation(problem,interpretation);
5029 find mustInstanceOfFunction_class(problem,interpretation,var_This);
5030 // type constraint is enforced by construction
5031 // This is exported
5032 // Target is exported
5033 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,_var__Child,var_This);
5034 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(problem,interpretation,_var__Model,var_This);
5035 var_virtual0 == const_Leaf_FunctionType;DefinedElement.name(const_Leaf_FunctionType,"Leaf FunctionType"); //LogicProblem.elements(problem,const_Leaf_FunctionType);
5036 var_Target == var_virtual0;
5037}or{
5038 find interpretation(problem,interpretation);
5039 find mustInstanceOfFunction_class(problem,interpretation,var_This);
5040 // type constraint is enforced by construction
5041 // This is exported
5042 // Target is exported
5043 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,var_This,_var__Par);
5044 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,_var__Child,var_This);
5045 var_virtual0 == const_Intermediate_FunctionType;DefinedElement.name(const_Intermediate_FunctionType,"Intermediate FunctionType"); //LogicProblem.elements(problem,const_Intermediate_FunctionType);
5046 var_Target == var_virtual0;
5047}
5048private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_type(
5049 problem:LogicProblem, interpretation:PartialInterpretation,
5050 var_This, var_Target)
5051{
5052 find interpretation(problem,interpretation);
5053 find mayInstanceOfFunction_class(problem,interpretation,var_This);
5054 // type constraint is enforced by construction
5055 // This is exported
5056 // Target is exported
5057 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(problem,interpretation,_var__Model,var_This);
5058 var_virtual0 == const_Root_FunctionType;DefinedElement.name(const_Root_FunctionType,"Root FunctionType"); //LogicProblem.elements(problem,const_Root_FunctionType);
5059 find mayEquivalent(problem, interpretation, var_Target, var_virtual0);
5060}or{
5061 find interpretation(problem,interpretation);
5062 find mayInstanceOfFunction_class(problem,interpretation,var_This);
5063 // type constraint is enforced by construction
5064 // This is exported
5065 // Target is exported
5066 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,_var__Child,var_This);
5067 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(problem,interpretation,_var__Model,var_This);
5068 var_virtual0 == const_Leaf_FunctionType;DefinedElement.name(const_Leaf_FunctionType,"Leaf FunctionType"); //LogicProblem.elements(problem,const_Leaf_FunctionType);
5069 find mayEquivalent(problem, interpretation, var_Target, var_virtual0);
5070}or{
5071 find interpretation(problem,interpretation);
5072 find mayInstanceOfFunction_class(problem,interpretation,var_This);
5073 // type constraint is enforced by construction
5074 // This is exported
5075 // Target is exported
5076 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,var_This,_var__Par);
5077 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,_var__Child,var_This);
5078 var_virtual0 == const_Intermediate_FunctionType;DefinedElement.name(const_Intermediate_FunctionType,"Intermediate FunctionType"); //LogicProblem.elements(problem,const_Intermediate_FunctionType);
5079 find mayEquivalent(problem, interpretation, var_Target, var_virtual0);
5080}
5081private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_type(
5082 problem:LogicProblem, interpretation:PartialInterpretation,
5083 var_This, var_Target)
5084{
5085 find interpretation(problem,interpretation);
5086 find mustInstanceOfFunction_class(problem,interpretation,var_This);
5087 // type constraint is enforced by construction
5088 // This is exported
5089 // Target is exported
5090 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(problem,interpretation,_var__Model,var_This);
5091 var_virtual0 == const_Root_FunctionType;DefinedElement.name(const_Root_FunctionType,"Root FunctionType"); //LogicProblem.elements(problem,const_Root_FunctionType);
5092 var_Target == var_virtual0;
5093}or{
5094 find interpretation(problem,interpretation);
5095 find mustInstanceOfFunction_class(problem,interpretation,var_This);
5096 // type constraint is enforced by construction
5097 // This is exported
5098 // Target is exported
5099 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,_var__Child,var_This);
5100 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(problem,interpretation,_var__Model,var_This);
5101 var_virtual0 == const_Leaf_FunctionType;DefinedElement.name(const_Leaf_FunctionType,"Leaf FunctionType"); //LogicProblem.elements(problem,const_Leaf_FunctionType);
5102 var_Target == var_virtual0;
5103}or{
5104 find interpretation(problem,interpretation);
5105 find mustInstanceOfFunction_class(problem,interpretation,var_This);
5106 // type constraint is enforced by construction
5107 // This is exported
5108 // Target is exported
5109 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,var_This,_var__Par);
5110 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,_var__Child,var_This);
5111 var_virtual0 == const_Intermediate_FunctionType;DefinedElement.name(const_Intermediate_FunctionType,"Intermediate FunctionType"); //LogicProblem.elements(problem,const_Intermediate_FunctionType);
5112 var_Target == var_virtual0;
5113}
5114// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test fam rootElements
5115private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(
5116 problem:LogicProblem, interpretation:PartialInterpretation,
5117 var_Model, var_Root)
5118{
5119 find interpretation(problem,interpretation);
5120 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Model);
5121 find mustInstanceOfFunction_class(problem,interpretation,var_Root);
5122 // Model is exported
5123 // Root is exported
5124 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Model);
5125 find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,var_Model,var_virtual0);
5126 find mustInstanceOfFunctionalElement_class(problem,interpretation,var_virtual0);
5127 var_virtual0 == var_Root;
5128}
5129private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(
5130 problem:LogicProblem, interpretation:PartialInterpretation,
5131 var_Model, var_Root)
5132{
5133 find interpretation(problem,interpretation);
5134 find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Model);
5135 find mayInstanceOfFunction_class(problem,interpretation,var_Root);
5136 // Model is exported
5137 // Root is exported
5138 find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Model);
5139 find mayInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,var_Model,var_virtual0);
5140 find mayInstanceOfFunctionalElement_class(problem,interpretation,var_virtual0);
5141 find mayEquivalent(problem, interpretation, var_virtual0, var_Root);
5142}
5143private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(
5144 problem:LogicProblem, interpretation:PartialInterpretation,
5145 var_Model, var_Root)
5146{
5147 find interpretation(problem,interpretation);
5148 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Model);
5149 find mustInstanceOfFunction_class(problem,interpretation,var_Root);
5150 // Model is exported
5151 // Root is exported
5152 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Model);
5153 find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,var_Model,var_virtual0);
5154 find mustInstanceOfFunctionalElement_class(problem,interpretation,var_virtual0);
5155 var_virtual0 == var_Root;
5156}
5157// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test fam parent
5158private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(
5159 problem:LogicProblem, interpretation:PartialInterpretation,
5160 var_Func, var_Par)
5161{
5162 find interpretation(problem,interpretation);
5163 find mustInstanceOfFunction_class(problem,interpretation,var_Func);
5164 find mustInstanceOfFunction_class(problem,interpretation,var_Par);
5165 // Func is exported
5166 // Par is exported
5167 find mustInstanceOfFunction_class(problem,interpretation,var_Func);
5168 find mustInRelationparent_reference_FunctionalElement(problem,interpretation,var_Func,var_virtual0);
5169 find mustInstanceOfFunction_class(problem,interpretation,var_virtual0);
5170 var_virtual0 == var_Par;
5171}
5172private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(
5173 problem:LogicProblem, interpretation:PartialInterpretation,
5174 var_Func, var_Par)
5175{
5176 find interpretation(problem,interpretation);
5177 find mayInstanceOfFunction_class(problem,interpretation,var_Func);
5178 find mayInstanceOfFunction_class(problem,interpretation,var_Par);
5179 // Func is exported
5180 // Par is exported
5181 find mayInstanceOfFunction_class(problem,interpretation,var_Func);
5182 find mayInRelationparent_reference_FunctionalElement(problem,interpretation,var_Func,var_virtual0);
5183 find mayInstanceOfFunction_class(problem,interpretation,var_virtual0);
5184 find mayEquivalent(problem, interpretation, var_virtual0, var_Par);
5185}
5186private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(
5187 problem:LogicProblem, interpretation:PartialInterpretation,
5188 var_Func, var_Par)
5189{
5190 find interpretation(problem,interpretation);
5191 find mustInstanceOfFunction_class(problem,interpretation,var_Func);
5192 find mustInstanceOfFunction_class(problem,interpretation,var_Par);
5193 // Func is exported
5194 // Par is exported
5195 find mustInstanceOfFunction_class(problem,interpretation,var_Func);
5196 find mustInRelationparent_reference_FunctionalElement(problem,interpretation,var_Func,var_virtual0);
5197 find mustInstanceOfFunction_class(problem,interpretation,var_virtual0);
5198 var_virtual0 == var_Par;
5199}
5200// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test fam model
5201private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_model(
5202 problem:LogicProblem, interpretation:PartialInterpretation,
5203 var_This, var_Target)
5204{
5205 find interpretation(problem,interpretation);
5206 find mustInstanceOfFunctionalElement_class(problem,interpretation,var_This);
5207 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Target);
5208 // This is exported
5209 // Target is exported
5210 find mustInstanceOfFunctionalElement_class(problem,interpretation,var_This);
5211 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Target);
5212}
5213private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_model(
5214 problem:LogicProblem, interpretation:PartialInterpretation,
5215 var_This, var_Target)
5216{
5217 find interpretation(problem,interpretation);
5218 find mayInstanceOfFunctionalElement_class(problem,interpretation,var_This);
5219 find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Target);
5220 // This is exported
5221 // Target is exported
5222 find mayInstanceOfFunctionalElement_class(problem,interpretation,var_This);
5223 find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Target);
5224}
5225private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_model(
5226 problem:LogicProblem, interpretation:PartialInterpretation,
5227 var_This, var_Target)
5228{
5229 find interpretation(problem,interpretation);
5230 find mustInstanceOfFunctionalElement_class(problem,interpretation,var_This);
5231 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Target);
5232 // This is exported
5233 // Target is exported
5234 find mustInstanceOfFunctionalElement_class(problem,interpretation,var_This);
5235 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Target);
5236}
5237
5238//////////
5239// 1.4 Containment Indexer
5240//////////
5241private pattern mustContains2(source: DefinedElement, target: DefinedElement) {
5242 find mustContains4(_,_,source,target);
5243}
5244
5245private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation,
5246 source: DefinedElement, target: DefinedElement)
5247 { find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,target); }or
5248
5249 { find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,source,target); }or
5250
5251 { find mustInRelationsubElements_reference_Function(problem,interpretation,source,target); }or
5252
5253 { find mustInRelationdata_reference_FunctionalInterface(problem,interpretation,source,target); }or
5254
5255 { find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,source,target); }or
5256
5257 { find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,target); }
5258
5259private pattern mustTransitiveContains(source,target) {
5260 find mustContains2+(source,target);
5261}
5262
5263//////////
5264// 2. Invalidation Indexers
5265//////////
5266// 2.1 Invalidated by WF Queries
5267//////////
5268
5269//////////
5270// 3. Unfinishedness Indexers
5271//////////
5272// 3.1 Unfinishedness Measured by Multiplicity
5273//////////
5274pattern unfinishedLowerMultiplicity_to_reference_InformationLink(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) {
5275 find interpretation(problem,interpretation);
5276 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
5277 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"to reference InformationLink");
5278 find mustInstanceOfInformationLink_class(problem,interpretation,object);
5279 numberOfExistingReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,object,_);
5280 check(numberOfExistingReferences < 1);
5281 missingMultiplicity == eval(1-numberOfExistingReferences);
5282}
5283
5284//////////
5285// 3.2 Unfinishedness Measured by WF Queries
5286//////////
5287
5288//////////
5289// 4. Refinement Indexers
5290//////////
5291// 4.1 Object constructors
5292//////////
5293private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation)
5294{
5295 find interpretation(problem,interpretation);
5296 find mustInstanceOfFunctionalData_class(problem,interpretation,root);
5297 find mustExist(problem, interpretation, root);
5298}or{
5299 find interpretation(problem,interpretation);
5300 find mustInstanceOfInformationLink_class(problem,interpretation,root);
5301 find mustExist(problem, interpretation, root);
5302}or{
5303 find interpretation(problem,interpretation);
5304 find mustInstanceOfFunctionalInterface_class(problem,interpretation,root);
5305 find mustExist(problem, interpretation, root);
5306}or{
5307 find interpretation(problem,interpretation);
5308 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,root);
5309 find mustExist(problem, interpretation, root);
5310}or{
5311 find interpretation(problem,interpretation);
5312 find mustInstanceOfFAMTerminator_class(problem,interpretation,root);
5313 find mustExist(problem, interpretation, root);
5314}or{
5315 find interpretation(problem,interpretation);
5316 find mustInstanceOfFunctionalElement_class(problem,interpretation,root);
5317 find mustExist(problem, interpretation, root);
5318}or{
5319 find interpretation(problem,interpretation);
5320 find mustInstanceOfFunctionalOutput_class(problem,interpretation,root);
5321 find mustExist(problem, interpretation, root);
5322}or{
5323 find interpretation(problem,interpretation);
5324 find mustInstanceOfFunction_class(problem,interpretation,root);
5325 find mustExist(problem, interpretation, root);
5326}or{
5327 find interpretation(problem,interpretation);
5328 find mustInstanceOfFunctionalInput_class(problem,interpretation,root);
5329 find mustExist(problem, interpretation, root);
5330}or{
5331 find interpretation(problem,interpretation);
5332 find mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem,interpretation,root);
5333 find mustExist(problem, interpretation, root);
5334}or{
5335 find interpretation(problem,interpretation);
5336 find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,root);
5337 find mustExist(problem, interpretation, root);
5338}
5339pattern createObject_FunctionalOutput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData(
5340 problem:LogicProblem, interpretation:PartialInterpretation,
5341 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
5342 container:DefinedElement)
5343{
5344 find interpretation(problem,interpretation);
5345 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
5346 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class");
5347 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
5348 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface");
5349 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
5350 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData");
5351 find mustInstanceOfFunctionalInterface_class(problem,interpretation,container);
5352 find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject);
5353 find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject);
5354 find mustExist(problem, interpretation, container);
5355 neg find mustExist(problem, interpretation, newObject);
5356}
5357pattern createObject_FunctionalOutput_class(
5358 problem:LogicProblem, interpretation:PartialInterpretation,
5359 typeInterpretation:PartialComplexTypeInterpretation)
5360{
5361 find interpretation(problem,interpretation);
5362 neg find hasElementInContainment(problem,interpretation);
5363 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
5364 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class");
5365 find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject);
5366 find mayExist(problem, interpretation, newObject);
5367 neg find mustExist(problem, interpretation, newObject);
5368}
5369pattern createObject_FAMTerminator_class_by_terminator_reference_FunctionalData_with_data_reference_FAMTerminator(
5370 problem:LogicProblem, interpretation:PartialInterpretation,
5371 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
5372 container:DefinedElement)
5373{
5374 find interpretation(problem,interpretation);
5375 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
5376 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class");
5377 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
5378 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"terminator reference FunctionalData");
5379 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
5380 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"data reference FAMTerminator");
5381 find mustInstanceOfFunctionalData_class(problem,interpretation,container);
5382 find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject);
5383 find mayInRelationterminator_reference_FunctionalData(problem,interpretation,container,newObject);
5384 find mustExist(problem, interpretation, container);
5385 neg find mustExist(problem, interpretation, newObject);
5386}
5387pattern createObject_FAMTerminator_class(
5388 problem:LogicProblem, interpretation:PartialInterpretation,
5389 typeInterpretation:PartialComplexTypeInterpretation)
5390{
5391 find interpretation(problem,interpretation);
5392 neg find hasElementInContainment(problem,interpretation);
5393 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
5394 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class");
5395 find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject);
5396 find mayExist(problem, interpretation, newObject);
5397 neg find mustExist(problem, interpretation, newObject);
5398}
5399pattern createObject_Function_class_by_rootElements_reference_FunctionalArchitectureModel(
5400 problem:LogicProblem, interpretation:PartialInterpretation,
5401 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
5402 container:DefinedElement)
5403{
5404 find interpretation(problem,interpretation);
5405 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
5406 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class");
5407 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
5408 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"rootElements reference FunctionalArchitectureModel");
5409 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,container);
5410 find mayInstanceOfFunction_class(problem,interpretation,newObject);
5411 find mayInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,container,newObject);
5412 find mustExist(problem, interpretation, container);
5413 neg find mustExist(problem, interpretation, newObject);
5414}
5415pattern createObject_Function_class_by_subElements_reference_Function_with_parent_reference_FunctionalElement(
5416 problem:LogicProblem, interpretation:PartialInterpretation,
5417 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
5418 container:DefinedElement)
5419{
5420 find interpretation(problem,interpretation);
5421 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
5422 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class");
5423 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
5424 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"subElements reference Function");
5425 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
5426 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FunctionalElement");
5427 find mustInstanceOfFunction_class(problem,interpretation,container);
5428 find mayInstanceOfFunction_class(problem,interpretation,newObject);
5429 find mayInRelationsubElements_reference_Function(problem,interpretation,container,newObject);
5430 find mustExist(problem, interpretation, container);
5431 neg find mustExist(problem, interpretation, newObject);
5432}
5433pattern createObject_Function_class(
5434 problem:LogicProblem, interpretation:PartialInterpretation,
5435 typeInterpretation:PartialComplexTypeInterpretation)
5436{
5437 find interpretation(problem,interpretation);
5438 neg find hasElementInContainment(problem,interpretation);
5439 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
5440 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class");
5441 find mayInstanceOfFunction_class(problem,interpretation,newObject);
5442 find mayExist(problem, interpretation, newObject);
5443 neg find mustExist(problem, interpretation, newObject);
5444}
5445pattern createObject_FunctionalInput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData(
5446 problem:LogicProblem, interpretation:PartialInterpretation,
5447 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
5448 container:DefinedElement)
5449{
5450 find interpretation(problem,interpretation);
5451 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
5452 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class");
5453 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
5454 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface");
5455 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
5456 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData");
5457 find mustInstanceOfFunctionalInterface_class(problem,interpretation,container);
5458 find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject);
5459 find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject);
5460 find mustExist(problem, interpretation, container);
5461 neg find mustExist(problem, interpretation, newObject);
5462}
5463pattern createObject_FunctionalInput_class(
5464 problem:LogicProblem, interpretation:PartialInterpretation,
5465 typeInterpretation:PartialComplexTypeInterpretation)
5466{
5467 find interpretation(problem,interpretation);
5468 neg find hasElementInContainment(problem,interpretation);
5469 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
5470 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class");
5471 find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject);
5472 find mayExist(problem, interpretation, newObject);
5473 neg find mustExist(problem, interpretation, newObject);
5474}
5475pattern createObject_FunctionalArchitectureModel_class_UndefinedPart(
5476 problem:LogicProblem, interpretation:PartialInterpretation,
5477 typeInterpretation:PartialComplexTypeInterpretation)
5478{
5479 find interpretation(problem,interpretation);
5480 neg find hasElementInContainment(problem,interpretation);
5481 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
5482 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalArchitectureModel class UndefinedPart");
5483 find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,newObject);
5484 find mayExist(problem, interpretation, newObject);
5485 neg find mustExist(problem, interpretation, newObject);
5486}
5487pattern createObject_FunctionalInterface_class_by_interface_reference_FunctionalElement_with_element_reference_FunctionalInterface(
5488 problem:LogicProblem, interpretation:PartialInterpretation,
5489 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
5490 container:DefinedElement)
5491{
5492 find interpretation(problem,interpretation);
5493 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
5494 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class");
5495 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
5496 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"interface reference FunctionalElement");
5497 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
5498 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"element reference FunctionalInterface");
5499 find mustInstanceOfFunctionalElement_class(problem,interpretation,container);
5500 find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject);
5501 find mayInRelationinterface_reference_FunctionalElement(problem,interpretation,container,newObject);
5502 find mustExist(problem, interpretation, container);
5503 neg find mustExist(problem, interpretation, newObject);
5504}
5505pattern createObject_FunctionalInterface_class(
5506 problem:LogicProblem, interpretation:PartialInterpretation,
5507 typeInterpretation:PartialComplexTypeInterpretation)
5508{
5509 find interpretation(problem,interpretation);
5510 neg find hasElementInContainment(problem,interpretation);
5511 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
5512 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class");
5513 find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject);
5514 find mayExist(problem, interpretation, newObject);
5515 neg find mustExist(problem, interpretation, newObject);
5516}
5517pattern createObject_InformationLink_class_by_outgoingLinks_reference_FunctionalOutput_with_from_reference_InformationLink(
5518 problem:LogicProblem, interpretation:PartialInterpretation,
5519 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
5520 container:DefinedElement)
5521{
5522 find interpretation(problem,interpretation);
5523 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
5524 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class");
5525 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
5526 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingLinks reference FunctionalOutput");
5527 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
5528 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"from reference InformationLink");
5529 find mustInstanceOfFunctionalOutput_class(problem,interpretation,container);
5530 find mayInstanceOfInformationLink_class(problem,interpretation,newObject);
5531 find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,container,newObject);
5532 find mustExist(problem, interpretation, container);
5533 neg find mustExist(problem, interpretation, newObject);
5534}
5535pattern createObject_InformationLink_class(
5536 problem:LogicProblem, interpretation:PartialInterpretation,
5537 typeInterpretation:PartialComplexTypeInterpretation)
5538{
5539 find interpretation(problem,interpretation);
5540 neg find hasElementInContainment(problem,interpretation);
5541 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
5542 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class");
5543 find mayInstanceOfInformationLink_class(problem,interpretation,newObject);
5544 find mayExist(problem, interpretation, newObject);
5545 neg find mustExist(problem, interpretation, newObject);
5546}
5547
5548//////////
5549// 4.2 Type refinement
5550//////////
5551pattern refineTypeTo_FunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
5552 find interpretation(problem,interpretation);
5553 PartialInterpretation.newElements(interpretation,element);
5554 find mayInstanceOfFunctionalOutput_class(problem,interpretation,element);
5555 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
5556 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
5557 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
5558 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
5559 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
5560 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
5561 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
5562}
5563pattern refineTypeTo_FAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
5564 find interpretation(problem,interpretation);
5565 PartialInterpretation.newElements(interpretation,element);
5566 find mayInstanceOfFAMTerminator_class(problem,interpretation,element);
5567 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
5568 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
5569 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
5570 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
5571 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
5572 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
5573}
5574pattern refineTypeTo_Function_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
5575 find interpretation(problem,interpretation);
5576 PartialInterpretation.newElements(interpretation,element);
5577 find mayInstanceOfFunction_class(problem,interpretation,element);
5578 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
5579 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
5580 neg find mustInstanceOfFunction_class(problem,interpretation,element);
5581 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
5582 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
5583 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
5584}
5585pattern refineTypeTo_FunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
5586 find interpretation(problem,interpretation);
5587 PartialInterpretation.newElements(interpretation,element);
5588 find mayInstanceOfFunctionalInput_class(problem,interpretation,element);
5589 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
5590 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
5591 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
5592 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
5593 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
5594 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
5595 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
5596}
5597pattern refineTypeTo_FunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
5598 find interpretation(problem,interpretation);
5599 PartialInterpretation.newElements(interpretation,element);
5600 find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element);
5601 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
5602 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
5603 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
5604 neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element);
5605 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
5606 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
5607}
5608pattern refineTypeTo_FunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
5609 find interpretation(problem,interpretation);
5610 PartialInterpretation.newElements(interpretation,element);
5611 find mayInstanceOfFunctionalInterface_class(problem,interpretation,element);
5612 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
5613 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
5614 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
5615 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
5616 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
5617 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
5618}
5619pattern refineTypeTo_InformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
5620 find interpretation(problem,interpretation);
5621 PartialInterpretation.newElements(interpretation,element);
5622 find mayInstanceOfInformationLink_class(problem,interpretation,element);
5623 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
5624 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
5625 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
5626 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
5627 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
5628 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
5629}
5630
5631//////////
5632// 4.3 Relation refinement
5633//////////
5634pattern refineRelation_model_reference_FunctionalElement(
5635 problem:LogicProblem, interpretation:PartialInterpretation,
5636 relationIterpretation:PartialRelationInterpretation,
5637 from: DefinedElement, to: DefinedElement)
5638{
5639 find interpretation(problem,interpretation);
5640 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
5641 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement");
5642 find mustExist(problem, interpretation, from);
5643 find mustExist(problem, interpretation, to);
5644 find mustInstanceOfFunctionalElement_class(problem,interpretation,from);
5645 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,to);
5646 find mayInRelationmodel_reference_FunctionalElement(problem,interpretation,from,to);
5647 neg find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,from,to);
5648}
5649pattern refineRelation_IncomingLinks_reference_FunctionalInput_and_to_reference_InformationLink(
5650 problem:LogicProblem, interpretation:PartialInterpretation,
5651 relationIterpretation:PartialRelationInterpretation, oppositeInterpretation:PartialRelationInterpretation,
5652 from: DefinedElement, to: DefinedElement)
5653{
5654 find interpretation(problem,interpretation);
5655 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
5656 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"IncomingLinks reference FunctionalInput");
5657 PartialInterpretation.partialrelationinterpretation(interpretation,oppositeInterpretation);
5658 PartialRelationInterpretation.interpretationOf.name(oppositeInterpretation,"to reference InformationLink");
5659 find mustExist(problem, interpretation, from);
5660 find mustExist(problem, interpretation, to);
5661 find mustInstanceOfFunctionalInput_class(problem,interpretation,from);
5662 find mustInstanceOfInformationLink_class(problem,interpretation,to);
5663 find mayInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,from,to);
5664 neg find mustInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,from,to);
5665}
5666pattern refineRelation_type_attribute_Function(
5667 problem:LogicProblem, interpretation:PartialInterpretation,
5668 relationIterpretation:PartialRelationInterpretation,
5669 from: DefinedElement, to: DefinedElement)
5670{
5671 find interpretation(problem,interpretation);
5672 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
5673 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function");
5674 find mustExist(problem, interpretation, from);
5675 find mustExist(problem, interpretation, to);
5676 find mustInstanceOfFunction_class(problem,interpretation,from);
5677 find mustInstanceOfFunctionType_enum(problem,interpretation,to);
5678 find mayInRelationtype_attribute_Function(problem,interpretation,from,to);
5679 neg find mustInRelationtype_attribute_Function(problem,interpretation,from,to);
5680}
5681import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage"
5682import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem"
5683import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language"
5684
5685//////////
5686// 0. Util
5687//////////
5688private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) {
5689 PartialInterpretation.problem(interpretation,problem);
5690}
5691
5692/////////////////////////
5693// 0.1 Existence
5694/////////////////////////
5695private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
5696 find interpretation(problem,interpretation);
5697 LogicProblem.elements(problem,element);
5698} or {
5699 find interpretation(problem,interpretation);
5700 PartialInterpretation.newElements(interpretation,element);
5701}
5702
5703private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
5704 find mustExist(problem,interpretation,element);
5705} or {
5706 find interpretation(problem,interpretation);
5707 neg find elementCloseWorld(element);
5708 PartialInterpretation.openWorldElements(interpretation,element);
5709}
5710
5711private pattern elementCloseWorld(element:DefinedElement) {
5712 PartialInterpretation.openWorldElements(i,element);
5713 PartialInterpretation.maxNewElements(i,0);
5714} or {
5715 Scope.targetTypeInterpretation(scope,interpretation);
5716 PartialTypeInterpratation.elements(interpretation,element);
5717 Scope.maxNewElements(scope,0);
5718}
5719
5720////////////////////////
5721// 0.2 Equivalence
5722////////////////////////
5723pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) {
5724 find mayExist(problem,interpretation,a);
5725 find mayExist(problem,interpretation,b);
5726 a == b;
5727}
5728
5729////////////////////////
5730// 0.3 Required Patterns by TypeIndexer
5731////////////////////////
5732private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) {
5733 find interpretation(problem,interpretation);
5734 LogicProblem.types(problem,type);
5735 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
5736 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
5737}
5738
5739private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) {
5740 find interpretation(problem,interpretation);
5741 LogicProblem.types(problem,type);
5742 TypeDefinition.elements(type,element);
5743} or {
5744 find interpretation(problem,interpretation);
5745 find typeInterpretation(problem,interpretation,type,typeInterpretation);
5746 PartialComplexTypeInterpretation.elements(typeInterpretation,element);
5747}
5748
5749private pattern isPrimitive(element: PrimitiveElement) {
5750 PrimitiveElement(element);
5751}
5752
5753//////////
5754// 1. Problem-Specific Base Indexers
5755//////////
5756// 1.1 Type Indexers
5757//////////
5758// 1.1.1 primitive Type Indexers
5759//////////
5760
5761//////////
5762// 1.1.2 domain-specific Type Indexers
5763//////////
5764/**
5765 * An element must be an instance of type "FunctionalElement class".
5766 */
5767private pattern mustInstanceOfFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
5768 Type.name(type,"FunctionalElement class");
5769 find directInstanceOf(problem,interpretation,element,type);
5770}
5771private pattern scopeDisallowsNewFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation) {
5772 find interpretation(problem,interpretation);
5773 PartialInterpretation.scopes(interpretation,scope);
5774 Scope.targetTypeInterpretation(scope,typeInterpretation);
5775 Scope.maxNewElements(scope,0);
5776 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
5777 Type.name(type,"FunctionalElement class");
5778}
5779
5780/**
5781 * An element may be an instance of type "FunctionalElement class".
5782 */
5783private pattern mayInstanceOfFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
5784{
5785 find interpretation(problem,interpretation);
5786 PartialInterpretation.newElements(interpretation,element);
5787 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
5788 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
5789 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
5790 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
5791 neg find mustInstanceOfFunction_class(problem,interpretation,element);
5792 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
5793 neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation);
5794 neg find isPrimitive(element);
5795} or {
5796 find interpretation(problem,interpretation);
5797 PartialInterpretation.openWorldElements(interpretation,element);
5798 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
5799 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
5800 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
5801 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
5802 neg find mustInstanceOfFunction_class(problem,interpretation,element);
5803 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
5804 neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation);
5805 neg find isPrimitive(element);
5806} or
5807{ find mustInstanceOfFunctionalElement_class(problem,interpretation,element); }
5808/**
5809 * An element must be an instance of type "FunctionalArchitectureModel class".
5810 */
5811private pattern mustInstanceOfFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
5812 Type.name(type,"FunctionalArchitectureModel class");
5813 find directInstanceOf(problem,interpretation,element,type);
5814}
5815private pattern scopeDisallowsNewFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation) {
5816 find interpretation(problem,interpretation);
5817 PartialInterpretation.scopes(interpretation,scope);
5818 Scope.targetTypeInterpretation(scope,typeInterpretation);
5819 Scope.maxNewElements(scope,0);
5820 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
5821 Type.name(type,"FunctionalArchitectureModel class");
5822}
5823
5824/**
5825 * An element may be an instance of type "FunctionalArchitectureModel class".
5826 */
5827private pattern mayInstanceOfFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
5828{
5829 find interpretation(problem,interpretation);
5830 PartialInterpretation.newElements(interpretation,element);
5831 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
5832 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
5833 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
5834 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
5835 neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element);
5836 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
5837 neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation);
5838 neg find isPrimitive(element);
5839} or {
5840 find interpretation(problem,interpretation);
5841 PartialInterpretation.openWorldElements(interpretation,element);
5842 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
5843 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
5844 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
5845 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
5846 neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element);
5847 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
5848 neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation);
5849 neg find isPrimitive(element);
5850} or
5851{ find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); }
5852/**
5853 * An element must be an instance of type "Function class".
5854 */
5855private pattern mustInstanceOfFunction_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
5856 Type.name(type,"Function class");
5857 find directInstanceOf(problem,interpretation,element,type);
5858}
5859private pattern scopeDisallowsNewFunction_class(problem:LogicProblem, interpretation:PartialInterpretation) {
5860 find interpretation(problem,interpretation);
5861 PartialInterpretation.scopes(interpretation,scope);
5862 Scope.targetTypeInterpretation(scope,typeInterpretation);
5863 Scope.maxNewElements(scope,0);
5864 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
5865 Type.name(type,"Function class");
5866}
5867
5868/**
5869 * An element may be an instance of type "Function class".
5870 */
5871private pattern mayInstanceOfFunction_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
5872{
5873 find interpretation(problem,interpretation);
5874 PartialInterpretation.newElements(interpretation,element);
5875 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
5876 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
5877 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
5878 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
5879 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
5880 neg find scopeDisallowsNewFunction_class(problem, interpretation);
5881 neg find isPrimitive(element);
5882} or {
5883 find interpretation(problem,interpretation);
5884 PartialInterpretation.openWorldElements(interpretation,element);
5885 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
5886 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
5887 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
5888 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
5889 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
5890 neg find scopeDisallowsNewFunction_class(problem, interpretation);
5891 neg find isPrimitive(element);
5892} or
5893{ find mustInstanceOfFunction_class(problem,interpretation,element); }
5894/**
5895 * An element must be an instance of type "FAMTerminator class".
5896 */
5897private pattern mustInstanceOfFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
5898 Type.name(type,"FAMTerminator class");
5899 find directInstanceOf(problem,interpretation,element,type);
5900}
5901private pattern scopeDisallowsNewFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation) {
5902 find interpretation(problem,interpretation);
5903 PartialInterpretation.scopes(interpretation,scope);
5904 Scope.targetTypeInterpretation(scope,typeInterpretation);
5905 Scope.maxNewElements(scope,0);
5906 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
5907 Type.name(type,"FAMTerminator class");
5908}
5909
5910/**
5911 * An element may be an instance of type "FAMTerminator class".
5912 */
5913private pattern mayInstanceOfFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
5914{
5915 find interpretation(problem,interpretation);
5916 PartialInterpretation.newElements(interpretation,element);
5917 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
5918 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
5919 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
5920 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
5921 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
5922 neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation);
5923 neg find isPrimitive(element);
5924} or {
5925 find interpretation(problem,interpretation);
5926 PartialInterpretation.openWorldElements(interpretation,element);
5927 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
5928 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
5929 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
5930 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
5931 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
5932 neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation);
5933 neg find isPrimitive(element);
5934} or
5935{ find mustInstanceOfFAMTerminator_class(problem,interpretation,element); }
5936/**
5937 * An element must be an instance of type "InformationLink class".
5938 */
5939private pattern mustInstanceOfInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
5940 Type.name(type,"InformationLink class");
5941 find directInstanceOf(problem,interpretation,element,type);
5942}
5943private pattern scopeDisallowsNewInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation) {
5944 find interpretation(problem,interpretation);
5945 PartialInterpretation.scopes(interpretation,scope);
5946 Scope.targetTypeInterpretation(scope,typeInterpretation);
5947 Scope.maxNewElements(scope,0);
5948 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
5949 Type.name(type,"InformationLink class");
5950}
5951
5952/**
5953 * An element may be an instance of type "InformationLink class".
5954 */
5955private pattern mayInstanceOfInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
5956{
5957 find interpretation(problem,interpretation);
5958 PartialInterpretation.newElements(interpretation,element);
5959 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
5960 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
5961 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
5962 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
5963 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
5964 neg find scopeDisallowsNewInformationLink_class(problem, interpretation);
5965 neg find isPrimitive(element);
5966} or {
5967 find interpretation(problem,interpretation);
5968 PartialInterpretation.openWorldElements(interpretation,element);
5969 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
5970 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
5971 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
5972 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
5973 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
5974 neg find scopeDisallowsNewInformationLink_class(problem, interpretation);
5975 neg find isPrimitive(element);
5976} or
5977{ find mustInstanceOfInformationLink_class(problem,interpretation,element); }
5978/**
5979 * An element must be an instance of type "FunctionalInterface class".
5980 */
5981private pattern mustInstanceOfFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
5982 Type.name(type,"FunctionalInterface class");
5983 find directInstanceOf(problem,interpretation,element,type);
5984}
5985private pattern scopeDisallowsNewFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation) {
5986 find interpretation(problem,interpretation);
5987 PartialInterpretation.scopes(interpretation,scope);
5988 Scope.targetTypeInterpretation(scope,typeInterpretation);
5989 Scope.maxNewElements(scope,0);
5990 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
5991 Type.name(type,"FunctionalInterface class");
5992}
5993
5994/**
5995 * An element may be an instance of type "FunctionalInterface class".
5996 */
5997private pattern mayInstanceOfFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
5998{
5999 find interpretation(problem,interpretation);
6000 PartialInterpretation.newElements(interpretation,element);
6001 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
6002 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
6003 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
6004 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
6005 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
6006 neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation);
6007 neg find isPrimitive(element);
6008} or {
6009 find interpretation(problem,interpretation);
6010 PartialInterpretation.openWorldElements(interpretation,element);
6011 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
6012 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
6013 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
6014 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
6015 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
6016 neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation);
6017 neg find isPrimitive(element);
6018} or
6019{ find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); }
6020/**
6021 * An element must be an instance of type "FunctionalInput class".
6022 */
6023private pattern mustInstanceOfFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
6024 Type.name(type,"FunctionalInput class");
6025 find directInstanceOf(problem,interpretation,element,type);
6026}
6027private pattern scopeDisallowsNewFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation) {
6028 find interpretation(problem,interpretation);
6029 PartialInterpretation.scopes(interpretation,scope);
6030 Scope.targetTypeInterpretation(scope,typeInterpretation);
6031 Scope.maxNewElements(scope,0);
6032 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
6033 Type.name(type,"FunctionalInput class");
6034}
6035
6036/**
6037 * An element may be an instance of type "FunctionalInput class".
6038 */
6039private pattern mayInstanceOfFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
6040{
6041 find interpretation(problem,interpretation);
6042 PartialInterpretation.newElements(interpretation,element);
6043 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
6044 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
6045 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
6046 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
6047 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
6048 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
6049 neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation);
6050 neg find isPrimitive(element);
6051} or {
6052 find interpretation(problem,interpretation);
6053 PartialInterpretation.openWorldElements(interpretation,element);
6054 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
6055 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
6056 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
6057 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
6058 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
6059 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
6060 neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation);
6061 neg find isPrimitive(element);
6062} or
6063{ find mustInstanceOfFunctionalInput_class(problem,interpretation,element); }
6064/**
6065 * An element must be an instance of type "FunctionalOutput class".
6066 */
6067private pattern mustInstanceOfFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
6068 Type.name(type,"FunctionalOutput class");
6069 find directInstanceOf(problem,interpretation,element,type);
6070}
6071private pattern scopeDisallowsNewFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation) {
6072 find interpretation(problem,interpretation);
6073 PartialInterpretation.scopes(interpretation,scope);
6074 Scope.targetTypeInterpretation(scope,typeInterpretation);
6075 Scope.maxNewElements(scope,0);
6076 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
6077 Type.name(type,"FunctionalOutput class");
6078}
6079
6080/**
6081 * An element may be an instance of type "FunctionalOutput class".
6082 */
6083private pattern mayInstanceOfFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
6084{
6085 find interpretation(problem,interpretation);
6086 PartialInterpretation.newElements(interpretation,element);
6087 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
6088 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
6089 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
6090 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
6091 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
6092 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
6093 neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation);
6094 neg find isPrimitive(element);
6095} or {
6096 find interpretation(problem,interpretation);
6097 PartialInterpretation.openWorldElements(interpretation,element);
6098 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
6099 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
6100 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
6101 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
6102 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
6103 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
6104 neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation);
6105 neg find isPrimitive(element);
6106} or
6107{ find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); }
6108/**
6109 * An element must be an instance of type "FunctionalData class".
6110 */
6111private pattern mustInstanceOfFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
6112 Type.name(type,"FunctionalData class");
6113 find directInstanceOf(problem,interpretation,element,type);
6114}
6115private pattern scopeDisallowsNewFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation) {
6116 find interpretation(problem,interpretation);
6117 PartialInterpretation.scopes(interpretation,scope);
6118 Scope.targetTypeInterpretation(scope,typeInterpretation);
6119 Scope.maxNewElements(scope,0);
6120 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
6121 Type.name(type,"FunctionalData class");
6122}
6123
6124/**
6125 * An element may be an instance of type "FunctionalData class".
6126 */
6127private pattern mayInstanceOfFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
6128{
6129 find interpretation(problem,interpretation);
6130 PartialInterpretation.newElements(interpretation,element);
6131 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
6132 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
6133 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
6134 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
6135 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
6136 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
6137 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
6138 neg find scopeDisallowsNewFunctionalData_class(problem, interpretation);
6139 neg find isPrimitive(element);
6140} or {
6141 find interpretation(problem,interpretation);
6142 PartialInterpretation.openWorldElements(interpretation,element);
6143 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
6144 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
6145 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
6146 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
6147 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
6148 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
6149 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
6150 neg find scopeDisallowsNewFunctionalData_class(problem, interpretation);
6151 neg find isPrimitive(element);
6152} or
6153{ find mustInstanceOfFunctionalData_class(problem,interpretation,element); }
6154/**
6155 * An element must be an instance of type "FunctionType enum".
6156 */
6157private pattern mustInstanceOfFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
6158 Type.name(type,"FunctionType enum");
6159 find directInstanceOf(problem,interpretation,element,type);
6160}
6161private pattern scopeDisallowsNewFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation) {
6162 find interpretation(problem,interpretation);
6163 PartialInterpretation.scopes(interpretation,scope);
6164 Scope.targetTypeInterpretation(scope,typeInterpretation);
6165 Scope.maxNewElements(scope,0);
6166 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
6167 Type.name(type,"FunctionType enum");
6168}
6169
6170/**
6171 * An element may be an instance of type "FunctionType enum".
6172 */
6173private pattern mayInstanceOfFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
6174{ find mustInstanceOfFunctionType_enum(problem,interpretation,element); }
6175/**
6176 * An element must be an instance of type "FunctionalArchitectureModel class DefinedPart".
6177 */
6178private pattern mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
6179 Type.name(type,"FunctionalArchitectureModel class DefinedPart");
6180 find directInstanceOf(problem,interpretation,element,type);
6181}
6182private pattern scopeDisallowsNewFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
6183 find interpretation(problem,interpretation);
6184 PartialInterpretation.scopes(interpretation,scope);
6185 Scope.targetTypeInterpretation(scope,typeInterpretation);
6186 Scope.maxNewElements(scope,0);
6187 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
6188 Type.name(type,"FunctionalArchitectureModel class DefinedPart");
6189}
6190
6191/**
6192 * An element may be an instance of type "FunctionalArchitectureModel class DefinedPart".
6193 */
6194private pattern mayInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
6195{ find mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem,interpretation,element); }
6196/**
6197 * An element must be an instance of type "FunctionalArchitectureModel class UndefinedPart".
6198 */
6199private pattern mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
6200 Type.name(type,"FunctionalArchitectureModel class UndefinedPart");
6201 find directInstanceOf(problem,interpretation,element,type);
6202}
6203private pattern scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
6204 find interpretation(problem,interpretation);
6205 PartialInterpretation.scopes(interpretation,scope);
6206 Scope.targetTypeInterpretation(scope,typeInterpretation);
6207 Scope.maxNewElements(scope,0);
6208 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
6209 Type.name(type,"FunctionalArchitectureModel class UndefinedPart");
6210}
6211
6212/**
6213 * An element may be an instance of type "FunctionalArchitectureModel class UndefinedPart".
6214 */
6215private pattern mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
6216{
6217 find interpretation(problem,interpretation);
6218 PartialInterpretation.newElements(interpretation,element);
6219 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
6220 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
6221 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
6222 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
6223 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
6224 neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation);
6225 neg find isPrimitive(element);
6226} or {
6227 find interpretation(problem,interpretation);
6228 PartialInterpretation.openWorldElements(interpretation,element);
6229 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
6230 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
6231 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
6232 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
6233 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
6234 neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation);
6235 neg find isPrimitive(element);
6236} or
6237{ find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); }
6238
6239//////////
6240// 1.2 Relation Declaration Indexers
6241//////////
6242/**
6243 * Matcher for detecting tuples t where []interface reference FunctionalElement(source,target)
6244 */
6245private pattern mustInRelationinterface_reference_FunctionalElement(
6246 problem:LogicProblem, interpretation:PartialInterpretation,
6247 source: DefinedElement, target:DefinedElement)
6248{
6249 find interpretation(problem,interpretation);
6250 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
6251 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface reference FunctionalElement");
6252 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
6253 BinaryElementRelationLink.param1(link,source);
6254 BinaryElementRelationLink.param2(link,target);
6255}
6256/**
6257 * Matcher for detecting tuples t where <>interface reference FunctionalElement(source,target)
6258 */
6259private pattern mayInRelationinterface_reference_FunctionalElement(
6260 problem:LogicProblem, interpretation:PartialInterpretation,
6261 source: DefinedElement, target:DefinedElement)
6262{
6263 find interpretation(problem,interpretation);
6264 // The two endpoint of the link have to exist
6265 find mayExist(problem, interpretation, source);
6266 find mayExist(problem, interpretation, target);
6267 // Type consistency
6268 find mayInstanceOfFunctionalElement_class(problem,interpretation,source);
6269 find mayInstanceOfFunctionalInterface_class(problem,interpretation,target);
6270 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
6271 // the upper bound of the multiplicity should be considered.
6272 numberOfExistingReferences == count find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,_);
6273 check(numberOfExistingReferences < 1);
6274 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
6275 // the upper bound of the opposite reference multiplicity should be considered.
6276 numberOfExistingOppositeReferences == count find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,target,_);
6277 check(numberOfExistingOppositeReferences < 1);
6278 // The reference is containment, then a new reference cannot be create if:
6279 // 1. Multiple parents
6280 neg find mustContains4(problem,interpretation,_,target);
6281 // 2. Circle in the containment hierarchy
6282 neg find mustTransitiveContains(source,target);
6283} or {
6284 find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,target);
6285}
6286/**
6287 * Matcher for detecting tuples t where []model reference FunctionalElement(source,target)
6288 */
6289 private pattern mustInRelationmodel_reference_FunctionalElement(
6290 problem:LogicProblem, interpretation:PartialInterpretation,
6291 source: DefinedElement, target:DefinedElement)
6292 {
6293 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_model(problem,interpretation,source,target);
6294 }
6295/**
6296 * Matcher for detecting tuples t where []model reference FunctionalElement(source,target)
6297 */
6298 private pattern mayInRelationmodel_reference_FunctionalElement(
6299 problem:LogicProblem, interpretation:PartialInterpretation,
6300 source: DefinedElement, target:DefinedElement)
6301 {
6302 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_model(problem,interpretation,source,target);
6303 }
6304/**
6305 * Matcher for detecting tuples t where []parent reference FunctionalElement(source,target)
6306 */
6307private pattern mustInRelationparent_reference_FunctionalElement(
6308 problem:LogicProblem, interpretation:PartialInterpretation,
6309 source: DefinedElement, target:DefinedElement)
6310{
6311 find interpretation(problem,interpretation);
6312 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
6313 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"parent reference FunctionalElement");
6314 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
6315 BinaryElementRelationLink.param1(link,source);
6316 BinaryElementRelationLink.param2(link,target);
6317}
6318/**
6319 * Matcher for detecting tuples t where <>parent reference FunctionalElement(source,target)
6320 */
6321private pattern mayInRelationparent_reference_FunctionalElement(
6322 problem:LogicProblem, interpretation:PartialInterpretation,
6323 source: DefinedElement, target:DefinedElement)
6324{
6325 find interpretation(problem,interpretation);
6326 // The two endpoint of the link have to exist
6327 find mayExist(problem, interpretation, source);
6328 find mayExist(problem, interpretation, target);
6329 // Type consistency
6330 find mayInstanceOfFunctionalElement_class(problem,interpretation,source);
6331 find mayInstanceOfFunction_class(problem,interpretation,target);
6332 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
6333 // the upper bound of the multiplicity should be considered.
6334 numberOfExistingReferences == count find mustInRelationparent_reference_FunctionalElement(problem,interpretation,source,_);
6335 check(numberOfExistingReferences < 1);
6336 // The eOpposite of the reference is containment, then a referene cannot be created if
6337 // 1. Multiple parents
6338 neg find mustContains4(problem,interpretation,source,_);
6339 // 2. Circle in the containment hierarchy
6340 neg find mustTransitiveContains(source,target);
6341} or {
6342 find mustInRelationparent_reference_FunctionalElement(problem,interpretation,source,target);
6343}
6344/**
6345 * Matcher for detecting tuples t where []rootElements reference FunctionalArchitectureModel(source,target)
6346 */
6347private pattern mustInRelationrootElements_reference_FunctionalArchitectureModel(
6348 problem:LogicProblem, interpretation:PartialInterpretation,
6349 source: DefinedElement, target:DefinedElement)
6350{
6351 find interpretation(problem,interpretation);
6352 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
6353 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"rootElements reference FunctionalArchitectureModel");
6354 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
6355 BinaryElementRelationLink.param1(link,source);
6356 BinaryElementRelationLink.param2(link,target);
6357}
6358/**
6359 * Matcher for detecting tuples t where <>rootElements reference FunctionalArchitectureModel(source,target)
6360 */
6361private pattern mayInRelationrootElements_reference_FunctionalArchitectureModel(
6362 problem:LogicProblem, interpretation:PartialInterpretation,
6363 source: DefinedElement, target:DefinedElement)
6364{
6365 find interpretation(problem,interpretation);
6366 // The two endpoint of the link have to exist
6367 find mayExist(problem, interpretation, source);
6368 find mayExist(problem, interpretation, target);
6369 // Type consistency
6370 find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,source);
6371 find mayInstanceOfFunctionalElement_class(problem,interpretation,target);
6372 // The reference is containment, then a new reference cannot be create if:
6373 // 1. Multiple parents
6374 neg find mustContains4(problem,interpretation,_,target);
6375 // 2. Circle in the containment hierarchy
6376 neg find mustTransitiveContains(source,target);
6377} or {
6378 find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,source,target);
6379}
6380/**
6381 * Matcher for detecting tuples t where []subElements reference Function(source,target)
6382 */
6383private pattern mustInRelationsubElements_reference_Function(
6384 problem:LogicProblem, interpretation:PartialInterpretation,
6385 source: DefinedElement, target:DefinedElement)
6386{
6387 find interpretation(problem,interpretation);
6388 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
6389 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"subElements reference Function");
6390 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
6391 BinaryElementRelationLink.param1(link,source);
6392 BinaryElementRelationLink.param2(link,target);
6393}
6394/**
6395 * Matcher for detecting tuples t where <>subElements reference Function(source,target)
6396 */
6397private pattern mayInRelationsubElements_reference_Function(
6398 problem:LogicProblem, interpretation:PartialInterpretation,
6399 source: DefinedElement, target:DefinedElement)
6400{
6401 find interpretation(problem,interpretation);
6402 // The two endpoint of the link have to exist
6403 find mayExist(problem, interpretation, source);
6404 find mayExist(problem, interpretation, target);
6405 // Type consistency
6406 find mayInstanceOfFunction_class(problem,interpretation,source);
6407 find mayInstanceOfFunctionalElement_class(problem,interpretation,target);
6408 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
6409 // the upper bound of the opposite reference multiplicity should be considered.
6410 numberOfExistingOppositeReferences == count find mustInRelationparent_reference_FunctionalElement(problem,interpretation,target,_);
6411 check(numberOfExistingOppositeReferences < 1);
6412 // The reference is containment, then a new reference cannot be create if:
6413 // 1. Multiple parents
6414 neg find mustContains4(problem,interpretation,_,target);
6415 // 2. Circle in the containment hierarchy
6416 neg find mustTransitiveContains(source,target);
6417} or {
6418 find mustInRelationsubElements_reference_Function(problem,interpretation,source,target);
6419}
6420/**
6421 * Matcher for detecting tuples t where []data reference FAMTerminator(source,target)
6422 */
6423private pattern mustInRelationdata_reference_FAMTerminator(
6424 problem:LogicProblem, interpretation:PartialInterpretation,
6425 source: DefinedElement, target:DefinedElement)
6426{
6427 find interpretation(problem,interpretation);
6428 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
6429 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"data reference FAMTerminator");
6430 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
6431 BinaryElementRelationLink.param1(link,source);
6432 BinaryElementRelationLink.param2(link,target);
6433}
6434/**
6435 * Matcher for detecting tuples t where <>data reference FAMTerminator(source,target)
6436 */
6437private pattern mayInRelationdata_reference_FAMTerminator(
6438 problem:LogicProblem, interpretation:PartialInterpretation,
6439 source: DefinedElement, target:DefinedElement)
6440{
6441 find interpretation(problem,interpretation);
6442 // The two endpoint of the link have to exist
6443 find mayExist(problem, interpretation, source);
6444 find mayExist(problem, interpretation, target);
6445 // Type consistency
6446 find mayInstanceOfFAMTerminator_class(problem,interpretation,source);
6447 find mayInstanceOfFunctionalData_class(problem,interpretation,target);
6448 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
6449 // the upper bound of the multiplicity should be considered.
6450 numberOfExistingReferences == count find mustInRelationdata_reference_FAMTerminator(problem,interpretation,source,_);
6451 check(numberOfExistingReferences < 1);
6452 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
6453 // the upper bound of the opposite reference multiplicity should be considered.
6454 numberOfExistingOppositeReferences == count find mustInRelationterminator_reference_FunctionalData(problem,interpretation,target,_);
6455 check(numberOfExistingOppositeReferences < 1);
6456 // The eOpposite of the reference is containment, then a referene cannot be created if
6457 // 1. Multiple parents
6458 neg find mustContains4(problem,interpretation,source,_);
6459 // 2. Circle in the containment hierarchy
6460 neg find mustTransitiveContains(source,target);
6461} or {
6462 find mustInRelationdata_reference_FAMTerminator(problem,interpretation,source,target);
6463}
6464/**
6465 * Matcher for detecting tuples t where []from reference InformationLink(source,target)
6466 */
6467private pattern mustInRelationfrom_reference_InformationLink(
6468 problem:LogicProblem, interpretation:PartialInterpretation,
6469 source: DefinedElement, target:DefinedElement)
6470{
6471 find interpretation(problem,interpretation);
6472 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
6473 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"from reference InformationLink");
6474 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
6475 BinaryElementRelationLink.param1(link,source);
6476 BinaryElementRelationLink.param2(link,target);
6477}
6478/**
6479 * Matcher for detecting tuples t where <>from reference InformationLink(source,target)
6480 */
6481private pattern mayInRelationfrom_reference_InformationLink(
6482 problem:LogicProblem, interpretation:PartialInterpretation,
6483 source: DefinedElement, target:DefinedElement)
6484{
6485 find interpretation(problem,interpretation);
6486 // The two endpoint of the link have to exist
6487 find mayExist(problem, interpretation, source);
6488 find mayExist(problem, interpretation, target);
6489 // Type consistency
6490 find mayInstanceOfInformationLink_class(problem,interpretation,source);
6491 find mayInstanceOfFunctionalOutput_class(problem,interpretation,target);
6492 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
6493 // the upper bound of the multiplicity should be considered.
6494 numberOfExistingReferences == count find mustInRelationfrom_reference_InformationLink(problem,interpretation,source,_);
6495 check(numberOfExistingReferences < 1);
6496 // The eOpposite of the reference is containment, then a referene cannot be created if
6497 // 1. Multiple parents
6498 neg find mustContains4(problem,interpretation,source,_);
6499 // 2. Circle in the containment hierarchy
6500 neg find mustTransitiveContains(source,target);
6501} or {
6502 find mustInRelationfrom_reference_InformationLink(problem,interpretation,source,target);
6503}
6504/**
6505 * Matcher for detecting tuples t where []to reference InformationLink(source,target)
6506 */
6507private pattern mustInRelationto_reference_InformationLink(
6508 problem:LogicProblem, interpretation:PartialInterpretation,
6509 source: DefinedElement, target:DefinedElement)
6510{
6511 find interpretation(problem,interpretation);
6512 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
6513 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"to reference InformationLink");
6514 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
6515 BinaryElementRelationLink.param1(link,source);
6516 BinaryElementRelationLink.param2(link,target);
6517}
6518/**
6519 * Matcher for detecting tuples t where <>to reference InformationLink(source,target)
6520 */
6521private pattern mayInRelationto_reference_InformationLink(
6522 problem:LogicProblem, interpretation:PartialInterpretation,
6523 source: DefinedElement, target:DefinedElement)
6524{
6525 find interpretation(problem,interpretation);
6526 // The two endpoint of the link have to exist
6527 find mayExist(problem, interpretation, source);
6528 find mayExist(problem, interpretation, target);
6529 // Type consistency
6530 find mayInstanceOfInformationLink_class(problem,interpretation,source);
6531 find mayInstanceOfFunctionalInput_class(problem,interpretation,target);
6532 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
6533 // the upper bound of the multiplicity should be considered.
6534 numberOfExistingReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,source,_);
6535 check(numberOfExistingReferences < 1);
6536} or {
6537 find mustInRelationto_reference_InformationLink(problem,interpretation,source,target);
6538}
6539/**
6540 * Matcher for detecting tuples t where []data reference FunctionalInterface(source,target)
6541 */
6542private pattern mustInRelationdata_reference_FunctionalInterface(
6543 problem:LogicProblem, interpretation:PartialInterpretation,
6544 source: DefinedElement, target:DefinedElement)
6545{
6546 find interpretation(problem,interpretation);
6547 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
6548 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"data reference FunctionalInterface");
6549 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
6550 BinaryElementRelationLink.param1(link,source);
6551 BinaryElementRelationLink.param2(link,target);
6552}
6553/**
6554 * Matcher for detecting tuples t where <>data reference FunctionalInterface(source,target)
6555 */
6556private pattern mayInRelationdata_reference_FunctionalInterface(
6557 problem:LogicProblem, interpretation:PartialInterpretation,
6558 source: DefinedElement, target:DefinedElement)
6559{
6560 find interpretation(problem,interpretation);
6561 // The two endpoint of the link have to exist
6562 find mayExist(problem, interpretation, source);
6563 find mayExist(problem, interpretation, target);
6564 // Type consistency
6565 find mayInstanceOfFunctionalInterface_class(problem,interpretation,source);
6566 find mayInstanceOfFunctionalData_class(problem,interpretation,target);
6567 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
6568 // the upper bound of the opposite reference multiplicity should be considered.
6569 numberOfExistingOppositeReferences == count find mustInRelationinterface_reference_FunctionalData(problem,interpretation,target,_);
6570 check(numberOfExistingOppositeReferences < 1);
6571 // The reference is containment, then a new reference cannot be create if:
6572 // 1. Multiple parents
6573 neg find mustContains4(problem,interpretation,_,target);
6574 // 2. Circle in the containment hierarchy
6575 neg find mustTransitiveContains(source,target);
6576} or {
6577 find mustInRelationdata_reference_FunctionalInterface(problem,interpretation,source,target);
6578}
6579/**
6580 * Matcher for detecting tuples t where []element reference FunctionalInterface(source,target)
6581 */
6582private pattern mustInRelationelement_reference_FunctionalInterface(
6583 problem:LogicProblem, interpretation:PartialInterpretation,
6584 source: DefinedElement, target:DefinedElement)
6585{
6586 find interpretation(problem,interpretation);
6587 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
6588 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"element reference FunctionalInterface");
6589 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
6590 BinaryElementRelationLink.param1(link,source);
6591 BinaryElementRelationLink.param2(link,target);
6592}
6593/**
6594 * Matcher for detecting tuples t where <>element reference FunctionalInterface(source,target)
6595 */
6596private pattern mayInRelationelement_reference_FunctionalInterface(
6597 problem:LogicProblem, interpretation:PartialInterpretation,
6598 source: DefinedElement, target:DefinedElement)
6599{
6600 find interpretation(problem,interpretation);
6601 // The two endpoint of the link have to exist
6602 find mayExist(problem, interpretation, source);
6603 find mayExist(problem, interpretation, target);
6604 // Type consistency
6605 find mayInstanceOfFunctionalInterface_class(problem,interpretation,source);
6606 find mayInstanceOfFunctionalElement_class(problem,interpretation,target);
6607 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
6608 // the upper bound of the multiplicity should be considered.
6609 numberOfExistingReferences == count find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,source,_);
6610 check(numberOfExistingReferences < 1);
6611 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
6612 // the upper bound of the opposite reference multiplicity should be considered.
6613 numberOfExistingOppositeReferences == count find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,target,_);
6614 check(numberOfExistingOppositeReferences < 1);
6615 // The eOpposite of the reference is containment, then a referene cannot be created if
6616 // 1. Multiple parents
6617 neg find mustContains4(problem,interpretation,source,_);
6618 // 2. Circle in the containment hierarchy
6619 neg find mustTransitiveContains(source,target);
6620} or {
6621 find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,source,target);
6622}
6623/**
6624 * Matcher for detecting tuples t where []IncomingLinks reference FunctionalInput(source,target)
6625 */
6626private pattern mustInRelationIncomingLinks_reference_FunctionalInput(
6627 problem:LogicProblem, interpretation:PartialInterpretation,
6628 source: DefinedElement, target:DefinedElement)
6629{
6630 find interpretation(problem,interpretation);
6631 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
6632 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"IncomingLinks reference FunctionalInput");
6633 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
6634 BinaryElementRelationLink.param1(link,source);
6635 BinaryElementRelationLink.param2(link,target);
6636}
6637/**
6638 * Matcher for detecting tuples t where <>IncomingLinks reference FunctionalInput(source,target)
6639 */
6640private pattern mayInRelationIncomingLinks_reference_FunctionalInput(
6641 problem:LogicProblem, interpretation:PartialInterpretation,
6642 source: DefinedElement, target:DefinedElement)
6643{
6644 find interpretation(problem,interpretation);
6645 // The two endpoint of the link have to exist
6646 find mayExist(problem, interpretation, source);
6647 find mayExist(problem, interpretation, target);
6648 // Type consistency
6649 find mayInstanceOfFunctionalInput_class(problem,interpretation,source);
6650 find mayInstanceOfInformationLink_class(problem,interpretation,target);
6651 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
6652 // the upper bound of the opposite reference multiplicity should be considered.
6653 numberOfExistingOppositeReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,target,_);
6654 check(numberOfExistingOppositeReferences < 1);
6655} or {
6656 find mustInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,source,target);
6657}
6658/**
6659 * Matcher for detecting tuples t where []outgoingLinks reference FunctionalOutput(source,target)
6660 */
6661private pattern mustInRelationoutgoingLinks_reference_FunctionalOutput(
6662 problem:LogicProblem, interpretation:PartialInterpretation,
6663 source: DefinedElement, target:DefinedElement)
6664{
6665 find interpretation(problem,interpretation);
6666 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
6667 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"outgoingLinks reference FunctionalOutput");
6668 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
6669 BinaryElementRelationLink.param1(link,source);
6670 BinaryElementRelationLink.param2(link,target);
6671}
6672/**
6673 * Matcher for detecting tuples t where <>outgoingLinks reference FunctionalOutput(source,target)
6674 */
6675private pattern mayInRelationoutgoingLinks_reference_FunctionalOutput(
6676 problem:LogicProblem, interpretation:PartialInterpretation,
6677 source: DefinedElement, target:DefinedElement)
6678{
6679 find interpretation(problem,interpretation);
6680 // The two endpoint of the link have to exist
6681 find mayExist(problem, interpretation, source);
6682 find mayExist(problem, interpretation, target);
6683 // Type consistency
6684 find mayInstanceOfFunctionalOutput_class(problem,interpretation,source);
6685 find mayInstanceOfInformationLink_class(problem,interpretation,target);
6686 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
6687 // the upper bound of the opposite reference multiplicity should be considered.
6688 numberOfExistingOppositeReferences == count find mustInRelationfrom_reference_InformationLink(problem,interpretation,target,_);
6689 check(numberOfExistingOppositeReferences < 1);
6690 // The reference is containment, then a new reference cannot be create if:
6691 // 1. Multiple parents
6692 neg find mustContains4(problem,interpretation,_,target);
6693 // 2. Circle in the containment hierarchy
6694 neg find mustTransitiveContains(source,target);
6695} or {
6696 find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,source,target);
6697}
6698/**
6699 * Matcher for detecting tuples t where []terminator reference FunctionalData(source,target)
6700 */
6701private pattern mustInRelationterminator_reference_FunctionalData(
6702 problem:LogicProblem, interpretation:PartialInterpretation,
6703 source: DefinedElement, target:DefinedElement)
6704{
6705 find interpretation(problem,interpretation);
6706 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
6707 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"terminator reference FunctionalData");
6708 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
6709 BinaryElementRelationLink.param1(link,source);
6710 BinaryElementRelationLink.param2(link,target);
6711}
6712/**
6713 * Matcher for detecting tuples t where <>terminator reference FunctionalData(source,target)
6714 */
6715private pattern mayInRelationterminator_reference_FunctionalData(
6716 problem:LogicProblem, interpretation:PartialInterpretation,
6717 source: DefinedElement, target:DefinedElement)
6718{
6719 find interpretation(problem,interpretation);
6720 // The two endpoint of the link have to exist
6721 find mayExist(problem, interpretation, source);
6722 find mayExist(problem, interpretation, target);
6723 // Type consistency
6724 find mayInstanceOfFunctionalData_class(problem,interpretation,source);
6725 find mayInstanceOfFAMTerminator_class(problem,interpretation,target);
6726 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
6727 // the upper bound of the multiplicity should be considered.
6728 numberOfExistingReferences == count find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,_);
6729 check(numberOfExistingReferences < 1);
6730 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
6731 // the upper bound of the opposite reference multiplicity should be considered.
6732 numberOfExistingOppositeReferences == count find mustInRelationdata_reference_FAMTerminator(problem,interpretation,target,_);
6733 check(numberOfExistingOppositeReferences < 1);
6734 // The reference is containment, then a new reference cannot be create if:
6735 // 1. Multiple parents
6736 neg find mustContains4(problem,interpretation,_,target);
6737 // 2. Circle in the containment hierarchy
6738 neg find mustTransitiveContains(source,target);
6739} or {
6740 find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,target);
6741}
6742/**
6743 * Matcher for detecting tuples t where []interface reference FunctionalData(source,target)
6744 */
6745private pattern mustInRelationinterface_reference_FunctionalData(
6746 problem:LogicProblem, interpretation:PartialInterpretation,
6747 source: DefinedElement, target:DefinedElement)
6748{
6749 find interpretation(problem,interpretation);
6750 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
6751 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface reference FunctionalData");
6752 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
6753 BinaryElementRelationLink.param1(link,source);
6754 BinaryElementRelationLink.param2(link,target);
6755}
6756/**
6757 * Matcher for detecting tuples t where <>interface reference FunctionalData(source,target)
6758 */
6759private pattern mayInRelationinterface_reference_FunctionalData(
6760 problem:LogicProblem, interpretation:PartialInterpretation,
6761 source: DefinedElement, target:DefinedElement)
6762{
6763 find interpretation(problem,interpretation);
6764 // The two endpoint of the link have to exist
6765 find mayExist(problem, interpretation, source);
6766 find mayExist(problem, interpretation, target);
6767 // Type consistency
6768 find mayInstanceOfFunctionalData_class(problem,interpretation,source);
6769 find mayInstanceOfFunctionalInterface_class(problem,interpretation,target);
6770 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
6771 // the upper bound of the multiplicity should be considered.
6772 numberOfExistingReferences == count find mustInRelationinterface_reference_FunctionalData(problem,interpretation,source,_);
6773 check(numberOfExistingReferences < 1);
6774 // The eOpposite of the reference is containment, then a referene cannot be created if
6775 // 1. Multiple parents
6776 neg find mustContains4(problem,interpretation,source,_);
6777 // 2. Circle in the containment hierarchy
6778 neg find mustTransitiveContains(source,target);
6779} or {
6780 find mustInRelationinterface_reference_FunctionalData(problem,interpretation,source,target);
6781}
6782/**
6783 * Matcher for detecting tuples t where []type attribute Function(source,target)
6784 */
6785 private pattern mustInRelationtype_attribute_Function(
6786 problem:LogicProblem, interpretation:PartialInterpretation,
6787 source: DefinedElement, target:DefinedElement)
6788 {
6789 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_type(problem,interpretation,source,target);
6790 }
6791/**
6792 * Matcher for detecting tuples t where []type attribute Function(source,target)
6793 */
6794 private pattern mayInRelationtype_attribute_Function(
6795 problem:LogicProblem, interpretation:PartialInterpretation,
6796 source: DefinedElement, target:DefinedElement)
6797 {
6798 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_type(problem,interpretation,source,target);
6799 }
6800
6801//////////
6802// 1.3 Relation Definition Indexers
6803//////////
6804// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test fam terminatorAndInformation
6805private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_terminatorAndInformation(
6806 problem:LogicProblem, interpretation:PartialInterpretation,
6807 var_T, var_I)
6808{
6809 find interpretation(problem,interpretation);
6810 find mustInstanceOfFAMTerminator_class(problem,interpretation,var_T);
6811 find mustInstanceOfInformationLink_class(problem,interpretation,var_I);
6812 // T is exported
6813 // I is exported
6814 find mustInstanceOfFunctionalOutput_class(problem,interpretation,var_Out);
6815 find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,var_Out,var_virtual0);
6816 find mustInstanceOfInformationLink_class(problem,interpretation,var_virtual0);
6817 var_virtual0 == var_I;
6818 find mustInstanceOfFunctionalOutput_class(problem,interpretation,var_Out);
6819 find mustInRelationterminator_reference_FunctionalData(problem,interpretation,var_Out,var_virtual1);
6820 find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1);
6821 var_virtual1 == var_T;
6822}or{
6823 find interpretation(problem,interpretation);
6824 find mustInstanceOfFAMTerminator_class(problem,interpretation,var_T);
6825 find mustInstanceOfInformationLink_class(problem,interpretation,var_I);
6826 // T is exported
6827 // I is exported
6828 find mustInstanceOfInformationLink_class(problem,interpretation,var_I);
6829 find mustInRelationto_reference_InformationLink(problem,interpretation,var_I,var_virtual0);
6830 find mustInstanceOfFunctionalInput_class(problem,interpretation,var_virtual0);
6831 var_virtual0 == var_In;
6832 find mustInstanceOfFunctionalInput_class(problem,interpretation,var_In);
6833 find mustInRelationterminator_reference_FunctionalData(problem,interpretation,var_In,var_virtual1);
6834 find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1);
6835 var_virtual1 == var_T;
6836}
6837private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_terminatorAndInformation(
6838 problem:LogicProblem, interpretation:PartialInterpretation,
6839 var_T, var_I)
6840{
6841 find interpretation(problem,interpretation);
6842 find mayInstanceOfFAMTerminator_class(problem,interpretation,var_T);
6843 find mayInstanceOfInformationLink_class(problem,interpretation,var_I);
6844 // T is exported
6845 // I is exported
6846 find mayInstanceOfFunctionalOutput_class(problem,interpretation,var_Out);
6847 find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,var_Out,var_virtual0);
6848 find mayInstanceOfInformationLink_class(problem,interpretation,var_virtual0);
6849 find mayEquivalent(problem, interpretation, var_virtual0, var_I);
6850 find mayInstanceOfFunctionalOutput_class(problem,interpretation,var_Out);
6851 find mayInRelationterminator_reference_FunctionalData(problem,interpretation,var_Out,var_virtual1);
6852 find mayInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1);
6853 find mayEquivalent(problem, interpretation, var_virtual1, var_T);
6854}or{
6855 find interpretation(problem,interpretation);
6856 find mayInstanceOfFAMTerminator_class(problem,interpretation,var_T);
6857 find mayInstanceOfInformationLink_class(problem,interpretation,var_I);
6858 // T is exported
6859 // I is exported
6860 find mayInstanceOfInformationLink_class(problem,interpretation,var_I);
6861 find mayInRelationto_reference_InformationLink(problem,interpretation,var_I,var_virtual0);
6862 find mayInstanceOfFunctionalInput_class(problem,interpretation,var_virtual0);
6863 find mayEquivalent(problem, interpretation, var_virtual0, var_In);
6864 find mayInstanceOfFunctionalInput_class(problem,interpretation,var_In);
6865 find mayInRelationterminator_reference_FunctionalData(problem,interpretation,var_In,var_virtual1);
6866 find mayInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1);
6867 find mayEquivalent(problem, interpretation, var_virtual1, var_T);
6868}
6869private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_terminatorAndInformation(
6870 problem:LogicProblem, interpretation:PartialInterpretation,
6871 var_T, var_I)
6872{
6873 find interpretation(problem,interpretation);
6874 find mustInstanceOfFAMTerminator_class(problem,interpretation,var_T);
6875 find mustInstanceOfInformationLink_class(problem,interpretation,var_I);
6876 // T is exported
6877 // I is exported
6878 find mustInstanceOfFunctionalOutput_class(problem,interpretation,var_Out);
6879 find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,var_Out,var_virtual0);
6880 find mustInstanceOfInformationLink_class(problem,interpretation,var_virtual0);
6881 var_virtual0 == var_I;
6882 find mustInstanceOfFunctionalOutput_class(problem,interpretation,var_Out);
6883 find mustInRelationterminator_reference_FunctionalData(problem,interpretation,var_Out,var_virtual1);
6884 find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1);
6885 var_virtual1 == var_T;
6886}or{
6887 find interpretation(problem,interpretation);
6888 find mustInstanceOfFAMTerminator_class(problem,interpretation,var_T);
6889 find mustInstanceOfInformationLink_class(problem,interpretation,var_I);
6890 // T is exported
6891 // I is exported
6892 find mustInstanceOfInformationLink_class(problem,interpretation,var_I);
6893 find mustInRelationto_reference_InformationLink(problem,interpretation,var_I,var_virtual0);
6894 find mustInstanceOfFunctionalInput_class(problem,interpretation,var_virtual0);
6895 var_virtual0 == var_In;
6896 find mustInstanceOfFunctionalInput_class(problem,interpretation,var_In);
6897 find mustInRelationterminator_reference_FunctionalData(problem,interpretation,var_In,var_virtual1);
6898 find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1);
6899 var_virtual1 == var_T;
6900}
6901// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test fam type
6902private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_type(
6903 problem:LogicProblem, interpretation:PartialInterpretation,
6904 var_This, var_Target)
6905{
6906 find interpretation(problem,interpretation);
6907 find mustInstanceOfFunction_class(problem,interpretation,var_This);
6908 // type constraint is enforced by construction
6909 // This is exported
6910 // Target is exported
6911 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(problem,interpretation,_var__Model,var_This);
6912 var_virtual0 == const_Root_FunctionType;DefinedElement.name(const_Root_FunctionType,"Root FunctionType"); //LogicProblem.elements(problem,const_Root_FunctionType);
6913 var_Target == var_virtual0;
6914}or{
6915 find interpretation(problem,interpretation);
6916 find mustInstanceOfFunction_class(problem,interpretation,var_This);
6917 // type constraint is enforced by construction
6918 // This is exported
6919 // Target is exported
6920 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,_var__Child,var_This);
6921 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(problem,interpretation,_var__Model,var_This);
6922 var_virtual0 == const_Leaf_FunctionType;DefinedElement.name(const_Leaf_FunctionType,"Leaf FunctionType"); //LogicProblem.elements(problem,const_Leaf_FunctionType);
6923 var_Target == var_virtual0;
6924}or{
6925 find interpretation(problem,interpretation);
6926 find mustInstanceOfFunction_class(problem,interpretation,var_This);
6927 // type constraint is enforced by construction
6928 // This is exported
6929 // Target is exported
6930 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,var_This,_var__Par);
6931 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,_var__Child,var_This);
6932 var_virtual0 == const_Intermediate_FunctionType;DefinedElement.name(const_Intermediate_FunctionType,"Intermediate FunctionType"); //LogicProblem.elements(problem,const_Intermediate_FunctionType);
6933 var_Target == var_virtual0;
6934}
6935private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_type(
6936 problem:LogicProblem, interpretation:PartialInterpretation,
6937 var_This, var_Target)
6938{
6939 find interpretation(problem,interpretation);
6940 find mayInstanceOfFunction_class(problem,interpretation,var_This);
6941 // type constraint is enforced by construction
6942 // This is exported
6943 // Target is exported
6944 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(problem,interpretation,_var__Model,var_This);
6945 var_virtual0 == const_Root_FunctionType;DefinedElement.name(const_Root_FunctionType,"Root FunctionType"); //LogicProblem.elements(problem,const_Root_FunctionType);
6946 find mayEquivalent(problem, interpretation, var_Target, var_virtual0);
6947}or{
6948 find interpretation(problem,interpretation);
6949 find mayInstanceOfFunction_class(problem,interpretation,var_This);
6950 // type constraint is enforced by construction
6951 // This is exported
6952 // Target is exported
6953 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,_var__Child,var_This);
6954 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(problem,interpretation,_var__Model,var_This);
6955 var_virtual0 == const_Leaf_FunctionType;DefinedElement.name(const_Leaf_FunctionType,"Leaf FunctionType"); //LogicProblem.elements(problem,const_Leaf_FunctionType);
6956 find mayEquivalent(problem, interpretation, var_Target, var_virtual0);
6957}or{
6958 find interpretation(problem,interpretation);
6959 find mayInstanceOfFunction_class(problem,interpretation,var_This);
6960 // type constraint is enforced by construction
6961 // This is exported
6962 // Target is exported
6963 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,var_This,_var__Par);
6964 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,_var__Child,var_This);
6965 var_virtual0 == const_Intermediate_FunctionType;DefinedElement.name(const_Intermediate_FunctionType,"Intermediate FunctionType"); //LogicProblem.elements(problem,const_Intermediate_FunctionType);
6966 find mayEquivalent(problem, interpretation, var_Target, var_virtual0);
6967}
6968private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_type(
6969 problem:LogicProblem, interpretation:PartialInterpretation,
6970 var_This, var_Target)
6971{
6972 find interpretation(problem,interpretation);
6973 find mustInstanceOfFunction_class(problem,interpretation,var_This);
6974 // type constraint is enforced by construction
6975 // This is exported
6976 // Target is exported
6977 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(problem,interpretation,_var__Model,var_This);
6978 var_virtual0 == const_Root_FunctionType;DefinedElement.name(const_Root_FunctionType,"Root FunctionType"); //LogicProblem.elements(problem,const_Root_FunctionType);
6979 var_Target == var_virtual0;
6980}or{
6981 find interpretation(problem,interpretation);
6982 find mustInstanceOfFunction_class(problem,interpretation,var_This);
6983 // type constraint is enforced by construction
6984 // This is exported
6985 // Target is exported
6986 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,_var__Child,var_This);
6987 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(problem,interpretation,_var__Model,var_This);
6988 var_virtual0 == const_Leaf_FunctionType;DefinedElement.name(const_Leaf_FunctionType,"Leaf FunctionType"); //LogicProblem.elements(problem,const_Leaf_FunctionType);
6989 var_Target == var_virtual0;
6990}or{
6991 find interpretation(problem,interpretation);
6992 find mustInstanceOfFunction_class(problem,interpretation,var_This);
6993 // type constraint is enforced by construction
6994 // This is exported
6995 // Target is exported
6996 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,var_This,_var__Par);
6997 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,_var__Child,var_This);
6998 var_virtual0 == const_Intermediate_FunctionType;DefinedElement.name(const_Intermediate_FunctionType,"Intermediate FunctionType"); //LogicProblem.elements(problem,const_Intermediate_FunctionType);
6999 var_Target == var_virtual0;
7000}
7001// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test fam rootElements
7002private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(
7003 problem:LogicProblem, interpretation:PartialInterpretation,
7004 var_Model, var_Root)
7005{
7006 find interpretation(problem,interpretation);
7007 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Model);
7008 find mustInstanceOfFunction_class(problem,interpretation,var_Root);
7009 // Model is exported
7010 // Root is exported
7011 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Model);
7012 find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,var_Model,var_virtual0);
7013 find mustInstanceOfFunctionalElement_class(problem,interpretation,var_virtual0);
7014 var_virtual0 == var_Root;
7015}
7016private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(
7017 problem:LogicProblem, interpretation:PartialInterpretation,
7018 var_Model, var_Root)
7019{
7020 find interpretation(problem,interpretation);
7021 find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Model);
7022 find mayInstanceOfFunction_class(problem,interpretation,var_Root);
7023 // Model is exported
7024 // Root is exported
7025 find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Model);
7026 find mayInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,var_Model,var_virtual0);
7027 find mayInstanceOfFunctionalElement_class(problem,interpretation,var_virtual0);
7028 find mayEquivalent(problem, interpretation, var_virtual0, var_Root);
7029}
7030private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(
7031 problem:LogicProblem, interpretation:PartialInterpretation,
7032 var_Model, var_Root)
7033{
7034 find interpretation(problem,interpretation);
7035 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Model);
7036 find mustInstanceOfFunction_class(problem,interpretation,var_Root);
7037 // Model is exported
7038 // Root is exported
7039 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Model);
7040 find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,var_Model,var_virtual0);
7041 find mustInstanceOfFunctionalElement_class(problem,interpretation,var_virtual0);
7042 var_virtual0 == var_Root;
7043}
7044// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test fam parent
7045private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(
7046 problem:LogicProblem, interpretation:PartialInterpretation,
7047 var_Func, var_Par)
7048{
7049 find interpretation(problem,interpretation);
7050 find mustInstanceOfFunction_class(problem,interpretation,var_Func);
7051 find mustInstanceOfFunction_class(problem,interpretation,var_Par);
7052 // Func is exported
7053 // Par is exported
7054 find mustInstanceOfFunction_class(problem,interpretation,var_Func);
7055 find mustInRelationparent_reference_FunctionalElement(problem,interpretation,var_Func,var_virtual0);
7056 find mustInstanceOfFunction_class(problem,interpretation,var_virtual0);
7057 var_virtual0 == var_Par;
7058}
7059private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(
7060 problem:LogicProblem, interpretation:PartialInterpretation,
7061 var_Func, var_Par)
7062{
7063 find interpretation(problem,interpretation);
7064 find mayInstanceOfFunction_class(problem,interpretation,var_Func);
7065 find mayInstanceOfFunction_class(problem,interpretation,var_Par);
7066 // Func is exported
7067 // Par is exported
7068 find mayInstanceOfFunction_class(problem,interpretation,var_Func);
7069 find mayInRelationparent_reference_FunctionalElement(problem,interpretation,var_Func,var_virtual0);
7070 find mayInstanceOfFunction_class(problem,interpretation,var_virtual0);
7071 find mayEquivalent(problem, interpretation, var_virtual0, var_Par);
7072}
7073private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(
7074 problem:LogicProblem, interpretation:PartialInterpretation,
7075 var_Func, var_Par)
7076{
7077 find interpretation(problem,interpretation);
7078 find mustInstanceOfFunction_class(problem,interpretation,var_Func);
7079 find mustInstanceOfFunction_class(problem,interpretation,var_Par);
7080 // Func is exported
7081 // Par is exported
7082 find mustInstanceOfFunction_class(problem,interpretation,var_Func);
7083 find mustInRelationparent_reference_FunctionalElement(problem,interpretation,var_Func,var_virtual0);
7084 find mustInstanceOfFunction_class(problem,interpretation,var_virtual0);
7085 var_virtual0 == var_Par;
7086}
7087// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test fam model
7088private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_model(
7089 problem:LogicProblem, interpretation:PartialInterpretation,
7090 var_This, var_Target)
7091{
7092 find interpretation(problem,interpretation);
7093 find mustInstanceOfFunctionalElement_class(problem,interpretation,var_This);
7094 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Target);
7095 // This is exported
7096 // Target is exported
7097 find mustInstanceOfFunctionalElement_class(problem,interpretation,var_This);
7098 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Target);
7099}
7100private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_model(
7101 problem:LogicProblem, interpretation:PartialInterpretation,
7102 var_This, var_Target)
7103{
7104 find interpretation(problem,interpretation);
7105 find mayInstanceOfFunctionalElement_class(problem,interpretation,var_This);
7106 find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Target);
7107 // This is exported
7108 // Target is exported
7109 find mayInstanceOfFunctionalElement_class(problem,interpretation,var_This);
7110 find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Target);
7111}
7112private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_model(
7113 problem:LogicProblem, interpretation:PartialInterpretation,
7114 var_This, var_Target)
7115{
7116 find interpretation(problem,interpretation);
7117 find mustInstanceOfFunctionalElement_class(problem,interpretation,var_This);
7118 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Target);
7119 // This is exported
7120 // Target is exported
7121 find mustInstanceOfFunctionalElement_class(problem,interpretation,var_This);
7122 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Target);
7123}
7124
7125//////////
7126// 1.4 Containment Indexer
7127//////////
7128private pattern mustContains2(source: DefinedElement, target: DefinedElement) {
7129 find mustContains4(_,_,source,target);
7130}
7131
7132private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation,
7133 source: DefinedElement, target: DefinedElement)
7134 { find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,target); }or
7135
7136 { find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,source,target); }or
7137
7138 { find mustInRelationsubElements_reference_Function(problem,interpretation,source,target); }or
7139
7140 { find mustInRelationdata_reference_FunctionalInterface(problem,interpretation,source,target); }or
7141
7142 { find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,source,target); }or
7143
7144 { find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,target); }
7145
7146private pattern mustTransitiveContains(source,target) {
7147 find mustContains2+(source,target);
7148}
7149
7150//////////
7151// 2. Invalidation Indexers
7152//////////
7153// 2.1 Invalidated by WF Queries
7154//////////
7155
7156//////////
7157// 3. Unfinishedness Indexers
7158//////////
7159// 3.1 Unfinishedness Measured by Multiplicity
7160//////////
7161pattern unfinishedLowerMultiplicity_to_reference_InformationLink(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) {
7162 find interpretation(problem,interpretation);
7163 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
7164 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"to reference InformationLink");
7165 find mustInstanceOfInformationLink_class(problem,interpretation,object);
7166 numberOfExistingReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,object,_);
7167 check(numberOfExistingReferences < 1);
7168 missingMultiplicity == eval(1-numberOfExistingReferences);
7169}
7170
7171//////////
7172// 3.2 Unfinishedness Measured by WF Queries
7173//////////
7174
7175//////////
7176// 4. Refinement Indexers
7177//////////
7178// 4.1 Object constructors
7179//////////
7180private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation)
7181{
7182 find interpretation(problem,interpretation);
7183 find mustInstanceOfFunctionalOutput_class(problem,interpretation,root);
7184 find mustExist(problem, interpretation, root);
7185}or{
7186 find interpretation(problem,interpretation);
7187 find mustInstanceOfFunctionalElement_class(problem,interpretation,root);
7188 find mustExist(problem, interpretation, root);
7189}or{
7190 find interpretation(problem,interpretation);
7191 find mustInstanceOfInformationLink_class(problem,interpretation,root);
7192 find mustExist(problem, interpretation, root);
7193}or{
7194 find interpretation(problem,interpretation);
7195 find mustInstanceOfFunctionalInterface_class(problem,interpretation,root);
7196 find mustExist(problem, interpretation, root);
7197}or{
7198 find interpretation(problem,interpretation);
7199 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,root);
7200 find mustExist(problem, interpretation, root);
7201}or{
7202 find interpretation(problem,interpretation);
7203 find mustInstanceOfFunctionalData_class(problem,interpretation,root);
7204 find mustExist(problem, interpretation, root);
7205}or{
7206 find interpretation(problem,interpretation);
7207 find mustInstanceOfFunction_class(problem,interpretation,root);
7208 find mustExist(problem, interpretation, root);
7209}or{
7210 find interpretation(problem,interpretation);
7211 find mustInstanceOfFAMTerminator_class(problem,interpretation,root);
7212 find mustExist(problem, interpretation, root);
7213}or{
7214 find interpretation(problem,interpretation);
7215 find mustInstanceOfFunctionalInput_class(problem,interpretation,root);
7216 find mustExist(problem, interpretation, root);
7217}or{
7218 find interpretation(problem,interpretation);
7219 find mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem,interpretation,root);
7220 find mustExist(problem, interpretation, root);
7221}or{
7222 find interpretation(problem,interpretation);
7223 find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,root);
7224 find mustExist(problem, interpretation, root);
7225}
7226pattern createObject_FunctionalInput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData(
7227 problem:LogicProblem, interpretation:PartialInterpretation,
7228 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
7229 container:DefinedElement)
7230{
7231 find interpretation(problem,interpretation);
7232 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
7233 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class");
7234 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
7235 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface");
7236 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
7237 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData");
7238 find mustInstanceOfFunctionalInterface_class(problem,interpretation,container);
7239 find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject);
7240 find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject);
7241 find mustExist(problem, interpretation, container);
7242 neg find mustExist(problem, interpretation, newObject);
7243}
7244pattern createObject_FunctionalInput_class(
7245 problem:LogicProblem, interpretation:PartialInterpretation,
7246 typeInterpretation:PartialComplexTypeInterpretation)
7247{
7248 find interpretation(problem,interpretation);
7249 neg find hasElementInContainment(problem,interpretation);
7250 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
7251 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class");
7252 find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject);
7253 find mayExist(problem, interpretation, newObject);
7254 neg find mustExist(problem, interpretation, newObject);
7255}
7256pattern createObject_FunctionalOutput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData(
7257 problem:LogicProblem, interpretation:PartialInterpretation,
7258 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
7259 container:DefinedElement)
7260{
7261 find interpretation(problem,interpretation);
7262 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
7263 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class");
7264 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
7265 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface");
7266 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
7267 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData");
7268 find mustInstanceOfFunctionalInterface_class(problem,interpretation,container);
7269 find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject);
7270 find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject);
7271 find mustExist(problem, interpretation, container);
7272 neg find mustExist(problem, interpretation, newObject);
7273}
7274pattern createObject_FunctionalOutput_class(
7275 problem:LogicProblem, interpretation:PartialInterpretation,
7276 typeInterpretation:PartialComplexTypeInterpretation)
7277{
7278 find interpretation(problem,interpretation);
7279 neg find hasElementInContainment(problem,interpretation);
7280 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
7281 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class");
7282 find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject);
7283 find mayExist(problem, interpretation, newObject);
7284 neg find mustExist(problem, interpretation, newObject);
7285}
7286pattern createObject_FAMTerminator_class_by_terminator_reference_FunctionalData_with_data_reference_FAMTerminator(
7287 problem:LogicProblem, interpretation:PartialInterpretation,
7288 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
7289 container:DefinedElement)
7290{
7291 find interpretation(problem,interpretation);
7292 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
7293 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class");
7294 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
7295 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"terminator reference FunctionalData");
7296 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
7297 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"data reference FAMTerminator");
7298 find mustInstanceOfFunctionalData_class(problem,interpretation,container);
7299 find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject);
7300 find mayInRelationterminator_reference_FunctionalData(problem,interpretation,container,newObject);
7301 find mustExist(problem, interpretation, container);
7302 neg find mustExist(problem, interpretation, newObject);
7303}
7304pattern createObject_FAMTerminator_class(
7305 problem:LogicProblem, interpretation:PartialInterpretation,
7306 typeInterpretation:PartialComplexTypeInterpretation)
7307{
7308 find interpretation(problem,interpretation);
7309 neg find hasElementInContainment(problem,interpretation);
7310 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
7311 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class");
7312 find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject);
7313 find mayExist(problem, interpretation, newObject);
7314 neg find mustExist(problem, interpretation, newObject);
7315}
7316pattern createObject_InformationLink_class_by_outgoingLinks_reference_FunctionalOutput_with_from_reference_InformationLink(
7317 problem:LogicProblem, interpretation:PartialInterpretation,
7318 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
7319 container:DefinedElement)
7320{
7321 find interpretation(problem,interpretation);
7322 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
7323 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class");
7324 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
7325 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingLinks reference FunctionalOutput");
7326 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
7327 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"from reference InformationLink");
7328 find mustInstanceOfFunctionalOutput_class(problem,interpretation,container);
7329 find mayInstanceOfInformationLink_class(problem,interpretation,newObject);
7330 find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,container,newObject);
7331 find mustExist(problem, interpretation, container);
7332 neg find mustExist(problem, interpretation, newObject);
7333}
7334pattern createObject_InformationLink_class(
7335 problem:LogicProblem, interpretation:PartialInterpretation,
7336 typeInterpretation:PartialComplexTypeInterpretation)
7337{
7338 find interpretation(problem,interpretation);
7339 neg find hasElementInContainment(problem,interpretation);
7340 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
7341 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class");
7342 find mayInstanceOfInformationLink_class(problem,interpretation,newObject);
7343 find mayExist(problem, interpretation, newObject);
7344 neg find mustExist(problem, interpretation, newObject);
7345}
7346pattern createObject_FunctionalArchitectureModel_class_UndefinedPart(
7347 problem:LogicProblem, interpretation:PartialInterpretation,
7348 typeInterpretation:PartialComplexTypeInterpretation)
7349{
7350 find interpretation(problem,interpretation);
7351 neg find hasElementInContainment(problem,interpretation);
7352 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
7353 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalArchitectureModel class UndefinedPart");
7354 find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,newObject);
7355 find mayExist(problem, interpretation, newObject);
7356 neg find mustExist(problem, interpretation, newObject);
7357}
7358pattern createObject_Function_class_by_rootElements_reference_FunctionalArchitectureModel(
7359 problem:LogicProblem, interpretation:PartialInterpretation,
7360 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
7361 container:DefinedElement)
7362{
7363 find interpretation(problem,interpretation);
7364 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
7365 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class");
7366 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
7367 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"rootElements reference FunctionalArchitectureModel");
7368 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,container);
7369 find mayInstanceOfFunction_class(problem,interpretation,newObject);
7370 find mayInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,container,newObject);
7371 find mustExist(problem, interpretation, container);
7372 neg find mustExist(problem, interpretation, newObject);
7373}
7374pattern createObject_Function_class_by_subElements_reference_Function_with_parent_reference_FunctionalElement(
7375 problem:LogicProblem, interpretation:PartialInterpretation,
7376 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
7377 container:DefinedElement)
7378{
7379 find interpretation(problem,interpretation);
7380 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
7381 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class");
7382 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
7383 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"subElements reference Function");
7384 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
7385 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FunctionalElement");
7386 find mustInstanceOfFunction_class(problem,interpretation,container);
7387 find mayInstanceOfFunction_class(problem,interpretation,newObject);
7388 find mayInRelationsubElements_reference_Function(problem,interpretation,container,newObject);
7389 find mustExist(problem, interpretation, container);
7390 neg find mustExist(problem, interpretation, newObject);
7391}
7392pattern createObject_Function_class(
7393 problem:LogicProblem, interpretation:PartialInterpretation,
7394 typeInterpretation:PartialComplexTypeInterpretation)
7395{
7396 find interpretation(problem,interpretation);
7397 neg find hasElementInContainment(problem,interpretation);
7398 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
7399 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class");
7400 find mayInstanceOfFunction_class(problem,interpretation,newObject);
7401 find mayExist(problem, interpretation, newObject);
7402 neg find mustExist(problem, interpretation, newObject);
7403}
7404pattern createObject_FunctionalInterface_class_by_interface_reference_FunctionalElement_with_element_reference_FunctionalInterface(
7405 problem:LogicProblem, interpretation:PartialInterpretation,
7406 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
7407 container:DefinedElement)
7408{
7409 find interpretation(problem,interpretation);
7410 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
7411 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class");
7412 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
7413 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"interface reference FunctionalElement");
7414 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
7415 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"element reference FunctionalInterface");
7416 find mustInstanceOfFunctionalElement_class(problem,interpretation,container);
7417 find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject);
7418 find mayInRelationinterface_reference_FunctionalElement(problem,interpretation,container,newObject);
7419 find mustExist(problem, interpretation, container);
7420 neg find mustExist(problem, interpretation, newObject);
7421}
7422pattern createObject_FunctionalInterface_class(
7423 problem:LogicProblem, interpretation:PartialInterpretation,
7424 typeInterpretation:PartialComplexTypeInterpretation)
7425{
7426 find interpretation(problem,interpretation);
7427 neg find hasElementInContainment(problem,interpretation);
7428 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
7429 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class");
7430 find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject);
7431 find mayExist(problem, interpretation, newObject);
7432 neg find mustExist(problem, interpretation, newObject);
7433}
7434
7435//////////
7436// 4.2 Type refinement
7437//////////
7438pattern refineTypeTo_FunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
7439 find interpretation(problem,interpretation);
7440 PartialInterpretation.newElements(interpretation,element);
7441 find mayInstanceOfFunctionalInput_class(problem,interpretation,element);
7442 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
7443 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
7444 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
7445 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
7446 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
7447 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
7448 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
7449}
7450pattern refineTypeTo_FunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
7451 find interpretation(problem,interpretation);
7452 PartialInterpretation.newElements(interpretation,element);
7453 find mayInstanceOfFunctionalOutput_class(problem,interpretation,element);
7454 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
7455 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
7456 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
7457 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
7458 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
7459 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
7460 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
7461}
7462pattern refineTypeTo_FAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
7463 find interpretation(problem,interpretation);
7464 PartialInterpretation.newElements(interpretation,element);
7465 find mayInstanceOfFAMTerminator_class(problem,interpretation,element);
7466 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
7467 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
7468 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
7469 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
7470 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
7471 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
7472}
7473pattern refineTypeTo_InformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
7474 find interpretation(problem,interpretation);
7475 PartialInterpretation.newElements(interpretation,element);
7476 find mayInstanceOfInformationLink_class(problem,interpretation,element);
7477 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
7478 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
7479 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
7480 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
7481 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
7482 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
7483}
7484pattern refineTypeTo_FunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
7485 find interpretation(problem,interpretation);
7486 PartialInterpretation.newElements(interpretation,element);
7487 find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element);
7488 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
7489 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
7490 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
7491 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
7492 neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element);
7493 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
7494}
7495pattern refineTypeTo_Function_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
7496 find interpretation(problem,interpretation);
7497 PartialInterpretation.newElements(interpretation,element);
7498 find mayInstanceOfFunction_class(problem,interpretation,element);
7499 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
7500 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
7501 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
7502 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
7503 neg find mustInstanceOfFunction_class(problem,interpretation,element);
7504 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
7505}
7506pattern refineTypeTo_FunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
7507 find interpretation(problem,interpretation);
7508 PartialInterpretation.newElements(interpretation,element);
7509 find mayInstanceOfFunctionalInterface_class(problem,interpretation,element);
7510 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
7511 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
7512 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
7513 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
7514 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
7515 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
7516}
7517
7518//////////
7519// 4.3 Relation refinement
7520//////////
7521pattern refineRelation_model_reference_FunctionalElement(
7522 problem:LogicProblem, interpretation:PartialInterpretation,
7523 relationIterpretation:PartialRelationInterpretation,
7524 from: DefinedElement, to: DefinedElement)
7525{
7526 find interpretation(problem,interpretation);
7527 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
7528 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement");
7529 find mustExist(problem, interpretation, from);
7530 find mustExist(problem, interpretation, to);
7531 find mustInstanceOfFunctionalElement_class(problem,interpretation,from);
7532 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,to);
7533 find mayInRelationmodel_reference_FunctionalElement(problem,interpretation,from,to);
7534 neg find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,from,to);
7535}
7536pattern refineRelation_IncomingLinks_reference_FunctionalInput_and_to_reference_InformationLink(
7537 problem:LogicProblem, interpretation:PartialInterpretation,
7538 relationIterpretation:PartialRelationInterpretation, oppositeInterpretation:PartialRelationInterpretation,
7539 from: DefinedElement, to: DefinedElement)
7540{
7541 find interpretation(problem,interpretation);
7542 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
7543 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"IncomingLinks reference FunctionalInput");
7544 PartialInterpretation.partialrelationinterpretation(interpretation,oppositeInterpretation);
7545 PartialRelationInterpretation.interpretationOf.name(oppositeInterpretation,"to reference InformationLink");
7546 find mustExist(problem, interpretation, from);
7547 find mustExist(problem, interpretation, to);
7548 find mustInstanceOfFunctionalInput_class(problem,interpretation,from);
7549 find mustInstanceOfInformationLink_class(problem,interpretation,to);
7550 find mayInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,from,to);
7551 neg find mustInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,from,to);
7552}
7553pattern refineRelation_type_attribute_Function(
7554 problem:LogicProblem, interpretation:PartialInterpretation,
7555 relationIterpretation:PartialRelationInterpretation,
7556 from: DefinedElement, to: DefinedElement)
7557{
7558 find interpretation(problem,interpretation);
7559 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
7560 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function");
7561 find mustExist(problem, interpretation, from);
7562 find mustExist(problem, interpretation, to);
7563 find mustInstanceOfFunction_class(problem,interpretation,from);
7564 find mustInstanceOfFunctionType_enum(problem,interpretation,to);
7565 find mayInRelationtype_attribute_Function(problem,interpretation,from,to);
7566 neg find mustInRelationtype_attribute_Function(problem,interpretation,from,to);
7567}
7568import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage"
7569import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem"
7570import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language"
7571
7572//////////
7573// 0. Util
7574//////////
7575private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) {
7576 PartialInterpretation.problem(interpretation,problem);
7577}
7578
7579/////////////////////////
7580// 0.1 Existence
7581/////////////////////////
7582private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
7583 find interpretation(problem,interpretation);
7584 LogicProblem.elements(problem,element);
7585} or {
7586 find interpretation(problem,interpretation);
7587 PartialInterpretation.newElements(interpretation,element);
7588}
7589
7590private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
7591 find mustExist(problem,interpretation,element);
7592} or {
7593 find interpretation(problem,interpretation);
7594 neg find elementCloseWorld(element);
7595 PartialInterpretation.openWorldElements(interpretation,element);
7596}
7597
7598private pattern elementCloseWorld(element:DefinedElement) {
7599 PartialInterpretation.openWorldElements(i,element);
7600 PartialInterpretation.maxNewElements(i,0);
7601} or {
7602 Scope.targetTypeInterpretation(scope,interpretation);
7603 PartialTypeInterpratation.elements(interpretation,element);
7604 Scope.maxNewElements(scope,0);
7605}
7606
7607////////////////////////
7608// 0.2 Equivalence
7609////////////////////////
7610pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) {
7611 find mayExist(problem,interpretation,a);
7612 find mayExist(problem,interpretation,b);
7613 a == b;
7614}
7615
7616////////////////////////
7617// 0.3 Required Patterns by TypeIndexer
7618////////////////////////
7619private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) {
7620 find interpretation(problem,interpretation);
7621 LogicProblem.types(problem,type);
7622 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
7623 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
7624}
7625
7626private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) {
7627 find interpretation(problem,interpretation);
7628 LogicProblem.types(problem,type);
7629 TypeDefinition.elements(type,element);
7630} or {
7631 find interpretation(problem,interpretation);
7632 find typeInterpretation(problem,interpretation,type,typeInterpretation);
7633 PartialComplexTypeInterpretation.elements(typeInterpretation,element);
7634}
7635
7636private pattern isPrimitive(element: PrimitiveElement) {
7637 PrimitiveElement(element);
7638}
7639
7640//////////
7641// 1. Problem-Specific Base Indexers
7642//////////
7643// 1.1 Type Indexers
7644//////////
7645// 1.1.1 primitive Type Indexers
7646//////////
7647
7648//////////
7649// 1.1.2 domain-specific Type Indexers
7650//////////
7651/**
7652 * An element must be an instance of type "FunctionalElement class".
7653 */
7654private pattern mustInstanceOfFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
7655 Type.name(type,"FunctionalElement class");
7656 find directInstanceOf(problem,interpretation,element,type);
7657}
7658private pattern scopeDisallowsNewFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation) {
7659 find interpretation(problem,interpretation);
7660 PartialInterpretation.scopes(interpretation,scope);
7661 Scope.targetTypeInterpretation(scope,typeInterpretation);
7662 Scope.maxNewElements(scope,0);
7663 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
7664 Type.name(type,"FunctionalElement class");
7665}
7666
7667/**
7668 * An element may be an instance of type "FunctionalElement class".
7669 */
7670private pattern mayInstanceOfFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
7671{
7672 find interpretation(problem,interpretation);
7673 PartialInterpretation.newElements(interpretation,element);
7674 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
7675 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
7676 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
7677 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
7678 neg find mustInstanceOfFunction_class(problem,interpretation,element);
7679 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
7680 neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation);
7681 neg find isPrimitive(element);
7682} or {
7683 find interpretation(problem,interpretation);
7684 PartialInterpretation.openWorldElements(interpretation,element);
7685 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
7686 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
7687 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
7688 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
7689 neg find mustInstanceOfFunction_class(problem,interpretation,element);
7690 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
7691 neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation);
7692 neg find isPrimitive(element);
7693} or
7694{ find mustInstanceOfFunctionalElement_class(problem,interpretation,element); }
7695/**
7696 * An element must be an instance of type "FunctionalArchitectureModel class".
7697 */
7698private pattern mustInstanceOfFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
7699 Type.name(type,"FunctionalArchitectureModel class");
7700 find directInstanceOf(problem,interpretation,element,type);
7701}
7702private pattern scopeDisallowsNewFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation) {
7703 find interpretation(problem,interpretation);
7704 PartialInterpretation.scopes(interpretation,scope);
7705 Scope.targetTypeInterpretation(scope,typeInterpretation);
7706 Scope.maxNewElements(scope,0);
7707 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
7708 Type.name(type,"FunctionalArchitectureModel class");
7709}
7710
7711/**
7712 * An element may be an instance of type "FunctionalArchitectureModel class".
7713 */
7714private pattern mayInstanceOfFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
7715{
7716 find interpretation(problem,interpretation);
7717 PartialInterpretation.newElements(interpretation,element);
7718 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
7719 neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element);
7720 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
7721 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
7722 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
7723 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
7724 neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation);
7725 neg find isPrimitive(element);
7726} or {
7727 find interpretation(problem,interpretation);
7728 PartialInterpretation.openWorldElements(interpretation,element);
7729 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
7730 neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element);
7731 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
7732 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
7733 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
7734 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
7735 neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation);
7736 neg find isPrimitive(element);
7737} or
7738{ find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); }
7739/**
7740 * An element must be an instance of type "Function class".
7741 */
7742private pattern mustInstanceOfFunction_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
7743 Type.name(type,"Function class");
7744 find directInstanceOf(problem,interpretation,element,type);
7745}
7746private pattern scopeDisallowsNewFunction_class(problem:LogicProblem, interpretation:PartialInterpretation) {
7747 find interpretation(problem,interpretation);
7748 PartialInterpretation.scopes(interpretation,scope);
7749 Scope.targetTypeInterpretation(scope,typeInterpretation);
7750 Scope.maxNewElements(scope,0);
7751 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
7752 Type.name(type,"Function class");
7753}
7754
7755/**
7756 * An element may be an instance of type "Function class".
7757 */
7758private pattern mayInstanceOfFunction_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
7759{
7760 find interpretation(problem,interpretation);
7761 PartialInterpretation.newElements(interpretation,element);
7762 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
7763 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
7764 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
7765 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
7766 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
7767 neg find scopeDisallowsNewFunction_class(problem, interpretation);
7768 neg find isPrimitive(element);
7769} or {
7770 find interpretation(problem,interpretation);
7771 PartialInterpretation.openWorldElements(interpretation,element);
7772 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
7773 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
7774 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
7775 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
7776 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
7777 neg find scopeDisallowsNewFunction_class(problem, interpretation);
7778 neg find isPrimitive(element);
7779} or
7780{ find mustInstanceOfFunction_class(problem,interpretation,element); }
7781/**
7782 * An element must be an instance of type "FAMTerminator class".
7783 */
7784private pattern mustInstanceOfFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
7785 Type.name(type,"FAMTerminator class");
7786 find directInstanceOf(problem,interpretation,element,type);
7787}
7788private pattern scopeDisallowsNewFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation) {
7789 find interpretation(problem,interpretation);
7790 PartialInterpretation.scopes(interpretation,scope);
7791 Scope.targetTypeInterpretation(scope,typeInterpretation);
7792 Scope.maxNewElements(scope,0);
7793 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
7794 Type.name(type,"FAMTerminator class");
7795}
7796
7797/**
7798 * An element may be an instance of type "FAMTerminator class".
7799 */
7800private pattern mayInstanceOfFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
7801{
7802 find interpretation(problem,interpretation);
7803 PartialInterpretation.newElements(interpretation,element);
7804 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
7805 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
7806 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
7807 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
7808 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
7809 neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation);
7810 neg find isPrimitive(element);
7811} or {
7812 find interpretation(problem,interpretation);
7813 PartialInterpretation.openWorldElements(interpretation,element);
7814 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
7815 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
7816 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
7817 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
7818 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
7819 neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation);
7820 neg find isPrimitive(element);
7821} or
7822{ find mustInstanceOfFAMTerminator_class(problem,interpretation,element); }
7823/**
7824 * An element must be an instance of type "InformationLink class".
7825 */
7826private pattern mustInstanceOfInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
7827 Type.name(type,"InformationLink class");
7828 find directInstanceOf(problem,interpretation,element,type);
7829}
7830private pattern scopeDisallowsNewInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation) {
7831 find interpretation(problem,interpretation);
7832 PartialInterpretation.scopes(interpretation,scope);
7833 Scope.targetTypeInterpretation(scope,typeInterpretation);
7834 Scope.maxNewElements(scope,0);
7835 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
7836 Type.name(type,"InformationLink class");
7837}
7838
7839/**
7840 * An element may be an instance of type "InformationLink class".
7841 */
7842private pattern mayInstanceOfInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
7843{
7844 find interpretation(problem,interpretation);
7845 PartialInterpretation.newElements(interpretation,element);
7846 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
7847 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
7848 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
7849 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
7850 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
7851 neg find scopeDisallowsNewInformationLink_class(problem, interpretation);
7852 neg find isPrimitive(element);
7853} or {
7854 find interpretation(problem,interpretation);
7855 PartialInterpretation.openWorldElements(interpretation,element);
7856 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
7857 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
7858 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
7859 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
7860 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
7861 neg find scopeDisallowsNewInformationLink_class(problem, interpretation);
7862 neg find isPrimitive(element);
7863} or
7864{ find mustInstanceOfInformationLink_class(problem,interpretation,element); }
7865/**
7866 * An element must be an instance of type "FunctionalInterface class".
7867 */
7868private pattern mustInstanceOfFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
7869 Type.name(type,"FunctionalInterface class");
7870 find directInstanceOf(problem,interpretation,element,type);
7871}
7872private pattern scopeDisallowsNewFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation) {
7873 find interpretation(problem,interpretation);
7874 PartialInterpretation.scopes(interpretation,scope);
7875 Scope.targetTypeInterpretation(scope,typeInterpretation);
7876 Scope.maxNewElements(scope,0);
7877 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
7878 Type.name(type,"FunctionalInterface class");
7879}
7880
7881/**
7882 * An element may be an instance of type "FunctionalInterface class".
7883 */
7884private pattern mayInstanceOfFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
7885{
7886 find interpretation(problem,interpretation);
7887 PartialInterpretation.newElements(interpretation,element);
7888 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
7889 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
7890 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
7891 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
7892 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
7893 neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation);
7894 neg find isPrimitive(element);
7895} or {
7896 find interpretation(problem,interpretation);
7897 PartialInterpretation.openWorldElements(interpretation,element);
7898 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
7899 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
7900 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
7901 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
7902 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
7903 neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation);
7904 neg find isPrimitive(element);
7905} or
7906{ find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); }
7907/**
7908 * An element must be an instance of type "FunctionalInput class".
7909 */
7910private pattern mustInstanceOfFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
7911 Type.name(type,"FunctionalInput class");
7912 find directInstanceOf(problem,interpretation,element,type);
7913}
7914private pattern scopeDisallowsNewFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation) {
7915 find interpretation(problem,interpretation);
7916 PartialInterpretation.scopes(interpretation,scope);
7917 Scope.targetTypeInterpretation(scope,typeInterpretation);
7918 Scope.maxNewElements(scope,0);
7919 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
7920 Type.name(type,"FunctionalInput class");
7921}
7922
7923/**
7924 * An element may be an instance of type "FunctionalInput class".
7925 */
7926private pattern mayInstanceOfFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
7927{
7928 find interpretation(problem,interpretation);
7929 PartialInterpretation.newElements(interpretation,element);
7930 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
7931 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
7932 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
7933 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
7934 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
7935 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
7936 neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation);
7937 neg find isPrimitive(element);
7938} or {
7939 find interpretation(problem,interpretation);
7940 PartialInterpretation.openWorldElements(interpretation,element);
7941 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
7942 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
7943 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
7944 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
7945 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
7946 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
7947 neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation);
7948 neg find isPrimitive(element);
7949} or
7950{ find mustInstanceOfFunctionalInput_class(problem,interpretation,element); }
7951/**
7952 * An element must be an instance of type "FunctionalOutput class".
7953 */
7954private pattern mustInstanceOfFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
7955 Type.name(type,"FunctionalOutput class");
7956 find directInstanceOf(problem,interpretation,element,type);
7957}
7958private pattern scopeDisallowsNewFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation) {
7959 find interpretation(problem,interpretation);
7960 PartialInterpretation.scopes(interpretation,scope);
7961 Scope.targetTypeInterpretation(scope,typeInterpretation);
7962 Scope.maxNewElements(scope,0);
7963 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
7964 Type.name(type,"FunctionalOutput class");
7965}
7966
7967/**
7968 * An element may be an instance of type "FunctionalOutput class".
7969 */
7970private pattern mayInstanceOfFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
7971{
7972 find interpretation(problem,interpretation);
7973 PartialInterpretation.newElements(interpretation,element);
7974 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
7975 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
7976 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
7977 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
7978 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
7979 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
7980 neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation);
7981 neg find isPrimitive(element);
7982} or {
7983 find interpretation(problem,interpretation);
7984 PartialInterpretation.openWorldElements(interpretation,element);
7985 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
7986 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
7987 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
7988 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
7989 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
7990 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
7991 neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation);
7992 neg find isPrimitive(element);
7993} or
7994{ find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); }
7995/**
7996 * An element must be an instance of type "FunctionalData class".
7997 */
7998private pattern mustInstanceOfFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
7999 Type.name(type,"FunctionalData class");
8000 find directInstanceOf(problem,interpretation,element,type);
8001}
8002private pattern scopeDisallowsNewFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation) {
8003 find interpretation(problem,interpretation);
8004 PartialInterpretation.scopes(interpretation,scope);
8005 Scope.targetTypeInterpretation(scope,typeInterpretation);
8006 Scope.maxNewElements(scope,0);
8007 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
8008 Type.name(type,"FunctionalData class");
8009}
8010
8011/**
8012 * An element may be an instance of type "FunctionalData class".
8013 */
8014private pattern mayInstanceOfFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
8015{
8016 find interpretation(problem,interpretation);
8017 PartialInterpretation.newElements(interpretation,element);
8018 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
8019 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
8020 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
8021 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
8022 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
8023 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
8024 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
8025 neg find scopeDisallowsNewFunctionalData_class(problem, interpretation);
8026 neg find isPrimitive(element);
8027} or {
8028 find interpretation(problem,interpretation);
8029 PartialInterpretation.openWorldElements(interpretation,element);
8030 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
8031 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
8032 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
8033 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
8034 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
8035 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
8036 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
8037 neg find scopeDisallowsNewFunctionalData_class(problem, interpretation);
8038 neg find isPrimitive(element);
8039} or
8040{ find mustInstanceOfFunctionalData_class(problem,interpretation,element); }
8041/**
8042 * An element must be an instance of type "FunctionType enum".
8043 */
8044private pattern mustInstanceOfFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
8045 Type.name(type,"FunctionType enum");
8046 find directInstanceOf(problem,interpretation,element,type);
8047}
8048private pattern scopeDisallowsNewFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation) {
8049 find interpretation(problem,interpretation);
8050 PartialInterpretation.scopes(interpretation,scope);
8051 Scope.targetTypeInterpretation(scope,typeInterpretation);
8052 Scope.maxNewElements(scope,0);
8053 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
8054 Type.name(type,"FunctionType enum");
8055}
8056
8057/**
8058 * An element may be an instance of type "FunctionType enum".
8059 */
8060private pattern mayInstanceOfFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
8061{ find mustInstanceOfFunctionType_enum(problem,interpretation,element); }
8062/**
8063 * An element must be an instance of type "FunctionalArchitectureModel class DefinedPart".
8064 */
8065private pattern mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
8066 Type.name(type,"FunctionalArchitectureModel class DefinedPart");
8067 find directInstanceOf(problem,interpretation,element,type);
8068}
8069private pattern scopeDisallowsNewFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
8070 find interpretation(problem,interpretation);
8071 PartialInterpretation.scopes(interpretation,scope);
8072 Scope.targetTypeInterpretation(scope,typeInterpretation);
8073 Scope.maxNewElements(scope,0);
8074 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
8075 Type.name(type,"FunctionalArchitectureModel class DefinedPart");
8076}
8077
8078/**
8079 * An element may be an instance of type "FunctionalArchitectureModel class DefinedPart".
8080 */
8081private pattern mayInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
8082{ find mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem,interpretation,element); }
8083/**
8084 * An element must be an instance of type "FunctionalArchitectureModel class UndefinedPart".
8085 */
8086private pattern mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
8087 Type.name(type,"FunctionalArchitectureModel class UndefinedPart");
8088 find directInstanceOf(problem,interpretation,element,type);
8089}
8090private pattern scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
8091 find interpretation(problem,interpretation);
8092 PartialInterpretation.scopes(interpretation,scope);
8093 Scope.targetTypeInterpretation(scope,typeInterpretation);
8094 Scope.maxNewElements(scope,0);
8095 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
8096 Type.name(type,"FunctionalArchitectureModel class UndefinedPart");
8097}
8098
8099/**
8100 * An element may be an instance of type "FunctionalArchitectureModel class UndefinedPart".
8101 */
8102private pattern mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
8103{
8104 find interpretation(problem,interpretation);
8105 PartialInterpretation.newElements(interpretation,element);
8106 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
8107 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
8108 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
8109 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
8110 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
8111 neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation);
8112 neg find isPrimitive(element);
8113} or {
8114 find interpretation(problem,interpretation);
8115 PartialInterpretation.openWorldElements(interpretation,element);
8116 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
8117 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
8118 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
8119 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
8120 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
8121 neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation);
8122 neg find isPrimitive(element);
8123} or
8124{ find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); }
8125
8126//////////
8127// 1.2 Relation Declaration Indexers
8128//////////
8129/**
8130 * Matcher for detecting tuples t where []interface reference FunctionalElement(source,target)
8131 */
8132private pattern mustInRelationinterface_reference_FunctionalElement(
8133 problem:LogicProblem, interpretation:PartialInterpretation,
8134 source: DefinedElement, target:DefinedElement)
8135{
8136 find interpretation(problem,interpretation);
8137 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
8138 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface reference FunctionalElement");
8139 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
8140 BinaryElementRelationLink.param1(link,source);
8141 BinaryElementRelationLink.param2(link,target);
8142}
8143/**
8144 * Matcher for detecting tuples t where <>interface reference FunctionalElement(source,target)
8145 */
8146private pattern mayInRelationinterface_reference_FunctionalElement(
8147 problem:LogicProblem, interpretation:PartialInterpretation,
8148 source: DefinedElement, target:DefinedElement)
8149{
8150 find interpretation(problem,interpretation);
8151 // The two endpoint of the link have to exist
8152 find mayExist(problem, interpretation, source);
8153 find mayExist(problem, interpretation, target);
8154 // Type consistency
8155 find mayInstanceOfFunctionalElement_class(problem,interpretation,source);
8156 find mayInstanceOfFunctionalInterface_class(problem,interpretation,target);
8157 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
8158 // the upper bound of the multiplicity should be considered.
8159 numberOfExistingReferences == count find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,_);
8160 check(numberOfExistingReferences < 1);
8161 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
8162 // the upper bound of the opposite reference multiplicity should be considered.
8163 numberOfExistingOppositeReferences == count find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,target,_);
8164 check(numberOfExistingOppositeReferences < 1);
8165 // The reference is containment, then a new reference cannot be create if:
8166 // 1. Multiple parents
8167 neg find mustContains4(problem,interpretation,_,target);
8168 // 2. Circle in the containment hierarchy
8169 neg find mustTransitiveContains(source,target);
8170} or {
8171 find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,target);
8172}
8173/**
8174 * Matcher for detecting tuples t where []model reference FunctionalElement(source,target)
8175 */
8176private pattern mustInRelationmodel_reference_FunctionalElement(
8177 problem:LogicProblem, interpretation:PartialInterpretation,
8178 source: DefinedElement, target:DefinedElement)
8179{
8180 find interpretation(problem,interpretation);
8181 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
8182 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement");
8183 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
8184 BinaryElementRelationLink.param1(link,source);
8185 BinaryElementRelationLink.param2(link,target);
8186}
8187/**
8188 * Matcher for detecting tuples t where <>model reference FunctionalElement(source,target)
8189 */
8190private pattern mayInRelationmodel_reference_FunctionalElement(
8191 problem:LogicProblem, interpretation:PartialInterpretation,
8192 source: DefinedElement, target:DefinedElement)
8193{
8194 find interpretation(problem,interpretation);
8195 // The two endpoint of the link have to exist
8196 find mayExist(problem, interpretation, source);
8197 find mayExist(problem, interpretation, target);
8198 // Type consistency
8199 find mayInstanceOfFunctionalElement_class(problem,interpretation,source);
8200 find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,target);
8201 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
8202 // the upper bound of the multiplicity should be considered.
8203 numberOfExistingReferences == count find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,source,_);
8204 check(numberOfExistingReferences < 1);
8205} or {
8206 find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,source,target);
8207}
8208/**
8209 * Matcher for detecting tuples t where []parent reference FunctionalElement(source,target)
8210 */
8211private pattern mustInRelationparent_reference_FunctionalElement(
8212 problem:LogicProblem, interpretation:PartialInterpretation,
8213 source: DefinedElement, target:DefinedElement)
8214{
8215 find interpretation(problem,interpretation);
8216 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
8217 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"parent reference FunctionalElement");
8218 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
8219 BinaryElementRelationLink.param1(link,source);
8220 BinaryElementRelationLink.param2(link,target);
8221}
8222/**
8223 * Matcher for detecting tuples t where <>parent reference FunctionalElement(source,target)
8224 */
8225private pattern mayInRelationparent_reference_FunctionalElement(
8226 problem:LogicProblem, interpretation:PartialInterpretation,
8227 source: DefinedElement, target:DefinedElement)
8228{
8229 find interpretation(problem,interpretation);
8230 // The two endpoint of the link have to exist
8231 find mayExist(problem, interpretation, source);
8232 find mayExist(problem, interpretation, target);
8233 // Type consistency
8234 find mayInstanceOfFunctionalElement_class(problem,interpretation,source);
8235 find mayInstanceOfFunction_class(problem,interpretation,target);
8236 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
8237 // the upper bound of the multiplicity should be considered.
8238 numberOfExistingReferences == count find mustInRelationparent_reference_FunctionalElement(problem,interpretation,source,_);
8239 check(numberOfExistingReferences < 1);
8240 // The eOpposite of the reference is containment, then a referene cannot be created if
8241 // 1. Multiple parents
8242 neg find mustContains4(problem,interpretation,source,_);
8243 // 2. Circle in the containment hierarchy
8244 neg find mustTransitiveContains(source,target);
8245} or {
8246 find mustInRelationparent_reference_FunctionalElement(problem,interpretation,source,target);
8247}
8248/**
8249 * Matcher for detecting tuples t where []rootElements reference FunctionalArchitectureModel(source,target)
8250 */
8251private pattern mustInRelationrootElements_reference_FunctionalArchitectureModel(
8252 problem:LogicProblem, interpretation:PartialInterpretation,
8253 source: DefinedElement, target:DefinedElement)
8254{
8255 find interpretation(problem,interpretation);
8256 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
8257 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"rootElements reference FunctionalArchitectureModel");
8258 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
8259 BinaryElementRelationLink.param1(link,source);
8260 BinaryElementRelationLink.param2(link,target);
8261}
8262/**
8263 * Matcher for detecting tuples t where <>rootElements reference FunctionalArchitectureModel(source,target)
8264 */
8265private pattern mayInRelationrootElements_reference_FunctionalArchitectureModel(
8266 problem:LogicProblem, interpretation:PartialInterpretation,
8267 source: DefinedElement, target:DefinedElement)
8268{
8269 find interpretation(problem,interpretation);
8270 // The two endpoint of the link have to exist
8271 find mayExist(problem, interpretation, source);
8272 find mayExist(problem, interpretation, target);
8273 // Type consistency
8274 find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,source);
8275 find mayInstanceOfFunctionalElement_class(problem,interpretation,target);
8276 // The reference is containment, then a new reference cannot be create if:
8277 // 1. Multiple parents
8278 neg find mustContains4(problem,interpretation,_,target);
8279 // 2. Circle in the containment hierarchy
8280 neg find mustTransitiveContains(source,target);
8281} or {
8282 find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,source,target);
8283}
8284/**
8285 * Matcher for detecting tuples t where []subElements reference Function(source,target)
8286 */
8287private pattern mustInRelationsubElements_reference_Function(
8288 problem:LogicProblem, interpretation:PartialInterpretation,
8289 source: DefinedElement, target:DefinedElement)
8290{
8291 find interpretation(problem,interpretation);
8292 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
8293 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"subElements reference Function");
8294 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
8295 BinaryElementRelationLink.param1(link,source);
8296 BinaryElementRelationLink.param2(link,target);
8297}
8298/**
8299 * Matcher for detecting tuples t where <>subElements reference Function(source,target)
8300 */
8301private pattern mayInRelationsubElements_reference_Function(
8302 problem:LogicProblem, interpretation:PartialInterpretation,
8303 source: DefinedElement, target:DefinedElement)
8304{
8305 find interpretation(problem,interpretation);
8306 // The two endpoint of the link have to exist
8307 find mayExist(problem, interpretation, source);
8308 find mayExist(problem, interpretation, target);
8309 // Type consistency
8310 find mayInstanceOfFunction_class(problem,interpretation,source);
8311 find mayInstanceOfFunctionalElement_class(problem,interpretation,target);
8312 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
8313 // the upper bound of the opposite reference multiplicity should be considered.
8314 numberOfExistingOppositeReferences == count find mustInRelationparent_reference_FunctionalElement(problem,interpretation,target,_);
8315 check(numberOfExistingOppositeReferences < 1);
8316 // The reference is containment, then a new reference cannot be create if:
8317 // 1. Multiple parents
8318 neg find mustContains4(problem,interpretation,_,target);
8319 // 2. Circle in the containment hierarchy
8320 neg find mustTransitiveContains(source,target);
8321} or {
8322 find mustInRelationsubElements_reference_Function(problem,interpretation,source,target);
8323}
8324/**
8325 * Matcher for detecting tuples t where []data reference FAMTerminator(source,target)
8326 */
8327private pattern mustInRelationdata_reference_FAMTerminator(
8328 problem:LogicProblem, interpretation:PartialInterpretation,
8329 source: DefinedElement, target:DefinedElement)
8330{
8331 find interpretation(problem,interpretation);
8332 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
8333 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"data reference FAMTerminator");
8334 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
8335 BinaryElementRelationLink.param1(link,source);
8336 BinaryElementRelationLink.param2(link,target);
8337}
8338/**
8339 * Matcher for detecting tuples t where <>data reference FAMTerminator(source,target)
8340 */
8341private pattern mayInRelationdata_reference_FAMTerminator(
8342 problem:LogicProblem, interpretation:PartialInterpretation,
8343 source: DefinedElement, target:DefinedElement)
8344{
8345 find interpretation(problem,interpretation);
8346 // The two endpoint of the link have to exist
8347 find mayExist(problem, interpretation, source);
8348 find mayExist(problem, interpretation, target);
8349 // Type consistency
8350 find mayInstanceOfFAMTerminator_class(problem,interpretation,source);
8351 find mayInstanceOfFunctionalData_class(problem,interpretation,target);
8352 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
8353 // the upper bound of the multiplicity should be considered.
8354 numberOfExistingReferences == count find mustInRelationdata_reference_FAMTerminator(problem,interpretation,source,_);
8355 check(numberOfExistingReferences < 1);
8356 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
8357 // the upper bound of the opposite reference multiplicity should be considered.
8358 numberOfExistingOppositeReferences == count find mustInRelationterminator_reference_FunctionalData(problem,interpretation,target,_);
8359 check(numberOfExistingOppositeReferences < 1);
8360 // The eOpposite of the reference is containment, then a referene cannot be created if
8361 // 1. Multiple parents
8362 neg find mustContains4(problem,interpretation,source,_);
8363 // 2. Circle in the containment hierarchy
8364 neg find mustTransitiveContains(source,target);
8365} or {
8366 find mustInRelationdata_reference_FAMTerminator(problem,interpretation,source,target);
8367}
8368/**
8369 * Matcher for detecting tuples t where []from reference InformationLink(source,target)
8370 */
8371private pattern mustInRelationfrom_reference_InformationLink(
8372 problem:LogicProblem, interpretation:PartialInterpretation,
8373 source: DefinedElement, target:DefinedElement)
8374{
8375 find interpretation(problem,interpretation);
8376 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
8377 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"from reference InformationLink");
8378 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
8379 BinaryElementRelationLink.param1(link,source);
8380 BinaryElementRelationLink.param2(link,target);
8381}
8382/**
8383 * Matcher for detecting tuples t where <>from reference InformationLink(source,target)
8384 */
8385private pattern mayInRelationfrom_reference_InformationLink(
8386 problem:LogicProblem, interpretation:PartialInterpretation,
8387 source: DefinedElement, target:DefinedElement)
8388{
8389 find interpretation(problem,interpretation);
8390 // The two endpoint of the link have to exist
8391 find mayExist(problem, interpretation, source);
8392 find mayExist(problem, interpretation, target);
8393 // Type consistency
8394 find mayInstanceOfInformationLink_class(problem,interpretation,source);
8395 find mayInstanceOfFunctionalOutput_class(problem,interpretation,target);
8396 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
8397 // the upper bound of the multiplicity should be considered.
8398 numberOfExistingReferences == count find mustInRelationfrom_reference_InformationLink(problem,interpretation,source,_);
8399 check(numberOfExistingReferences < 1);
8400 // The eOpposite of the reference is containment, then a referene cannot be created if
8401 // 1. Multiple parents
8402 neg find mustContains4(problem,interpretation,source,_);
8403 // 2. Circle in the containment hierarchy
8404 neg find mustTransitiveContains(source,target);
8405} or {
8406 find mustInRelationfrom_reference_InformationLink(problem,interpretation,source,target);
8407}
8408/**
8409 * Matcher for detecting tuples t where []to reference InformationLink(source,target)
8410 */
8411private pattern mustInRelationto_reference_InformationLink(
8412 problem:LogicProblem, interpretation:PartialInterpretation,
8413 source: DefinedElement, target:DefinedElement)
8414{
8415 find interpretation(problem,interpretation);
8416 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
8417 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"to reference InformationLink");
8418 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
8419 BinaryElementRelationLink.param1(link,source);
8420 BinaryElementRelationLink.param2(link,target);
8421}
8422/**
8423 * Matcher for detecting tuples t where <>to reference InformationLink(source,target)
8424 */
8425private pattern mayInRelationto_reference_InformationLink(
8426 problem:LogicProblem, interpretation:PartialInterpretation,
8427 source: DefinedElement, target:DefinedElement)
8428{
8429 find interpretation(problem,interpretation);
8430 // The two endpoint of the link have to exist
8431 find mayExist(problem, interpretation, source);
8432 find mayExist(problem, interpretation, target);
8433 // Type consistency
8434 find mayInstanceOfInformationLink_class(problem,interpretation,source);
8435 find mayInstanceOfFunctionalInput_class(problem,interpretation,target);
8436 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
8437 // the upper bound of the multiplicity should be considered.
8438 numberOfExistingReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,source,_);
8439 check(numberOfExistingReferences < 1);
8440} or {
8441 find mustInRelationto_reference_InformationLink(problem,interpretation,source,target);
8442}
8443/**
8444 * Matcher for detecting tuples t where []data reference FunctionalInterface(source,target)
8445 */
8446private pattern mustInRelationdata_reference_FunctionalInterface(
8447 problem:LogicProblem, interpretation:PartialInterpretation,
8448 source: DefinedElement, target:DefinedElement)
8449{
8450 find interpretation(problem,interpretation);
8451 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
8452 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"data reference FunctionalInterface");
8453 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
8454 BinaryElementRelationLink.param1(link,source);
8455 BinaryElementRelationLink.param2(link,target);
8456}
8457/**
8458 * Matcher for detecting tuples t where <>data reference FunctionalInterface(source,target)
8459 */
8460private pattern mayInRelationdata_reference_FunctionalInterface(
8461 problem:LogicProblem, interpretation:PartialInterpretation,
8462 source: DefinedElement, target:DefinedElement)
8463{
8464 find interpretation(problem,interpretation);
8465 // The two endpoint of the link have to exist
8466 find mayExist(problem, interpretation, source);
8467 find mayExist(problem, interpretation, target);
8468 // Type consistency
8469 find mayInstanceOfFunctionalInterface_class(problem,interpretation,source);
8470 find mayInstanceOfFunctionalData_class(problem,interpretation,target);
8471 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
8472 // the upper bound of the opposite reference multiplicity should be considered.
8473 numberOfExistingOppositeReferences == count find mustInRelationinterface_reference_FunctionalData(problem,interpretation,target,_);
8474 check(numberOfExistingOppositeReferences < 1);
8475 // The reference is containment, then a new reference cannot be create if:
8476 // 1. Multiple parents
8477 neg find mustContains4(problem,interpretation,_,target);
8478 // 2. Circle in the containment hierarchy
8479 neg find mustTransitiveContains(source,target);
8480} or {
8481 find mustInRelationdata_reference_FunctionalInterface(problem,interpretation,source,target);
8482}
8483/**
8484 * Matcher for detecting tuples t where []element reference FunctionalInterface(source,target)
8485 */
8486private pattern mustInRelationelement_reference_FunctionalInterface(
8487 problem:LogicProblem, interpretation:PartialInterpretation,
8488 source: DefinedElement, target:DefinedElement)
8489{
8490 find interpretation(problem,interpretation);
8491 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
8492 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"element reference FunctionalInterface");
8493 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
8494 BinaryElementRelationLink.param1(link,source);
8495 BinaryElementRelationLink.param2(link,target);
8496}
8497/**
8498 * Matcher for detecting tuples t where <>element reference FunctionalInterface(source,target)
8499 */
8500private pattern mayInRelationelement_reference_FunctionalInterface(
8501 problem:LogicProblem, interpretation:PartialInterpretation,
8502 source: DefinedElement, target:DefinedElement)
8503{
8504 find interpretation(problem,interpretation);
8505 // The two endpoint of the link have to exist
8506 find mayExist(problem, interpretation, source);
8507 find mayExist(problem, interpretation, target);
8508 // Type consistency
8509 find mayInstanceOfFunctionalInterface_class(problem,interpretation,source);
8510 find mayInstanceOfFunctionalElement_class(problem,interpretation,target);
8511 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
8512 // the upper bound of the multiplicity should be considered.
8513 numberOfExistingReferences == count find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,source,_);
8514 check(numberOfExistingReferences < 1);
8515 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
8516 // the upper bound of the opposite reference multiplicity should be considered.
8517 numberOfExistingOppositeReferences == count find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,target,_);
8518 check(numberOfExistingOppositeReferences < 1);
8519 // The eOpposite of the reference is containment, then a referene cannot be created if
8520 // 1. Multiple parents
8521 neg find mustContains4(problem,interpretation,source,_);
8522 // 2. Circle in the containment hierarchy
8523 neg find mustTransitiveContains(source,target);
8524} or {
8525 find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,source,target);
8526}
8527/**
8528 * Matcher for detecting tuples t where []IncomingLinks reference FunctionalInput(source,target)
8529 */
8530private pattern mustInRelationIncomingLinks_reference_FunctionalInput(
8531 problem:LogicProblem, interpretation:PartialInterpretation,
8532 source: DefinedElement, target:DefinedElement)
8533{
8534 find interpretation(problem,interpretation);
8535 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
8536 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"IncomingLinks reference FunctionalInput");
8537 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
8538 BinaryElementRelationLink.param1(link,source);
8539 BinaryElementRelationLink.param2(link,target);
8540}
8541/**
8542 * Matcher for detecting tuples t where <>IncomingLinks reference FunctionalInput(source,target)
8543 */
8544private pattern mayInRelationIncomingLinks_reference_FunctionalInput(
8545 problem:LogicProblem, interpretation:PartialInterpretation,
8546 source: DefinedElement, target:DefinedElement)
8547{
8548 find interpretation(problem,interpretation);
8549 // The two endpoint of the link have to exist
8550 find mayExist(problem, interpretation, source);
8551 find mayExist(problem, interpretation, target);
8552 // Type consistency
8553 find mayInstanceOfFunctionalInput_class(problem,interpretation,source);
8554 find mayInstanceOfInformationLink_class(problem,interpretation,target);
8555 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
8556 // the upper bound of the opposite reference multiplicity should be considered.
8557 numberOfExistingOppositeReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,target,_);
8558 check(numberOfExistingOppositeReferences < 1);
8559} or {
8560 find mustInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,source,target);
8561}
8562/**
8563 * Matcher for detecting tuples t where []outgoingLinks reference FunctionalOutput(source,target)
8564 */
8565private pattern mustInRelationoutgoingLinks_reference_FunctionalOutput(
8566 problem:LogicProblem, interpretation:PartialInterpretation,
8567 source: DefinedElement, target:DefinedElement)
8568{
8569 find interpretation(problem,interpretation);
8570 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
8571 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"outgoingLinks reference FunctionalOutput");
8572 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
8573 BinaryElementRelationLink.param1(link,source);
8574 BinaryElementRelationLink.param2(link,target);
8575}
8576/**
8577 * Matcher for detecting tuples t where <>outgoingLinks reference FunctionalOutput(source,target)
8578 */
8579private pattern mayInRelationoutgoingLinks_reference_FunctionalOutput(
8580 problem:LogicProblem, interpretation:PartialInterpretation,
8581 source: DefinedElement, target:DefinedElement)
8582{
8583 find interpretation(problem,interpretation);
8584 // The two endpoint of the link have to exist
8585 find mayExist(problem, interpretation, source);
8586 find mayExist(problem, interpretation, target);
8587 // Type consistency
8588 find mayInstanceOfFunctionalOutput_class(problem,interpretation,source);
8589 find mayInstanceOfInformationLink_class(problem,interpretation,target);
8590 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
8591 // the upper bound of the opposite reference multiplicity should be considered.
8592 numberOfExistingOppositeReferences == count find mustInRelationfrom_reference_InformationLink(problem,interpretation,target,_);
8593 check(numberOfExistingOppositeReferences < 1);
8594 // The reference is containment, then a new reference cannot be create if:
8595 // 1. Multiple parents
8596 neg find mustContains4(problem,interpretation,_,target);
8597 // 2. Circle in the containment hierarchy
8598 neg find mustTransitiveContains(source,target);
8599} or {
8600 find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,source,target);
8601}
8602/**
8603 * Matcher for detecting tuples t where []terminator reference FunctionalData(source,target)
8604 */
8605private pattern mustInRelationterminator_reference_FunctionalData(
8606 problem:LogicProblem, interpretation:PartialInterpretation,
8607 source: DefinedElement, target:DefinedElement)
8608{
8609 find interpretation(problem,interpretation);
8610 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
8611 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"terminator reference FunctionalData");
8612 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
8613 BinaryElementRelationLink.param1(link,source);
8614 BinaryElementRelationLink.param2(link,target);
8615}
8616/**
8617 * Matcher for detecting tuples t where <>terminator reference FunctionalData(source,target)
8618 */
8619private pattern mayInRelationterminator_reference_FunctionalData(
8620 problem:LogicProblem, interpretation:PartialInterpretation,
8621 source: DefinedElement, target:DefinedElement)
8622{
8623 find interpretation(problem,interpretation);
8624 // The two endpoint of the link have to exist
8625 find mayExist(problem, interpretation, source);
8626 find mayExist(problem, interpretation, target);
8627 // Type consistency
8628 find mayInstanceOfFunctionalData_class(problem,interpretation,source);
8629 find mayInstanceOfFAMTerminator_class(problem,interpretation,target);
8630 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
8631 // the upper bound of the multiplicity should be considered.
8632 numberOfExistingReferences == count find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,_);
8633 check(numberOfExistingReferences < 1);
8634 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
8635 // the upper bound of the opposite reference multiplicity should be considered.
8636 numberOfExistingOppositeReferences == count find mustInRelationdata_reference_FAMTerminator(problem,interpretation,target,_);
8637 check(numberOfExistingOppositeReferences < 1);
8638 // The reference is containment, then a new reference cannot be create if:
8639 // 1. Multiple parents
8640 neg find mustContains4(problem,interpretation,_,target);
8641 // 2. Circle in the containment hierarchy
8642 neg find mustTransitiveContains(source,target);
8643} or {
8644 find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,target);
8645}
8646/**
8647 * Matcher for detecting tuples t where []interface reference FunctionalData(source,target)
8648 */
8649private pattern mustInRelationinterface_reference_FunctionalData(
8650 problem:LogicProblem, interpretation:PartialInterpretation,
8651 source: DefinedElement, target:DefinedElement)
8652{
8653 find interpretation(problem,interpretation);
8654 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
8655 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface reference FunctionalData");
8656 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
8657 BinaryElementRelationLink.param1(link,source);
8658 BinaryElementRelationLink.param2(link,target);
8659}
8660/**
8661 * Matcher for detecting tuples t where <>interface reference FunctionalData(source,target)
8662 */
8663private pattern mayInRelationinterface_reference_FunctionalData(
8664 problem:LogicProblem, interpretation:PartialInterpretation,
8665 source: DefinedElement, target:DefinedElement)
8666{
8667 find interpretation(problem,interpretation);
8668 // The two endpoint of the link have to exist
8669 find mayExist(problem, interpretation, source);
8670 find mayExist(problem, interpretation, target);
8671 // Type consistency
8672 find mayInstanceOfFunctionalData_class(problem,interpretation,source);
8673 find mayInstanceOfFunctionalInterface_class(problem,interpretation,target);
8674 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
8675 // the upper bound of the multiplicity should be considered.
8676 numberOfExistingReferences == count find mustInRelationinterface_reference_FunctionalData(problem,interpretation,source,_);
8677 check(numberOfExistingReferences < 1);
8678 // The eOpposite of the reference is containment, then a referene cannot be created if
8679 // 1. Multiple parents
8680 neg find mustContains4(problem,interpretation,source,_);
8681 // 2. Circle in the containment hierarchy
8682 neg find mustTransitiveContains(source,target);
8683} or {
8684 find mustInRelationinterface_reference_FunctionalData(problem,interpretation,source,target);
8685}
8686/**
8687 * Matcher for detecting tuples t where []type attribute Function(source,target)
8688 */
8689private pattern mustInRelationtype_attribute_Function(
8690 problem:LogicProblem, interpretation:PartialInterpretation,
8691 source: DefinedElement, target:DefinedElement)
8692{
8693 find interpretation(problem,interpretation);
8694 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
8695 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function");
8696 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
8697 BinaryElementRelationLink.param1(link,source);
8698 BinaryElementRelationLink.param2(link,target);
8699}
8700/**
8701 * Matcher for detecting tuples t where <>type attribute Function(source,target)
8702 */
8703private pattern mayInRelationtype_attribute_Function(
8704 problem:LogicProblem, interpretation:PartialInterpretation,
8705 source: DefinedElement, target:DefinedElement)
8706{
8707 find interpretation(problem,interpretation);
8708 // The two endpoint of the link have to exist
8709 find mayExist(problem, interpretation, source);
8710 find mayExist(problem, interpretation, target);
8711 // Type consistency
8712 find mayInstanceOfFunction_class(problem,interpretation,source);
8713 find mayInstanceOfFunctionType_enum(problem,interpretation,target);
8714 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
8715 // the upper bound of the multiplicity should be considered.
8716 numberOfExistingReferences == count find mustInRelationtype_attribute_Function(problem,interpretation,source,_);
8717 check(numberOfExistingReferences < 1);
8718} or {
8719 find mustInRelationtype_attribute_Function(problem,interpretation,source,target);
8720}
8721
8722//////////
8723// 1.3 Relation Definition Indexers
8724//////////
8725
8726//////////
8727// 1.4 Containment Indexer
8728//////////
8729private pattern mustContains2(source: DefinedElement, target: DefinedElement) {
8730 find mustContains4(_,_,source,target);
8731}
8732
8733private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation,
8734 source: DefinedElement, target: DefinedElement)
8735 { find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,target); }or
8736
8737 { find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,source,target); }or
8738
8739 { find mustInRelationsubElements_reference_Function(problem,interpretation,source,target); }or
8740
8741 { find mustInRelationdata_reference_FunctionalInterface(problem,interpretation,source,target); }or
8742
8743 { find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,source,target); }or
8744
8745 { find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,target); }
8746
8747private pattern mustTransitiveContains(source,target) {
8748 find mustContains2+(source,target);
8749}
8750
8751//////////
8752// 2. Invalidation Indexers
8753//////////
8754// 2.1 Invalidated by WF Queries
8755//////////
8756
8757//////////
8758// 3. Unfinishedness Indexers
8759//////////
8760// 3.1 Unfinishedness Measured by Multiplicity
8761//////////
8762pattern unfinishedLowerMultiplicity_model_reference_FunctionalElement(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) {
8763 find interpretation(problem,interpretation);
8764 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
8765 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement");
8766 find mustInstanceOfFunctionalElement_class(problem,interpretation,object);
8767 numberOfExistingReferences == count find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,object,_);
8768 check(numberOfExistingReferences < 1);
8769 missingMultiplicity == eval(1-numberOfExistingReferences);
8770}
8771pattern unfinishedLowerMultiplicity_to_reference_InformationLink(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) {
8772 find interpretation(problem,interpretation);
8773 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
8774 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"to reference InformationLink");
8775 find mustInstanceOfInformationLink_class(problem,interpretation,object);
8776 numberOfExistingReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,object,_);
8777 check(numberOfExistingReferences < 1);
8778 missingMultiplicity == eval(1-numberOfExistingReferences);
8779}
8780pattern unfinishedLowerMultiplicity_type_attribute_Function(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) {
8781 find interpretation(problem,interpretation);
8782 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
8783 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function");
8784 find mustInstanceOfFunction_class(problem,interpretation,object);
8785 numberOfExistingReferences == count find mustInRelationtype_attribute_Function(problem,interpretation,object,_);
8786 check(numberOfExistingReferences < 1);
8787 missingMultiplicity == eval(1-numberOfExistingReferences);
8788}
8789
8790//////////
8791// 3.2 Unfinishedness Measured by WF Queries
8792//////////
8793
8794//////////
8795// 4. Refinement Indexers
8796//////////
8797// 4.1 Object constructors
8798//////////
8799private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation)
8800{
8801 find interpretation(problem,interpretation);
8802 find mustInstanceOfFunctionalData_class(problem,interpretation,root);
8803 find mustExist(problem, interpretation, root);
8804}or{
8805 find interpretation(problem,interpretation);
8806 find mustInstanceOfInformationLink_class(problem,interpretation,root);
8807 find mustExist(problem, interpretation, root);
8808}or{
8809 find interpretation(problem,interpretation);
8810 find mustInstanceOfFunctionalInterface_class(problem,interpretation,root);
8811 find mustExist(problem, interpretation, root);
8812}or{
8813 find interpretation(problem,interpretation);
8814 find mustInstanceOfFAMTerminator_class(problem,interpretation,root);
8815 find mustExist(problem, interpretation, root);
8816}or{
8817 find interpretation(problem,interpretation);
8818 find mustInstanceOfFunctionalElement_class(problem,interpretation,root);
8819 find mustExist(problem, interpretation, root);
8820}or{
8821 find interpretation(problem,interpretation);
8822 find mustInstanceOfFunctionalInput_class(problem,interpretation,root);
8823 find mustExist(problem, interpretation, root);
8824}or{
8825 find interpretation(problem,interpretation);
8826 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,root);
8827 find mustExist(problem, interpretation, root);
8828}or{
8829 find interpretation(problem,interpretation);
8830 find mustInstanceOfFunctionalOutput_class(problem,interpretation,root);
8831 find mustExist(problem, interpretation, root);
8832}or{
8833 find interpretation(problem,interpretation);
8834 find mustInstanceOfFunction_class(problem,interpretation,root);
8835 find mustExist(problem, interpretation, root);
8836}or{
8837 find interpretation(problem,interpretation);
8838 find mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem,interpretation,root);
8839 find mustExist(problem, interpretation, root);
8840}or{
8841 find interpretation(problem,interpretation);
8842 find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,root);
8843 find mustExist(problem, interpretation, root);
8844}
8845pattern createObject_InformationLink_class_by_outgoingLinks_reference_FunctionalOutput_with_from_reference_InformationLink(
8846 problem:LogicProblem, interpretation:PartialInterpretation,
8847 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
8848 container:DefinedElement)
8849{
8850 find interpretation(problem,interpretation);
8851 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
8852 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class");
8853 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
8854 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingLinks reference FunctionalOutput");
8855 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
8856 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"from reference InformationLink");
8857 find mustInstanceOfFunctionalOutput_class(problem,interpretation,container);
8858 find mayInstanceOfInformationLink_class(problem,interpretation,newObject);
8859 find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,container,newObject);
8860 find mustExist(problem, interpretation, container);
8861 neg find mustExist(problem, interpretation, newObject);
8862}
8863pattern createObject_InformationLink_class(
8864 problem:LogicProblem, interpretation:PartialInterpretation,
8865 typeInterpretation:PartialComplexTypeInterpretation)
8866{
8867 find interpretation(problem,interpretation);
8868 neg find hasElementInContainment(problem,interpretation);
8869 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
8870 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class");
8871 find mayInstanceOfInformationLink_class(problem,interpretation,newObject);
8872 find mayExist(problem, interpretation, newObject);
8873 neg find mustExist(problem, interpretation, newObject);
8874}
8875pattern createObject_FunctionalOutput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData(
8876 problem:LogicProblem, interpretation:PartialInterpretation,
8877 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
8878 container:DefinedElement)
8879{
8880 find interpretation(problem,interpretation);
8881 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
8882 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class");
8883 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
8884 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface");
8885 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
8886 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData");
8887 find mustInstanceOfFunctionalInterface_class(problem,interpretation,container);
8888 find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject);
8889 find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject);
8890 find mustExist(problem, interpretation, container);
8891 neg find mustExist(problem, interpretation, newObject);
8892}
8893pattern createObject_FunctionalOutput_class(
8894 problem:LogicProblem, interpretation:PartialInterpretation,
8895 typeInterpretation:PartialComplexTypeInterpretation)
8896{
8897 find interpretation(problem,interpretation);
8898 neg find hasElementInContainment(problem,interpretation);
8899 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
8900 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class");
8901 find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject);
8902 find mayExist(problem, interpretation, newObject);
8903 neg find mustExist(problem, interpretation, newObject);
8904}
8905pattern createObject_FunctionalInput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData(
8906 problem:LogicProblem, interpretation:PartialInterpretation,
8907 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
8908 container:DefinedElement)
8909{
8910 find interpretation(problem,interpretation);
8911 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
8912 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class");
8913 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
8914 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface");
8915 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
8916 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData");
8917 find mustInstanceOfFunctionalInterface_class(problem,interpretation,container);
8918 find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject);
8919 find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject);
8920 find mustExist(problem, interpretation, container);
8921 neg find mustExist(problem, interpretation, newObject);
8922}
8923pattern createObject_FunctionalInput_class(
8924 problem:LogicProblem, interpretation:PartialInterpretation,
8925 typeInterpretation:PartialComplexTypeInterpretation)
8926{
8927 find interpretation(problem,interpretation);
8928 neg find hasElementInContainment(problem,interpretation);
8929 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
8930 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class");
8931 find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject);
8932 find mayExist(problem, interpretation, newObject);
8933 neg find mustExist(problem, interpretation, newObject);
8934}
8935pattern createObject_FunctionalArchitectureModel_class_UndefinedPart(
8936 problem:LogicProblem, interpretation:PartialInterpretation,
8937 typeInterpretation:PartialComplexTypeInterpretation)
8938{
8939 find interpretation(problem,interpretation);
8940 neg find hasElementInContainment(problem,interpretation);
8941 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
8942 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalArchitectureModel class UndefinedPart");
8943 find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,newObject);
8944 find mayExist(problem, interpretation, newObject);
8945 neg find mustExist(problem, interpretation, newObject);
8946}
8947pattern createObject_FunctionalInterface_class_by_interface_reference_FunctionalElement_with_element_reference_FunctionalInterface(
8948 problem:LogicProblem, interpretation:PartialInterpretation,
8949 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
8950 container:DefinedElement)
8951{
8952 find interpretation(problem,interpretation);
8953 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
8954 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class");
8955 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
8956 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"interface reference FunctionalElement");
8957 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
8958 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"element reference FunctionalInterface");
8959 find mustInstanceOfFunctionalElement_class(problem,interpretation,container);
8960 find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject);
8961 find mayInRelationinterface_reference_FunctionalElement(problem,interpretation,container,newObject);
8962 find mustExist(problem, interpretation, container);
8963 neg find mustExist(problem, interpretation, newObject);
8964}
8965pattern createObject_FunctionalInterface_class(
8966 problem:LogicProblem, interpretation:PartialInterpretation,
8967 typeInterpretation:PartialComplexTypeInterpretation)
8968{
8969 find interpretation(problem,interpretation);
8970 neg find hasElementInContainment(problem,interpretation);
8971 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
8972 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class");
8973 find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject);
8974 find mayExist(problem, interpretation, newObject);
8975 neg find mustExist(problem, interpretation, newObject);
8976}
8977pattern createObject_Function_class_by_rootElements_reference_FunctionalArchitectureModel(
8978 problem:LogicProblem, interpretation:PartialInterpretation,
8979 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
8980 container:DefinedElement)
8981{
8982 find interpretation(problem,interpretation);
8983 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
8984 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class");
8985 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
8986 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"rootElements reference FunctionalArchitectureModel");
8987 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,container);
8988 find mayInstanceOfFunction_class(problem,interpretation,newObject);
8989 find mayInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,container,newObject);
8990 find mustExist(problem, interpretation, container);
8991 neg find mustExist(problem, interpretation, newObject);
8992}
8993pattern createObject_Function_class_by_subElements_reference_Function_with_parent_reference_FunctionalElement(
8994 problem:LogicProblem, interpretation:PartialInterpretation,
8995 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
8996 container:DefinedElement)
8997{
8998 find interpretation(problem,interpretation);
8999 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
9000 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class");
9001 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
9002 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"subElements reference Function");
9003 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
9004 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FunctionalElement");
9005 find mustInstanceOfFunction_class(problem,interpretation,container);
9006 find mayInstanceOfFunction_class(problem,interpretation,newObject);
9007 find mayInRelationsubElements_reference_Function(problem,interpretation,container,newObject);
9008 find mustExist(problem, interpretation, container);
9009 neg find mustExist(problem, interpretation, newObject);
9010}
9011pattern createObject_Function_class(
9012 problem:LogicProblem, interpretation:PartialInterpretation,
9013 typeInterpretation:PartialComplexTypeInterpretation)
9014{
9015 find interpretation(problem,interpretation);
9016 neg find hasElementInContainment(problem,interpretation);
9017 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
9018 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class");
9019 find mayInstanceOfFunction_class(problem,interpretation,newObject);
9020 find mayExist(problem, interpretation, newObject);
9021 neg find mustExist(problem, interpretation, newObject);
9022}
9023pattern createObject_FAMTerminator_class_by_terminator_reference_FunctionalData_with_data_reference_FAMTerminator(
9024 problem:LogicProblem, interpretation:PartialInterpretation,
9025 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
9026 container:DefinedElement)
9027{
9028 find interpretation(problem,interpretation);
9029 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
9030 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class");
9031 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
9032 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"terminator reference FunctionalData");
9033 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
9034 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"data reference FAMTerminator");
9035 find mustInstanceOfFunctionalData_class(problem,interpretation,container);
9036 find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject);
9037 find mayInRelationterminator_reference_FunctionalData(problem,interpretation,container,newObject);
9038 find mustExist(problem, interpretation, container);
9039 neg find mustExist(problem, interpretation, newObject);
9040}
9041pattern createObject_FAMTerminator_class(
9042 problem:LogicProblem, interpretation:PartialInterpretation,
9043 typeInterpretation:PartialComplexTypeInterpretation)
9044{
9045 find interpretation(problem,interpretation);
9046 neg find hasElementInContainment(problem,interpretation);
9047 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
9048 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class");
9049 find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject);
9050 find mayExist(problem, interpretation, newObject);
9051 neg find mustExist(problem, interpretation, newObject);
9052}
9053
9054//////////
9055// 4.2 Type refinement
9056//////////
9057pattern refineTypeTo_InformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
9058 find interpretation(problem,interpretation);
9059 PartialInterpretation.newElements(interpretation,element);
9060 find mayInstanceOfInformationLink_class(problem,interpretation,element);
9061 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
9062 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
9063 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
9064 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
9065 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
9066 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
9067}
9068pattern refineTypeTo_FunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
9069 find interpretation(problem,interpretation);
9070 PartialInterpretation.newElements(interpretation,element);
9071 find mayInstanceOfFunctionalOutput_class(problem,interpretation,element);
9072 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
9073 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
9074 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
9075 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
9076 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
9077 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
9078 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
9079}
9080pattern refineTypeTo_FunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
9081 find interpretation(problem,interpretation);
9082 PartialInterpretation.newElements(interpretation,element);
9083 find mayInstanceOfFunctionalInput_class(problem,interpretation,element);
9084 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
9085 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
9086 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
9087 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
9088 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
9089 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
9090 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
9091}
9092pattern refineTypeTo_FunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
9093 find interpretation(problem,interpretation);
9094 PartialInterpretation.newElements(interpretation,element);
9095 find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element);
9096 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
9097 neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element);
9098 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
9099 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
9100 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
9101 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
9102}
9103pattern refineTypeTo_FunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
9104 find interpretation(problem,interpretation);
9105 PartialInterpretation.newElements(interpretation,element);
9106 find mayInstanceOfFunctionalInterface_class(problem,interpretation,element);
9107 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
9108 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
9109 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
9110 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
9111 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
9112 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
9113}
9114pattern refineTypeTo_Function_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
9115 find interpretation(problem,interpretation);
9116 PartialInterpretation.newElements(interpretation,element);
9117 find mayInstanceOfFunction_class(problem,interpretation,element);
9118 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
9119 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
9120 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
9121 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
9122 neg find mustInstanceOfFunction_class(problem,interpretation,element);
9123 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
9124}
9125pattern refineTypeTo_FAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
9126 find interpretation(problem,interpretation);
9127 PartialInterpretation.newElements(interpretation,element);
9128 find mayInstanceOfFAMTerminator_class(problem,interpretation,element);
9129 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
9130 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
9131 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
9132 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
9133 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
9134 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
9135}
9136
9137//////////
9138// 4.3 Relation refinement
9139//////////
9140pattern refineRelation_model_reference_FunctionalElement(
9141 problem:LogicProblem, interpretation:PartialInterpretation,
9142 relationIterpretation:PartialRelationInterpretation,
9143 from: DefinedElement, to: DefinedElement)
9144{
9145 find interpretation(problem,interpretation);
9146 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
9147 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement");
9148 find mustExist(problem, interpretation, from);
9149 find mustExist(problem, interpretation, to);
9150 find mustInstanceOfFunctionalElement_class(problem,interpretation,from);
9151 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,to);
9152 find mayInRelationmodel_reference_FunctionalElement(problem,interpretation,from,to);
9153 neg find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,from,to);
9154}
9155pattern refineRelation_IncomingLinks_reference_FunctionalInput_and_to_reference_InformationLink(
9156 problem:LogicProblem, interpretation:PartialInterpretation,
9157 relationIterpretation:PartialRelationInterpretation, oppositeInterpretation:PartialRelationInterpretation,
9158 from: DefinedElement, to: DefinedElement)
9159{
9160 find interpretation(problem,interpretation);
9161 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
9162 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"IncomingLinks reference FunctionalInput");
9163 PartialInterpretation.partialrelationinterpretation(interpretation,oppositeInterpretation);
9164 PartialRelationInterpretation.interpretationOf.name(oppositeInterpretation,"to reference InformationLink");
9165 find mustExist(problem, interpretation, from);
9166 find mustExist(problem, interpretation, to);
9167 find mustInstanceOfFunctionalInput_class(problem,interpretation,from);
9168 find mustInstanceOfInformationLink_class(problem,interpretation,to);
9169 find mayInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,from,to);
9170 neg find mustInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,from,to);
9171}
9172pattern refineRelation_type_attribute_Function(
9173 problem:LogicProblem, interpretation:PartialInterpretation,
9174 relationIterpretation:PartialRelationInterpretation,
9175 from: DefinedElement, to: DefinedElement)
9176{
9177 find interpretation(problem,interpretation);
9178 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
9179 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function");
9180 find mustExist(problem, interpretation, from);
9181 find mustExist(problem, interpretation, to);
9182 find mustInstanceOfFunction_class(problem,interpretation,from);
9183 find mustInstanceOfFunctionType_enum(problem,interpretation,to);
9184 find mayInRelationtype_attribute_Function(problem,interpretation,from,to);
9185 neg find mustInRelationtype_attribute_Function(problem,interpretation,from,to);
9186}
9187import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage"
9188import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem"
9189import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language"
9190
9191//////////
9192// 0. Util
9193//////////
9194private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) {
9195 PartialInterpretation.problem(interpretation,problem);
9196}
9197
9198/////////////////////////
9199// 0.1 Existence
9200/////////////////////////
9201private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
9202 find interpretation(problem,interpretation);
9203 LogicProblem.elements(problem,element);
9204} or {
9205 find interpretation(problem,interpretation);
9206 PartialInterpretation.newElements(interpretation,element);
9207}
9208
9209private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
9210 find mustExist(problem,interpretation,element);
9211} or {
9212 find interpretation(problem,interpretation);
9213 neg find elementCloseWorld(element);
9214 PartialInterpretation.openWorldElements(interpretation,element);
9215}
9216
9217private pattern elementCloseWorld(element:DefinedElement) {
9218 PartialInterpretation.openWorldElements(i,element);
9219 PartialInterpretation.maxNewElements(i,0);
9220} or {
9221 Scope.targetTypeInterpretation(scope,interpretation);
9222 PartialTypeInterpratation.elements(interpretation,element);
9223 Scope.maxNewElements(scope,0);
9224}
9225
9226////////////////////////
9227// 0.2 Equivalence
9228////////////////////////
9229pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) {
9230 find mayExist(problem,interpretation,a);
9231 find mayExist(problem,interpretation,b);
9232 a == b;
9233}
9234
9235////////////////////////
9236// 0.3 Required Patterns by TypeIndexer
9237////////////////////////
9238private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) {
9239 find interpretation(problem,interpretation);
9240 LogicProblem.types(problem,type);
9241 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
9242 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
9243}
9244
9245private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) {
9246 find interpretation(problem,interpretation);
9247 LogicProblem.types(problem,type);
9248 TypeDefinition.elements(type,element);
9249} or {
9250 find interpretation(problem,interpretation);
9251 find typeInterpretation(problem,interpretation,type,typeInterpretation);
9252 PartialComplexTypeInterpretation.elements(typeInterpretation,element);
9253}
9254
9255private pattern isPrimitive(element: PrimitiveElement) {
9256 PrimitiveElement(element);
9257}
9258
9259//////////
9260// 1. Problem-Specific Base Indexers
9261//////////
9262// 1.1 Type Indexers
9263//////////
9264// 1.1.1 primitive Type Indexers
9265//////////
9266
9267//////////
9268// 1.1.2 domain-specific Type Indexers
9269//////////
9270/**
9271 * An element must be an instance of type "FunctionalElement class".
9272 */
9273private pattern mustInstanceOfFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
9274 Type.name(type,"FunctionalElement class");
9275 find directInstanceOf(problem,interpretation,element,type);
9276}
9277private pattern scopeDisallowsNewFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation) {
9278 find interpretation(problem,interpretation);
9279 PartialInterpretation.scopes(interpretation,scope);
9280 Scope.targetTypeInterpretation(scope,typeInterpretation);
9281 Scope.maxNewElements(scope,0);
9282 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
9283 Type.name(type,"FunctionalElement class");
9284}
9285
9286/**
9287 * An element may be an instance of type "FunctionalElement class".
9288 */
9289private pattern mayInstanceOfFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
9290{
9291 find interpretation(problem,interpretation);
9292 PartialInterpretation.newElements(interpretation,element);
9293 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
9294 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
9295 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
9296 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
9297 neg find mustInstanceOfFunction_class(problem,interpretation,element);
9298 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
9299 neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation);
9300 neg find isPrimitive(element);
9301} or {
9302 find interpretation(problem,interpretation);
9303 PartialInterpretation.openWorldElements(interpretation,element);
9304 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
9305 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
9306 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
9307 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
9308 neg find mustInstanceOfFunction_class(problem,interpretation,element);
9309 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
9310 neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation);
9311 neg find isPrimitive(element);
9312} or
9313{ find mustInstanceOfFunctionalElement_class(problem,interpretation,element); }
9314/**
9315 * An element must be an instance of type "FunctionalArchitectureModel class".
9316 */
9317private pattern mustInstanceOfFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
9318 Type.name(type,"FunctionalArchitectureModel class");
9319 find directInstanceOf(problem,interpretation,element,type);
9320}
9321private pattern scopeDisallowsNewFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation) {
9322 find interpretation(problem,interpretation);
9323 PartialInterpretation.scopes(interpretation,scope);
9324 Scope.targetTypeInterpretation(scope,typeInterpretation);
9325 Scope.maxNewElements(scope,0);
9326 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
9327 Type.name(type,"FunctionalArchitectureModel class");
9328}
9329
9330/**
9331 * An element may be an instance of type "FunctionalArchitectureModel class".
9332 */
9333private pattern mayInstanceOfFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
9334{
9335 find interpretation(problem,interpretation);
9336 PartialInterpretation.newElements(interpretation,element);
9337 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
9338 neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element);
9339 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
9340 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
9341 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
9342 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
9343 neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation);
9344 neg find isPrimitive(element);
9345} or {
9346 find interpretation(problem,interpretation);
9347 PartialInterpretation.openWorldElements(interpretation,element);
9348 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
9349 neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element);
9350 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
9351 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
9352 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
9353 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
9354 neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation);
9355 neg find isPrimitive(element);
9356} or
9357{ find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); }
9358/**
9359 * An element must be an instance of type "Function class".
9360 */
9361private pattern mustInstanceOfFunction_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
9362 Type.name(type,"Function class");
9363 find directInstanceOf(problem,interpretation,element,type);
9364}
9365private pattern scopeDisallowsNewFunction_class(problem:LogicProblem, interpretation:PartialInterpretation) {
9366 find interpretation(problem,interpretation);
9367 PartialInterpretation.scopes(interpretation,scope);
9368 Scope.targetTypeInterpretation(scope,typeInterpretation);
9369 Scope.maxNewElements(scope,0);
9370 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
9371 Type.name(type,"Function class");
9372}
9373
9374/**
9375 * An element may be an instance of type "Function class".
9376 */
9377private pattern mayInstanceOfFunction_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
9378{
9379 find interpretation(problem,interpretation);
9380 PartialInterpretation.newElements(interpretation,element);
9381 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
9382 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
9383 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
9384 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
9385 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
9386 neg find scopeDisallowsNewFunction_class(problem, interpretation);
9387 neg find isPrimitive(element);
9388} or {
9389 find interpretation(problem,interpretation);
9390 PartialInterpretation.openWorldElements(interpretation,element);
9391 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
9392 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
9393 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
9394 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
9395 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
9396 neg find scopeDisallowsNewFunction_class(problem, interpretation);
9397 neg find isPrimitive(element);
9398} or
9399{ find mustInstanceOfFunction_class(problem,interpretation,element); }
9400/**
9401 * An element must be an instance of type "FAMTerminator class".
9402 */
9403private pattern mustInstanceOfFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
9404 Type.name(type,"FAMTerminator class");
9405 find directInstanceOf(problem,interpretation,element,type);
9406}
9407private pattern scopeDisallowsNewFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation) {
9408 find interpretation(problem,interpretation);
9409 PartialInterpretation.scopes(interpretation,scope);
9410 Scope.targetTypeInterpretation(scope,typeInterpretation);
9411 Scope.maxNewElements(scope,0);
9412 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
9413 Type.name(type,"FAMTerminator class");
9414}
9415
9416/**
9417 * An element may be an instance of type "FAMTerminator class".
9418 */
9419private pattern mayInstanceOfFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
9420{
9421 find interpretation(problem,interpretation);
9422 PartialInterpretation.newElements(interpretation,element);
9423 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
9424 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
9425 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
9426 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
9427 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
9428 neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation);
9429 neg find isPrimitive(element);
9430} or {
9431 find interpretation(problem,interpretation);
9432 PartialInterpretation.openWorldElements(interpretation,element);
9433 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
9434 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
9435 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
9436 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
9437 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
9438 neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation);
9439 neg find isPrimitive(element);
9440} or
9441{ find mustInstanceOfFAMTerminator_class(problem,interpretation,element); }
9442/**
9443 * An element must be an instance of type "InformationLink class".
9444 */
9445private pattern mustInstanceOfInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
9446 Type.name(type,"InformationLink class");
9447 find directInstanceOf(problem,interpretation,element,type);
9448}
9449private pattern scopeDisallowsNewInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation) {
9450 find interpretation(problem,interpretation);
9451 PartialInterpretation.scopes(interpretation,scope);
9452 Scope.targetTypeInterpretation(scope,typeInterpretation);
9453 Scope.maxNewElements(scope,0);
9454 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
9455 Type.name(type,"InformationLink class");
9456}
9457
9458/**
9459 * An element may be an instance of type "InformationLink class".
9460 */
9461private pattern mayInstanceOfInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
9462{
9463 find interpretation(problem,interpretation);
9464 PartialInterpretation.newElements(interpretation,element);
9465 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
9466 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
9467 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
9468 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
9469 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
9470 neg find scopeDisallowsNewInformationLink_class(problem, interpretation);
9471 neg find isPrimitive(element);
9472} or {
9473 find interpretation(problem,interpretation);
9474 PartialInterpretation.openWorldElements(interpretation,element);
9475 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
9476 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
9477 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
9478 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
9479 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
9480 neg find scopeDisallowsNewInformationLink_class(problem, interpretation);
9481 neg find isPrimitive(element);
9482} or
9483{ find mustInstanceOfInformationLink_class(problem,interpretation,element); }
9484/**
9485 * An element must be an instance of type "FunctionalInterface class".
9486 */
9487private pattern mustInstanceOfFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
9488 Type.name(type,"FunctionalInterface class");
9489 find directInstanceOf(problem,interpretation,element,type);
9490}
9491private pattern scopeDisallowsNewFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation) {
9492 find interpretation(problem,interpretation);
9493 PartialInterpretation.scopes(interpretation,scope);
9494 Scope.targetTypeInterpretation(scope,typeInterpretation);
9495 Scope.maxNewElements(scope,0);
9496 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
9497 Type.name(type,"FunctionalInterface class");
9498}
9499
9500/**
9501 * An element may be an instance of type "FunctionalInterface class".
9502 */
9503private pattern mayInstanceOfFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
9504{
9505 find interpretation(problem,interpretation);
9506 PartialInterpretation.newElements(interpretation,element);
9507 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
9508 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
9509 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
9510 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
9511 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
9512 neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation);
9513 neg find isPrimitive(element);
9514} or {
9515 find interpretation(problem,interpretation);
9516 PartialInterpretation.openWorldElements(interpretation,element);
9517 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
9518 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
9519 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
9520 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
9521 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
9522 neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation);
9523 neg find isPrimitive(element);
9524} or
9525{ find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); }
9526/**
9527 * An element must be an instance of type "FunctionalInput class".
9528 */
9529private pattern mustInstanceOfFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
9530 Type.name(type,"FunctionalInput class");
9531 find directInstanceOf(problem,interpretation,element,type);
9532}
9533private pattern scopeDisallowsNewFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation) {
9534 find interpretation(problem,interpretation);
9535 PartialInterpretation.scopes(interpretation,scope);
9536 Scope.targetTypeInterpretation(scope,typeInterpretation);
9537 Scope.maxNewElements(scope,0);
9538 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
9539 Type.name(type,"FunctionalInput class");
9540}
9541
9542/**
9543 * An element may be an instance of type "FunctionalInput class".
9544 */
9545private pattern mayInstanceOfFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
9546{
9547 find interpretation(problem,interpretation);
9548 PartialInterpretation.newElements(interpretation,element);
9549 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
9550 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
9551 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
9552 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
9553 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
9554 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
9555 neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation);
9556 neg find isPrimitive(element);
9557} or {
9558 find interpretation(problem,interpretation);
9559 PartialInterpretation.openWorldElements(interpretation,element);
9560 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
9561 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
9562 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
9563 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
9564 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
9565 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
9566 neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation);
9567 neg find isPrimitive(element);
9568} or
9569{ find mustInstanceOfFunctionalInput_class(problem,interpretation,element); }
9570/**
9571 * An element must be an instance of type "FunctionalOutput class".
9572 */
9573private pattern mustInstanceOfFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
9574 Type.name(type,"FunctionalOutput class");
9575 find directInstanceOf(problem,interpretation,element,type);
9576}
9577private pattern scopeDisallowsNewFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation) {
9578 find interpretation(problem,interpretation);
9579 PartialInterpretation.scopes(interpretation,scope);
9580 Scope.targetTypeInterpretation(scope,typeInterpretation);
9581 Scope.maxNewElements(scope,0);
9582 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
9583 Type.name(type,"FunctionalOutput class");
9584}
9585
9586/**
9587 * An element may be an instance of type "FunctionalOutput class".
9588 */
9589private pattern mayInstanceOfFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
9590{
9591 find interpretation(problem,interpretation);
9592 PartialInterpretation.newElements(interpretation,element);
9593 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
9594 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
9595 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
9596 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
9597 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
9598 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
9599 neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation);
9600 neg find isPrimitive(element);
9601} or {
9602 find interpretation(problem,interpretation);
9603 PartialInterpretation.openWorldElements(interpretation,element);
9604 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
9605 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
9606 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
9607 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
9608 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
9609 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
9610 neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation);
9611 neg find isPrimitive(element);
9612} or
9613{ find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); }
9614/**
9615 * An element must be an instance of type "FunctionalData class".
9616 */
9617private pattern mustInstanceOfFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
9618 Type.name(type,"FunctionalData class");
9619 find directInstanceOf(problem,interpretation,element,type);
9620}
9621private pattern scopeDisallowsNewFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation) {
9622 find interpretation(problem,interpretation);
9623 PartialInterpretation.scopes(interpretation,scope);
9624 Scope.targetTypeInterpretation(scope,typeInterpretation);
9625 Scope.maxNewElements(scope,0);
9626 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
9627 Type.name(type,"FunctionalData class");
9628}
9629
9630/**
9631 * An element may be an instance of type "FunctionalData class".
9632 */
9633private pattern mayInstanceOfFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
9634{
9635 find interpretation(problem,interpretation);
9636 PartialInterpretation.newElements(interpretation,element);
9637 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
9638 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
9639 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
9640 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
9641 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
9642 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
9643 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
9644 neg find scopeDisallowsNewFunctionalData_class(problem, interpretation);
9645 neg find isPrimitive(element);
9646} or {
9647 find interpretation(problem,interpretation);
9648 PartialInterpretation.openWorldElements(interpretation,element);
9649 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
9650 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
9651 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
9652 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
9653 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
9654 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
9655 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
9656 neg find scopeDisallowsNewFunctionalData_class(problem, interpretation);
9657 neg find isPrimitive(element);
9658} or
9659{ find mustInstanceOfFunctionalData_class(problem,interpretation,element); }
9660/**
9661 * An element must be an instance of type "FunctionType enum".
9662 */
9663private pattern mustInstanceOfFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
9664 Type.name(type,"FunctionType enum");
9665 find directInstanceOf(problem,interpretation,element,type);
9666}
9667private pattern scopeDisallowsNewFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation) {
9668 find interpretation(problem,interpretation);
9669 PartialInterpretation.scopes(interpretation,scope);
9670 Scope.targetTypeInterpretation(scope,typeInterpretation);
9671 Scope.maxNewElements(scope,0);
9672 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
9673 Type.name(type,"FunctionType enum");
9674}
9675
9676/**
9677 * An element may be an instance of type "FunctionType enum".
9678 */
9679private pattern mayInstanceOfFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
9680{ find mustInstanceOfFunctionType_enum(problem,interpretation,element); }
9681/**
9682 * An element must be an instance of type "FunctionalArchitectureModel class DefinedPart".
9683 */
9684private pattern mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
9685 Type.name(type,"FunctionalArchitectureModel class DefinedPart");
9686 find directInstanceOf(problem,interpretation,element,type);
9687}
9688private pattern scopeDisallowsNewFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
9689 find interpretation(problem,interpretation);
9690 PartialInterpretation.scopes(interpretation,scope);
9691 Scope.targetTypeInterpretation(scope,typeInterpretation);
9692 Scope.maxNewElements(scope,0);
9693 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
9694 Type.name(type,"FunctionalArchitectureModel class DefinedPart");
9695}
9696
9697/**
9698 * An element may be an instance of type "FunctionalArchitectureModel class DefinedPart".
9699 */
9700private pattern mayInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
9701{ find mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem,interpretation,element); }
9702/**
9703 * An element must be an instance of type "FunctionalArchitectureModel class UndefinedPart".
9704 */
9705private pattern mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
9706 Type.name(type,"FunctionalArchitectureModel class UndefinedPart");
9707 find directInstanceOf(problem,interpretation,element,type);
9708}
9709private pattern scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
9710 find interpretation(problem,interpretation);
9711 PartialInterpretation.scopes(interpretation,scope);
9712 Scope.targetTypeInterpretation(scope,typeInterpretation);
9713 Scope.maxNewElements(scope,0);
9714 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
9715 Type.name(type,"FunctionalArchitectureModel class UndefinedPart");
9716}
9717
9718/**
9719 * An element may be an instance of type "FunctionalArchitectureModel class UndefinedPart".
9720 */
9721private pattern mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
9722{
9723 find interpretation(problem,interpretation);
9724 PartialInterpretation.newElements(interpretation,element);
9725 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
9726 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
9727 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
9728 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
9729 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
9730 neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation);
9731 neg find isPrimitive(element);
9732} or {
9733 find interpretation(problem,interpretation);
9734 PartialInterpretation.openWorldElements(interpretation,element);
9735 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
9736 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
9737 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
9738 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
9739 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
9740 neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation);
9741 neg find isPrimitive(element);
9742} or
9743{ find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); }
9744
9745//////////
9746// 1.2 Relation Declaration Indexers
9747//////////
9748/**
9749 * Matcher for detecting tuples t where []interface reference FunctionalElement(source,target)
9750 */
9751private pattern mustInRelationinterface_reference_FunctionalElement(
9752 problem:LogicProblem, interpretation:PartialInterpretation,
9753 source: DefinedElement, target:DefinedElement)
9754{
9755 find interpretation(problem,interpretation);
9756 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
9757 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface reference FunctionalElement");
9758 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
9759 BinaryElementRelationLink.param1(link,source);
9760 BinaryElementRelationLink.param2(link,target);
9761}
9762/**
9763 * Matcher for detecting tuples t where <>interface reference FunctionalElement(source,target)
9764 */
9765private pattern mayInRelationinterface_reference_FunctionalElement(
9766 problem:LogicProblem, interpretation:PartialInterpretation,
9767 source: DefinedElement, target:DefinedElement)
9768{
9769 find interpretation(problem,interpretation);
9770 // The two endpoint of the link have to exist
9771 find mayExist(problem, interpretation, source);
9772 find mayExist(problem, interpretation, target);
9773 // Type consistency
9774 find mayInstanceOfFunctionalElement_class(problem,interpretation,source);
9775 find mayInstanceOfFunctionalInterface_class(problem,interpretation,target);
9776 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
9777 // the upper bound of the multiplicity should be considered.
9778 numberOfExistingReferences == count find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,_);
9779 check(numberOfExistingReferences < 1);
9780 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
9781 // the upper bound of the opposite reference multiplicity should be considered.
9782 numberOfExistingOppositeReferences == count find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,target,_);
9783 check(numberOfExistingOppositeReferences < 1);
9784 // The reference is containment, then a new reference cannot be create if:
9785 // 1. Multiple parents
9786 neg find mustContains4(problem,interpretation,_,target);
9787 // 2. Circle in the containment hierarchy
9788 neg find mustTransitiveContains(source,target);
9789} or {
9790 find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,target);
9791}
9792/**
9793 * Matcher for detecting tuples t where []model reference FunctionalElement(source,target)
9794 */
9795private pattern mustInRelationmodel_reference_FunctionalElement(
9796 problem:LogicProblem, interpretation:PartialInterpretation,
9797 source: DefinedElement, target:DefinedElement)
9798{
9799 find interpretation(problem,interpretation);
9800 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
9801 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement");
9802 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
9803 BinaryElementRelationLink.param1(link,source);
9804 BinaryElementRelationLink.param2(link,target);
9805}
9806/**
9807 * Matcher for detecting tuples t where <>model reference FunctionalElement(source,target)
9808 */
9809private pattern mayInRelationmodel_reference_FunctionalElement(
9810 problem:LogicProblem, interpretation:PartialInterpretation,
9811 source: DefinedElement, target:DefinedElement)
9812{
9813 find interpretation(problem,interpretation);
9814 // The two endpoint of the link have to exist
9815 find mayExist(problem, interpretation, source);
9816 find mayExist(problem, interpretation, target);
9817 // Type consistency
9818 find mayInstanceOfFunctionalElement_class(problem,interpretation,source);
9819 find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,target);
9820 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
9821 // the upper bound of the multiplicity should be considered.
9822 numberOfExistingReferences == count find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,source,_);
9823 check(numberOfExistingReferences < 1);
9824} or {
9825 find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,source,target);
9826}
9827/**
9828 * Matcher for detecting tuples t where []parent reference FunctionalElement(source,target)
9829 */
9830private pattern mustInRelationparent_reference_FunctionalElement(
9831 problem:LogicProblem, interpretation:PartialInterpretation,
9832 source: DefinedElement, target:DefinedElement)
9833{
9834 find interpretation(problem,interpretation);
9835 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
9836 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"parent reference FunctionalElement");
9837 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
9838 BinaryElementRelationLink.param1(link,source);
9839 BinaryElementRelationLink.param2(link,target);
9840}
9841/**
9842 * Matcher for detecting tuples t where <>parent reference FunctionalElement(source,target)
9843 */
9844private pattern mayInRelationparent_reference_FunctionalElement(
9845 problem:LogicProblem, interpretation:PartialInterpretation,
9846 source: DefinedElement, target:DefinedElement)
9847{
9848 find interpretation(problem,interpretation);
9849 // The two endpoint of the link have to exist
9850 find mayExist(problem, interpretation, source);
9851 find mayExist(problem, interpretation, target);
9852 // Type consistency
9853 find mayInstanceOfFunctionalElement_class(problem,interpretation,source);
9854 find mayInstanceOfFunction_class(problem,interpretation,target);
9855 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
9856 // the upper bound of the multiplicity should be considered.
9857 numberOfExistingReferences == count find mustInRelationparent_reference_FunctionalElement(problem,interpretation,source,_);
9858 check(numberOfExistingReferences < 1);
9859 // The eOpposite of the reference is containment, then a referene cannot be created if
9860 // 1. Multiple parents
9861 neg find mustContains4(problem,interpretation,source,_);
9862 // 2. Circle in the containment hierarchy
9863 neg find mustTransitiveContains(source,target);
9864} or {
9865 find mustInRelationparent_reference_FunctionalElement(problem,interpretation,source,target);
9866}
9867/**
9868 * Matcher for detecting tuples t where []rootElements reference FunctionalArchitectureModel(source,target)
9869 */
9870private pattern mustInRelationrootElements_reference_FunctionalArchitectureModel(
9871 problem:LogicProblem, interpretation:PartialInterpretation,
9872 source: DefinedElement, target:DefinedElement)
9873{
9874 find interpretation(problem,interpretation);
9875 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
9876 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"rootElements reference FunctionalArchitectureModel");
9877 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
9878 BinaryElementRelationLink.param1(link,source);
9879 BinaryElementRelationLink.param2(link,target);
9880}
9881/**
9882 * Matcher for detecting tuples t where <>rootElements reference FunctionalArchitectureModel(source,target)
9883 */
9884private pattern mayInRelationrootElements_reference_FunctionalArchitectureModel(
9885 problem:LogicProblem, interpretation:PartialInterpretation,
9886 source: DefinedElement, target:DefinedElement)
9887{
9888 find interpretation(problem,interpretation);
9889 // The two endpoint of the link have to exist
9890 find mayExist(problem, interpretation, source);
9891 find mayExist(problem, interpretation, target);
9892 // Type consistency
9893 find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,source);
9894 find mayInstanceOfFunctionalElement_class(problem,interpretation,target);
9895 // The reference is containment, then a new reference cannot be create if:
9896 // 1. Multiple parents
9897 neg find mustContains4(problem,interpretation,_,target);
9898 // 2. Circle in the containment hierarchy
9899 neg find mustTransitiveContains(source,target);
9900} or {
9901 find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,source,target);
9902}
9903/**
9904 * Matcher for detecting tuples t where []subElements reference Function(source,target)
9905 */
9906private pattern mustInRelationsubElements_reference_Function(
9907 problem:LogicProblem, interpretation:PartialInterpretation,
9908 source: DefinedElement, target:DefinedElement)
9909{
9910 find interpretation(problem,interpretation);
9911 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
9912 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"subElements reference Function");
9913 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
9914 BinaryElementRelationLink.param1(link,source);
9915 BinaryElementRelationLink.param2(link,target);
9916}
9917/**
9918 * Matcher for detecting tuples t where <>subElements reference Function(source,target)
9919 */
9920private pattern mayInRelationsubElements_reference_Function(
9921 problem:LogicProblem, interpretation:PartialInterpretation,
9922 source: DefinedElement, target:DefinedElement)
9923{
9924 find interpretation(problem,interpretation);
9925 // The two endpoint of the link have to exist
9926 find mayExist(problem, interpretation, source);
9927 find mayExist(problem, interpretation, target);
9928 // Type consistency
9929 find mayInstanceOfFunction_class(problem,interpretation,source);
9930 find mayInstanceOfFunctionalElement_class(problem,interpretation,target);
9931 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
9932 // the upper bound of the opposite reference multiplicity should be considered.
9933 numberOfExistingOppositeReferences == count find mustInRelationparent_reference_FunctionalElement(problem,interpretation,target,_);
9934 check(numberOfExistingOppositeReferences < 1);
9935 // The reference is containment, then a new reference cannot be create if:
9936 // 1. Multiple parents
9937 neg find mustContains4(problem,interpretation,_,target);
9938 // 2. Circle in the containment hierarchy
9939 neg find mustTransitiveContains(source,target);
9940} or {
9941 find mustInRelationsubElements_reference_Function(problem,interpretation,source,target);
9942}
9943/**
9944 * Matcher for detecting tuples t where []data reference FAMTerminator(source,target)
9945 */
9946private pattern mustInRelationdata_reference_FAMTerminator(
9947 problem:LogicProblem, interpretation:PartialInterpretation,
9948 source: DefinedElement, target:DefinedElement)
9949{
9950 find interpretation(problem,interpretation);
9951 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
9952 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"data reference FAMTerminator");
9953 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
9954 BinaryElementRelationLink.param1(link,source);
9955 BinaryElementRelationLink.param2(link,target);
9956}
9957/**
9958 * Matcher for detecting tuples t where <>data reference FAMTerminator(source,target)
9959 */
9960private pattern mayInRelationdata_reference_FAMTerminator(
9961 problem:LogicProblem, interpretation:PartialInterpretation,
9962 source: DefinedElement, target:DefinedElement)
9963{
9964 find interpretation(problem,interpretation);
9965 // The two endpoint of the link have to exist
9966 find mayExist(problem, interpretation, source);
9967 find mayExist(problem, interpretation, target);
9968 // Type consistency
9969 find mayInstanceOfFAMTerminator_class(problem,interpretation,source);
9970 find mayInstanceOfFunctionalData_class(problem,interpretation,target);
9971 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
9972 // the upper bound of the multiplicity should be considered.
9973 numberOfExistingReferences == count find mustInRelationdata_reference_FAMTerminator(problem,interpretation,source,_);
9974 check(numberOfExistingReferences < 1);
9975 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
9976 // the upper bound of the opposite reference multiplicity should be considered.
9977 numberOfExistingOppositeReferences == count find mustInRelationterminator_reference_FunctionalData(problem,interpretation,target,_);
9978 check(numberOfExistingOppositeReferences < 1);
9979 // The eOpposite of the reference is containment, then a referene cannot be created if
9980 // 1. Multiple parents
9981 neg find mustContains4(problem,interpretation,source,_);
9982 // 2. Circle in the containment hierarchy
9983 neg find mustTransitiveContains(source,target);
9984} or {
9985 find mustInRelationdata_reference_FAMTerminator(problem,interpretation,source,target);
9986}
9987/**
9988 * Matcher for detecting tuples t where []from reference InformationLink(source,target)
9989 */
9990private pattern mustInRelationfrom_reference_InformationLink(
9991 problem:LogicProblem, interpretation:PartialInterpretation,
9992 source: DefinedElement, target:DefinedElement)
9993{
9994 find interpretation(problem,interpretation);
9995 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
9996 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"from reference InformationLink");
9997 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
9998 BinaryElementRelationLink.param1(link,source);
9999 BinaryElementRelationLink.param2(link,target);
10000}
10001/**
10002 * Matcher for detecting tuples t where <>from reference InformationLink(source,target)
10003 */
10004private pattern mayInRelationfrom_reference_InformationLink(
10005 problem:LogicProblem, interpretation:PartialInterpretation,
10006 source: DefinedElement, target:DefinedElement)
10007{
10008 find interpretation(problem,interpretation);
10009 // The two endpoint of the link have to exist
10010 find mayExist(problem, interpretation, source);
10011 find mayExist(problem, interpretation, target);
10012 // Type consistency
10013 find mayInstanceOfInformationLink_class(problem,interpretation,source);
10014 find mayInstanceOfFunctionalOutput_class(problem,interpretation,target);
10015 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
10016 // the upper bound of the multiplicity should be considered.
10017 numberOfExistingReferences == count find mustInRelationfrom_reference_InformationLink(problem,interpretation,source,_);
10018 check(numberOfExistingReferences < 1);
10019 // The eOpposite of the reference is containment, then a referene cannot be created if
10020 // 1. Multiple parents
10021 neg find mustContains4(problem,interpretation,source,_);
10022 // 2. Circle in the containment hierarchy
10023 neg find mustTransitiveContains(source,target);
10024} or {
10025 find mustInRelationfrom_reference_InformationLink(problem,interpretation,source,target);
10026}
10027/**
10028 * Matcher for detecting tuples t where []to reference InformationLink(source,target)
10029 */
10030private pattern mustInRelationto_reference_InformationLink(
10031 problem:LogicProblem, interpretation:PartialInterpretation,
10032 source: DefinedElement, target:DefinedElement)
10033{
10034 find interpretation(problem,interpretation);
10035 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
10036 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"to reference InformationLink");
10037 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
10038 BinaryElementRelationLink.param1(link,source);
10039 BinaryElementRelationLink.param2(link,target);
10040}
10041/**
10042 * Matcher for detecting tuples t where <>to reference InformationLink(source,target)
10043 */
10044private pattern mayInRelationto_reference_InformationLink(
10045 problem:LogicProblem, interpretation:PartialInterpretation,
10046 source: DefinedElement, target:DefinedElement)
10047{
10048 find interpretation(problem,interpretation);
10049 // The two endpoint of the link have to exist
10050 find mayExist(problem, interpretation, source);
10051 find mayExist(problem, interpretation, target);
10052 // Type consistency
10053 find mayInstanceOfInformationLink_class(problem,interpretation,source);
10054 find mayInstanceOfFunctionalInput_class(problem,interpretation,target);
10055 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
10056 // the upper bound of the multiplicity should be considered.
10057 numberOfExistingReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,source,_);
10058 check(numberOfExistingReferences < 1);
10059} or {
10060 find mustInRelationto_reference_InformationLink(problem,interpretation,source,target);
10061}
10062/**
10063 * Matcher for detecting tuples t where []data reference FunctionalInterface(source,target)
10064 */
10065private pattern mustInRelationdata_reference_FunctionalInterface(
10066 problem:LogicProblem, interpretation:PartialInterpretation,
10067 source: DefinedElement, target:DefinedElement)
10068{
10069 find interpretation(problem,interpretation);
10070 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
10071 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"data reference FunctionalInterface");
10072 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
10073 BinaryElementRelationLink.param1(link,source);
10074 BinaryElementRelationLink.param2(link,target);
10075}
10076/**
10077 * Matcher for detecting tuples t where <>data reference FunctionalInterface(source,target)
10078 */
10079private pattern mayInRelationdata_reference_FunctionalInterface(
10080 problem:LogicProblem, interpretation:PartialInterpretation,
10081 source: DefinedElement, target:DefinedElement)
10082{
10083 find interpretation(problem,interpretation);
10084 // The two endpoint of the link have to exist
10085 find mayExist(problem, interpretation, source);
10086 find mayExist(problem, interpretation, target);
10087 // Type consistency
10088 find mayInstanceOfFunctionalInterface_class(problem,interpretation,source);
10089 find mayInstanceOfFunctionalData_class(problem,interpretation,target);
10090 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
10091 // the upper bound of the opposite reference multiplicity should be considered.
10092 numberOfExistingOppositeReferences == count find mustInRelationinterface_reference_FunctionalData(problem,interpretation,target,_);
10093 check(numberOfExistingOppositeReferences < 1);
10094 // The reference is containment, then a new reference cannot be create if:
10095 // 1. Multiple parents
10096 neg find mustContains4(problem,interpretation,_,target);
10097 // 2. Circle in the containment hierarchy
10098 neg find mustTransitiveContains(source,target);
10099} or {
10100 find mustInRelationdata_reference_FunctionalInterface(problem,interpretation,source,target);
10101}
10102/**
10103 * Matcher for detecting tuples t where []element reference FunctionalInterface(source,target)
10104 */
10105private pattern mustInRelationelement_reference_FunctionalInterface(
10106 problem:LogicProblem, interpretation:PartialInterpretation,
10107 source: DefinedElement, target:DefinedElement)
10108{
10109 find interpretation(problem,interpretation);
10110 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
10111 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"element reference FunctionalInterface");
10112 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
10113 BinaryElementRelationLink.param1(link,source);
10114 BinaryElementRelationLink.param2(link,target);
10115}
10116/**
10117 * Matcher for detecting tuples t where <>element reference FunctionalInterface(source,target)
10118 */
10119private pattern mayInRelationelement_reference_FunctionalInterface(
10120 problem:LogicProblem, interpretation:PartialInterpretation,
10121 source: DefinedElement, target:DefinedElement)
10122{
10123 find interpretation(problem,interpretation);
10124 // The two endpoint of the link have to exist
10125 find mayExist(problem, interpretation, source);
10126 find mayExist(problem, interpretation, target);
10127 // Type consistency
10128 find mayInstanceOfFunctionalInterface_class(problem,interpretation,source);
10129 find mayInstanceOfFunctionalElement_class(problem,interpretation,target);
10130 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
10131 // the upper bound of the multiplicity should be considered.
10132 numberOfExistingReferences == count find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,source,_);
10133 check(numberOfExistingReferences < 1);
10134 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
10135 // the upper bound of the opposite reference multiplicity should be considered.
10136 numberOfExistingOppositeReferences == count find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,target,_);
10137 check(numberOfExistingOppositeReferences < 1);
10138 // The eOpposite of the reference is containment, then a referene cannot be created if
10139 // 1. Multiple parents
10140 neg find mustContains4(problem,interpretation,source,_);
10141 // 2. Circle in the containment hierarchy
10142 neg find mustTransitiveContains(source,target);
10143} or {
10144 find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,source,target);
10145}
10146/**
10147 * Matcher for detecting tuples t where []IncomingLinks reference FunctionalInput(source,target)
10148 */
10149private pattern mustInRelationIncomingLinks_reference_FunctionalInput(
10150 problem:LogicProblem, interpretation:PartialInterpretation,
10151 source: DefinedElement, target:DefinedElement)
10152{
10153 find interpretation(problem,interpretation);
10154 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
10155 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"IncomingLinks reference FunctionalInput");
10156 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
10157 BinaryElementRelationLink.param1(link,source);
10158 BinaryElementRelationLink.param2(link,target);
10159}
10160/**
10161 * Matcher for detecting tuples t where <>IncomingLinks reference FunctionalInput(source,target)
10162 */
10163private pattern mayInRelationIncomingLinks_reference_FunctionalInput(
10164 problem:LogicProblem, interpretation:PartialInterpretation,
10165 source: DefinedElement, target:DefinedElement)
10166{
10167 find interpretation(problem,interpretation);
10168 // The two endpoint of the link have to exist
10169 find mayExist(problem, interpretation, source);
10170 find mayExist(problem, interpretation, target);
10171 // Type consistency
10172 find mayInstanceOfFunctionalInput_class(problem,interpretation,source);
10173 find mayInstanceOfInformationLink_class(problem,interpretation,target);
10174 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
10175 // the upper bound of the opposite reference multiplicity should be considered.
10176 numberOfExistingOppositeReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,target,_);
10177 check(numberOfExistingOppositeReferences < 1);
10178} or {
10179 find mustInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,source,target);
10180}
10181/**
10182 * Matcher for detecting tuples t where []outgoingLinks reference FunctionalOutput(source,target)
10183 */
10184private pattern mustInRelationoutgoingLinks_reference_FunctionalOutput(
10185 problem:LogicProblem, interpretation:PartialInterpretation,
10186 source: DefinedElement, target:DefinedElement)
10187{
10188 find interpretation(problem,interpretation);
10189 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
10190 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"outgoingLinks reference FunctionalOutput");
10191 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
10192 BinaryElementRelationLink.param1(link,source);
10193 BinaryElementRelationLink.param2(link,target);
10194}
10195/**
10196 * Matcher for detecting tuples t where <>outgoingLinks reference FunctionalOutput(source,target)
10197 */
10198private pattern mayInRelationoutgoingLinks_reference_FunctionalOutput(
10199 problem:LogicProblem, interpretation:PartialInterpretation,
10200 source: DefinedElement, target:DefinedElement)
10201{
10202 find interpretation(problem,interpretation);
10203 // The two endpoint of the link have to exist
10204 find mayExist(problem, interpretation, source);
10205 find mayExist(problem, interpretation, target);
10206 // Type consistency
10207 find mayInstanceOfFunctionalOutput_class(problem,interpretation,source);
10208 find mayInstanceOfInformationLink_class(problem,interpretation,target);
10209 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
10210 // the upper bound of the opposite reference multiplicity should be considered.
10211 numberOfExistingOppositeReferences == count find mustInRelationfrom_reference_InformationLink(problem,interpretation,target,_);
10212 check(numberOfExistingOppositeReferences < 1);
10213 // The reference is containment, then a new reference cannot be create if:
10214 // 1. Multiple parents
10215 neg find mustContains4(problem,interpretation,_,target);
10216 // 2. Circle in the containment hierarchy
10217 neg find mustTransitiveContains(source,target);
10218} or {
10219 find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,source,target);
10220}
10221/**
10222 * Matcher for detecting tuples t where []terminator reference FunctionalData(source,target)
10223 */
10224private pattern mustInRelationterminator_reference_FunctionalData(
10225 problem:LogicProblem, interpretation:PartialInterpretation,
10226 source: DefinedElement, target:DefinedElement)
10227{
10228 find interpretation(problem,interpretation);
10229 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
10230 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"terminator reference FunctionalData");
10231 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
10232 BinaryElementRelationLink.param1(link,source);
10233 BinaryElementRelationLink.param2(link,target);
10234}
10235/**
10236 * Matcher for detecting tuples t where <>terminator reference FunctionalData(source,target)
10237 */
10238private pattern mayInRelationterminator_reference_FunctionalData(
10239 problem:LogicProblem, interpretation:PartialInterpretation,
10240 source: DefinedElement, target:DefinedElement)
10241{
10242 find interpretation(problem,interpretation);
10243 // The two endpoint of the link have to exist
10244 find mayExist(problem, interpretation, source);
10245 find mayExist(problem, interpretation, target);
10246 // Type consistency
10247 find mayInstanceOfFunctionalData_class(problem,interpretation,source);
10248 find mayInstanceOfFAMTerminator_class(problem,interpretation,target);
10249 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
10250 // the upper bound of the multiplicity should be considered.
10251 numberOfExistingReferences == count find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,_);
10252 check(numberOfExistingReferences < 1);
10253 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
10254 // the upper bound of the opposite reference multiplicity should be considered.
10255 numberOfExistingOppositeReferences == count find mustInRelationdata_reference_FAMTerminator(problem,interpretation,target,_);
10256 check(numberOfExistingOppositeReferences < 1);
10257 // The reference is containment, then a new reference cannot be create if:
10258 // 1. Multiple parents
10259 neg find mustContains4(problem,interpretation,_,target);
10260 // 2. Circle in the containment hierarchy
10261 neg find mustTransitiveContains(source,target);
10262} or {
10263 find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,target);
10264}
10265/**
10266 * Matcher for detecting tuples t where []interface reference FunctionalData(source,target)
10267 */
10268private pattern mustInRelationinterface_reference_FunctionalData(
10269 problem:LogicProblem, interpretation:PartialInterpretation,
10270 source: DefinedElement, target:DefinedElement)
10271{
10272 find interpretation(problem,interpretation);
10273 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
10274 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface reference FunctionalData");
10275 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
10276 BinaryElementRelationLink.param1(link,source);
10277 BinaryElementRelationLink.param2(link,target);
10278}
10279/**
10280 * Matcher for detecting tuples t where <>interface reference FunctionalData(source,target)
10281 */
10282private pattern mayInRelationinterface_reference_FunctionalData(
10283 problem:LogicProblem, interpretation:PartialInterpretation,
10284 source: DefinedElement, target:DefinedElement)
10285{
10286 find interpretation(problem,interpretation);
10287 // The two endpoint of the link have to exist
10288 find mayExist(problem, interpretation, source);
10289 find mayExist(problem, interpretation, target);
10290 // Type consistency
10291 find mayInstanceOfFunctionalData_class(problem,interpretation,source);
10292 find mayInstanceOfFunctionalInterface_class(problem,interpretation,target);
10293 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
10294 // the upper bound of the multiplicity should be considered.
10295 numberOfExistingReferences == count find mustInRelationinterface_reference_FunctionalData(problem,interpretation,source,_);
10296 check(numberOfExistingReferences < 1);
10297 // The eOpposite of the reference is containment, then a referene cannot be created if
10298 // 1. Multiple parents
10299 neg find mustContains4(problem,interpretation,source,_);
10300 // 2. Circle in the containment hierarchy
10301 neg find mustTransitiveContains(source,target);
10302} or {
10303 find mustInRelationinterface_reference_FunctionalData(problem,interpretation,source,target);
10304}
10305/**
10306 * Matcher for detecting tuples t where []type attribute Function(source,target)
10307 */
10308private pattern mustInRelationtype_attribute_Function(
10309 problem:LogicProblem, interpretation:PartialInterpretation,
10310 source: DefinedElement, target:DefinedElement)
10311{
10312 find interpretation(problem,interpretation);
10313 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
10314 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function");
10315 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
10316 BinaryElementRelationLink.param1(link,source);
10317 BinaryElementRelationLink.param2(link,target);
10318}
10319/**
10320 * Matcher for detecting tuples t where <>type attribute Function(source,target)
10321 */
10322private pattern mayInRelationtype_attribute_Function(
10323 problem:LogicProblem, interpretation:PartialInterpretation,
10324 source: DefinedElement, target:DefinedElement)
10325{
10326 find interpretation(problem,interpretation);
10327 // The two endpoint of the link have to exist
10328 find mayExist(problem, interpretation, source);
10329 find mayExist(problem, interpretation, target);
10330 // Type consistency
10331 find mayInstanceOfFunction_class(problem,interpretation,source);
10332 find mayInstanceOfFunctionType_enum(problem,interpretation,target);
10333 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
10334 // the upper bound of the multiplicity should be considered.
10335 numberOfExistingReferences == count find mustInRelationtype_attribute_Function(problem,interpretation,source,_);
10336 check(numberOfExistingReferences < 1);
10337} or {
10338 find mustInRelationtype_attribute_Function(problem,interpretation,source,target);
10339}
10340
10341//////////
10342// 1.3 Relation Definition Indexers
10343//////////
10344
10345//////////
10346// 1.4 Containment Indexer
10347//////////
10348private pattern mustContains2(source: DefinedElement, target: DefinedElement) {
10349 find mustContains4(_,_,source,target);
10350}
10351
10352private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation,
10353 source: DefinedElement, target: DefinedElement)
10354 { find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,target); }or
10355
10356 { find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,source,target); }or
10357
10358 { find mustInRelationsubElements_reference_Function(problem,interpretation,source,target); }or
10359
10360 { find mustInRelationdata_reference_FunctionalInterface(problem,interpretation,source,target); }or
10361
10362 { find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,source,target); }or
10363
10364 { find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,target); }
10365
10366private pattern mustTransitiveContains(source,target) {
10367 find mustContains2+(source,target);
10368}
10369
10370//////////
10371// 2. Invalidation Indexers
10372//////////
10373// 2.1 Invalidated by WF Queries
10374//////////
10375
10376//////////
10377// 3. Unfinishedness Indexers
10378//////////
10379// 3.1 Unfinishedness Measured by Multiplicity
10380//////////
10381pattern unfinishedLowerMultiplicity_model_reference_FunctionalElement(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) {
10382 find interpretation(problem,interpretation);
10383 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
10384 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement");
10385 find mustInstanceOfFunctionalElement_class(problem,interpretation,object);
10386 numberOfExistingReferences == count find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,object,_);
10387 check(numberOfExistingReferences < 1);
10388 missingMultiplicity == eval(1-numberOfExistingReferences);
10389}
10390pattern unfinishedLowerMultiplicity_to_reference_InformationLink(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) {
10391 find interpretation(problem,interpretation);
10392 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
10393 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"to reference InformationLink");
10394 find mustInstanceOfInformationLink_class(problem,interpretation,object);
10395 numberOfExistingReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,object,_);
10396 check(numberOfExistingReferences < 1);
10397 missingMultiplicity == eval(1-numberOfExistingReferences);
10398}
10399pattern unfinishedLowerMultiplicity_type_attribute_Function(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) {
10400 find interpretation(problem,interpretation);
10401 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
10402 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function");
10403 find mustInstanceOfFunction_class(problem,interpretation,object);
10404 numberOfExistingReferences == count find mustInRelationtype_attribute_Function(problem,interpretation,object,_);
10405 check(numberOfExistingReferences < 1);
10406 missingMultiplicity == eval(1-numberOfExistingReferences);
10407}
10408
10409//////////
10410// 3.2 Unfinishedness Measured by WF Queries
10411//////////
10412
10413//////////
10414// 4. Refinement Indexers
10415//////////
10416// 4.1 Object constructors
10417//////////
10418private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation)
10419{
10420 find interpretation(problem,interpretation);
10421 find mustInstanceOfFAMTerminator_class(problem,interpretation,root);
10422 find mustExist(problem, interpretation, root);
10423}or{
10424 find interpretation(problem,interpretation);
10425 find mustInstanceOfFunction_class(problem,interpretation,root);
10426 find mustExist(problem, interpretation, root);
10427}or{
10428 find interpretation(problem,interpretation);
10429 find mustInstanceOfFunctionalData_class(problem,interpretation,root);
10430 find mustExist(problem, interpretation, root);
10431}or{
10432 find interpretation(problem,interpretation);
10433 find mustInstanceOfFunctionalInterface_class(problem,interpretation,root);
10434 find mustExist(problem, interpretation, root);
10435}or{
10436 find interpretation(problem,interpretation);
10437 find mustInstanceOfInformationLink_class(problem,interpretation,root);
10438 find mustExist(problem, interpretation, root);
10439}or{
10440 find interpretation(problem,interpretation);
10441 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,root);
10442 find mustExist(problem, interpretation, root);
10443}or{
10444 find interpretation(problem,interpretation);
10445 find mustInstanceOfFunctionalElement_class(problem,interpretation,root);
10446 find mustExist(problem, interpretation, root);
10447}or{
10448 find interpretation(problem,interpretation);
10449 find mustInstanceOfFunctionalInput_class(problem,interpretation,root);
10450 find mustExist(problem, interpretation, root);
10451}or{
10452 find interpretation(problem,interpretation);
10453 find mustInstanceOfFunctionalOutput_class(problem,interpretation,root);
10454 find mustExist(problem, interpretation, root);
10455}or{
10456 find interpretation(problem,interpretation);
10457 find mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem,interpretation,root);
10458 find mustExist(problem, interpretation, root);
10459}or{
10460 find interpretation(problem,interpretation);
10461 find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,root);
10462 find mustExist(problem, interpretation, root);
10463}
10464pattern createObject_FunctionalInterface_class_by_interface_reference_FunctionalElement_with_element_reference_FunctionalInterface(
10465 problem:LogicProblem, interpretation:PartialInterpretation,
10466 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
10467 container:DefinedElement)
10468{
10469 find interpretation(problem,interpretation);
10470 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
10471 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class");
10472 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
10473 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"interface reference FunctionalElement");
10474 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
10475 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"element reference FunctionalInterface");
10476 find mustInstanceOfFunctionalElement_class(problem,interpretation,container);
10477 find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject);
10478 find mayInRelationinterface_reference_FunctionalElement(problem,interpretation,container,newObject);
10479 find mustExist(problem, interpretation, container);
10480 neg find mustExist(problem, interpretation, newObject);
10481}
10482pattern createObject_FunctionalInterface_class(
10483 problem:LogicProblem, interpretation:PartialInterpretation,
10484 typeInterpretation:PartialComplexTypeInterpretation)
10485{
10486 find interpretation(problem,interpretation);
10487 neg find hasElementInContainment(problem,interpretation);
10488 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
10489 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class");
10490 find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject);
10491 find mayExist(problem, interpretation, newObject);
10492 neg find mustExist(problem, interpretation, newObject);
10493}
10494pattern createObject_FunctionalInput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData(
10495 problem:LogicProblem, interpretation:PartialInterpretation,
10496 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
10497 container:DefinedElement)
10498{
10499 find interpretation(problem,interpretation);
10500 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
10501 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class");
10502 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
10503 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface");
10504 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
10505 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData");
10506 find mustInstanceOfFunctionalInterface_class(problem,interpretation,container);
10507 find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject);
10508 find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject);
10509 find mustExist(problem, interpretation, container);
10510 neg find mustExist(problem, interpretation, newObject);
10511}
10512pattern createObject_FunctionalInput_class(
10513 problem:LogicProblem, interpretation:PartialInterpretation,
10514 typeInterpretation:PartialComplexTypeInterpretation)
10515{
10516 find interpretation(problem,interpretation);
10517 neg find hasElementInContainment(problem,interpretation);
10518 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
10519 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class");
10520 find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject);
10521 find mayExist(problem, interpretation, newObject);
10522 neg find mustExist(problem, interpretation, newObject);
10523}
10524pattern createObject_FunctionalArchitectureModel_class_UndefinedPart(
10525 problem:LogicProblem, interpretation:PartialInterpretation,
10526 typeInterpretation:PartialComplexTypeInterpretation)
10527{
10528 find interpretation(problem,interpretation);
10529 neg find hasElementInContainment(problem,interpretation);
10530 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
10531 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalArchitectureModel class UndefinedPart");
10532 find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,newObject);
10533 find mayExist(problem, interpretation, newObject);
10534 neg find mustExist(problem, interpretation, newObject);
10535}
10536pattern createObject_InformationLink_class_by_outgoingLinks_reference_FunctionalOutput_with_from_reference_InformationLink(
10537 problem:LogicProblem, interpretation:PartialInterpretation,
10538 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
10539 container:DefinedElement)
10540{
10541 find interpretation(problem,interpretation);
10542 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
10543 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class");
10544 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
10545 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingLinks reference FunctionalOutput");
10546 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
10547 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"from reference InformationLink");
10548 find mustInstanceOfFunctionalOutput_class(problem,interpretation,container);
10549 find mayInstanceOfInformationLink_class(problem,interpretation,newObject);
10550 find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,container,newObject);
10551 find mustExist(problem, interpretation, container);
10552 neg find mustExist(problem, interpretation, newObject);
10553}
10554pattern createObject_InformationLink_class(
10555 problem:LogicProblem, interpretation:PartialInterpretation,
10556 typeInterpretation:PartialComplexTypeInterpretation)
10557{
10558 find interpretation(problem,interpretation);
10559 neg find hasElementInContainment(problem,interpretation);
10560 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
10561 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class");
10562 find mayInstanceOfInformationLink_class(problem,interpretation,newObject);
10563 find mayExist(problem, interpretation, newObject);
10564 neg find mustExist(problem, interpretation, newObject);
10565}
10566pattern createObject_FunctionalOutput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData(
10567 problem:LogicProblem, interpretation:PartialInterpretation,
10568 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
10569 container:DefinedElement)
10570{
10571 find interpretation(problem,interpretation);
10572 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
10573 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class");
10574 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
10575 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface");
10576 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
10577 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData");
10578 find mustInstanceOfFunctionalInterface_class(problem,interpretation,container);
10579 find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject);
10580 find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject);
10581 find mustExist(problem, interpretation, container);
10582 neg find mustExist(problem, interpretation, newObject);
10583}
10584pattern createObject_FunctionalOutput_class(
10585 problem:LogicProblem, interpretation:PartialInterpretation,
10586 typeInterpretation:PartialComplexTypeInterpretation)
10587{
10588 find interpretation(problem,interpretation);
10589 neg find hasElementInContainment(problem,interpretation);
10590 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
10591 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class");
10592 find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject);
10593 find mayExist(problem, interpretation, newObject);
10594 neg find mustExist(problem, interpretation, newObject);
10595}
10596pattern createObject_Function_class_by_rootElements_reference_FunctionalArchitectureModel(
10597 problem:LogicProblem, interpretation:PartialInterpretation,
10598 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
10599 container:DefinedElement)
10600{
10601 find interpretation(problem,interpretation);
10602 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
10603 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class");
10604 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
10605 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"rootElements reference FunctionalArchitectureModel");
10606 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,container);
10607 find mayInstanceOfFunction_class(problem,interpretation,newObject);
10608 find mayInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,container,newObject);
10609 find mustExist(problem, interpretation, container);
10610 neg find mustExist(problem, interpretation, newObject);
10611}
10612pattern createObject_Function_class_by_subElements_reference_Function_with_parent_reference_FunctionalElement(
10613 problem:LogicProblem, interpretation:PartialInterpretation,
10614 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
10615 container:DefinedElement)
10616{
10617 find interpretation(problem,interpretation);
10618 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
10619 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class");
10620 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
10621 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"subElements reference Function");
10622 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
10623 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FunctionalElement");
10624 find mustInstanceOfFunction_class(problem,interpretation,container);
10625 find mayInstanceOfFunction_class(problem,interpretation,newObject);
10626 find mayInRelationsubElements_reference_Function(problem,interpretation,container,newObject);
10627 find mustExist(problem, interpretation, container);
10628 neg find mustExist(problem, interpretation, newObject);
10629}
10630pattern createObject_Function_class(
10631 problem:LogicProblem, interpretation:PartialInterpretation,
10632 typeInterpretation:PartialComplexTypeInterpretation)
10633{
10634 find interpretation(problem,interpretation);
10635 neg find hasElementInContainment(problem,interpretation);
10636 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
10637 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class");
10638 find mayInstanceOfFunction_class(problem,interpretation,newObject);
10639 find mayExist(problem, interpretation, newObject);
10640 neg find mustExist(problem, interpretation, newObject);
10641}
10642pattern createObject_FAMTerminator_class_by_terminator_reference_FunctionalData_with_data_reference_FAMTerminator(
10643 problem:LogicProblem, interpretation:PartialInterpretation,
10644 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
10645 container:DefinedElement)
10646{
10647 find interpretation(problem,interpretation);
10648 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
10649 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class");
10650 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
10651 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"terminator reference FunctionalData");
10652 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
10653 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"data reference FAMTerminator");
10654 find mustInstanceOfFunctionalData_class(problem,interpretation,container);
10655 find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject);
10656 find mayInRelationterminator_reference_FunctionalData(problem,interpretation,container,newObject);
10657 find mustExist(problem, interpretation, container);
10658 neg find mustExist(problem, interpretation, newObject);
10659}
10660pattern createObject_FAMTerminator_class(
10661 problem:LogicProblem, interpretation:PartialInterpretation,
10662 typeInterpretation:PartialComplexTypeInterpretation)
10663{
10664 find interpretation(problem,interpretation);
10665 neg find hasElementInContainment(problem,interpretation);
10666 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
10667 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class");
10668 find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject);
10669 find mayExist(problem, interpretation, newObject);
10670 neg find mustExist(problem, interpretation, newObject);
10671}
10672
10673//////////
10674// 4.2 Type refinement
10675//////////
10676pattern refineTypeTo_FunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
10677 find interpretation(problem,interpretation);
10678 PartialInterpretation.newElements(interpretation,element);
10679 find mayInstanceOfFunctionalInterface_class(problem,interpretation,element);
10680 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
10681 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
10682 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
10683 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
10684 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
10685 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
10686}
10687pattern refineTypeTo_FunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
10688 find interpretation(problem,interpretation);
10689 PartialInterpretation.newElements(interpretation,element);
10690 find mayInstanceOfFunctionalInput_class(problem,interpretation,element);
10691 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
10692 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
10693 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
10694 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
10695 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
10696 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
10697 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
10698}
10699pattern refineTypeTo_FunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
10700 find interpretation(problem,interpretation);
10701 PartialInterpretation.newElements(interpretation,element);
10702 find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element);
10703 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
10704 neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element);
10705 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
10706 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
10707 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
10708 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
10709}
10710pattern refineTypeTo_InformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
10711 find interpretation(problem,interpretation);
10712 PartialInterpretation.newElements(interpretation,element);
10713 find mayInstanceOfInformationLink_class(problem,interpretation,element);
10714 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
10715 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
10716 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
10717 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
10718 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
10719 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
10720}
10721pattern refineTypeTo_FunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
10722 find interpretation(problem,interpretation);
10723 PartialInterpretation.newElements(interpretation,element);
10724 find mayInstanceOfFunctionalOutput_class(problem,interpretation,element);
10725 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
10726 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
10727 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
10728 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
10729 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
10730 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
10731 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
10732}
10733pattern refineTypeTo_Function_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
10734 find interpretation(problem,interpretation);
10735 PartialInterpretation.newElements(interpretation,element);
10736 find mayInstanceOfFunction_class(problem,interpretation,element);
10737 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
10738 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
10739 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
10740 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
10741 neg find mustInstanceOfFunction_class(problem,interpretation,element);
10742 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
10743}
10744pattern refineTypeTo_FAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
10745 find interpretation(problem,interpretation);
10746 PartialInterpretation.newElements(interpretation,element);
10747 find mayInstanceOfFAMTerminator_class(problem,interpretation,element);
10748 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
10749 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
10750 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
10751 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
10752 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
10753 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
10754}
10755
10756//////////
10757// 4.3 Relation refinement
10758//////////
10759pattern refineRelation_model_reference_FunctionalElement(
10760 problem:LogicProblem, interpretation:PartialInterpretation,
10761 relationIterpretation:PartialRelationInterpretation,
10762 from: DefinedElement, to: DefinedElement)
10763{
10764 find interpretation(problem,interpretation);
10765 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
10766 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement");
10767 find mustExist(problem, interpretation, from);
10768 find mustExist(problem, interpretation, to);
10769 find mustInstanceOfFunctionalElement_class(problem,interpretation,from);
10770 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,to);
10771 find mayInRelationmodel_reference_FunctionalElement(problem,interpretation,from,to);
10772 neg find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,from,to);
10773}
10774pattern refineRelation_IncomingLinks_reference_FunctionalInput_and_to_reference_InformationLink(
10775 problem:LogicProblem, interpretation:PartialInterpretation,
10776 relationIterpretation:PartialRelationInterpretation, oppositeInterpretation:PartialRelationInterpretation,
10777 from: DefinedElement, to: DefinedElement)
10778{
10779 find interpretation(problem,interpretation);
10780 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
10781 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"IncomingLinks reference FunctionalInput");
10782 PartialInterpretation.partialrelationinterpretation(interpretation,oppositeInterpretation);
10783 PartialRelationInterpretation.interpretationOf.name(oppositeInterpretation,"to reference InformationLink");
10784 find mustExist(problem, interpretation, from);
10785 find mustExist(problem, interpretation, to);
10786 find mustInstanceOfFunctionalInput_class(problem,interpretation,from);
10787 find mustInstanceOfInformationLink_class(problem,interpretation,to);
10788 find mayInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,from,to);
10789 neg find mustInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,from,to);
10790}
10791pattern refineRelation_type_attribute_Function(
10792 problem:LogicProblem, interpretation:PartialInterpretation,
10793 relationIterpretation:PartialRelationInterpretation,
10794 from: DefinedElement, to: DefinedElement)
10795{
10796 find interpretation(problem,interpretation);
10797 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
10798 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function");
10799 find mustExist(problem, interpretation, from);
10800 find mustExist(problem, interpretation, to);
10801 find mustInstanceOfFunction_class(problem,interpretation,from);
10802 find mustInstanceOfFunctionType_enum(problem,interpretation,to);
10803 find mayInRelationtype_attribute_Function(problem,interpretation,from,to);
10804 neg find mustInRelationtype_attribute_Function(problem,interpretation,from,to);
10805}
10806import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage"
10807import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem"
10808import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language"
10809
10810//////////
10811// 0. Util
10812//////////
10813private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) {
10814 PartialInterpretation.problem(interpretation,problem);
10815}
10816
10817/////////////////////////
10818// 0.1 Existence
10819/////////////////////////
10820private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
10821 find interpretation(problem,interpretation);
10822 LogicProblem.elements(problem,element);
10823} or {
10824 find interpretation(problem,interpretation);
10825 PartialInterpretation.newElements(interpretation,element);
10826}
10827
10828private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
10829 find mustExist(problem,interpretation,element);
10830} or {
10831 find interpretation(problem,interpretation);
10832 neg find elementCloseWorld(element);
10833 PartialInterpretation.openWorldElements(interpretation,element);
10834}
10835
10836private pattern elementCloseWorld(element:DefinedElement) {
10837 PartialInterpretation.openWorldElements(i,element);
10838 PartialInterpretation.maxNewElements(i,0);
10839} or {
10840 Scope.targetTypeInterpretation(scope,interpretation);
10841 PartialTypeInterpratation.elements(interpretation,element);
10842 Scope.maxNewElements(scope,0);
10843}
10844
10845////////////////////////
10846// 0.2 Equivalence
10847////////////////////////
10848pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) {
10849 find mayExist(problem,interpretation,a);
10850 find mayExist(problem,interpretation,b);
10851 a == b;
10852}
10853
10854////////////////////////
10855// 0.3 Required Patterns by TypeIndexer
10856////////////////////////
10857private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) {
10858 find interpretation(problem,interpretation);
10859 LogicProblem.types(problem,type);
10860 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
10861 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
10862}
10863
10864private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) {
10865 find interpretation(problem,interpretation);
10866 LogicProblem.types(problem,type);
10867 TypeDefinition.elements(type,element);
10868} or {
10869 find interpretation(problem,interpretation);
10870 find typeInterpretation(problem,interpretation,type,typeInterpretation);
10871 PartialComplexTypeInterpretation.elements(typeInterpretation,element);
10872}
10873
10874private pattern isPrimitive(element: PrimitiveElement) {
10875 PrimitiveElement(element);
10876}
10877
10878//////////
10879// 1. Problem-Specific Base Indexers
10880//////////
10881// 1.1 Type Indexers
10882//////////
10883// 1.1.1 primitive Type Indexers
10884//////////
10885
10886//////////
10887// 1.1.2 domain-specific Type Indexers
10888//////////
10889/**
10890 * An element must be an instance of type "FunctionalElement class".
10891 */
10892private pattern mustInstanceOfFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
10893 Type.name(type,"FunctionalElement class");
10894 find directInstanceOf(problem,interpretation,element,type);
10895}
10896private pattern scopeDisallowsNewFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation) {
10897 find interpretation(problem,interpretation);
10898 PartialInterpretation.scopes(interpretation,scope);
10899 Scope.targetTypeInterpretation(scope,typeInterpretation);
10900 Scope.maxNewElements(scope,0);
10901 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
10902 Type.name(type,"FunctionalElement class");
10903}
10904
10905/**
10906 * An element may be an instance of type "FunctionalElement class".
10907 */
10908private pattern mayInstanceOfFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
10909{
10910 find interpretation(problem,interpretation);
10911 PartialInterpretation.newElements(interpretation,element);
10912 neg find mustInstanceOfFunction_class(problem,interpretation,element);
10913 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
10914 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
10915 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
10916 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
10917 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
10918 neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation);
10919 neg find isPrimitive(element);
10920} or {
10921 find interpretation(problem,interpretation);
10922 PartialInterpretation.openWorldElements(interpretation,element);
10923 neg find mustInstanceOfFunction_class(problem,interpretation,element);
10924 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
10925 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
10926 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
10927 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
10928 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
10929 neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation);
10930 neg find isPrimitive(element);
10931} or
10932{ find mustInstanceOfFunctionalElement_class(problem,interpretation,element); }
10933/**
10934 * An element must be an instance of type "FunctionalArchitectureModel class".
10935 */
10936private pattern mustInstanceOfFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
10937 Type.name(type,"FunctionalArchitectureModel class");
10938 find directInstanceOf(problem,interpretation,element,type);
10939}
10940private pattern scopeDisallowsNewFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation) {
10941 find interpretation(problem,interpretation);
10942 PartialInterpretation.scopes(interpretation,scope);
10943 Scope.targetTypeInterpretation(scope,typeInterpretation);
10944 Scope.maxNewElements(scope,0);
10945 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
10946 Type.name(type,"FunctionalArchitectureModel class");
10947}
10948
10949/**
10950 * An element may be an instance of type "FunctionalArchitectureModel class".
10951 */
10952private pattern mayInstanceOfFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
10953{
10954 find interpretation(problem,interpretation);
10955 PartialInterpretation.newElements(interpretation,element);
10956 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
10957 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
10958 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
10959 neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element);
10960 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
10961 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
10962 neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation);
10963 neg find isPrimitive(element);
10964} or {
10965 find interpretation(problem,interpretation);
10966 PartialInterpretation.openWorldElements(interpretation,element);
10967 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
10968 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
10969 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
10970 neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element);
10971 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
10972 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
10973 neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation);
10974 neg find isPrimitive(element);
10975} or
10976{ find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); }
10977/**
10978 * An element must be an instance of type "Function class".
10979 */
10980private pattern mustInstanceOfFunction_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
10981 Type.name(type,"Function class");
10982 find directInstanceOf(problem,interpretation,element,type);
10983}
10984private pattern scopeDisallowsNewFunction_class(problem:LogicProblem, interpretation:PartialInterpretation) {
10985 find interpretation(problem,interpretation);
10986 PartialInterpretation.scopes(interpretation,scope);
10987 Scope.targetTypeInterpretation(scope,typeInterpretation);
10988 Scope.maxNewElements(scope,0);
10989 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
10990 Type.name(type,"Function class");
10991}
10992
10993/**
10994 * An element may be an instance of type "Function class".
10995 */
10996private pattern mayInstanceOfFunction_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
10997{
10998 find interpretation(problem,interpretation);
10999 PartialInterpretation.newElements(interpretation,element);
11000 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
11001 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
11002 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
11003 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
11004 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
11005 neg find scopeDisallowsNewFunction_class(problem, interpretation);
11006 neg find isPrimitive(element);
11007} or {
11008 find interpretation(problem,interpretation);
11009 PartialInterpretation.openWorldElements(interpretation,element);
11010 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
11011 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
11012 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
11013 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
11014 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
11015 neg find scopeDisallowsNewFunction_class(problem, interpretation);
11016 neg find isPrimitive(element);
11017} or
11018{ find mustInstanceOfFunction_class(problem,interpretation,element); }
11019/**
11020 * An element must be an instance of type "FAMTerminator class".
11021 */
11022private pattern mustInstanceOfFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
11023 Type.name(type,"FAMTerminator class");
11024 find directInstanceOf(problem,interpretation,element,type);
11025}
11026private pattern scopeDisallowsNewFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation) {
11027 find interpretation(problem,interpretation);
11028 PartialInterpretation.scopes(interpretation,scope);
11029 Scope.targetTypeInterpretation(scope,typeInterpretation);
11030 Scope.maxNewElements(scope,0);
11031 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
11032 Type.name(type,"FAMTerminator class");
11033}
11034
11035/**
11036 * An element may be an instance of type "FAMTerminator class".
11037 */
11038private pattern mayInstanceOfFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
11039{
11040 find interpretation(problem,interpretation);
11041 PartialInterpretation.newElements(interpretation,element);
11042 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
11043 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
11044 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
11045 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
11046 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
11047 neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation);
11048 neg find isPrimitive(element);
11049} or {
11050 find interpretation(problem,interpretation);
11051 PartialInterpretation.openWorldElements(interpretation,element);
11052 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
11053 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
11054 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
11055 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
11056 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
11057 neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation);
11058 neg find isPrimitive(element);
11059} or
11060{ find mustInstanceOfFAMTerminator_class(problem,interpretation,element); }
11061/**
11062 * An element must be an instance of type "InformationLink class".
11063 */
11064private pattern mustInstanceOfInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
11065 Type.name(type,"InformationLink class");
11066 find directInstanceOf(problem,interpretation,element,type);
11067}
11068private pattern scopeDisallowsNewInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation) {
11069 find interpretation(problem,interpretation);
11070 PartialInterpretation.scopes(interpretation,scope);
11071 Scope.targetTypeInterpretation(scope,typeInterpretation);
11072 Scope.maxNewElements(scope,0);
11073 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
11074 Type.name(type,"InformationLink class");
11075}
11076
11077/**
11078 * An element may be an instance of type "InformationLink class".
11079 */
11080private pattern mayInstanceOfInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
11081{
11082 find interpretation(problem,interpretation);
11083 PartialInterpretation.newElements(interpretation,element);
11084 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
11085 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
11086 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
11087 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
11088 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
11089 neg find scopeDisallowsNewInformationLink_class(problem, interpretation);
11090 neg find isPrimitive(element);
11091} or {
11092 find interpretation(problem,interpretation);
11093 PartialInterpretation.openWorldElements(interpretation,element);
11094 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
11095 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
11096 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
11097 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
11098 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
11099 neg find scopeDisallowsNewInformationLink_class(problem, interpretation);
11100 neg find isPrimitive(element);
11101} or
11102{ find mustInstanceOfInformationLink_class(problem,interpretation,element); }
11103/**
11104 * An element must be an instance of type "FunctionalInterface class".
11105 */
11106private pattern mustInstanceOfFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
11107 Type.name(type,"FunctionalInterface class");
11108 find directInstanceOf(problem,interpretation,element,type);
11109}
11110private pattern scopeDisallowsNewFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation) {
11111 find interpretation(problem,interpretation);
11112 PartialInterpretation.scopes(interpretation,scope);
11113 Scope.targetTypeInterpretation(scope,typeInterpretation);
11114 Scope.maxNewElements(scope,0);
11115 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
11116 Type.name(type,"FunctionalInterface class");
11117}
11118
11119/**
11120 * An element may be an instance of type "FunctionalInterface class".
11121 */
11122private pattern mayInstanceOfFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
11123{
11124 find interpretation(problem,interpretation);
11125 PartialInterpretation.newElements(interpretation,element);
11126 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
11127 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
11128 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
11129 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
11130 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
11131 neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation);
11132 neg find isPrimitive(element);
11133} or {
11134 find interpretation(problem,interpretation);
11135 PartialInterpretation.openWorldElements(interpretation,element);
11136 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
11137 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
11138 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
11139 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
11140 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
11141 neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation);
11142 neg find isPrimitive(element);
11143} or
11144{ find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); }
11145/**
11146 * An element must be an instance of type "FunctionalInput class".
11147 */
11148private pattern mustInstanceOfFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
11149 Type.name(type,"FunctionalInput class");
11150 find directInstanceOf(problem,interpretation,element,type);
11151}
11152private pattern scopeDisallowsNewFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation) {
11153 find interpretation(problem,interpretation);
11154 PartialInterpretation.scopes(interpretation,scope);
11155 Scope.targetTypeInterpretation(scope,typeInterpretation);
11156 Scope.maxNewElements(scope,0);
11157 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
11158 Type.name(type,"FunctionalInput class");
11159}
11160
11161/**
11162 * An element may be an instance of type "FunctionalInput class".
11163 */
11164private pattern mayInstanceOfFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
11165{
11166 find interpretation(problem,interpretation);
11167 PartialInterpretation.newElements(interpretation,element);
11168 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
11169 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
11170 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
11171 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
11172 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
11173 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
11174 neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation);
11175 neg find isPrimitive(element);
11176} or {
11177 find interpretation(problem,interpretation);
11178 PartialInterpretation.openWorldElements(interpretation,element);
11179 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
11180 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
11181 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
11182 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
11183 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
11184 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
11185 neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation);
11186 neg find isPrimitive(element);
11187} or
11188{ find mustInstanceOfFunctionalInput_class(problem,interpretation,element); }
11189/**
11190 * An element must be an instance of type "FunctionalOutput class".
11191 */
11192private pattern mustInstanceOfFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
11193 Type.name(type,"FunctionalOutput class");
11194 find directInstanceOf(problem,interpretation,element,type);
11195}
11196private pattern scopeDisallowsNewFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation) {
11197 find interpretation(problem,interpretation);
11198 PartialInterpretation.scopes(interpretation,scope);
11199 Scope.targetTypeInterpretation(scope,typeInterpretation);
11200 Scope.maxNewElements(scope,0);
11201 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
11202 Type.name(type,"FunctionalOutput class");
11203}
11204
11205/**
11206 * An element may be an instance of type "FunctionalOutput class".
11207 */
11208private pattern mayInstanceOfFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
11209{
11210 find interpretation(problem,interpretation);
11211 PartialInterpretation.newElements(interpretation,element);
11212 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
11213 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
11214 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
11215 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
11216 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
11217 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
11218 neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation);
11219 neg find isPrimitive(element);
11220} or {
11221 find interpretation(problem,interpretation);
11222 PartialInterpretation.openWorldElements(interpretation,element);
11223 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
11224 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
11225 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
11226 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
11227 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
11228 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
11229 neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation);
11230 neg find isPrimitive(element);
11231} or
11232{ find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); }
11233/**
11234 * An element must be an instance of type "FunctionalData class".
11235 */
11236private pattern mustInstanceOfFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
11237 Type.name(type,"FunctionalData class");
11238 find directInstanceOf(problem,interpretation,element,type);
11239}
11240private pattern scopeDisallowsNewFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation) {
11241 find interpretation(problem,interpretation);
11242 PartialInterpretation.scopes(interpretation,scope);
11243 Scope.targetTypeInterpretation(scope,typeInterpretation);
11244 Scope.maxNewElements(scope,0);
11245 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
11246 Type.name(type,"FunctionalData class");
11247}
11248
11249/**
11250 * An element may be an instance of type "FunctionalData class".
11251 */
11252private pattern mayInstanceOfFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
11253{
11254 find interpretation(problem,interpretation);
11255 PartialInterpretation.newElements(interpretation,element);
11256 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
11257 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
11258 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
11259 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
11260 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
11261 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
11262 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
11263 neg find scopeDisallowsNewFunctionalData_class(problem, interpretation);
11264 neg find isPrimitive(element);
11265} or {
11266 find interpretation(problem,interpretation);
11267 PartialInterpretation.openWorldElements(interpretation,element);
11268 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
11269 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
11270 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
11271 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
11272 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
11273 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
11274 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
11275 neg find scopeDisallowsNewFunctionalData_class(problem, interpretation);
11276 neg find isPrimitive(element);
11277} or
11278{ find mustInstanceOfFunctionalData_class(problem,interpretation,element); }
11279/**
11280 * An element must be an instance of type "FunctionType enum".
11281 */
11282private pattern mustInstanceOfFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
11283 Type.name(type,"FunctionType enum");
11284 find directInstanceOf(problem,interpretation,element,type);
11285}
11286private pattern scopeDisallowsNewFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation) {
11287 find interpretation(problem,interpretation);
11288 PartialInterpretation.scopes(interpretation,scope);
11289 Scope.targetTypeInterpretation(scope,typeInterpretation);
11290 Scope.maxNewElements(scope,0);
11291 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
11292 Type.name(type,"FunctionType enum");
11293}
11294
11295/**
11296 * An element may be an instance of type "FunctionType enum".
11297 */
11298private pattern mayInstanceOfFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
11299{ find mustInstanceOfFunctionType_enum(problem,interpretation,element); }
11300/**
11301 * An element must be an instance of type "FunctionalArchitectureModel class DefinedPart".
11302 */
11303private pattern mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
11304 Type.name(type,"FunctionalArchitectureModel class DefinedPart");
11305 find directInstanceOf(problem,interpretation,element,type);
11306}
11307private pattern scopeDisallowsNewFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
11308 find interpretation(problem,interpretation);
11309 PartialInterpretation.scopes(interpretation,scope);
11310 Scope.targetTypeInterpretation(scope,typeInterpretation);
11311 Scope.maxNewElements(scope,0);
11312 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
11313 Type.name(type,"FunctionalArchitectureModel class DefinedPart");
11314}
11315
11316/**
11317 * An element may be an instance of type "FunctionalArchitectureModel class DefinedPart".
11318 */
11319private pattern mayInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
11320{ find mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem,interpretation,element); }
11321/**
11322 * An element must be an instance of type "FunctionalArchitectureModel class UndefinedPart".
11323 */
11324private pattern mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
11325 Type.name(type,"FunctionalArchitectureModel class UndefinedPart");
11326 find directInstanceOf(problem,interpretation,element,type);
11327}
11328private pattern scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
11329 find interpretation(problem,interpretation);
11330 PartialInterpretation.scopes(interpretation,scope);
11331 Scope.targetTypeInterpretation(scope,typeInterpretation);
11332 Scope.maxNewElements(scope,0);
11333 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
11334 Type.name(type,"FunctionalArchitectureModel class UndefinedPart");
11335}
11336
11337/**
11338 * An element may be an instance of type "FunctionalArchitectureModel class UndefinedPart".
11339 */
11340private pattern mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
11341{
11342 find interpretation(problem,interpretation);
11343 PartialInterpretation.newElements(interpretation,element);
11344 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
11345 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
11346 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
11347 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
11348 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
11349 neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation);
11350 neg find isPrimitive(element);
11351} or {
11352 find interpretation(problem,interpretation);
11353 PartialInterpretation.openWorldElements(interpretation,element);
11354 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
11355 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
11356 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
11357 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
11358 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
11359 neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation);
11360 neg find isPrimitive(element);
11361} or
11362{ find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); }
11363
11364//////////
11365// 1.2 Relation Declaration Indexers
11366//////////
11367/**
11368 * Matcher for detecting tuples t where []interface reference FunctionalElement(source,target)
11369 */
11370private pattern mustInRelationinterface_reference_FunctionalElement(
11371 problem:LogicProblem, interpretation:PartialInterpretation,
11372 source: DefinedElement, target:DefinedElement)
11373{
11374 find interpretation(problem,interpretation);
11375 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
11376 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface reference FunctionalElement");
11377 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
11378 BinaryElementRelationLink.param1(link,source);
11379 BinaryElementRelationLink.param2(link,target);
11380}
11381/**
11382 * Matcher for detecting tuples t where <>interface reference FunctionalElement(source,target)
11383 */
11384private pattern mayInRelationinterface_reference_FunctionalElement(
11385 problem:LogicProblem, interpretation:PartialInterpretation,
11386 source: DefinedElement, target:DefinedElement)
11387{
11388 find interpretation(problem,interpretation);
11389 // The two endpoint of the link have to exist
11390 find mayExist(problem, interpretation, source);
11391 find mayExist(problem, interpretation, target);
11392 // Type consistency
11393 find mayInstanceOfFunctionalElement_class(problem,interpretation,source);
11394 find mayInstanceOfFunctionalInterface_class(problem,interpretation,target);
11395 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
11396 // the upper bound of the multiplicity should be considered.
11397 numberOfExistingReferences == count find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,_);
11398 check(numberOfExistingReferences < 1);
11399 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
11400 // the upper bound of the opposite reference multiplicity should be considered.
11401 numberOfExistingOppositeReferences == count find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,target,_);
11402 check(numberOfExistingOppositeReferences < 1);
11403 // The reference is containment, then a new reference cannot be create if:
11404 // 1. Multiple parents
11405 neg find mustContains4(problem,interpretation,_,target);
11406 // 2. Circle in the containment hierarchy
11407 neg find mustTransitiveContains(source,target);
11408} or {
11409 find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,target);
11410}
11411/**
11412 * Matcher for detecting tuples t where []model reference FunctionalElement(source,target)
11413 */
11414private pattern mustInRelationmodel_reference_FunctionalElement(
11415 problem:LogicProblem, interpretation:PartialInterpretation,
11416 source: DefinedElement, target:DefinedElement)
11417{
11418 find interpretation(problem,interpretation);
11419 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
11420 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement");
11421 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
11422 BinaryElementRelationLink.param1(link,source);
11423 BinaryElementRelationLink.param2(link,target);
11424}
11425/**
11426 * Matcher for detecting tuples t where <>model reference FunctionalElement(source,target)
11427 */
11428private pattern mayInRelationmodel_reference_FunctionalElement(
11429 problem:LogicProblem, interpretation:PartialInterpretation,
11430 source: DefinedElement, target:DefinedElement)
11431{
11432 find interpretation(problem,interpretation);
11433 // The two endpoint of the link have to exist
11434 find mayExist(problem, interpretation, source);
11435 find mayExist(problem, interpretation, target);
11436 // Type consistency
11437 find mayInstanceOfFunctionalElement_class(problem,interpretation,source);
11438 find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,target);
11439 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
11440 // the upper bound of the multiplicity should be considered.
11441 numberOfExistingReferences == count find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,source,_);
11442 check(numberOfExistingReferences < 1);
11443} or {
11444 find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,source,target);
11445}
11446/**
11447 * Matcher for detecting tuples t where []parent reference FunctionalElement(source,target)
11448 */
11449private pattern mustInRelationparent_reference_FunctionalElement(
11450 problem:LogicProblem, interpretation:PartialInterpretation,
11451 source: DefinedElement, target:DefinedElement)
11452{
11453 find interpretation(problem,interpretation);
11454 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
11455 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"parent reference FunctionalElement");
11456 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
11457 BinaryElementRelationLink.param1(link,source);
11458 BinaryElementRelationLink.param2(link,target);
11459}
11460/**
11461 * Matcher for detecting tuples t where <>parent reference FunctionalElement(source,target)
11462 */
11463private pattern mayInRelationparent_reference_FunctionalElement(
11464 problem:LogicProblem, interpretation:PartialInterpretation,
11465 source: DefinedElement, target:DefinedElement)
11466{
11467 find interpretation(problem,interpretation);
11468 // The two endpoint of the link have to exist
11469 find mayExist(problem, interpretation, source);
11470 find mayExist(problem, interpretation, target);
11471 // Type consistency
11472 find mayInstanceOfFunctionalElement_class(problem,interpretation,source);
11473 find mayInstanceOfFunction_class(problem,interpretation,target);
11474 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
11475 // the upper bound of the multiplicity should be considered.
11476 numberOfExistingReferences == count find mustInRelationparent_reference_FunctionalElement(problem,interpretation,source,_);
11477 check(numberOfExistingReferences < 1);
11478 // The eOpposite of the reference is containment, then a referene cannot be created if
11479 // 1. Multiple parents
11480 neg find mustContains4(problem,interpretation,source,_);
11481 // 2. Circle in the containment hierarchy
11482 neg find mustTransitiveContains(source,target);
11483} or {
11484 find mustInRelationparent_reference_FunctionalElement(problem,interpretation,source,target);
11485}
11486/**
11487 * Matcher for detecting tuples t where []rootElements reference FunctionalArchitectureModel(source,target)
11488 */
11489private pattern mustInRelationrootElements_reference_FunctionalArchitectureModel(
11490 problem:LogicProblem, interpretation:PartialInterpretation,
11491 source: DefinedElement, target:DefinedElement)
11492{
11493 find interpretation(problem,interpretation);
11494 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
11495 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"rootElements reference FunctionalArchitectureModel");
11496 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
11497 BinaryElementRelationLink.param1(link,source);
11498 BinaryElementRelationLink.param2(link,target);
11499}
11500/**
11501 * Matcher for detecting tuples t where <>rootElements reference FunctionalArchitectureModel(source,target)
11502 */
11503private pattern mayInRelationrootElements_reference_FunctionalArchitectureModel(
11504 problem:LogicProblem, interpretation:PartialInterpretation,
11505 source: DefinedElement, target:DefinedElement)
11506{
11507 find interpretation(problem,interpretation);
11508 // The two endpoint of the link have to exist
11509 find mayExist(problem, interpretation, source);
11510 find mayExist(problem, interpretation, target);
11511 // Type consistency
11512 find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,source);
11513 find mayInstanceOfFunctionalElement_class(problem,interpretation,target);
11514 // The reference is containment, then a new reference cannot be create if:
11515 // 1. Multiple parents
11516 neg find mustContains4(problem,interpretation,_,target);
11517 // 2. Circle in the containment hierarchy
11518 neg find mustTransitiveContains(source,target);
11519} or {
11520 find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,source,target);
11521}
11522/**
11523 * Matcher for detecting tuples t where []subElements reference Function(source,target)
11524 */
11525private pattern mustInRelationsubElements_reference_Function(
11526 problem:LogicProblem, interpretation:PartialInterpretation,
11527 source: DefinedElement, target:DefinedElement)
11528{
11529 find interpretation(problem,interpretation);
11530 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
11531 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"subElements reference Function");
11532 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
11533 BinaryElementRelationLink.param1(link,source);
11534 BinaryElementRelationLink.param2(link,target);
11535}
11536/**
11537 * Matcher for detecting tuples t where <>subElements reference Function(source,target)
11538 */
11539private pattern mayInRelationsubElements_reference_Function(
11540 problem:LogicProblem, interpretation:PartialInterpretation,
11541 source: DefinedElement, target:DefinedElement)
11542{
11543 find interpretation(problem,interpretation);
11544 // The two endpoint of the link have to exist
11545 find mayExist(problem, interpretation, source);
11546 find mayExist(problem, interpretation, target);
11547 // Type consistency
11548 find mayInstanceOfFunction_class(problem,interpretation,source);
11549 find mayInstanceOfFunctionalElement_class(problem,interpretation,target);
11550 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
11551 // the upper bound of the opposite reference multiplicity should be considered.
11552 numberOfExistingOppositeReferences == count find mustInRelationparent_reference_FunctionalElement(problem,interpretation,target,_);
11553 check(numberOfExistingOppositeReferences < 1);
11554 // The reference is containment, then a new reference cannot be create if:
11555 // 1. Multiple parents
11556 neg find mustContains4(problem,interpretation,_,target);
11557 // 2. Circle in the containment hierarchy
11558 neg find mustTransitiveContains(source,target);
11559} or {
11560 find mustInRelationsubElements_reference_Function(problem,interpretation,source,target);
11561}
11562/**
11563 * Matcher for detecting tuples t where []data reference FAMTerminator(source,target)
11564 */
11565private pattern mustInRelationdata_reference_FAMTerminator(
11566 problem:LogicProblem, interpretation:PartialInterpretation,
11567 source: DefinedElement, target:DefinedElement)
11568{
11569 find interpretation(problem,interpretation);
11570 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
11571 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"data reference FAMTerminator");
11572 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
11573 BinaryElementRelationLink.param1(link,source);
11574 BinaryElementRelationLink.param2(link,target);
11575}
11576/**
11577 * Matcher for detecting tuples t where <>data reference FAMTerminator(source,target)
11578 */
11579private pattern mayInRelationdata_reference_FAMTerminator(
11580 problem:LogicProblem, interpretation:PartialInterpretation,
11581 source: DefinedElement, target:DefinedElement)
11582{
11583 find interpretation(problem,interpretation);
11584 // The two endpoint of the link have to exist
11585 find mayExist(problem, interpretation, source);
11586 find mayExist(problem, interpretation, target);
11587 // Type consistency
11588 find mayInstanceOfFAMTerminator_class(problem,interpretation,source);
11589 find mayInstanceOfFunctionalData_class(problem,interpretation,target);
11590 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
11591 // the upper bound of the multiplicity should be considered.
11592 numberOfExistingReferences == count find mustInRelationdata_reference_FAMTerminator(problem,interpretation,source,_);
11593 check(numberOfExistingReferences < 1);
11594 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
11595 // the upper bound of the opposite reference multiplicity should be considered.
11596 numberOfExistingOppositeReferences == count find mustInRelationterminator_reference_FunctionalData(problem,interpretation,target,_);
11597 check(numberOfExistingOppositeReferences < 1);
11598 // The eOpposite of the reference is containment, then a referene cannot be created if
11599 // 1. Multiple parents
11600 neg find mustContains4(problem,interpretation,source,_);
11601 // 2. Circle in the containment hierarchy
11602 neg find mustTransitiveContains(source,target);
11603} or {
11604 find mustInRelationdata_reference_FAMTerminator(problem,interpretation,source,target);
11605}
11606/**
11607 * Matcher for detecting tuples t where []from reference InformationLink(source,target)
11608 */
11609private pattern mustInRelationfrom_reference_InformationLink(
11610 problem:LogicProblem, interpretation:PartialInterpretation,
11611 source: DefinedElement, target:DefinedElement)
11612{
11613 find interpretation(problem,interpretation);
11614 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
11615 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"from reference InformationLink");
11616 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
11617 BinaryElementRelationLink.param1(link,source);
11618 BinaryElementRelationLink.param2(link,target);
11619}
11620/**
11621 * Matcher for detecting tuples t where <>from reference InformationLink(source,target)
11622 */
11623private pattern mayInRelationfrom_reference_InformationLink(
11624 problem:LogicProblem, interpretation:PartialInterpretation,
11625 source: DefinedElement, target:DefinedElement)
11626{
11627 find interpretation(problem,interpretation);
11628 // The two endpoint of the link have to exist
11629 find mayExist(problem, interpretation, source);
11630 find mayExist(problem, interpretation, target);
11631 // Type consistency
11632 find mayInstanceOfInformationLink_class(problem,interpretation,source);
11633 find mayInstanceOfFunctionalOutput_class(problem,interpretation,target);
11634 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
11635 // the upper bound of the multiplicity should be considered.
11636 numberOfExistingReferences == count find mustInRelationfrom_reference_InformationLink(problem,interpretation,source,_);
11637 check(numberOfExistingReferences < 1);
11638 // The eOpposite of the reference is containment, then a referene cannot be created if
11639 // 1. Multiple parents
11640 neg find mustContains4(problem,interpretation,source,_);
11641 // 2. Circle in the containment hierarchy
11642 neg find mustTransitiveContains(source,target);
11643} or {
11644 find mustInRelationfrom_reference_InformationLink(problem,interpretation,source,target);
11645}
11646/**
11647 * Matcher for detecting tuples t where []to reference InformationLink(source,target)
11648 */
11649private pattern mustInRelationto_reference_InformationLink(
11650 problem:LogicProblem, interpretation:PartialInterpretation,
11651 source: DefinedElement, target:DefinedElement)
11652{
11653 find interpretation(problem,interpretation);
11654 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
11655 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"to reference InformationLink");
11656 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
11657 BinaryElementRelationLink.param1(link,source);
11658 BinaryElementRelationLink.param2(link,target);
11659}
11660/**
11661 * Matcher for detecting tuples t where <>to reference InformationLink(source,target)
11662 */
11663private pattern mayInRelationto_reference_InformationLink(
11664 problem:LogicProblem, interpretation:PartialInterpretation,
11665 source: DefinedElement, target:DefinedElement)
11666{
11667 find interpretation(problem,interpretation);
11668 // The two endpoint of the link have to exist
11669 find mayExist(problem, interpretation, source);
11670 find mayExist(problem, interpretation, target);
11671 // Type consistency
11672 find mayInstanceOfInformationLink_class(problem,interpretation,source);
11673 find mayInstanceOfFunctionalInput_class(problem,interpretation,target);
11674 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
11675 // the upper bound of the multiplicity should be considered.
11676 numberOfExistingReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,source,_);
11677 check(numberOfExistingReferences < 1);
11678} or {
11679 find mustInRelationto_reference_InformationLink(problem,interpretation,source,target);
11680}
11681/**
11682 * Matcher for detecting tuples t where []data reference FunctionalInterface(source,target)
11683 */
11684private pattern mustInRelationdata_reference_FunctionalInterface(
11685 problem:LogicProblem, interpretation:PartialInterpretation,
11686 source: DefinedElement, target:DefinedElement)
11687{
11688 find interpretation(problem,interpretation);
11689 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
11690 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"data reference FunctionalInterface");
11691 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
11692 BinaryElementRelationLink.param1(link,source);
11693 BinaryElementRelationLink.param2(link,target);
11694}
11695/**
11696 * Matcher for detecting tuples t where <>data reference FunctionalInterface(source,target)
11697 */
11698private pattern mayInRelationdata_reference_FunctionalInterface(
11699 problem:LogicProblem, interpretation:PartialInterpretation,
11700 source: DefinedElement, target:DefinedElement)
11701{
11702 find interpretation(problem,interpretation);
11703 // The two endpoint of the link have to exist
11704 find mayExist(problem, interpretation, source);
11705 find mayExist(problem, interpretation, target);
11706 // Type consistency
11707 find mayInstanceOfFunctionalInterface_class(problem,interpretation,source);
11708 find mayInstanceOfFunctionalData_class(problem,interpretation,target);
11709 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
11710 // the upper bound of the opposite reference multiplicity should be considered.
11711 numberOfExistingOppositeReferences == count find mustInRelationinterface_reference_FunctionalData(problem,interpretation,target,_);
11712 check(numberOfExistingOppositeReferences < 1);
11713 // The reference is containment, then a new reference cannot be create if:
11714 // 1. Multiple parents
11715 neg find mustContains4(problem,interpretation,_,target);
11716 // 2. Circle in the containment hierarchy
11717 neg find mustTransitiveContains(source,target);
11718} or {
11719 find mustInRelationdata_reference_FunctionalInterface(problem,interpretation,source,target);
11720}
11721/**
11722 * Matcher for detecting tuples t where []element reference FunctionalInterface(source,target)
11723 */
11724private pattern mustInRelationelement_reference_FunctionalInterface(
11725 problem:LogicProblem, interpretation:PartialInterpretation,
11726 source: DefinedElement, target:DefinedElement)
11727{
11728 find interpretation(problem,interpretation);
11729 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
11730 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"element reference FunctionalInterface");
11731 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
11732 BinaryElementRelationLink.param1(link,source);
11733 BinaryElementRelationLink.param2(link,target);
11734}
11735/**
11736 * Matcher for detecting tuples t where <>element reference FunctionalInterface(source,target)
11737 */
11738private pattern mayInRelationelement_reference_FunctionalInterface(
11739 problem:LogicProblem, interpretation:PartialInterpretation,
11740 source: DefinedElement, target:DefinedElement)
11741{
11742 find interpretation(problem,interpretation);
11743 // The two endpoint of the link have to exist
11744 find mayExist(problem, interpretation, source);
11745 find mayExist(problem, interpretation, target);
11746 // Type consistency
11747 find mayInstanceOfFunctionalInterface_class(problem,interpretation,source);
11748 find mayInstanceOfFunctionalElement_class(problem,interpretation,target);
11749 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
11750 // the upper bound of the multiplicity should be considered.
11751 numberOfExistingReferences == count find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,source,_);
11752 check(numberOfExistingReferences < 1);
11753 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
11754 // the upper bound of the opposite reference multiplicity should be considered.
11755 numberOfExistingOppositeReferences == count find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,target,_);
11756 check(numberOfExistingOppositeReferences < 1);
11757 // The eOpposite of the reference is containment, then a referene cannot be created if
11758 // 1. Multiple parents
11759 neg find mustContains4(problem,interpretation,source,_);
11760 // 2. Circle in the containment hierarchy
11761 neg find mustTransitiveContains(source,target);
11762} or {
11763 find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,source,target);
11764}
11765/**
11766 * Matcher for detecting tuples t where []IncomingLinks reference FunctionalInput(source,target)
11767 */
11768private pattern mustInRelationIncomingLinks_reference_FunctionalInput(
11769 problem:LogicProblem, interpretation:PartialInterpretation,
11770 source: DefinedElement, target:DefinedElement)
11771{
11772 find interpretation(problem,interpretation);
11773 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
11774 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"IncomingLinks reference FunctionalInput");
11775 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
11776 BinaryElementRelationLink.param1(link,source);
11777 BinaryElementRelationLink.param2(link,target);
11778}
11779/**
11780 * Matcher for detecting tuples t where <>IncomingLinks reference FunctionalInput(source,target)
11781 */
11782private pattern mayInRelationIncomingLinks_reference_FunctionalInput(
11783 problem:LogicProblem, interpretation:PartialInterpretation,
11784 source: DefinedElement, target:DefinedElement)
11785{
11786 find interpretation(problem,interpretation);
11787 // The two endpoint of the link have to exist
11788 find mayExist(problem, interpretation, source);
11789 find mayExist(problem, interpretation, target);
11790 // Type consistency
11791 find mayInstanceOfFunctionalInput_class(problem,interpretation,source);
11792 find mayInstanceOfInformationLink_class(problem,interpretation,target);
11793 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
11794 // the upper bound of the opposite reference multiplicity should be considered.
11795 numberOfExistingOppositeReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,target,_);
11796 check(numberOfExistingOppositeReferences < 1);
11797} or {
11798 find mustInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,source,target);
11799}
11800/**
11801 * Matcher for detecting tuples t where []outgoingLinks reference FunctionalOutput(source,target)
11802 */
11803private pattern mustInRelationoutgoingLinks_reference_FunctionalOutput(
11804 problem:LogicProblem, interpretation:PartialInterpretation,
11805 source: DefinedElement, target:DefinedElement)
11806{
11807 find interpretation(problem,interpretation);
11808 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
11809 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"outgoingLinks reference FunctionalOutput");
11810 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
11811 BinaryElementRelationLink.param1(link,source);
11812 BinaryElementRelationLink.param2(link,target);
11813}
11814/**
11815 * Matcher for detecting tuples t where <>outgoingLinks reference FunctionalOutput(source,target)
11816 */
11817private pattern mayInRelationoutgoingLinks_reference_FunctionalOutput(
11818 problem:LogicProblem, interpretation:PartialInterpretation,
11819 source: DefinedElement, target:DefinedElement)
11820{
11821 find interpretation(problem,interpretation);
11822 // The two endpoint of the link have to exist
11823 find mayExist(problem, interpretation, source);
11824 find mayExist(problem, interpretation, target);
11825 // Type consistency
11826 find mayInstanceOfFunctionalOutput_class(problem,interpretation,source);
11827 find mayInstanceOfInformationLink_class(problem,interpretation,target);
11828 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
11829 // the upper bound of the opposite reference multiplicity should be considered.
11830 numberOfExistingOppositeReferences == count find mustInRelationfrom_reference_InformationLink(problem,interpretation,target,_);
11831 check(numberOfExistingOppositeReferences < 1);
11832 // The reference is containment, then a new reference cannot be create if:
11833 // 1. Multiple parents
11834 neg find mustContains4(problem,interpretation,_,target);
11835 // 2. Circle in the containment hierarchy
11836 neg find mustTransitiveContains(source,target);
11837} or {
11838 find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,source,target);
11839}
11840/**
11841 * Matcher for detecting tuples t where []terminator reference FunctionalData(source,target)
11842 */
11843private pattern mustInRelationterminator_reference_FunctionalData(
11844 problem:LogicProblem, interpretation:PartialInterpretation,
11845 source: DefinedElement, target:DefinedElement)
11846{
11847 find interpretation(problem,interpretation);
11848 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
11849 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"terminator reference FunctionalData");
11850 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
11851 BinaryElementRelationLink.param1(link,source);
11852 BinaryElementRelationLink.param2(link,target);
11853}
11854/**
11855 * Matcher for detecting tuples t where <>terminator reference FunctionalData(source,target)
11856 */
11857private pattern mayInRelationterminator_reference_FunctionalData(
11858 problem:LogicProblem, interpretation:PartialInterpretation,
11859 source: DefinedElement, target:DefinedElement)
11860{
11861 find interpretation(problem,interpretation);
11862 // The two endpoint of the link have to exist
11863 find mayExist(problem, interpretation, source);
11864 find mayExist(problem, interpretation, target);
11865 // Type consistency
11866 find mayInstanceOfFunctionalData_class(problem,interpretation,source);
11867 find mayInstanceOfFAMTerminator_class(problem,interpretation,target);
11868 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
11869 // the upper bound of the multiplicity should be considered.
11870 numberOfExistingReferences == count find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,_);
11871 check(numberOfExistingReferences < 1);
11872 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
11873 // the upper bound of the opposite reference multiplicity should be considered.
11874 numberOfExistingOppositeReferences == count find mustInRelationdata_reference_FAMTerminator(problem,interpretation,target,_);
11875 check(numberOfExistingOppositeReferences < 1);
11876 // The reference is containment, then a new reference cannot be create if:
11877 // 1. Multiple parents
11878 neg find mustContains4(problem,interpretation,_,target);
11879 // 2. Circle in the containment hierarchy
11880 neg find mustTransitiveContains(source,target);
11881} or {
11882 find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,target);
11883}
11884/**
11885 * Matcher for detecting tuples t where []interface reference FunctionalData(source,target)
11886 */
11887private pattern mustInRelationinterface_reference_FunctionalData(
11888 problem:LogicProblem, interpretation:PartialInterpretation,
11889 source: DefinedElement, target:DefinedElement)
11890{
11891 find interpretation(problem,interpretation);
11892 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
11893 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface reference FunctionalData");
11894 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
11895 BinaryElementRelationLink.param1(link,source);
11896 BinaryElementRelationLink.param2(link,target);
11897}
11898/**
11899 * Matcher for detecting tuples t where <>interface reference FunctionalData(source,target)
11900 */
11901private pattern mayInRelationinterface_reference_FunctionalData(
11902 problem:LogicProblem, interpretation:PartialInterpretation,
11903 source: DefinedElement, target:DefinedElement)
11904{
11905 find interpretation(problem,interpretation);
11906 // The two endpoint of the link have to exist
11907 find mayExist(problem, interpretation, source);
11908 find mayExist(problem, interpretation, target);
11909 // Type consistency
11910 find mayInstanceOfFunctionalData_class(problem,interpretation,source);
11911 find mayInstanceOfFunctionalInterface_class(problem,interpretation,target);
11912 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
11913 // the upper bound of the multiplicity should be considered.
11914 numberOfExistingReferences == count find mustInRelationinterface_reference_FunctionalData(problem,interpretation,source,_);
11915 check(numberOfExistingReferences < 1);
11916 // The eOpposite of the reference is containment, then a referene cannot be created if
11917 // 1. Multiple parents
11918 neg find mustContains4(problem,interpretation,source,_);
11919 // 2. Circle in the containment hierarchy
11920 neg find mustTransitiveContains(source,target);
11921} or {
11922 find mustInRelationinterface_reference_FunctionalData(problem,interpretation,source,target);
11923}
11924/**
11925 * Matcher for detecting tuples t where []type attribute Function(source,target)
11926 */
11927private pattern mustInRelationtype_attribute_Function(
11928 problem:LogicProblem, interpretation:PartialInterpretation,
11929 source: DefinedElement, target:DefinedElement)
11930{
11931 find interpretation(problem,interpretation);
11932 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
11933 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function");
11934 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
11935 BinaryElementRelationLink.param1(link,source);
11936 BinaryElementRelationLink.param2(link,target);
11937}
11938/**
11939 * Matcher for detecting tuples t where <>type attribute Function(source,target)
11940 */
11941private pattern mayInRelationtype_attribute_Function(
11942 problem:LogicProblem, interpretation:PartialInterpretation,
11943 source: DefinedElement, target:DefinedElement)
11944{
11945 find interpretation(problem,interpretation);
11946 // The two endpoint of the link have to exist
11947 find mayExist(problem, interpretation, source);
11948 find mayExist(problem, interpretation, target);
11949 // Type consistency
11950 find mayInstanceOfFunction_class(problem,interpretation,source);
11951 find mayInstanceOfFunctionType_enum(problem,interpretation,target);
11952 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
11953 // the upper bound of the multiplicity should be considered.
11954 numberOfExistingReferences == count find mustInRelationtype_attribute_Function(problem,interpretation,source,_);
11955 check(numberOfExistingReferences < 1);
11956} or {
11957 find mustInRelationtype_attribute_Function(problem,interpretation,source,target);
11958}
11959
11960//////////
11961// 1.3 Relation Definition Indexers
11962//////////
11963
11964//////////
11965// 1.4 Containment Indexer
11966//////////
11967private pattern mustContains2(source: DefinedElement, target: DefinedElement) {
11968 find mustContains4(_,_,source,target);
11969}
11970
11971private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation,
11972 source: DefinedElement, target: DefinedElement)
11973 { find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,target); }or
11974
11975 { find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,source,target); }or
11976
11977 { find mustInRelationsubElements_reference_Function(problem,interpretation,source,target); }or
11978
11979 { find mustInRelationdata_reference_FunctionalInterface(problem,interpretation,source,target); }or
11980
11981 { find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,source,target); }or
11982
11983 { find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,target); }
11984
11985private pattern mustTransitiveContains(source,target) {
11986 find mustContains2+(source,target);
11987}
11988
11989//////////
11990// 2. Invalidation Indexers
11991//////////
11992// 2.1 Invalidated by WF Queries
11993//////////
11994
11995//////////
11996// 3. Unfinishedness Indexers
11997//////////
11998// 3.1 Unfinishedness Measured by Multiplicity
11999//////////
12000pattern unfinishedLowerMultiplicity_model_reference_FunctionalElement(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) {
12001 find interpretation(problem,interpretation);
12002 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
12003 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement");
12004 find mustInstanceOfFunctionalElement_class(problem,interpretation,object);
12005 numberOfExistingReferences == count find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,object,_);
12006 check(numberOfExistingReferences < 1);
12007 missingMultiplicity == eval(1-numberOfExistingReferences);
12008}
12009pattern unfinishedLowerMultiplicity_to_reference_InformationLink(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) {
12010 find interpretation(problem,interpretation);
12011 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
12012 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"to reference InformationLink");
12013 find mustInstanceOfInformationLink_class(problem,interpretation,object);
12014 numberOfExistingReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,object,_);
12015 check(numberOfExistingReferences < 1);
12016 missingMultiplicity == eval(1-numberOfExistingReferences);
12017}
12018pattern unfinishedLowerMultiplicity_type_attribute_Function(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) {
12019 find interpretation(problem,interpretation);
12020 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
12021 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function");
12022 find mustInstanceOfFunction_class(problem,interpretation,object);
12023 numberOfExistingReferences == count find mustInRelationtype_attribute_Function(problem,interpretation,object,_);
12024 check(numberOfExistingReferences < 1);
12025 missingMultiplicity == eval(1-numberOfExistingReferences);
12026}
12027
12028//////////
12029// 3.2 Unfinishedness Measured by WF Queries
12030//////////
12031
12032//////////
12033// 4. Refinement Indexers
12034//////////
12035// 4.1 Object constructors
12036//////////
12037private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation)
12038{
12039 find interpretation(problem,interpretation);
12040 find mustInstanceOfFunctionalOutput_class(problem,interpretation,root);
12041 find mustExist(problem, interpretation, root);
12042}or{
12043 find interpretation(problem,interpretation);
12044 find mustInstanceOfFunctionalElement_class(problem,interpretation,root);
12045 find mustExist(problem, interpretation, root);
12046}or{
12047 find interpretation(problem,interpretation);
12048 find mustInstanceOfFunctionalInterface_class(problem,interpretation,root);
12049 find mustExist(problem, interpretation, root);
12050}or{
12051 find interpretation(problem,interpretation);
12052 find mustInstanceOfFunctionalData_class(problem,interpretation,root);
12053 find mustExist(problem, interpretation, root);
12054}or{
12055 find interpretation(problem,interpretation);
12056 find mustInstanceOfFunctionalInput_class(problem,interpretation,root);
12057 find mustExist(problem, interpretation, root);
12058}or{
12059 find interpretation(problem,interpretation);
12060 find mustInstanceOfInformationLink_class(problem,interpretation,root);
12061 find mustExist(problem, interpretation, root);
12062}or{
12063 find interpretation(problem,interpretation);
12064 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,root);
12065 find mustExist(problem, interpretation, root);
12066}or{
12067 find interpretation(problem,interpretation);
12068 find mustInstanceOfFAMTerminator_class(problem,interpretation,root);
12069 find mustExist(problem, interpretation, root);
12070}or{
12071 find interpretation(problem,interpretation);
12072 find mustInstanceOfFunction_class(problem,interpretation,root);
12073 find mustExist(problem, interpretation, root);
12074}or{
12075 find interpretation(problem,interpretation);
12076 find mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem,interpretation,root);
12077 find mustExist(problem, interpretation, root);
12078}or{
12079 find interpretation(problem,interpretation);
12080 find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,root);
12081 find mustExist(problem, interpretation, root);
12082}
12083pattern createObject_Function_class_by_rootElements_reference_FunctionalArchitectureModel(
12084 problem:LogicProblem, interpretation:PartialInterpretation,
12085 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
12086 container:DefinedElement)
12087{
12088 find interpretation(problem,interpretation);
12089 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
12090 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class");
12091 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
12092 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"rootElements reference FunctionalArchitectureModel");
12093 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,container);
12094 find mayInstanceOfFunction_class(problem,interpretation,newObject);
12095 find mayInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,container,newObject);
12096 find mustExist(problem, interpretation, container);
12097 neg find mustExist(problem, interpretation, newObject);
12098}
12099pattern createObject_Function_class_by_subElements_reference_Function_with_parent_reference_FunctionalElement(
12100 problem:LogicProblem, interpretation:PartialInterpretation,
12101 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
12102 container:DefinedElement)
12103{
12104 find interpretation(problem,interpretation);
12105 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
12106 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class");
12107 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
12108 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"subElements reference Function");
12109 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
12110 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FunctionalElement");
12111 find mustInstanceOfFunction_class(problem,interpretation,container);
12112 find mayInstanceOfFunction_class(problem,interpretation,newObject);
12113 find mayInRelationsubElements_reference_Function(problem,interpretation,container,newObject);
12114 find mustExist(problem, interpretation, container);
12115 neg find mustExist(problem, interpretation, newObject);
12116}
12117pattern createObject_Function_class(
12118 problem:LogicProblem, interpretation:PartialInterpretation,
12119 typeInterpretation:PartialComplexTypeInterpretation)
12120{
12121 find interpretation(problem,interpretation);
12122 neg find hasElementInContainment(problem,interpretation);
12123 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
12124 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class");
12125 find mayInstanceOfFunction_class(problem,interpretation,newObject);
12126 find mayExist(problem, interpretation, newObject);
12127 neg find mustExist(problem, interpretation, newObject);
12128}
12129pattern createObject_InformationLink_class_by_outgoingLinks_reference_FunctionalOutput_with_from_reference_InformationLink(
12130 problem:LogicProblem, interpretation:PartialInterpretation,
12131 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
12132 container:DefinedElement)
12133{
12134 find interpretation(problem,interpretation);
12135 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
12136 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class");
12137 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
12138 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingLinks reference FunctionalOutput");
12139 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
12140 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"from reference InformationLink");
12141 find mustInstanceOfFunctionalOutput_class(problem,interpretation,container);
12142 find mayInstanceOfInformationLink_class(problem,interpretation,newObject);
12143 find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,container,newObject);
12144 find mustExist(problem, interpretation, container);
12145 neg find mustExist(problem, interpretation, newObject);
12146}
12147pattern createObject_InformationLink_class(
12148 problem:LogicProblem, interpretation:PartialInterpretation,
12149 typeInterpretation:PartialComplexTypeInterpretation)
12150{
12151 find interpretation(problem,interpretation);
12152 neg find hasElementInContainment(problem,interpretation);
12153 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
12154 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class");
12155 find mayInstanceOfInformationLink_class(problem,interpretation,newObject);
12156 find mayExist(problem, interpretation, newObject);
12157 neg find mustExist(problem, interpretation, newObject);
12158}
12159pattern createObject_FAMTerminator_class_by_terminator_reference_FunctionalData_with_data_reference_FAMTerminator(
12160 problem:LogicProblem, interpretation:PartialInterpretation,
12161 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
12162 container:DefinedElement)
12163{
12164 find interpretation(problem,interpretation);
12165 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
12166 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class");
12167 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
12168 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"terminator reference FunctionalData");
12169 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
12170 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"data reference FAMTerminator");
12171 find mustInstanceOfFunctionalData_class(problem,interpretation,container);
12172 find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject);
12173 find mayInRelationterminator_reference_FunctionalData(problem,interpretation,container,newObject);
12174 find mustExist(problem, interpretation, container);
12175 neg find mustExist(problem, interpretation, newObject);
12176}
12177pattern createObject_FAMTerminator_class(
12178 problem:LogicProblem, interpretation:PartialInterpretation,
12179 typeInterpretation:PartialComplexTypeInterpretation)
12180{
12181 find interpretation(problem,interpretation);
12182 neg find hasElementInContainment(problem,interpretation);
12183 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
12184 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class");
12185 find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject);
12186 find mayExist(problem, interpretation, newObject);
12187 neg find mustExist(problem, interpretation, newObject);
12188}
12189pattern createObject_FunctionalInput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData(
12190 problem:LogicProblem, interpretation:PartialInterpretation,
12191 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
12192 container:DefinedElement)
12193{
12194 find interpretation(problem,interpretation);
12195 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
12196 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class");
12197 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
12198 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface");
12199 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
12200 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData");
12201 find mustInstanceOfFunctionalInterface_class(problem,interpretation,container);
12202 find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject);
12203 find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject);
12204 find mustExist(problem, interpretation, container);
12205 neg find mustExist(problem, interpretation, newObject);
12206}
12207pattern createObject_FunctionalInput_class(
12208 problem:LogicProblem, interpretation:PartialInterpretation,
12209 typeInterpretation:PartialComplexTypeInterpretation)
12210{
12211 find interpretation(problem,interpretation);
12212 neg find hasElementInContainment(problem,interpretation);
12213 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
12214 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class");
12215 find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject);
12216 find mayExist(problem, interpretation, newObject);
12217 neg find mustExist(problem, interpretation, newObject);
12218}
12219pattern createObject_FunctionalArchitectureModel_class_UndefinedPart(
12220 problem:LogicProblem, interpretation:PartialInterpretation,
12221 typeInterpretation:PartialComplexTypeInterpretation)
12222{
12223 find interpretation(problem,interpretation);
12224 neg find hasElementInContainment(problem,interpretation);
12225 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
12226 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalArchitectureModel class UndefinedPart");
12227 find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,newObject);
12228 find mayExist(problem, interpretation, newObject);
12229 neg find mustExist(problem, interpretation, newObject);
12230}
12231pattern createObject_FunctionalOutput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData(
12232 problem:LogicProblem, interpretation:PartialInterpretation,
12233 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
12234 container:DefinedElement)
12235{
12236 find interpretation(problem,interpretation);
12237 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
12238 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class");
12239 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
12240 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface");
12241 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
12242 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData");
12243 find mustInstanceOfFunctionalInterface_class(problem,interpretation,container);
12244 find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject);
12245 find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject);
12246 find mustExist(problem, interpretation, container);
12247 neg find mustExist(problem, interpretation, newObject);
12248}
12249pattern createObject_FunctionalOutput_class(
12250 problem:LogicProblem, interpretation:PartialInterpretation,
12251 typeInterpretation:PartialComplexTypeInterpretation)
12252{
12253 find interpretation(problem,interpretation);
12254 neg find hasElementInContainment(problem,interpretation);
12255 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
12256 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class");
12257 find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject);
12258 find mayExist(problem, interpretation, newObject);
12259 neg find mustExist(problem, interpretation, newObject);
12260}
12261pattern createObject_FunctionalInterface_class_by_interface_reference_FunctionalElement_with_element_reference_FunctionalInterface(
12262 problem:LogicProblem, interpretation:PartialInterpretation,
12263 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
12264 container:DefinedElement)
12265{
12266 find interpretation(problem,interpretation);
12267 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
12268 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class");
12269 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
12270 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"interface reference FunctionalElement");
12271 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
12272 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"element reference FunctionalInterface");
12273 find mustInstanceOfFunctionalElement_class(problem,interpretation,container);
12274 find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject);
12275 find mayInRelationinterface_reference_FunctionalElement(problem,interpretation,container,newObject);
12276 find mustExist(problem, interpretation, container);
12277 neg find mustExist(problem, interpretation, newObject);
12278}
12279pattern createObject_FunctionalInterface_class(
12280 problem:LogicProblem, interpretation:PartialInterpretation,
12281 typeInterpretation:PartialComplexTypeInterpretation)
12282{
12283 find interpretation(problem,interpretation);
12284 neg find hasElementInContainment(problem,interpretation);
12285 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
12286 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class");
12287 find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject);
12288 find mayExist(problem, interpretation, newObject);
12289 neg find mustExist(problem, interpretation, newObject);
12290}
12291
12292//////////
12293// 4.2 Type refinement
12294//////////
12295pattern refineTypeTo_Function_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
12296 find interpretation(problem,interpretation);
12297 PartialInterpretation.newElements(interpretation,element);
12298 find mayInstanceOfFunction_class(problem,interpretation,element);
12299 neg find mustInstanceOfFunction_class(problem,interpretation,element);
12300 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
12301 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
12302 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
12303 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
12304 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
12305}
12306pattern refineTypeTo_InformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
12307 find interpretation(problem,interpretation);
12308 PartialInterpretation.newElements(interpretation,element);
12309 find mayInstanceOfInformationLink_class(problem,interpretation,element);
12310 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
12311 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
12312 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
12313 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
12314 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
12315 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
12316}
12317pattern refineTypeTo_FAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
12318 find interpretation(problem,interpretation);
12319 PartialInterpretation.newElements(interpretation,element);
12320 find mayInstanceOfFAMTerminator_class(problem,interpretation,element);
12321 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
12322 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
12323 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
12324 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
12325 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
12326 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
12327}
12328pattern refineTypeTo_FunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
12329 find interpretation(problem,interpretation);
12330 PartialInterpretation.newElements(interpretation,element);
12331 find mayInstanceOfFunctionalInput_class(problem,interpretation,element);
12332 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
12333 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
12334 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
12335 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
12336 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
12337 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
12338 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
12339}
12340pattern refineTypeTo_FunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
12341 find interpretation(problem,interpretation);
12342 PartialInterpretation.newElements(interpretation,element);
12343 find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element);
12344 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
12345 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
12346 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
12347 neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element);
12348 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
12349 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
12350}
12351pattern refineTypeTo_FunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
12352 find interpretation(problem,interpretation);
12353 PartialInterpretation.newElements(interpretation,element);
12354 find mayInstanceOfFunctionalOutput_class(problem,interpretation,element);
12355 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
12356 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
12357 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
12358 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
12359 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
12360 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
12361 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
12362}
12363pattern refineTypeTo_FunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
12364 find interpretation(problem,interpretation);
12365 PartialInterpretation.newElements(interpretation,element);
12366 find mayInstanceOfFunctionalInterface_class(problem,interpretation,element);
12367 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
12368 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
12369 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
12370 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
12371 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
12372 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
12373}
12374
12375//////////
12376// 4.3 Relation refinement
12377//////////
12378pattern refineRelation_model_reference_FunctionalElement(
12379 problem:LogicProblem, interpretation:PartialInterpretation,
12380 relationIterpretation:PartialRelationInterpretation,
12381 from: DefinedElement, to: DefinedElement)
12382{
12383 find interpretation(problem,interpretation);
12384 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
12385 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement");
12386 find mustExist(problem, interpretation, from);
12387 find mustExist(problem, interpretation, to);
12388 find mustInstanceOfFunctionalElement_class(problem,interpretation,from);
12389 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,to);
12390 find mayInRelationmodel_reference_FunctionalElement(problem,interpretation,from,to);
12391 neg find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,from,to);
12392}
12393pattern refineRelation_IncomingLinks_reference_FunctionalInput_and_to_reference_InformationLink(
12394 problem:LogicProblem, interpretation:PartialInterpretation,
12395 relationIterpretation:PartialRelationInterpretation, oppositeInterpretation:PartialRelationInterpretation,
12396 from: DefinedElement, to: DefinedElement)
12397{
12398 find interpretation(problem,interpretation);
12399 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
12400 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"IncomingLinks reference FunctionalInput");
12401 PartialInterpretation.partialrelationinterpretation(interpretation,oppositeInterpretation);
12402 PartialRelationInterpretation.interpretationOf.name(oppositeInterpretation,"to reference InformationLink");
12403 find mustExist(problem, interpretation, from);
12404 find mustExist(problem, interpretation, to);
12405 find mustInstanceOfFunctionalInput_class(problem,interpretation,from);
12406 find mustInstanceOfInformationLink_class(problem,interpretation,to);
12407 find mayInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,from,to);
12408 neg find mustInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,from,to);
12409}
12410pattern refineRelation_type_attribute_Function(
12411 problem:LogicProblem, interpretation:PartialInterpretation,
12412 relationIterpretation:PartialRelationInterpretation,
12413 from: DefinedElement, to: DefinedElement)
12414{
12415 find interpretation(problem,interpretation);
12416 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
12417 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function");
12418 find mustExist(problem, interpretation, from);
12419 find mustExist(problem, interpretation, to);
12420 find mustInstanceOfFunction_class(problem,interpretation,from);
12421 find mustInstanceOfFunctionType_enum(problem,interpretation,to);
12422 find mayInRelationtype_attribute_Function(problem,interpretation,from,to);
12423 neg find mustInRelationtype_attribute_Function(problem,interpretation,from,to);
12424}
12425import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage"
12426import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem"
12427import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language"
12428
12429//////////
12430// 0. Util
12431//////////
12432private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) {
12433 PartialInterpretation.problem(interpretation,problem);
12434}
12435
12436/////////////////////////
12437// 0.1 Existence
12438/////////////////////////
12439private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
12440 find interpretation(problem,interpretation);
12441 LogicProblem.elements(problem,element);
12442} or {
12443 find interpretation(problem,interpretation);
12444 PartialInterpretation.newElements(interpretation,element);
12445}
12446
12447private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
12448 find mustExist(problem,interpretation,element);
12449} or {
12450 find interpretation(problem,interpretation);
12451 neg find elementCloseWorld(element);
12452 PartialInterpretation.openWorldElements(interpretation,element);
12453}
12454
12455private pattern elementCloseWorld(element:DefinedElement) {
12456 PartialInterpretation.openWorldElements(i,element);
12457 PartialInterpretation.maxNewElements(i,0);
12458} or {
12459 Scope.targetTypeInterpretation(scope,interpretation);
12460 PartialTypeInterpratation.elements(interpretation,element);
12461 Scope.maxNewElements(scope,0);
12462}
12463
12464////////////////////////
12465// 0.2 Equivalence
12466////////////////////////
12467pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) {
12468 find mayExist(problem,interpretation,a);
12469 find mayExist(problem,interpretation,b);
12470 a == b;
12471}
12472
12473////////////////////////
12474// 0.3 Required Patterns by TypeIndexer
12475////////////////////////
12476private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) {
12477 find interpretation(problem,interpretation);
12478 LogicProblem.types(problem,type);
12479 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
12480 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
12481}
12482
12483private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) {
12484 find interpretation(problem,interpretation);
12485 LogicProblem.types(problem,type);
12486 TypeDefinition.elements(type,element);
12487} or {
12488 find interpretation(problem,interpretation);
12489 find typeInterpretation(problem,interpretation,type,typeInterpretation);
12490 PartialComplexTypeInterpretation.elements(typeInterpretation,element);
12491}
12492
12493private pattern isPrimitive(element: PrimitiveElement) {
12494 PrimitiveElement(element);
12495}
12496
12497//////////
12498// 1. Problem-Specific Base Indexers
12499//////////
12500// 1.1 Type Indexers
12501//////////
12502// 1.1.1 primitive Type Indexers
12503//////////
12504
12505//////////
12506// 1.1.2 domain-specific Type Indexers
12507//////////
12508/**
12509 * An element must be an instance of type "FunctionalElement class".
12510 */
12511private pattern mustInstanceOfFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
12512 Type.name(type,"FunctionalElement class");
12513 find directInstanceOf(problem,interpretation,element,type);
12514}
12515private pattern scopeDisallowsNewFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation) {
12516 find interpretation(problem,interpretation);
12517 PartialInterpretation.scopes(interpretation,scope);
12518 Scope.targetTypeInterpretation(scope,typeInterpretation);
12519 Scope.maxNewElements(scope,0);
12520 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
12521 Type.name(type,"FunctionalElement class");
12522}
12523
12524/**
12525 * An element may be an instance of type "FunctionalElement class".
12526 */
12527private pattern mayInstanceOfFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
12528{
12529 find interpretation(problem,interpretation);
12530 PartialInterpretation.newElements(interpretation,element);
12531 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
12532 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
12533 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
12534 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
12535 neg find mustInstanceOfFunction_class(problem,interpretation,element);
12536 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
12537 neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation);
12538 neg find isPrimitive(element);
12539} or {
12540 find interpretation(problem,interpretation);
12541 PartialInterpretation.openWorldElements(interpretation,element);
12542 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
12543 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
12544 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
12545 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
12546 neg find mustInstanceOfFunction_class(problem,interpretation,element);
12547 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
12548 neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation);
12549 neg find isPrimitive(element);
12550} or
12551{ find mustInstanceOfFunctionalElement_class(problem,interpretation,element); }
12552/**
12553 * An element must be an instance of type "FunctionalArchitectureModel class".
12554 */
12555private pattern mustInstanceOfFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
12556 Type.name(type,"FunctionalArchitectureModel class");
12557 find directInstanceOf(problem,interpretation,element,type);
12558}
12559private pattern scopeDisallowsNewFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation) {
12560 find interpretation(problem,interpretation);
12561 PartialInterpretation.scopes(interpretation,scope);
12562 Scope.targetTypeInterpretation(scope,typeInterpretation);
12563 Scope.maxNewElements(scope,0);
12564 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
12565 Type.name(type,"FunctionalArchitectureModel class");
12566}
12567
12568/**
12569 * An element may be an instance of type "FunctionalArchitectureModel class".
12570 */
12571private pattern mayInstanceOfFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
12572{
12573 find interpretation(problem,interpretation);
12574 PartialInterpretation.newElements(interpretation,element);
12575 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
12576 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
12577 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
12578 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
12579 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
12580 neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element);
12581 neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation);
12582 neg find isPrimitive(element);
12583} or {
12584 find interpretation(problem,interpretation);
12585 PartialInterpretation.openWorldElements(interpretation,element);
12586 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
12587 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
12588 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
12589 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
12590 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
12591 neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element);
12592 neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation);
12593 neg find isPrimitive(element);
12594} or
12595{ find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); }
12596/**
12597 * An element must be an instance of type "Function class".
12598 */
12599private pattern mustInstanceOfFunction_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
12600 Type.name(type,"Function class");
12601 find directInstanceOf(problem,interpretation,element,type);
12602}
12603private pattern scopeDisallowsNewFunction_class(problem:LogicProblem, interpretation:PartialInterpretation) {
12604 find interpretation(problem,interpretation);
12605 PartialInterpretation.scopes(interpretation,scope);
12606 Scope.targetTypeInterpretation(scope,typeInterpretation);
12607 Scope.maxNewElements(scope,0);
12608 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
12609 Type.name(type,"Function class");
12610}
12611
12612/**
12613 * An element may be an instance of type "Function class".
12614 */
12615private pattern mayInstanceOfFunction_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
12616{
12617 find interpretation(problem,interpretation);
12618 PartialInterpretation.newElements(interpretation,element);
12619 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
12620 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
12621 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
12622 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
12623 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
12624 neg find scopeDisallowsNewFunction_class(problem, interpretation);
12625 neg find isPrimitive(element);
12626} or {
12627 find interpretation(problem,interpretation);
12628 PartialInterpretation.openWorldElements(interpretation,element);
12629 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
12630 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
12631 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
12632 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
12633 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
12634 neg find scopeDisallowsNewFunction_class(problem, interpretation);
12635 neg find isPrimitive(element);
12636} or
12637{ find mustInstanceOfFunction_class(problem,interpretation,element); }
12638/**
12639 * An element must be an instance of type "FAMTerminator class".
12640 */
12641private pattern mustInstanceOfFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
12642 Type.name(type,"FAMTerminator class");
12643 find directInstanceOf(problem,interpretation,element,type);
12644}
12645private pattern scopeDisallowsNewFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation) {
12646 find interpretation(problem,interpretation);
12647 PartialInterpretation.scopes(interpretation,scope);
12648 Scope.targetTypeInterpretation(scope,typeInterpretation);
12649 Scope.maxNewElements(scope,0);
12650 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
12651 Type.name(type,"FAMTerminator class");
12652}
12653
12654/**
12655 * An element may be an instance of type "FAMTerminator class".
12656 */
12657private pattern mayInstanceOfFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
12658{
12659 find interpretation(problem,interpretation);
12660 PartialInterpretation.newElements(interpretation,element);
12661 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
12662 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
12663 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
12664 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
12665 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
12666 neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation);
12667 neg find isPrimitive(element);
12668} or {
12669 find interpretation(problem,interpretation);
12670 PartialInterpretation.openWorldElements(interpretation,element);
12671 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
12672 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
12673 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
12674 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
12675 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
12676 neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation);
12677 neg find isPrimitive(element);
12678} or
12679{ find mustInstanceOfFAMTerminator_class(problem,interpretation,element); }
12680/**
12681 * An element must be an instance of type "InformationLink class".
12682 */
12683private pattern mustInstanceOfInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
12684 Type.name(type,"InformationLink class");
12685 find directInstanceOf(problem,interpretation,element,type);
12686}
12687private pattern scopeDisallowsNewInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation) {
12688 find interpretation(problem,interpretation);
12689 PartialInterpretation.scopes(interpretation,scope);
12690 Scope.targetTypeInterpretation(scope,typeInterpretation);
12691 Scope.maxNewElements(scope,0);
12692 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
12693 Type.name(type,"InformationLink class");
12694}
12695
12696/**
12697 * An element may be an instance of type "InformationLink class".
12698 */
12699private pattern mayInstanceOfInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
12700{
12701 find interpretation(problem,interpretation);
12702 PartialInterpretation.newElements(interpretation,element);
12703 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
12704 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
12705 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
12706 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
12707 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
12708 neg find scopeDisallowsNewInformationLink_class(problem, interpretation);
12709 neg find isPrimitive(element);
12710} or {
12711 find interpretation(problem,interpretation);
12712 PartialInterpretation.openWorldElements(interpretation,element);
12713 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
12714 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
12715 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
12716 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
12717 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
12718 neg find scopeDisallowsNewInformationLink_class(problem, interpretation);
12719 neg find isPrimitive(element);
12720} or
12721{ find mustInstanceOfInformationLink_class(problem,interpretation,element); }
12722/**
12723 * An element must be an instance of type "FunctionalInterface class".
12724 */
12725private pattern mustInstanceOfFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
12726 Type.name(type,"FunctionalInterface class");
12727 find directInstanceOf(problem,interpretation,element,type);
12728}
12729private pattern scopeDisallowsNewFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation) {
12730 find interpretation(problem,interpretation);
12731 PartialInterpretation.scopes(interpretation,scope);
12732 Scope.targetTypeInterpretation(scope,typeInterpretation);
12733 Scope.maxNewElements(scope,0);
12734 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
12735 Type.name(type,"FunctionalInterface class");
12736}
12737
12738/**
12739 * An element may be an instance of type "FunctionalInterface class".
12740 */
12741private pattern mayInstanceOfFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
12742{
12743 find interpretation(problem,interpretation);
12744 PartialInterpretation.newElements(interpretation,element);
12745 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
12746 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
12747 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
12748 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
12749 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
12750 neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation);
12751 neg find isPrimitive(element);
12752} or {
12753 find interpretation(problem,interpretation);
12754 PartialInterpretation.openWorldElements(interpretation,element);
12755 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
12756 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
12757 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
12758 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
12759 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
12760 neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation);
12761 neg find isPrimitive(element);
12762} or
12763{ find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); }
12764/**
12765 * An element must be an instance of type "FunctionalInput class".
12766 */
12767private pattern mustInstanceOfFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
12768 Type.name(type,"FunctionalInput class");
12769 find directInstanceOf(problem,interpretation,element,type);
12770}
12771private pattern scopeDisallowsNewFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation) {
12772 find interpretation(problem,interpretation);
12773 PartialInterpretation.scopes(interpretation,scope);
12774 Scope.targetTypeInterpretation(scope,typeInterpretation);
12775 Scope.maxNewElements(scope,0);
12776 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
12777 Type.name(type,"FunctionalInput class");
12778}
12779
12780/**
12781 * An element may be an instance of type "FunctionalInput class".
12782 */
12783private pattern mayInstanceOfFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
12784{
12785 find interpretation(problem,interpretation);
12786 PartialInterpretation.newElements(interpretation,element);
12787 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
12788 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
12789 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
12790 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
12791 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
12792 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
12793 neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation);
12794 neg find isPrimitive(element);
12795} or {
12796 find interpretation(problem,interpretation);
12797 PartialInterpretation.openWorldElements(interpretation,element);
12798 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
12799 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
12800 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
12801 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
12802 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
12803 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
12804 neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation);
12805 neg find isPrimitive(element);
12806} or
12807{ find mustInstanceOfFunctionalInput_class(problem,interpretation,element); }
12808/**
12809 * An element must be an instance of type "FunctionalOutput class".
12810 */
12811private pattern mustInstanceOfFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
12812 Type.name(type,"FunctionalOutput class");
12813 find directInstanceOf(problem,interpretation,element,type);
12814}
12815private pattern scopeDisallowsNewFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation) {
12816 find interpretation(problem,interpretation);
12817 PartialInterpretation.scopes(interpretation,scope);
12818 Scope.targetTypeInterpretation(scope,typeInterpretation);
12819 Scope.maxNewElements(scope,0);
12820 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
12821 Type.name(type,"FunctionalOutput class");
12822}
12823
12824/**
12825 * An element may be an instance of type "FunctionalOutput class".
12826 */
12827private pattern mayInstanceOfFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
12828{
12829 find interpretation(problem,interpretation);
12830 PartialInterpretation.newElements(interpretation,element);
12831 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
12832 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
12833 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
12834 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
12835 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
12836 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
12837 neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation);
12838 neg find isPrimitive(element);
12839} or {
12840 find interpretation(problem,interpretation);
12841 PartialInterpretation.openWorldElements(interpretation,element);
12842 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
12843 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
12844 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
12845 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
12846 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
12847 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
12848 neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation);
12849 neg find isPrimitive(element);
12850} or
12851{ find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); }
12852/**
12853 * An element must be an instance of type "FunctionalData class".
12854 */
12855private pattern mustInstanceOfFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
12856 Type.name(type,"FunctionalData class");
12857 find directInstanceOf(problem,interpretation,element,type);
12858}
12859private pattern scopeDisallowsNewFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation) {
12860 find interpretation(problem,interpretation);
12861 PartialInterpretation.scopes(interpretation,scope);
12862 Scope.targetTypeInterpretation(scope,typeInterpretation);
12863 Scope.maxNewElements(scope,0);
12864 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
12865 Type.name(type,"FunctionalData class");
12866}
12867
12868/**
12869 * An element may be an instance of type "FunctionalData class".
12870 */
12871private pattern mayInstanceOfFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
12872{
12873 find interpretation(problem,interpretation);
12874 PartialInterpretation.newElements(interpretation,element);
12875 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
12876 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
12877 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
12878 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
12879 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
12880 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
12881 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
12882 neg find scopeDisallowsNewFunctionalData_class(problem, interpretation);
12883 neg find isPrimitive(element);
12884} or {
12885 find interpretation(problem,interpretation);
12886 PartialInterpretation.openWorldElements(interpretation,element);
12887 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
12888 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
12889 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
12890 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
12891 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
12892 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
12893 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
12894 neg find scopeDisallowsNewFunctionalData_class(problem, interpretation);
12895 neg find isPrimitive(element);
12896} or
12897{ find mustInstanceOfFunctionalData_class(problem,interpretation,element); }
12898/**
12899 * An element must be an instance of type "FunctionType enum".
12900 */
12901private pattern mustInstanceOfFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
12902 Type.name(type,"FunctionType enum");
12903 find directInstanceOf(problem,interpretation,element,type);
12904}
12905private pattern scopeDisallowsNewFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation) {
12906 find interpretation(problem,interpretation);
12907 PartialInterpretation.scopes(interpretation,scope);
12908 Scope.targetTypeInterpretation(scope,typeInterpretation);
12909 Scope.maxNewElements(scope,0);
12910 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
12911 Type.name(type,"FunctionType enum");
12912}
12913
12914/**
12915 * An element may be an instance of type "FunctionType enum".
12916 */
12917private pattern mayInstanceOfFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
12918{ find mustInstanceOfFunctionType_enum(problem,interpretation,element); }
12919/**
12920 * An element must be an instance of type "FunctionalArchitectureModel class DefinedPart".
12921 */
12922private pattern mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
12923 Type.name(type,"FunctionalArchitectureModel class DefinedPart");
12924 find directInstanceOf(problem,interpretation,element,type);
12925}
12926private pattern scopeDisallowsNewFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
12927 find interpretation(problem,interpretation);
12928 PartialInterpretation.scopes(interpretation,scope);
12929 Scope.targetTypeInterpretation(scope,typeInterpretation);
12930 Scope.maxNewElements(scope,0);
12931 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
12932 Type.name(type,"FunctionalArchitectureModel class DefinedPart");
12933}
12934
12935/**
12936 * An element may be an instance of type "FunctionalArchitectureModel class DefinedPart".
12937 */
12938private pattern mayInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
12939{ find mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem,interpretation,element); }
12940/**
12941 * An element must be an instance of type "FunctionalArchitectureModel class UndefinedPart".
12942 */
12943private pattern mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
12944 Type.name(type,"FunctionalArchitectureModel class UndefinedPart");
12945 find directInstanceOf(problem,interpretation,element,type);
12946}
12947private pattern scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
12948 find interpretation(problem,interpretation);
12949 PartialInterpretation.scopes(interpretation,scope);
12950 Scope.targetTypeInterpretation(scope,typeInterpretation);
12951 Scope.maxNewElements(scope,0);
12952 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
12953 Type.name(type,"FunctionalArchitectureModel class UndefinedPart");
12954}
12955
12956/**
12957 * An element may be an instance of type "FunctionalArchitectureModel class UndefinedPart".
12958 */
12959private pattern mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
12960{
12961 find interpretation(problem,interpretation);
12962 PartialInterpretation.newElements(interpretation,element);
12963 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
12964 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
12965 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
12966 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
12967 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
12968 neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation);
12969 neg find isPrimitive(element);
12970} or {
12971 find interpretation(problem,interpretation);
12972 PartialInterpretation.openWorldElements(interpretation,element);
12973 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
12974 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
12975 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
12976 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
12977 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
12978 neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation);
12979 neg find isPrimitive(element);
12980} or
12981{ find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); }
12982
12983//////////
12984// 1.2 Relation Declaration Indexers
12985//////////
12986/**
12987 * Matcher for detecting tuples t where []interface reference FunctionalElement(source,target)
12988 */
12989private pattern mustInRelationinterface_reference_FunctionalElement(
12990 problem:LogicProblem, interpretation:PartialInterpretation,
12991 source: DefinedElement, target:DefinedElement)
12992{
12993 find interpretation(problem,interpretation);
12994 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
12995 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface reference FunctionalElement");
12996 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
12997 BinaryElementRelationLink.param1(link,source);
12998 BinaryElementRelationLink.param2(link,target);
12999}
13000/**
13001 * Matcher for detecting tuples t where <>interface reference FunctionalElement(source,target)
13002 */
13003private pattern mayInRelationinterface_reference_FunctionalElement(
13004 problem:LogicProblem, interpretation:PartialInterpretation,
13005 source: DefinedElement, target:DefinedElement)
13006{
13007 find interpretation(problem,interpretation);
13008 // The two endpoint of the link have to exist
13009 find mayExist(problem, interpretation, source);
13010 find mayExist(problem, interpretation, target);
13011 // Type consistency
13012 find mayInstanceOfFunctionalElement_class(problem,interpretation,source);
13013 find mayInstanceOfFunctionalInterface_class(problem,interpretation,target);
13014 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
13015 // the upper bound of the multiplicity should be considered.
13016 numberOfExistingReferences == count find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,_);
13017 check(numberOfExistingReferences < 1);
13018 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
13019 // the upper bound of the opposite reference multiplicity should be considered.
13020 numberOfExistingOppositeReferences == count find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,target,_);
13021 check(numberOfExistingOppositeReferences < 1);
13022 // The reference is containment, then a new reference cannot be create if:
13023 // 1. Multiple parents
13024 neg find mustContains4(problem,interpretation,_,target);
13025 // 2. Circle in the containment hierarchy
13026 neg find mustTransitiveContains(source,target);
13027} or {
13028 find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,target);
13029}
13030/**
13031 * Matcher for detecting tuples t where []model reference FunctionalElement(source,target)
13032 */
13033private pattern mustInRelationmodel_reference_FunctionalElement(
13034 problem:LogicProblem, interpretation:PartialInterpretation,
13035 source: DefinedElement, target:DefinedElement)
13036{
13037 find interpretation(problem,interpretation);
13038 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
13039 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement");
13040 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
13041 BinaryElementRelationLink.param1(link,source);
13042 BinaryElementRelationLink.param2(link,target);
13043}
13044/**
13045 * Matcher for detecting tuples t where <>model reference FunctionalElement(source,target)
13046 */
13047private pattern mayInRelationmodel_reference_FunctionalElement(
13048 problem:LogicProblem, interpretation:PartialInterpretation,
13049 source: DefinedElement, target:DefinedElement)
13050{
13051 find interpretation(problem,interpretation);
13052 // The two endpoint of the link have to exist
13053 find mayExist(problem, interpretation, source);
13054 find mayExist(problem, interpretation, target);
13055 // Type consistency
13056 find mayInstanceOfFunctionalElement_class(problem,interpretation,source);
13057 find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,target);
13058 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
13059 // the upper bound of the multiplicity should be considered.
13060 numberOfExistingReferences == count find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,source,_);
13061 check(numberOfExistingReferences < 1);
13062} or {
13063 find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,source,target);
13064}
13065/**
13066 * Matcher for detecting tuples t where []parent reference FunctionalElement(source,target)
13067 */
13068private pattern mustInRelationparent_reference_FunctionalElement(
13069 problem:LogicProblem, interpretation:PartialInterpretation,
13070 source: DefinedElement, target:DefinedElement)
13071{
13072 find interpretation(problem,interpretation);
13073 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
13074 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"parent reference FunctionalElement");
13075 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
13076 BinaryElementRelationLink.param1(link,source);
13077 BinaryElementRelationLink.param2(link,target);
13078}
13079/**
13080 * Matcher for detecting tuples t where <>parent reference FunctionalElement(source,target)
13081 */
13082private pattern mayInRelationparent_reference_FunctionalElement(
13083 problem:LogicProblem, interpretation:PartialInterpretation,
13084 source: DefinedElement, target:DefinedElement)
13085{
13086 find interpretation(problem,interpretation);
13087 // The two endpoint of the link have to exist
13088 find mayExist(problem, interpretation, source);
13089 find mayExist(problem, interpretation, target);
13090 // Type consistency
13091 find mayInstanceOfFunctionalElement_class(problem,interpretation,source);
13092 find mayInstanceOfFunction_class(problem,interpretation,target);
13093 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
13094 // the upper bound of the multiplicity should be considered.
13095 numberOfExistingReferences == count find mustInRelationparent_reference_FunctionalElement(problem,interpretation,source,_);
13096 check(numberOfExistingReferences < 1);
13097 // The eOpposite of the reference is containment, then a referene cannot be created if
13098 // 1. Multiple parents
13099 neg find mustContains4(problem,interpretation,source,_);
13100 // 2. Circle in the containment hierarchy
13101 neg find mustTransitiveContains(source,target);
13102} or {
13103 find mustInRelationparent_reference_FunctionalElement(problem,interpretation,source,target);
13104}
13105/**
13106 * Matcher for detecting tuples t where []rootElements reference FunctionalArchitectureModel(source,target)
13107 */
13108private pattern mustInRelationrootElements_reference_FunctionalArchitectureModel(
13109 problem:LogicProblem, interpretation:PartialInterpretation,
13110 source: DefinedElement, target:DefinedElement)
13111{
13112 find interpretation(problem,interpretation);
13113 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
13114 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"rootElements reference FunctionalArchitectureModel");
13115 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
13116 BinaryElementRelationLink.param1(link,source);
13117 BinaryElementRelationLink.param2(link,target);
13118}
13119/**
13120 * Matcher for detecting tuples t where <>rootElements reference FunctionalArchitectureModel(source,target)
13121 */
13122private pattern mayInRelationrootElements_reference_FunctionalArchitectureModel(
13123 problem:LogicProblem, interpretation:PartialInterpretation,
13124 source: DefinedElement, target:DefinedElement)
13125{
13126 find interpretation(problem,interpretation);
13127 // The two endpoint of the link have to exist
13128 find mayExist(problem, interpretation, source);
13129 find mayExist(problem, interpretation, target);
13130 // Type consistency
13131 find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,source);
13132 find mayInstanceOfFunctionalElement_class(problem,interpretation,target);
13133 // The reference is containment, then a new reference cannot be create if:
13134 // 1. Multiple parents
13135 neg find mustContains4(problem,interpretation,_,target);
13136 // 2. Circle in the containment hierarchy
13137 neg find mustTransitiveContains(source,target);
13138} or {
13139 find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,source,target);
13140}
13141/**
13142 * Matcher for detecting tuples t where []subElements reference Function(source,target)
13143 */
13144private pattern mustInRelationsubElements_reference_Function(
13145 problem:LogicProblem, interpretation:PartialInterpretation,
13146 source: DefinedElement, target:DefinedElement)
13147{
13148 find interpretation(problem,interpretation);
13149 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
13150 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"subElements reference Function");
13151 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
13152 BinaryElementRelationLink.param1(link,source);
13153 BinaryElementRelationLink.param2(link,target);
13154}
13155/**
13156 * Matcher for detecting tuples t where <>subElements reference Function(source,target)
13157 */
13158private pattern mayInRelationsubElements_reference_Function(
13159 problem:LogicProblem, interpretation:PartialInterpretation,
13160 source: DefinedElement, target:DefinedElement)
13161{
13162 find interpretation(problem,interpretation);
13163 // The two endpoint of the link have to exist
13164 find mayExist(problem, interpretation, source);
13165 find mayExist(problem, interpretation, target);
13166 // Type consistency
13167 find mayInstanceOfFunction_class(problem,interpretation,source);
13168 find mayInstanceOfFunctionalElement_class(problem,interpretation,target);
13169 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
13170 // the upper bound of the opposite reference multiplicity should be considered.
13171 numberOfExistingOppositeReferences == count find mustInRelationparent_reference_FunctionalElement(problem,interpretation,target,_);
13172 check(numberOfExistingOppositeReferences < 1);
13173 // The reference is containment, then a new reference cannot be create if:
13174 // 1. Multiple parents
13175 neg find mustContains4(problem,interpretation,_,target);
13176 // 2. Circle in the containment hierarchy
13177 neg find mustTransitiveContains(source,target);
13178} or {
13179 find mustInRelationsubElements_reference_Function(problem,interpretation,source,target);
13180}
13181/**
13182 * Matcher for detecting tuples t where []data reference FAMTerminator(source,target)
13183 */
13184private pattern mustInRelationdata_reference_FAMTerminator(
13185 problem:LogicProblem, interpretation:PartialInterpretation,
13186 source: DefinedElement, target:DefinedElement)
13187{
13188 find interpretation(problem,interpretation);
13189 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
13190 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"data reference FAMTerminator");
13191 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
13192 BinaryElementRelationLink.param1(link,source);
13193 BinaryElementRelationLink.param2(link,target);
13194}
13195/**
13196 * Matcher for detecting tuples t where <>data reference FAMTerminator(source,target)
13197 */
13198private pattern mayInRelationdata_reference_FAMTerminator(
13199 problem:LogicProblem, interpretation:PartialInterpretation,
13200 source: DefinedElement, target:DefinedElement)
13201{
13202 find interpretation(problem,interpretation);
13203 // The two endpoint of the link have to exist
13204 find mayExist(problem, interpretation, source);
13205 find mayExist(problem, interpretation, target);
13206 // Type consistency
13207 find mayInstanceOfFAMTerminator_class(problem,interpretation,source);
13208 find mayInstanceOfFunctionalData_class(problem,interpretation,target);
13209 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
13210 // the upper bound of the multiplicity should be considered.
13211 numberOfExistingReferences == count find mustInRelationdata_reference_FAMTerminator(problem,interpretation,source,_);
13212 check(numberOfExistingReferences < 1);
13213 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
13214 // the upper bound of the opposite reference multiplicity should be considered.
13215 numberOfExistingOppositeReferences == count find mustInRelationterminator_reference_FunctionalData(problem,interpretation,target,_);
13216 check(numberOfExistingOppositeReferences < 1);
13217 // The eOpposite of the reference is containment, then a referene cannot be created if
13218 // 1. Multiple parents
13219 neg find mustContains4(problem,interpretation,source,_);
13220 // 2. Circle in the containment hierarchy
13221 neg find mustTransitiveContains(source,target);
13222} or {
13223 find mustInRelationdata_reference_FAMTerminator(problem,interpretation,source,target);
13224}
13225/**
13226 * Matcher for detecting tuples t where []from reference InformationLink(source,target)
13227 */
13228private pattern mustInRelationfrom_reference_InformationLink(
13229 problem:LogicProblem, interpretation:PartialInterpretation,
13230 source: DefinedElement, target:DefinedElement)
13231{
13232 find interpretation(problem,interpretation);
13233 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
13234 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"from reference InformationLink");
13235 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
13236 BinaryElementRelationLink.param1(link,source);
13237 BinaryElementRelationLink.param2(link,target);
13238}
13239/**
13240 * Matcher for detecting tuples t where <>from reference InformationLink(source,target)
13241 */
13242private pattern mayInRelationfrom_reference_InformationLink(
13243 problem:LogicProblem, interpretation:PartialInterpretation,
13244 source: DefinedElement, target:DefinedElement)
13245{
13246 find interpretation(problem,interpretation);
13247 // The two endpoint of the link have to exist
13248 find mayExist(problem, interpretation, source);
13249 find mayExist(problem, interpretation, target);
13250 // Type consistency
13251 find mayInstanceOfInformationLink_class(problem,interpretation,source);
13252 find mayInstanceOfFunctionalOutput_class(problem,interpretation,target);
13253 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
13254 // the upper bound of the multiplicity should be considered.
13255 numberOfExistingReferences == count find mustInRelationfrom_reference_InformationLink(problem,interpretation,source,_);
13256 check(numberOfExistingReferences < 1);
13257 // The eOpposite of the reference is containment, then a referene cannot be created if
13258 // 1. Multiple parents
13259 neg find mustContains4(problem,interpretation,source,_);
13260 // 2. Circle in the containment hierarchy
13261 neg find mustTransitiveContains(source,target);
13262} or {
13263 find mustInRelationfrom_reference_InformationLink(problem,interpretation,source,target);
13264}
13265/**
13266 * Matcher for detecting tuples t where []to reference InformationLink(source,target)
13267 */
13268private pattern mustInRelationto_reference_InformationLink(
13269 problem:LogicProblem, interpretation:PartialInterpretation,
13270 source: DefinedElement, target:DefinedElement)
13271{
13272 find interpretation(problem,interpretation);
13273 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
13274 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"to reference InformationLink");
13275 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
13276 BinaryElementRelationLink.param1(link,source);
13277 BinaryElementRelationLink.param2(link,target);
13278}
13279/**
13280 * Matcher for detecting tuples t where <>to reference InformationLink(source,target)
13281 */
13282private pattern mayInRelationto_reference_InformationLink(
13283 problem:LogicProblem, interpretation:PartialInterpretation,
13284 source: DefinedElement, target:DefinedElement)
13285{
13286 find interpretation(problem,interpretation);
13287 // The two endpoint of the link have to exist
13288 find mayExist(problem, interpretation, source);
13289 find mayExist(problem, interpretation, target);
13290 // Type consistency
13291 find mayInstanceOfInformationLink_class(problem,interpretation,source);
13292 find mayInstanceOfFunctionalInput_class(problem,interpretation,target);
13293 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
13294 // the upper bound of the multiplicity should be considered.
13295 numberOfExistingReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,source,_);
13296 check(numberOfExistingReferences < 1);
13297} or {
13298 find mustInRelationto_reference_InformationLink(problem,interpretation,source,target);
13299}
13300/**
13301 * Matcher for detecting tuples t where []data reference FunctionalInterface(source,target)
13302 */
13303private pattern mustInRelationdata_reference_FunctionalInterface(
13304 problem:LogicProblem, interpretation:PartialInterpretation,
13305 source: DefinedElement, target:DefinedElement)
13306{
13307 find interpretation(problem,interpretation);
13308 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
13309 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"data reference FunctionalInterface");
13310 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
13311 BinaryElementRelationLink.param1(link,source);
13312 BinaryElementRelationLink.param2(link,target);
13313}
13314/**
13315 * Matcher for detecting tuples t where <>data reference FunctionalInterface(source,target)
13316 */
13317private pattern mayInRelationdata_reference_FunctionalInterface(
13318 problem:LogicProblem, interpretation:PartialInterpretation,
13319 source: DefinedElement, target:DefinedElement)
13320{
13321 find interpretation(problem,interpretation);
13322 // The two endpoint of the link have to exist
13323 find mayExist(problem, interpretation, source);
13324 find mayExist(problem, interpretation, target);
13325 // Type consistency
13326 find mayInstanceOfFunctionalInterface_class(problem,interpretation,source);
13327 find mayInstanceOfFunctionalData_class(problem,interpretation,target);
13328 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
13329 // the upper bound of the opposite reference multiplicity should be considered.
13330 numberOfExistingOppositeReferences == count find mustInRelationinterface_reference_FunctionalData(problem,interpretation,target,_);
13331 check(numberOfExistingOppositeReferences < 1);
13332 // The reference is containment, then a new reference cannot be create if:
13333 // 1. Multiple parents
13334 neg find mustContains4(problem,interpretation,_,target);
13335 // 2. Circle in the containment hierarchy
13336 neg find mustTransitiveContains(source,target);
13337} or {
13338 find mustInRelationdata_reference_FunctionalInterface(problem,interpretation,source,target);
13339}
13340/**
13341 * Matcher for detecting tuples t where []element reference FunctionalInterface(source,target)
13342 */
13343private pattern mustInRelationelement_reference_FunctionalInterface(
13344 problem:LogicProblem, interpretation:PartialInterpretation,
13345 source: DefinedElement, target:DefinedElement)
13346{
13347 find interpretation(problem,interpretation);
13348 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
13349 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"element reference FunctionalInterface");
13350 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
13351 BinaryElementRelationLink.param1(link,source);
13352 BinaryElementRelationLink.param2(link,target);
13353}
13354/**
13355 * Matcher for detecting tuples t where <>element reference FunctionalInterface(source,target)
13356 */
13357private pattern mayInRelationelement_reference_FunctionalInterface(
13358 problem:LogicProblem, interpretation:PartialInterpretation,
13359 source: DefinedElement, target:DefinedElement)
13360{
13361 find interpretation(problem,interpretation);
13362 // The two endpoint of the link have to exist
13363 find mayExist(problem, interpretation, source);
13364 find mayExist(problem, interpretation, target);
13365 // Type consistency
13366 find mayInstanceOfFunctionalInterface_class(problem,interpretation,source);
13367 find mayInstanceOfFunctionalElement_class(problem,interpretation,target);
13368 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
13369 // the upper bound of the multiplicity should be considered.
13370 numberOfExistingReferences == count find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,source,_);
13371 check(numberOfExistingReferences < 1);
13372 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
13373 // the upper bound of the opposite reference multiplicity should be considered.
13374 numberOfExistingOppositeReferences == count find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,target,_);
13375 check(numberOfExistingOppositeReferences < 1);
13376 // The eOpposite of the reference is containment, then a referene cannot be created if
13377 // 1. Multiple parents
13378 neg find mustContains4(problem,interpretation,source,_);
13379 // 2. Circle in the containment hierarchy
13380 neg find mustTransitiveContains(source,target);
13381} or {
13382 find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,source,target);
13383}
13384/**
13385 * Matcher for detecting tuples t where []IncomingLinks reference FunctionalInput(source,target)
13386 */
13387private pattern mustInRelationIncomingLinks_reference_FunctionalInput(
13388 problem:LogicProblem, interpretation:PartialInterpretation,
13389 source: DefinedElement, target:DefinedElement)
13390{
13391 find interpretation(problem,interpretation);
13392 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
13393 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"IncomingLinks reference FunctionalInput");
13394 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
13395 BinaryElementRelationLink.param1(link,source);
13396 BinaryElementRelationLink.param2(link,target);
13397}
13398/**
13399 * Matcher for detecting tuples t where <>IncomingLinks reference FunctionalInput(source,target)
13400 */
13401private pattern mayInRelationIncomingLinks_reference_FunctionalInput(
13402 problem:LogicProblem, interpretation:PartialInterpretation,
13403 source: DefinedElement, target:DefinedElement)
13404{
13405 find interpretation(problem,interpretation);
13406 // The two endpoint of the link have to exist
13407 find mayExist(problem, interpretation, source);
13408 find mayExist(problem, interpretation, target);
13409 // Type consistency
13410 find mayInstanceOfFunctionalInput_class(problem,interpretation,source);
13411 find mayInstanceOfInformationLink_class(problem,interpretation,target);
13412 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
13413 // the upper bound of the opposite reference multiplicity should be considered.
13414 numberOfExistingOppositeReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,target,_);
13415 check(numberOfExistingOppositeReferences < 1);
13416} or {
13417 find mustInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,source,target);
13418}
13419/**
13420 * Matcher for detecting tuples t where []outgoingLinks reference FunctionalOutput(source,target)
13421 */
13422private pattern mustInRelationoutgoingLinks_reference_FunctionalOutput(
13423 problem:LogicProblem, interpretation:PartialInterpretation,
13424 source: DefinedElement, target:DefinedElement)
13425{
13426 find interpretation(problem,interpretation);
13427 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
13428 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"outgoingLinks reference FunctionalOutput");
13429 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
13430 BinaryElementRelationLink.param1(link,source);
13431 BinaryElementRelationLink.param2(link,target);
13432}
13433/**
13434 * Matcher for detecting tuples t where <>outgoingLinks reference FunctionalOutput(source,target)
13435 */
13436private pattern mayInRelationoutgoingLinks_reference_FunctionalOutput(
13437 problem:LogicProblem, interpretation:PartialInterpretation,
13438 source: DefinedElement, target:DefinedElement)
13439{
13440 find interpretation(problem,interpretation);
13441 // The two endpoint of the link have to exist
13442 find mayExist(problem, interpretation, source);
13443 find mayExist(problem, interpretation, target);
13444 // Type consistency
13445 find mayInstanceOfFunctionalOutput_class(problem,interpretation,source);
13446 find mayInstanceOfInformationLink_class(problem,interpretation,target);
13447 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
13448 // the upper bound of the opposite reference multiplicity should be considered.
13449 numberOfExistingOppositeReferences == count find mustInRelationfrom_reference_InformationLink(problem,interpretation,target,_);
13450 check(numberOfExistingOppositeReferences < 1);
13451 // The reference is containment, then a new reference cannot be create if:
13452 // 1. Multiple parents
13453 neg find mustContains4(problem,interpretation,_,target);
13454 // 2. Circle in the containment hierarchy
13455 neg find mustTransitiveContains(source,target);
13456} or {
13457 find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,source,target);
13458}
13459/**
13460 * Matcher for detecting tuples t where []terminator reference FunctionalData(source,target)
13461 */
13462private pattern mustInRelationterminator_reference_FunctionalData(
13463 problem:LogicProblem, interpretation:PartialInterpretation,
13464 source: DefinedElement, target:DefinedElement)
13465{
13466 find interpretation(problem,interpretation);
13467 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
13468 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"terminator reference FunctionalData");
13469 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
13470 BinaryElementRelationLink.param1(link,source);
13471 BinaryElementRelationLink.param2(link,target);
13472}
13473/**
13474 * Matcher for detecting tuples t where <>terminator reference FunctionalData(source,target)
13475 */
13476private pattern mayInRelationterminator_reference_FunctionalData(
13477 problem:LogicProblem, interpretation:PartialInterpretation,
13478 source: DefinedElement, target:DefinedElement)
13479{
13480 find interpretation(problem,interpretation);
13481 // The two endpoint of the link have to exist
13482 find mayExist(problem, interpretation, source);
13483 find mayExist(problem, interpretation, target);
13484 // Type consistency
13485 find mayInstanceOfFunctionalData_class(problem,interpretation,source);
13486 find mayInstanceOfFAMTerminator_class(problem,interpretation,target);
13487 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
13488 // the upper bound of the multiplicity should be considered.
13489 numberOfExistingReferences == count find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,_);
13490 check(numberOfExistingReferences < 1);
13491 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
13492 // the upper bound of the opposite reference multiplicity should be considered.
13493 numberOfExistingOppositeReferences == count find mustInRelationdata_reference_FAMTerminator(problem,interpretation,target,_);
13494 check(numberOfExistingOppositeReferences < 1);
13495 // The reference is containment, then a new reference cannot be create if:
13496 // 1. Multiple parents
13497 neg find mustContains4(problem,interpretation,_,target);
13498 // 2. Circle in the containment hierarchy
13499 neg find mustTransitiveContains(source,target);
13500} or {
13501 find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,target);
13502}
13503/**
13504 * Matcher for detecting tuples t where []interface reference FunctionalData(source,target)
13505 */
13506private pattern mustInRelationinterface_reference_FunctionalData(
13507 problem:LogicProblem, interpretation:PartialInterpretation,
13508 source: DefinedElement, target:DefinedElement)
13509{
13510 find interpretation(problem,interpretation);
13511 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
13512 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface reference FunctionalData");
13513 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
13514 BinaryElementRelationLink.param1(link,source);
13515 BinaryElementRelationLink.param2(link,target);
13516}
13517/**
13518 * Matcher for detecting tuples t where <>interface reference FunctionalData(source,target)
13519 */
13520private pattern mayInRelationinterface_reference_FunctionalData(
13521 problem:LogicProblem, interpretation:PartialInterpretation,
13522 source: DefinedElement, target:DefinedElement)
13523{
13524 find interpretation(problem,interpretation);
13525 // The two endpoint of the link have to exist
13526 find mayExist(problem, interpretation, source);
13527 find mayExist(problem, interpretation, target);
13528 // Type consistency
13529 find mayInstanceOfFunctionalData_class(problem,interpretation,source);
13530 find mayInstanceOfFunctionalInterface_class(problem,interpretation,target);
13531 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
13532 // the upper bound of the multiplicity should be considered.
13533 numberOfExistingReferences == count find mustInRelationinterface_reference_FunctionalData(problem,interpretation,source,_);
13534 check(numberOfExistingReferences < 1);
13535 // The eOpposite of the reference is containment, then a referene cannot be created if
13536 // 1. Multiple parents
13537 neg find mustContains4(problem,interpretation,source,_);
13538 // 2. Circle in the containment hierarchy
13539 neg find mustTransitiveContains(source,target);
13540} or {
13541 find mustInRelationinterface_reference_FunctionalData(problem,interpretation,source,target);
13542}
13543/**
13544 * Matcher for detecting tuples t where []type attribute Function(source,target)
13545 */
13546private pattern mustInRelationtype_attribute_Function(
13547 problem:LogicProblem, interpretation:PartialInterpretation,
13548 source: DefinedElement, target:DefinedElement)
13549{
13550 find interpretation(problem,interpretation);
13551 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
13552 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function");
13553 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
13554 BinaryElementRelationLink.param1(link,source);
13555 BinaryElementRelationLink.param2(link,target);
13556}
13557/**
13558 * Matcher for detecting tuples t where <>type attribute Function(source,target)
13559 */
13560private pattern mayInRelationtype_attribute_Function(
13561 problem:LogicProblem, interpretation:PartialInterpretation,
13562 source: DefinedElement, target:DefinedElement)
13563{
13564 find interpretation(problem,interpretation);
13565 // The two endpoint of the link have to exist
13566 find mayExist(problem, interpretation, source);
13567 find mayExist(problem, interpretation, target);
13568 // Type consistency
13569 find mayInstanceOfFunction_class(problem,interpretation,source);
13570 find mayInstanceOfFunctionType_enum(problem,interpretation,target);
13571 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
13572 // the upper bound of the multiplicity should be considered.
13573 numberOfExistingReferences == count find mustInRelationtype_attribute_Function(problem,interpretation,source,_);
13574 check(numberOfExistingReferences < 1);
13575} or {
13576 find mustInRelationtype_attribute_Function(problem,interpretation,source,target);
13577}
13578
13579//////////
13580// 1.3 Relation Definition Indexers
13581//////////
13582
13583//////////
13584// 1.4 Containment Indexer
13585//////////
13586private pattern mustContains2(source: DefinedElement, target: DefinedElement) {
13587 find mustContains4(_,_,source,target);
13588}
13589
13590private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation,
13591 source: DefinedElement, target: DefinedElement)
13592 { find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,target); }or
13593
13594 { find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,source,target); }or
13595
13596 { find mustInRelationsubElements_reference_Function(problem,interpretation,source,target); }or
13597
13598 { find mustInRelationdata_reference_FunctionalInterface(problem,interpretation,source,target); }or
13599
13600 { find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,source,target); }or
13601
13602 { find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,target); }
13603
13604private pattern mustTransitiveContains(source,target) {
13605 find mustContains2+(source,target);
13606}
13607
13608//////////
13609// 2. Invalidation Indexers
13610//////////
13611// 2.1 Invalidated by WF Queries
13612//////////
13613
13614//////////
13615// 3. Unfinishedness Indexers
13616//////////
13617// 3.1 Unfinishedness Measured by Multiplicity
13618//////////
13619pattern unfinishedLowerMultiplicity_model_reference_FunctionalElement(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) {
13620 find interpretation(problem,interpretation);
13621 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
13622 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement");
13623 find mustInstanceOfFunctionalElement_class(problem,interpretation,object);
13624 numberOfExistingReferences == count find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,object,_);
13625 check(numberOfExistingReferences < 1);
13626 missingMultiplicity == eval(1-numberOfExistingReferences);
13627}
13628pattern unfinishedLowerMultiplicity_to_reference_InformationLink(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) {
13629 find interpretation(problem,interpretation);
13630 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
13631 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"to reference InformationLink");
13632 find mustInstanceOfInformationLink_class(problem,interpretation,object);
13633 numberOfExistingReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,object,_);
13634 check(numberOfExistingReferences < 1);
13635 missingMultiplicity == eval(1-numberOfExistingReferences);
13636}
13637pattern unfinishedLowerMultiplicity_type_attribute_Function(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) {
13638 find interpretation(problem,interpretation);
13639 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
13640 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function");
13641 find mustInstanceOfFunction_class(problem,interpretation,object);
13642 numberOfExistingReferences == count find mustInRelationtype_attribute_Function(problem,interpretation,object,_);
13643 check(numberOfExistingReferences < 1);
13644 missingMultiplicity == eval(1-numberOfExistingReferences);
13645}
13646
13647//////////
13648// 3.2 Unfinishedness Measured by WF Queries
13649//////////
13650
13651//////////
13652// 4. Refinement Indexers
13653//////////
13654// 4.1 Object constructors
13655//////////
13656private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation)
13657{
13658 find interpretation(problem,interpretation);
13659 find mustInstanceOfFAMTerminator_class(problem,interpretation,root);
13660 find mustExist(problem, interpretation, root);
13661}or{
13662 find interpretation(problem,interpretation);
13663 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,root);
13664 find mustExist(problem, interpretation, root);
13665}or{
13666 find interpretation(problem,interpretation);
13667 find mustInstanceOfFunctionalOutput_class(problem,interpretation,root);
13668 find mustExist(problem, interpretation, root);
13669}or{
13670 find interpretation(problem,interpretation);
13671 find mustInstanceOfFunction_class(problem,interpretation,root);
13672 find mustExist(problem, interpretation, root);
13673}or{
13674 find interpretation(problem,interpretation);
13675 find mustInstanceOfFunctionalInterface_class(problem,interpretation,root);
13676 find mustExist(problem, interpretation, root);
13677}or{
13678 find interpretation(problem,interpretation);
13679 find mustInstanceOfFunctionalElement_class(problem,interpretation,root);
13680 find mustExist(problem, interpretation, root);
13681}or{
13682 find interpretation(problem,interpretation);
13683 find mustInstanceOfInformationLink_class(problem,interpretation,root);
13684 find mustExist(problem, interpretation, root);
13685}or{
13686 find interpretation(problem,interpretation);
13687 find mustInstanceOfFunctionalInput_class(problem,interpretation,root);
13688 find mustExist(problem, interpretation, root);
13689}or{
13690 find interpretation(problem,interpretation);
13691 find mustInstanceOfFunctionalData_class(problem,interpretation,root);
13692 find mustExist(problem, interpretation, root);
13693}or{
13694 find interpretation(problem,interpretation);
13695 find mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem,interpretation,root);
13696 find mustExist(problem, interpretation, root);
13697}or{
13698 find interpretation(problem,interpretation);
13699 find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,root);
13700 find mustExist(problem, interpretation, root);
13701}
13702pattern createObject_FunctionalInput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData(
13703 problem:LogicProblem, interpretation:PartialInterpretation,
13704 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
13705 container:DefinedElement)
13706{
13707 find interpretation(problem,interpretation);
13708 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
13709 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class");
13710 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
13711 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface");
13712 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
13713 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData");
13714 find mustInstanceOfFunctionalInterface_class(problem,interpretation,container);
13715 find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject);
13716 find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject);
13717 find mustExist(problem, interpretation, container);
13718 neg find mustExist(problem, interpretation, newObject);
13719}
13720pattern createObject_FunctionalInput_class(
13721 problem:LogicProblem, interpretation:PartialInterpretation,
13722 typeInterpretation:PartialComplexTypeInterpretation)
13723{
13724 find interpretation(problem,interpretation);
13725 neg find hasElementInContainment(problem,interpretation);
13726 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
13727 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class");
13728 find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject);
13729 find mayExist(problem, interpretation, newObject);
13730 neg find mustExist(problem, interpretation, newObject);
13731}
13732pattern createObject_FunctionalOutput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData(
13733 problem:LogicProblem, interpretation:PartialInterpretation,
13734 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
13735 container:DefinedElement)
13736{
13737 find interpretation(problem,interpretation);
13738 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
13739 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class");
13740 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
13741 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface");
13742 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
13743 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData");
13744 find mustInstanceOfFunctionalInterface_class(problem,interpretation,container);
13745 find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject);
13746 find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject);
13747 find mustExist(problem, interpretation, container);
13748 neg find mustExist(problem, interpretation, newObject);
13749}
13750pattern createObject_FunctionalOutput_class(
13751 problem:LogicProblem, interpretation:PartialInterpretation,
13752 typeInterpretation:PartialComplexTypeInterpretation)
13753{
13754 find interpretation(problem,interpretation);
13755 neg find hasElementInContainment(problem,interpretation);
13756 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
13757 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class");
13758 find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject);
13759 find mayExist(problem, interpretation, newObject);
13760 neg find mustExist(problem, interpretation, newObject);
13761}
13762pattern createObject_FAMTerminator_class_by_terminator_reference_FunctionalData_with_data_reference_FAMTerminator(
13763 problem:LogicProblem, interpretation:PartialInterpretation,
13764 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
13765 container:DefinedElement)
13766{
13767 find interpretation(problem,interpretation);
13768 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
13769 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class");
13770 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
13771 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"terminator reference FunctionalData");
13772 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
13773 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"data reference FAMTerminator");
13774 find mustInstanceOfFunctionalData_class(problem,interpretation,container);
13775 find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject);
13776 find mayInRelationterminator_reference_FunctionalData(problem,interpretation,container,newObject);
13777 find mustExist(problem, interpretation, container);
13778 neg find mustExist(problem, interpretation, newObject);
13779}
13780pattern createObject_FAMTerminator_class(
13781 problem:LogicProblem, interpretation:PartialInterpretation,
13782 typeInterpretation:PartialComplexTypeInterpretation)
13783{
13784 find interpretation(problem,interpretation);
13785 neg find hasElementInContainment(problem,interpretation);
13786 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
13787 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class");
13788 find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject);
13789 find mayExist(problem, interpretation, newObject);
13790 neg find mustExist(problem, interpretation, newObject);
13791}
13792pattern createObject_InformationLink_class_by_outgoingLinks_reference_FunctionalOutput_with_from_reference_InformationLink(
13793 problem:LogicProblem, interpretation:PartialInterpretation,
13794 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
13795 container:DefinedElement)
13796{
13797 find interpretation(problem,interpretation);
13798 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
13799 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class");
13800 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
13801 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingLinks reference FunctionalOutput");
13802 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
13803 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"from reference InformationLink");
13804 find mustInstanceOfFunctionalOutput_class(problem,interpretation,container);
13805 find mayInstanceOfInformationLink_class(problem,interpretation,newObject);
13806 find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,container,newObject);
13807 find mustExist(problem, interpretation, container);
13808 neg find mustExist(problem, interpretation, newObject);
13809}
13810pattern createObject_InformationLink_class(
13811 problem:LogicProblem, interpretation:PartialInterpretation,
13812 typeInterpretation:PartialComplexTypeInterpretation)
13813{
13814 find interpretation(problem,interpretation);
13815 neg find hasElementInContainment(problem,interpretation);
13816 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
13817 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class");
13818 find mayInstanceOfInformationLink_class(problem,interpretation,newObject);
13819 find mayExist(problem, interpretation, newObject);
13820 neg find mustExist(problem, interpretation, newObject);
13821}
13822pattern createObject_Function_class_by_rootElements_reference_FunctionalArchitectureModel(
13823 problem:LogicProblem, interpretation:PartialInterpretation,
13824 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
13825 container:DefinedElement)
13826{
13827 find interpretation(problem,interpretation);
13828 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
13829 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class");
13830 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
13831 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"rootElements reference FunctionalArchitectureModel");
13832 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,container);
13833 find mayInstanceOfFunction_class(problem,interpretation,newObject);
13834 find mayInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,container,newObject);
13835 find mustExist(problem, interpretation, container);
13836 neg find mustExist(problem, interpretation, newObject);
13837}
13838pattern createObject_Function_class_by_subElements_reference_Function_with_parent_reference_FunctionalElement(
13839 problem:LogicProblem, interpretation:PartialInterpretation,
13840 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
13841 container:DefinedElement)
13842{
13843 find interpretation(problem,interpretation);
13844 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
13845 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class");
13846 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
13847 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"subElements reference Function");
13848 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
13849 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FunctionalElement");
13850 find mustInstanceOfFunction_class(problem,interpretation,container);
13851 find mayInstanceOfFunction_class(problem,interpretation,newObject);
13852 find mayInRelationsubElements_reference_Function(problem,interpretation,container,newObject);
13853 find mustExist(problem, interpretation, container);
13854 neg find mustExist(problem, interpretation, newObject);
13855}
13856pattern createObject_Function_class(
13857 problem:LogicProblem, interpretation:PartialInterpretation,
13858 typeInterpretation:PartialComplexTypeInterpretation)
13859{
13860 find interpretation(problem,interpretation);
13861 neg find hasElementInContainment(problem,interpretation);
13862 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
13863 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class");
13864 find mayInstanceOfFunction_class(problem,interpretation,newObject);
13865 find mayExist(problem, interpretation, newObject);
13866 neg find mustExist(problem, interpretation, newObject);
13867}
13868pattern createObject_FunctionalInterface_class_by_interface_reference_FunctionalElement_with_element_reference_FunctionalInterface(
13869 problem:LogicProblem, interpretation:PartialInterpretation,
13870 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
13871 container:DefinedElement)
13872{
13873 find interpretation(problem,interpretation);
13874 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
13875 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class");
13876 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
13877 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"interface reference FunctionalElement");
13878 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
13879 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"element reference FunctionalInterface");
13880 find mustInstanceOfFunctionalElement_class(problem,interpretation,container);
13881 find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject);
13882 find mayInRelationinterface_reference_FunctionalElement(problem,interpretation,container,newObject);
13883 find mustExist(problem, interpretation, container);
13884 neg find mustExist(problem, interpretation, newObject);
13885}
13886pattern createObject_FunctionalInterface_class(
13887 problem:LogicProblem, interpretation:PartialInterpretation,
13888 typeInterpretation:PartialComplexTypeInterpretation)
13889{
13890 find interpretation(problem,interpretation);
13891 neg find hasElementInContainment(problem,interpretation);
13892 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
13893 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class");
13894 find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject);
13895 find mayExist(problem, interpretation, newObject);
13896 neg find mustExist(problem, interpretation, newObject);
13897}
13898pattern createObject_FunctionalArchitectureModel_class_UndefinedPart(
13899 problem:LogicProblem, interpretation:PartialInterpretation,
13900 typeInterpretation:PartialComplexTypeInterpretation)
13901{
13902 find interpretation(problem,interpretation);
13903 neg find hasElementInContainment(problem,interpretation);
13904 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
13905 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalArchitectureModel class UndefinedPart");
13906 find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,newObject);
13907 find mayExist(problem, interpretation, newObject);
13908 neg find mustExist(problem, interpretation, newObject);
13909}
13910
13911//////////
13912// 4.2 Type refinement
13913//////////
13914pattern refineTypeTo_FunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
13915 find interpretation(problem,interpretation);
13916 PartialInterpretation.newElements(interpretation,element);
13917 find mayInstanceOfFunctionalInput_class(problem,interpretation,element);
13918 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
13919 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
13920 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
13921 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
13922 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
13923 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
13924 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
13925}
13926pattern refineTypeTo_FunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
13927 find interpretation(problem,interpretation);
13928 PartialInterpretation.newElements(interpretation,element);
13929 find mayInstanceOfFunctionalOutput_class(problem,interpretation,element);
13930 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
13931 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
13932 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
13933 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
13934 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
13935 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
13936 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
13937}
13938pattern refineTypeTo_FAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
13939 find interpretation(problem,interpretation);
13940 PartialInterpretation.newElements(interpretation,element);
13941 find mayInstanceOfFAMTerminator_class(problem,interpretation,element);
13942 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
13943 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
13944 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
13945 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
13946 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
13947 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
13948}
13949pattern refineTypeTo_InformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
13950 find interpretation(problem,interpretation);
13951 PartialInterpretation.newElements(interpretation,element);
13952 find mayInstanceOfInformationLink_class(problem,interpretation,element);
13953 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
13954 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
13955 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
13956 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
13957 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
13958 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
13959}
13960pattern refineTypeTo_Function_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
13961 find interpretation(problem,interpretation);
13962 PartialInterpretation.newElements(interpretation,element);
13963 find mayInstanceOfFunction_class(problem,interpretation,element);
13964 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
13965 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
13966 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
13967 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
13968 neg find mustInstanceOfFunction_class(problem,interpretation,element);
13969 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
13970}
13971pattern refineTypeTo_FunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
13972 find interpretation(problem,interpretation);
13973 PartialInterpretation.newElements(interpretation,element);
13974 find mayInstanceOfFunctionalInterface_class(problem,interpretation,element);
13975 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
13976 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
13977 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
13978 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
13979 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
13980 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
13981}
13982pattern refineTypeTo_FunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
13983 find interpretation(problem,interpretation);
13984 PartialInterpretation.newElements(interpretation,element);
13985 find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element);
13986 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
13987 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
13988 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
13989 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
13990 neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element);
13991 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
13992}
13993
13994//////////
13995// 4.3 Relation refinement
13996//////////
13997pattern refineRelation_model_reference_FunctionalElement(
13998 problem:LogicProblem, interpretation:PartialInterpretation,
13999 relationIterpretation:PartialRelationInterpretation,
14000 from: DefinedElement, to: DefinedElement)
14001{
14002 find interpretation(problem,interpretation);
14003 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
14004 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement");
14005 find mustExist(problem, interpretation, from);
14006 find mustExist(problem, interpretation, to);
14007 find mustInstanceOfFunctionalElement_class(problem,interpretation,from);
14008 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,to);
14009 find mayInRelationmodel_reference_FunctionalElement(problem,interpretation,from,to);
14010 neg find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,from,to);
14011}
14012pattern refineRelation_IncomingLinks_reference_FunctionalInput_and_to_reference_InformationLink(
14013 problem:LogicProblem, interpretation:PartialInterpretation,
14014 relationIterpretation:PartialRelationInterpretation, oppositeInterpretation:PartialRelationInterpretation,
14015 from: DefinedElement, to: DefinedElement)
14016{
14017 find interpretation(problem,interpretation);
14018 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
14019 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"IncomingLinks reference FunctionalInput");
14020 PartialInterpretation.partialrelationinterpretation(interpretation,oppositeInterpretation);
14021 PartialRelationInterpretation.interpretationOf.name(oppositeInterpretation,"to reference InformationLink");
14022 find mustExist(problem, interpretation, from);
14023 find mustExist(problem, interpretation, to);
14024 find mustInstanceOfFunctionalInput_class(problem,interpretation,from);
14025 find mustInstanceOfInformationLink_class(problem,interpretation,to);
14026 find mayInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,from,to);
14027 neg find mustInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,from,to);
14028}
14029pattern refineRelation_type_attribute_Function(
14030 problem:LogicProblem, interpretation:PartialInterpretation,
14031 relationIterpretation:PartialRelationInterpretation,
14032 from: DefinedElement, to: DefinedElement)
14033{
14034 find interpretation(problem,interpretation);
14035 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
14036 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function");
14037 find mustExist(problem, interpretation, from);
14038 find mustExist(problem, interpretation, to);
14039 find mustInstanceOfFunction_class(problem,interpretation,from);
14040 find mustInstanceOfFunctionType_enum(problem,interpretation,to);
14041 find mayInRelationtype_attribute_Function(problem,interpretation,from,to);
14042 neg find mustInRelationtype_attribute_Function(problem,interpretation,from,to);
14043}
14044import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage"
14045import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem"
14046import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language"
14047
14048//////////
14049// 0. Util
14050//////////
14051private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) {
14052 PartialInterpretation.problem(interpretation,problem);
14053}
14054
14055/////////////////////////
14056// 0.1 Existence
14057/////////////////////////
14058private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
14059 find interpretation(problem,interpretation);
14060 LogicProblem.elements(problem,element);
14061} or {
14062 find interpretation(problem,interpretation);
14063 PartialInterpretation.newElements(interpretation,element);
14064}
14065
14066private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
14067 find mustExist(problem,interpretation,element);
14068} or {
14069 find interpretation(problem,interpretation);
14070 neg find elementCloseWorld(element);
14071 PartialInterpretation.openWorldElements(interpretation,element);
14072}
14073
14074private pattern elementCloseWorld(element:DefinedElement) {
14075 PartialInterpretation.openWorldElements(i,element);
14076 PartialInterpretation.maxNewElements(i,0);
14077} or {
14078 Scope.targetTypeInterpretation(scope,interpretation);
14079 PartialTypeInterpratation.elements(interpretation,element);
14080 Scope.maxNewElements(scope,0);
14081}
14082
14083////////////////////////
14084// 0.2 Equivalence
14085////////////////////////
14086pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) {
14087 find mayExist(problem,interpretation,a);
14088 find mayExist(problem,interpretation,b);
14089 a == b;
14090}
14091
14092////////////////////////
14093// 0.3 Required Patterns by TypeIndexer
14094////////////////////////
14095private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) {
14096 find interpretation(problem,interpretation);
14097 LogicProblem.types(problem,type);
14098 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
14099 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
14100}
14101
14102private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) {
14103 find interpretation(problem,interpretation);
14104 LogicProblem.types(problem,type);
14105 TypeDefinition.elements(type,element);
14106} or {
14107 find interpretation(problem,interpretation);
14108 find typeInterpretation(problem,interpretation,type,typeInterpretation);
14109 PartialComplexTypeInterpretation.elements(typeInterpretation,element);
14110}
14111
14112private pattern isPrimitive(element: PrimitiveElement) {
14113 PrimitiveElement(element);
14114}
14115
14116//////////
14117// 1. Problem-Specific Base Indexers
14118//////////
14119// 1.1 Type Indexers
14120//////////
14121// 1.1.1 primitive Type Indexers
14122//////////
14123
14124//////////
14125// 1.1.2 domain-specific Type Indexers
14126//////////
14127/**
14128 * An element must be an instance of type "FunctionalElement class".
14129 */
14130private pattern mustInstanceOfFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
14131 Type.name(type,"FunctionalElement class");
14132 find directInstanceOf(problem,interpretation,element,type);
14133}
14134private pattern scopeDisallowsNewFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation) {
14135 find interpretation(problem,interpretation);
14136 PartialInterpretation.scopes(interpretation,scope);
14137 Scope.targetTypeInterpretation(scope,typeInterpretation);
14138 Scope.maxNewElements(scope,0);
14139 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
14140 Type.name(type,"FunctionalElement class");
14141}
14142
14143/**
14144 * An element may be an instance of type "FunctionalElement class".
14145 */
14146private pattern mayInstanceOfFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
14147{
14148 find interpretation(problem,interpretation);
14149 PartialInterpretation.newElements(interpretation,element);
14150 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
14151 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
14152 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
14153 neg find mustInstanceOfFunction_class(problem,interpretation,element);
14154 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
14155 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
14156 neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation);
14157 neg find isPrimitive(element);
14158} or {
14159 find interpretation(problem,interpretation);
14160 PartialInterpretation.openWorldElements(interpretation,element);
14161 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
14162 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
14163 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
14164 neg find mustInstanceOfFunction_class(problem,interpretation,element);
14165 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
14166 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
14167 neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation);
14168 neg find isPrimitive(element);
14169} or
14170{ find mustInstanceOfFunctionalElement_class(problem,interpretation,element); }
14171/**
14172 * An element must be an instance of type "FunctionalArchitectureModel class".
14173 */
14174private pattern mustInstanceOfFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
14175 Type.name(type,"FunctionalArchitectureModel class");
14176 find directInstanceOf(problem,interpretation,element,type);
14177}
14178private pattern scopeDisallowsNewFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation) {
14179 find interpretation(problem,interpretation);
14180 PartialInterpretation.scopes(interpretation,scope);
14181 Scope.targetTypeInterpretation(scope,typeInterpretation);
14182 Scope.maxNewElements(scope,0);
14183 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
14184 Type.name(type,"FunctionalArchitectureModel class");
14185}
14186
14187/**
14188 * An element may be an instance of type "FunctionalArchitectureModel class".
14189 */
14190private pattern mayInstanceOfFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
14191{
14192 find interpretation(problem,interpretation);
14193 PartialInterpretation.newElements(interpretation,element);
14194 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
14195 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
14196 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
14197 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
14198 neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element);
14199 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
14200 neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation);
14201 neg find isPrimitive(element);
14202} or {
14203 find interpretation(problem,interpretation);
14204 PartialInterpretation.openWorldElements(interpretation,element);
14205 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
14206 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
14207 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
14208 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
14209 neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element);
14210 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
14211 neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation);
14212 neg find isPrimitive(element);
14213} or
14214{ find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); }
14215/**
14216 * An element must be an instance of type "Function class".
14217 */
14218private pattern mustInstanceOfFunction_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
14219 Type.name(type,"Function class");
14220 find directInstanceOf(problem,interpretation,element,type);
14221}
14222private pattern scopeDisallowsNewFunction_class(problem:LogicProblem, interpretation:PartialInterpretation) {
14223 find interpretation(problem,interpretation);
14224 PartialInterpretation.scopes(interpretation,scope);
14225 Scope.targetTypeInterpretation(scope,typeInterpretation);
14226 Scope.maxNewElements(scope,0);
14227 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
14228 Type.name(type,"Function class");
14229}
14230
14231/**
14232 * An element may be an instance of type "Function class".
14233 */
14234private pattern mayInstanceOfFunction_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
14235{
14236 find interpretation(problem,interpretation);
14237 PartialInterpretation.newElements(interpretation,element);
14238 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
14239 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
14240 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
14241 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
14242 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
14243 neg find scopeDisallowsNewFunction_class(problem, interpretation);
14244 neg find isPrimitive(element);
14245} or {
14246 find interpretation(problem,interpretation);
14247 PartialInterpretation.openWorldElements(interpretation,element);
14248 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
14249 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
14250 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
14251 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
14252 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
14253 neg find scopeDisallowsNewFunction_class(problem, interpretation);
14254 neg find isPrimitive(element);
14255} or
14256{ find mustInstanceOfFunction_class(problem,interpretation,element); }
14257/**
14258 * An element must be an instance of type "FAMTerminator class".
14259 */
14260private pattern mustInstanceOfFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
14261 Type.name(type,"FAMTerminator class");
14262 find directInstanceOf(problem,interpretation,element,type);
14263}
14264private pattern scopeDisallowsNewFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation) {
14265 find interpretation(problem,interpretation);
14266 PartialInterpretation.scopes(interpretation,scope);
14267 Scope.targetTypeInterpretation(scope,typeInterpretation);
14268 Scope.maxNewElements(scope,0);
14269 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
14270 Type.name(type,"FAMTerminator class");
14271}
14272
14273/**
14274 * An element may be an instance of type "FAMTerminator class".
14275 */
14276private pattern mayInstanceOfFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
14277{
14278 find interpretation(problem,interpretation);
14279 PartialInterpretation.newElements(interpretation,element);
14280 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
14281 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
14282 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
14283 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
14284 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
14285 neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation);
14286 neg find isPrimitive(element);
14287} or {
14288 find interpretation(problem,interpretation);
14289 PartialInterpretation.openWorldElements(interpretation,element);
14290 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
14291 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
14292 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
14293 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
14294 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
14295 neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation);
14296 neg find isPrimitive(element);
14297} or
14298{ find mustInstanceOfFAMTerminator_class(problem,interpretation,element); }
14299/**
14300 * An element must be an instance of type "InformationLink class".
14301 */
14302private pattern mustInstanceOfInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
14303 Type.name(type,"InformationLink class");
14304 find directInstanceOf(problem,interpretation,element,type);
14305}
14306private pattern scopeDisallowsNewInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation) {
14307 find interpretation(problem,interpretation);
14308 PartialInterpretation.scopes(interpretation,scope);
14309 Scope.targetTypeInterpretation(scope,typeInterpretation);
14310 Scope.maxNewElements(scope,0);
14311 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
14312 Type.name(type,"InformationLink class");
14313}
14314
14315/**
14316 * An element may be an instance of type "InformationLink class".
14317 */
14318private pattern mayInstanceOfInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
14319{
14320 find interpretation(problem,interpretation);
14321 PartialInterpretation.newElements(interpretation,element);
14322 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
14323 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
14324 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
14325 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
14326 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
14327 neg find scopeDisallowsNewInformationLink_class(problem, interpretation);
14328 neg find isPrimitive(element);
14329} or {
14330 find interpretation(problem,interpretation);
14331 PartialInterpretation.openWorldElements(interpretation,element);
14332 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
14333 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
14334 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
14335 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
14336 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
14337 neg find scopeDisallowsNewInformationLink_class(problem, interpretation);
14338 neg find isPrimitive(element);
14339} or
14340{ find mustInstanceOfInformationLink_class(problem,interpretation,element); }
14341/**
14342 * An element must be an instance of type "FunctionalInterface class".
14343 */
14344private pattern mustInstanceOfFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
14345 Type.name(type,"FunctionalInterface class");
14346 find directInstanceOf(problem,interpretation,element,type);
14347}
14348private pattern scopeDisallowsNewFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation) {
14349 find interpretation(problem,interpretation);
14350 PartialInterpretation.scopes(interpretation,scope);
14351 Scope.targetTypeInterpretation(scope,typeInterpretation);
14352 Scope.maxNewElements(scope,0);
14353 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
14354 Type.name(type,"FunctionalInterface class");
14355}
14356
14357/**
14358 * An element may be an instance of type "FunctionalInterface class".
14359 */
14360private pattern mayInstanceOfFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
14361{
14362 find interpretation(problem,interpretation);
14363 PartialInterpretation.newElements(interpretation,element);
14364 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
14365 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
14366 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
14367 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
14368 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
14369 neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation);
14370 neg find isPrimitive(element);
14371} or {
14372 find interpretation(problem,interpretation);
14373 PartialInterpretation.openWorldElements(interpretation,element);
14374 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
14375 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
14376 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
14377 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
14378 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
14379 neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation);
14380 neg find isPrimitive(element);
14381} or
14382{ find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); }
14383/**
14384 * An element must be an instance of type "FunctionalInput class".
14385 */
14386private pattern mustInstanceOfFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
14387 Type.name(type,"FunctionalInput class");
14388 find directInstanceOf(problem,interpretation,element,type);
14389}
14390private pattern scopeDisallowsNewFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation) {
14391 find interpretation(problem,interpretation);
14392 PartialInterpretation.scopes(interpretation,scope);
14393 Scope.targetTypeInterpretation(scope,typeInterpretation);
14394 Scope.maxNewElements(scope,0);
14395 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
14396 Type.name(type,"FunctionalInput class");
14397}
14398
14399/**
14400 * An element may be an instance of type "FunctionalInput class".
14401 */
14402private pattern mayInstanceOfFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
14403{
14404 find interpretation(problem,interpretation);
14405 PartialInterpretation.newElements(interpretation,element);
14406 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
14407 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
14408 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
14409 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
14410 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
14411 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
14412 neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation);
14413 neg find isPrimitive(element);
14414} or {
14415 find interpretation(problem,interpretation);
14416 PartialInterpretation.openWorldElements(interpretation,element);
14417 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
14418 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
14419 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
14420 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
14421 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
14422 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
14423 neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation);
14424 neg find isPrimitive(element);
14425} or
14426{ find mustInstanceOfFunctionalInput_class(problem,interpretation,element); }
14427/**
14428 * An element must be an instance of type "FunctionalOutput class".
14429 */
14430private pattern mustInstanceOfFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
14431 Type.name(type,"FunctionalOutput class");
14432 find directInstanceOf(problem,interpretation,element,type);
14433}
14434private pattern scopeDisallowsNewFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation) {
14435 find interpretation(problem,interpretation);
14436 PartialInterpretation.scopes(interpretation,scope);
14437 Scope.targetTypeInterpretation(scope,typeInterpretation);
14438 Scope.maxNewElements(scope,0);
14439 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
14440 Type.name(type,"FunctionalOutput class");
14441}
14442
14443/**
14444 * An element may be an instance of type "FunctionalOutput class".
14445 */
14446private pattern mayInstanceOfFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
14447{
14448 find interpretation(problem,interpretation);
14449 PartialInterpretation.newElements(interpretation,element);
14450 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
14451 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
14452 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
14453 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
14454 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
14455 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
14456 neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation);
14457 neg find isPrimitive(element);
14458} or {
14459 find interpretation(problem,interpretation);
14460 PartialInterpretation.openWorldElements(interpretation,element);
14461 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
14462 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
14463 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
14464 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
14465 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
14466 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
14467 neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation);
14468 neg find isPrimitive(element);
14469} or
14470{ find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); }
14471/**
14472 * An element must be an instance of type "FunctionalData class".
14473 */
14474private pattern mustInstanceOfFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
14475 Type.name(type,"FunctionalData class");
14476 find directInstanceOf(problem,interpretation,element,type);
14477}
14478private pattern scopeDisallowsNewFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation) {
14479 find interpretation(problem,interpretation);
14480 PartialInterpretation.scopes(interpretation,scope);
14481 Scope.targetTypeInterpretation(scope,typeInterpretation);
14482 Scope.maxNewElements(scope,0);
14483 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
14484 Type.name(type,"FunctionalData class");
14485}
14486
14487/**
14488 * An element may be an instance of type "FunctionalData class".
14489 */
14490private pattern mayInstanceOfFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
14491{
14492 find interpretation(problem,interpretation);
14493 PartialInterpretation.newElements(interpretation,element);
14494 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
14495 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
14496 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
14497 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
14498 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
14499 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
14500 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
14501 neg find scopeDisallowsNewFunctionalData_class(problem, interpretation);
14502 neg find isPrimitive(element);
14503} or {
14504 find interpretation(problem,interpretation);
14505 PartialInterpretation.openWorldElements(interpretation,element);
14506 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
14507 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
14508 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
14509 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
14510 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
14511 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
14512 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
14513 neg find scopeDisallowsNewFunctionalData_class(problem, interpretation);
14514 neg find isPrimitive(element);
14515} or
14516{ find mustInstanceOfFunctionalData_class(problem,interpretation,element); }
14517/**
14518 * An element must be an instance of type "FunctionType enum".
14519 */
14520private pattern mustInstanceOfFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
14521 Type.name(type,"FunctionType enum");
14522 find directInstanceOf(problem,interpretation,element,type);
14523}
14524private pattern scopeDisallowsNewFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation) {
14525 find interpretation(problem,interpretation);
14526 PartialInterpretation.scopes(interpretation,scope);
14527 Scope.targetTypeInterpretation(scope,typeInterpretation);
14528 Scope.maxNewElements(scope,0);
14529 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
14530 Type.name(type,"FunctionType enum");
14531}
14532
14533/**
14534 * An element may be an instance of type "FunctionType enum".
14535 */
14536private pattern mayInstanceOfFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
14537{ find mustInstanceOfFunctionType_enum(problem,interpretation,element); }
14538/**
14539 * An element must be an instance of type "FunctionalArchitectureModel class DefinedPart".
14540 */
14541private pattern mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
14542 Type.name(type,"FunctionalArchitectureModel class DefinedPart");
14543 find directInstanceOf(problem,interpretation,element,type);
14544}
14545private pattern scopeDisallowsNewFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
14546 find interpretation(problem,interpretation);
14547 PartialInterpretation.scopes(interpretation,scope);
14548 Scope.targetTypeInterpretation(scope,typeInterpretation);
14549 Scope.maxNewElements(scope,0);
14550 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
14551 Type.name(type,"FunctionalArchitectureModel class DefinedPart");
14552}
14553
14554/**
14555 * An element may be an instance of type "FunctionalArchitectureModel class DefinedPart".
14556 */
14557private pattern mayInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
14558{ find mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem,interpretation,element); }
14559/**
14560 * An element must be an instance of type "FunctionalArchitectureModel class UndefinedPart".
14561 */
14562private pattern mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
14563 Type.name(type,"FunctionalArchitectureModel class UndefinedPart");
14564 find directInstanceOf(problem,interpretation,element,type);
14565}
14566private pattern scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
14567 find interpretation(problem,interpretation);
14568 PartialInterpretation.scopes(interpretation,scope);
14569 Scope.targetTypeInterpretation(scope,typeInterpretation);
14570 Scope.maxNewElements(scope,0);
14571 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
14572 Type.name(type,"FunctionalArchitectureModel class UndefinedPart");
14573}
14574
14575/**
14576 * An element may be an instance of type "FunctionalArchitectureModel class UndefinedPart".
14577 */
14578private pattern mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
14579{
14580 find interpretation(problem,interpretation);
14581 PartialInterpretation.newElements(interpretation,element);
14582 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
14583 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
14584 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
14585 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
14586 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
14587 neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation);
14588 neg find isPrimitive(element);
14589} or {
14590 find interpretation(problem,interpretation);
14591 PartialInterpretation.openWorldElements(interpretation,element);
14592 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
14593 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
14594 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
14595 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
14596 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
14597 neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation);
14598 neg find isPrimitive(element);
14599} or
14600{ find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); }
14601
14602//////////
14603// 1.2 Relation Declaration Indexers
14604//////////
14605/**
14606 * Matcher for detecting tuples t where []interface reference FunctionalElement(source,target)
14607 */
14608private pattern mustInRelationinterface_reference_FunctionalElement(
14609 problem:LogicProblem, interpretation:PartialInterpretation,
14610 source: DefinedElement, target:DefinedElement)
14611{
14612 find interpretation(problem,interpretation);
14613 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
14614 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface reference FunctionalElement");
14615 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
14616 BinaryElementRelationLink.param1(link,source);
14617 BinaryElementRelationLink.param2(link,target);
14618}
14619/**
14620 * Matcher for detecting tuples t where <>interface reference FunctionalElement(source,target)
14621 */
14622private pattern mayInRelationinterface_reference_FunctionalElement(
14623 problem:LogicProblem, interpretation:PartialInterpretation,
14624 source: DefinedElement, target:DefinedElement)
14625{
14626 find interpretation(problem,interpretation);
14627 // The two endpoint of the link have to exist
14628 find mayExist(problem, interpretation, source);
14629 find mayExist(problem, interpretation, target);
14630 // Type consistency
14631 find mayInstanceOfFunctionalElement_class(problem,interpretation,source);
14632 find mayInstanceOfFunctionalInterface_class(problem,interpretation,target);
14633 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
14634 // the upper bound of the multiplicity should be considered.
14635 numberOfExistingReferences == count find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,_);
14636 check(numberOfExistingReferences < 1);
14637 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
14638 // the upper bound of the opposite reference multiplicity should be considered.
14639 numberOfExistingOppositeReferences == count find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,target,_);
14640 check(numberOfExistingOppositeReferences < 1);
14641 // The reference is containment, then a new reference cannot be create if:
14642 // 1. Multiple parents
14643 neg find mustContains4(problem,interpretation,_,target);
14644 // 2. Circle in the containment hierarchy
14645 neg find mustTransitiveContains(source,target);
14646} or {
14647 find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,target);
14648}
14649/**
14650 * Matcher for detecting tuples t where []model reference FunctionalElement(source,target)
14651 */
14652 private pattern mustInRelationmodel_reference_FunctionalElement(
14653 problem:LogicProblem, interpretation:PartialInterpretation,
14654 source: DefinedElement, target:DefinedElement)
14655 {
14656 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_model(problem,interpretation,source,target);
14657 }
14658/**
14659 * Matcher for detecting tuples t where []model reference FunctionalElement(source,target)
14660 */
14661 private pattern mayInRelationmodel_reference_FunctionalElement(
14662 problem:LogicProblem, interpretation:PartialInterpretation,
14663 source: DefinedElement, target:DefinedElement)
14664 {
14665 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_model(problem,interpretation,source,target);
14666 }
14667/**
14668 * Matcher for detecting tuples t where []parent reference FunctionalElement(source,target)
14669 */
14670private pattern mustInRelationparent_reference_FunctionalElement(
14671 problem:LogicProblem, interpretation:PartialInterpretation,
14672 source: DefinedElement, target:DefinedElement)
14673{
14674 find interpretation(problem,interpretation);
14675 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
14676 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"parent reference FunctionalElement");
14677 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
14678 BinaryElementRelationLink.param1(link,source);
14679 BinaryElementRelationLink.param2(link,target);
14680}
14681/**
14682 * Matcher for detecting tuples t where <>parent reference FunctionalElement(source,target)
14683 */
14684private pattern mayInRelationparent_reference_FunctionalElement(
14685 problem:LogicProblem, interpretation:PartialInterpretation,
14686 source: DefinedElement, target:DefinedElement)
14687{
14688 find interpretation(problem,interpretation);
14689 // The two endpoint of the link have to exist
14690 find mayExist(problem, interpretation, source);
14691 find mayExist(problem, interpretation, target);
14692 // Type consistency
14693 find mayInstanceOfFunctionalElement_class(problem,interpretation,source);
14694 find mayInstanceOfFunction_class(problem,interpretation,target);
14695 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
14696 // the upper bound of the multiplicity should be considered.
14697 numberOfExistingReferences == count find mustInRelationparent_reference_FunctionalElement(problem,interpretation,source,_);
14698 check(numberOfExistingReferences < 1);
14699 // The eOpposite of the reference is containment, then a referene cannot be created if
14700 // 1. Multiple parents
14701 neg find mustContains4(problem,interpretation,source,_);
14702 // 2. Circle in the containment hierarchy
14703 neg find mustTransitiveContains(source,target);
14704} or {
14705 find mustInRelationparent_reference_FunctionalElement(problem,interpretation,source,target);
14706}
14707/**
14708 * Matcher for detecting tuples t where []rootElements reference FunctionalArchitectureModel(source,target)
14709 */
14710private pattern mustInRelationrootElements_reference_FunctionalArchitectureModel(
14711 problem:LogicProblem, interpretation:PartialInterpretation,
14712 source: DefinedElement, target:DefinedElement)
14713{
14714 find interpretation(problem,interpretation);
14715 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
14716 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"rootElements reference FunctionalArchitectureModel");
14717 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
14718 BinaryElementRelationLink.param1(link,source);
14719 BinaryElementRelationLink.param2(link,target);
14720}
14721/**
14722 * Matcher for detecting tuples t where <>rootElements reference FunctionalArchitectureModel(source,target)
14723 */
14724private pattern mayInRelationrootElements_reference_FunctionalArchitectureModel(
14725 problem:LogicProblem, interpretation:PartialInterpretation,
14726 source: DefinedElement, target:DefinedElement)
14727{
14728 find interpretation(problem,interpretation);
14729 // The two endpoint of the link have to exist
14730 find mayExist(problem, interpretation, source);
14731 find mayExist(problem, interpretation, target);
14732 // Type consistency
14733 find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,source);
14734 find mayInstanceOfFunctionalElement_class(problem,interpretation,target);
14735 // The reference is containment, then a new reference cannot be create if:
14736 // 1. Multiple parents
14737 neg find mustContains4(problem,interpretation,_,target);
14738 // 2. Circle in the containment hierarchy
14739 neg find mustTransitiveContains(source,target);
14740} or {
14741 find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,source,target);
14742}
14743/**
14744 * Matcher for detecting tuples t where []subElements reference Function(source,target)
14745 */
14746private pattern mustInRelationsubElements_reference_Function(
14747 problem:LogicProblem, interpretation:PartialInterpretation,
14748 source: DefinedElement, target:DefinedElement)
14749{
14750 find interpretation(problem,interpretation);
14751 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
14752 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"subElements reference Function");
14753 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
14754 BinaryElementRelationLink.param1(link,source);
14755 BinaryElementRelationLink.param2(link,target);
14756}
14757/**
14758 * Matcher for detecting tuples t where <>subElements reference Function(source,target)
14759 */
14760private pattern mayInRelationsubElements_reference_Function(
14761 problem:LogicProblem, interpretation:PartialInterpretation,
14762 source: DefinedElement, target:DefinedElement)
14763{
14764 find interpretation(problem,interpretation);
14765 // The two endpoint of the link have to exist
14766 find mayExist(problem, interpretation, source);
14767 find mayExist(problem, interpretation, target);
14768 // Type consistency
14769 find mayInstanceOfFunction_class(problem,interpretation,source);
14770 find mayInstanceOfFunctionalElement_class(problem,interpretation,target);
14771 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
14772 // the upper bound of the opposite reference multiplicity should be considered.
14773 numberOfExistingOppositeReferences == count find mustInRelationparent_reference_FunctionalElement(problem,interpretation,target,_);
14774 check(numberOfExistingOppositeReferences < 1);
14775 // The reference is containment, then a new reference cannot be create if:
14776 // 1. Multiple parents
14777 neg find mustContains4(problem,interpretation,_,target);
14778 // 2. Circle in the containment hierarchy
14779 neg find mustTransitiveContains(source,target);
14780} or {
14781 find mustInRelationsubElements_reference_Function(problem,interpretation,source,target);
14782}
14783/**
14784 * Matcher for detecting tuples t where []data reference FAMTerminator(source,target)
14785 */
14786private pattern mustInRelationdata_reference_FAMTerminator(
14787 problem:LogicProblem, interpretation:PartialInterpretation,
14788 source: DefinedElement, target:DefinedElement)
14789{
14790 find interpretation(problem,interpretation);
14791 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
14792 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"data reference FAMTerminator");
14793 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
14794 BinaryElementRelationLink.param1(link,source);
14795 BinaryElementRelationLink.param2(link,target);
14796}
14797/**
14798 * Matcher for detecting tuples t where <>data reference FAMTerminator(source,target)
14799 */
14800private pattern mayInRelationdata_reference_FAMTerminator(
14801 problem:LogicProblem, interpretation:PartialInterpretation,
14802 source: DefinedElement, target:DefinedElement)
14803{
14804 find interpretation(problem,interpretation);
14805 // The two endpoint of the link have to exist
14806 find mayExist(problem, interpretation, source);
14807 find mayExist(problem, interpretation, target);
14808 // Type consistency
14809 find mayInstanceOfFAMTerminator_class(problem,interpretation,source);
14810 find mayInstanceOfFunctionalData_class(problem,interpretation,target);
14811 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
14812 // the upper bound of the multiplicity should be considered.
14813 numberOfExistingReferences == count find mustInRelationdata_reference_FAMTerminator(problem,interpretation,source,_);
14814 check(numberOfExistingReferences < 1);
14815 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
14816 // the upper bound of the opposite reference multiplicity should be considered.
14817 numberOfExistingOppositeReferences == count find mustInRelationterminator_reference_FunctionalData(problem,interpretation,target,_);
14818 check(numberOfExistingOppositeReferences < 1);
14819 // The eOpposite of the reference is containment, then a referene cannot be created if
14820 // 1. Multiple parents
14821 neg find mustContains4(problem,interpretation,source,_);
14822 // 2. Circle in the containment hierarchy
14823 neg find mustTransitiveContains(source,target);
14824} or {
14825 find mustInRelationdata_reference_FAMTerminator(problem,interpretation,source,target);
14826}
14827/**
14828 * Matcher for detecting tuples t where []from reference InformationLink(source,target)
14829 */
14830private pattern mustInRelationfrom_reference_InformationLink(
14831 problem:LogicProblem, interpretation:PartialInterpretation,
14832 source: DefinedElement, target:DefinedElement)
14833{
14834 find interpretation(problem,interpretation);
14835 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
14836 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"from reference InformationLink");
14837 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
14838 BinaryElementRelationLink.param1(link,source);
14839 BinaryElementRelationLink.param2(link,target);
14840}
14841/**
14842 * Matcher for detecting tuples t where <>from reference InformationLink(source,target)
14843 */
14844private pattern mayInRelationfrom_reference_InformationLink(
14845 problem:LogicProblem, interpretation:PartialInterpretation,
14846 source: DefinedElement, target:DefinedElement)
14847{
14848 find interpretation(problem,interpretation);
14849 // The two endpoint of the link have to exist
14850 find mayExist(problem, interpretation, source);
14851 find mayExist(problem, interpretation, target);
14852 // Type consistency
14853 find mayInstanceOfInformationLink_class(problem,interpretation,source);
14854 find mayInstanceOfFunctionalOutput_class(problem,interpretation,target);
14855 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
14856 // the upper bound of the multiplicity should be considered.
14857 numberOfExistingReferences == count find mustInRelationfrom_reference_InformationLink(problem,interpretation,source,_);
14858 check(numberOfExistingReferences < 1);
14859 // The eOpposite of the reference is containment, then a referene cannot be created if
14860 // 1. Multiple parents
14861 neg find mustContains4(problem,interpretation,source,_);
14862 // 2. Circle in the containment hierarchy
14863 neg find mustTransitiveContains(source,target);
14864} or {
14865 find mustInRelationfrom_reference_InformationLink(problem,interpretation,source,target);
14866}
14867/**
14868 * Matcher for detecting tuples t where []to reference InformationLink(source,target)
14869 */
14870private pattern mustInRelationto_reference_InformationLink(
14871 problem:LogicProblem, interpretation:PartialInterpretation,
14872 source: DefinedElement, target:DefinedElement)
14873{
14874 find interpretation(problem,interpretation);
14875 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
14876 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"to reference InformationLink");
14877 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
14878 BinaryElementRelationLink.param1(link,source);
14879 BinaryElementRelationLink.param2(link,target);
14880}
14881/**
14882 * Matcher for detecting tuples t where <>to reference InformationLink(source,target)
14883 */
14884private pattern mayInRelationto_reference_InformationLink(
14885 problem:LogicProblem, interpretation:PartialInterpretation,
14886 source: DefinedElement, target:DefinedElement)
14887{
14888 find interpretation(problem,interpretation);
14889 // The two endpoint of the link have to exist
14890 find mayExist(problem, interpretation, source);
14891 find mayExist(problem, interpretation, target);
14892 // Type consistency
14893 find mayInstanceOfInformationLink_class(problem,interpretation,source);
14894 find mayInstanceOfFunctionalInput_class(problem,interpretation,target);
14895 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
14896 // the upper bound of the multiplicity should be considered.
14897 numberOfExistingReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,source,_);
14898 check(numberOfExistingReferences < 1);
14899} or {
14900 find mustInRelationto_reference_InformationLink(problem,interpretation,source,target);
14901}
14902/**
14903 * Matcher for detecting tuples t where []data reference FunctionalInterface(source,target)
14904 */
14905private pattern mustInRelationdata_reference_FunctionalInterface(
14906 problem:LogicProblem, interpretation:PartialInterpretation,
14907 source: DefinedElement, target:DefinedElement)
14908{
14909 find interpretation(problem,interpretation);
14910 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
14911 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"data reference FunctionalInterface");
14912 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
14913 BinaryElementRelationLink.param1(link,source);
14914 BinaryElementRelationLink.param2(link,target);
14915}
14916/**
14917 * Matcher for detecting tuples t where <>data reference FunctionalInterface(source,target)
14918 */
14919private pattern mayInRelationdata_reference_FunctionalInterface(
14920 problem:LogicProblem, interpretation:PartialInterpretation,
14921 source: DefinedElement, target:DefinedElement)
14922{
14923 find interpretation(problem,interpretation);
14924 // The two endpoint of the link have to exist
14925 find mayExist(problem, interpretation, source);
14926 find mayExist(problem, interpretation, target);
14927 // Type consistency
14928 find mayInstanceOfFunctionalInterface_class(problem,interpretation,source);
14929 find mayInstanceOfFunctionalData_class(problem,interpretation,target);
14930 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
14931 // the upper bound of the opposite reference multiplicity should be considered.
14932 numberOfExistingOppositeReferences == count find mustInRelationinterface_reference_FunctionalData(problem,interpretation,target,_);
14933 check(numberOfExistingOppositeReferences < 1);
14934 // The reference is containment, then a new reference cannot be create if:
14935 // 1. Multiple parents
14936 neg find mustContains4(problem,interpretation,_,target);
14937 // 2. Circle in the containment hierarchy
14938 neg find mustTransitiveContains(source,target);
14939} or {
14940 find mustInRelationdata_reference_FunctionalInterface(problem,interpretation,source,target);
14941}
14942/**
14943 * Matcher for detecting tuples t where []element reference FunctionalInterface(source,target)
14944 */
14945private pattern mustInRelationelement_reference_FunctionalInterface(
14946 problem:LogicProblem, interpretation:PartialInterpretation,
14947 source: DefinedElement, target:DefinedElement)
14948{
14949 find interpretation(problem,interpretation);
14950 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
14951 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"element reference FunctionalInterface");
14952 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
14953 BinaryElementRelationLink.param1(link,source);
14954 BinaryElementRelationLink.param2(link,target);
14955}
14956/**
14957 * Matcher for detecting tuples t where <>element reference FunctionalInterface(source,target)
14958 */
14959private pattern mayInRelationelement_reference_FunctionalInterface(
14960 problem:LogicProblem, interpretation:PartialInterpretation,
14961 source: DefinedElement, target:DefinedElement)
14962{
14963 find interpretation(problem,interpretation);
14964 // The two endpoint of the link have to exist
14965 find mayExist(problem, interpretation, source);
14966 find mayExist(problem, interpretation, target);
14967 // Type consistency
14968 find mayInstanceOfFunctionalInterface_class(problem,interpretation,source);
14969 find mayInstanceOfFunctionalElement_class(problem,interpretation,target);
14970 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
14971 // the upper bound of the multiplicity should be considered.
14972 numberOfExistingReferences == count find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,source,_);
14973 check(numberOfExistingReferences < 1);
14974 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
14975 // the upper bound of the opposite reference multiplicity should be considered.
14976 numberOfExistingOppositeReferences == count find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,target,_);
14977 check(numberOfExistingOppositeReferences < 1);
14978 // The eOpposite of the reference is containment, then a referene cannot be created if
14979 // 1. Multiple parents
14980 neg find mustContains4(problem,interpretation,source,_);
14981 // 2. Circle in the containment hierarchy
14982 neg find mustTransitiveContains(source,target);
14983} or {
14984 find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,source,target);
14985}
14986/**
14987 * Matcher for detecting tuples t where []IncomingLinks reference FunctionalInput(source,target)
14988 */
14989private pattern mustInRelationIncomingLinks_reference_FunctionalInput(
14990 problem:LogicProblem, interpretation:PartialInterpretation,
14991 source: DefinedElement, target:DefinedElement)
14992{
14993 find interpretation(problem,interpretation);
14994 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
14995 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"IncomingLinks reference FunctionalInput");
14996 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
14997 BinaryElementRelationLink.param1(link,source);
14998 BinaryElementRelationLink.param2(link,target);
14999}
15000/**
15001 * Matcher for detecting tuples t where <>IncomingLinks reference FunctionalInput(source,target)
15002 */
15003private pattern mayInRelationIncomingLinks_reference_FunctionalInput(
15004 problem:LogicProblem, interpretation:PartialInterpretation,
15005 source: DefinedElement, target:DefinedElement)
15006{
15007 find interpretation(problem,interpretation);
15008 // The two endpoint of the link have to exist
15009 find mayExist(problem, interpretation, source);
15010 find mayExist(problem, interpretation, target);
15011 // Type consistency
15012 find mayInstanceOfFunctionalInput_class(problem,interpretation,source);
15013 find mayInstanceOfInformationLink_class(problem,interpretation,target);
15014 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
15015 // the upper bound of the opposite reference multiplicity should be considered.
15016 numberOfExistingOppositeReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,target,_);
15017 check(numberOfExistingOppositeReferences < 1);
15018} or {
15019 find mustInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,source,target);
15020}
15021/**
15022 * Matcher for detecting tuples t where []outgoingLinks reference FunctionalOutput(source,target)
15023 */
15024private pattern mustInRelationoutgoingLinks_reference_FunctionalOutput(
15025 problem:LogicProblem, interpretation:PartialInterpretation,
15026 source: DefinedElement, target:DefinedElement)
15027{
15028 find interpretation(problem,interpretation);
15029 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
15030 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"outgoingLinks reference FunctionalOutput");
15031 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
15032 BinaryElementRelationLink.param1(link,source);
15033 BinaryElementRelationLink.param2(link,target);
15034}
15035/**
15036 * Matcher for detecting tuples t where <>outgoingLinks reference FunctionalOutput(source,target)
15037 */
15038private pattern mayInRelationoutgoingLinks_reference_FunctionalOutput(
15039 problem:LogicProblem, interpretation:PartialInterpretation,
15040 source: DefinedElement, target:DefinedElement)
15041{
15042 find interpretation(problem,interpretation);
15043 // The two endpoint of the link have to exist
15044 find mayExist(problem, interpretation, source);
15045 find mayExist(problem, interpretation, target);
15046 // Type consistency
15047 find mayInstanceOfFunctionalOutput_class(problem,interpretation,source);
15048 find mayInstanceOfInformationLink_class(problem,interpretation,target);
15049 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
15050 // the upper bound of the opposite reference multiplicity should be considered.
15051 numberOfExistingOppositeReferences == count find mustInRelationfrom_reference_InformationLink(problem,interpretation,target,_);
15052 check(numberOfExistingOppositeReferences < 1);
15053 // The reference is containment, then a new reference cannot be create if:
15054 // 1. Multiple parents
15055 neg find mustContains4(problem,interpretation,_,target);
15056 // 2. Circle in the containment hierarchy
15057 neg find mustTransitiveContains(source,target);
15058} or {
15059 find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,source,target);
15060}
15061/**
15062 * Matcher for detecting tuples t where []terminator reference FunctionalData(source,target)
15063 */
15064private pattern mustInRelationterminator_reference_FunctionalData(
15065 problem:LogicProblem, interpretation:PartialInterpretation,
15066 source: DefinedElement, target:DefinedElement)
15067{
15068 find interpretation(problem,interpretation);
15069 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
15070 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"terminator reference FunctionalData");
15071 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
15072 BinaryElementRelationLink.param1(link,source);
15073 BinaryElementRelationLink.param2(link,target);
15074}
15075/**
15076 * Matcher for detecting tuples t where <>terminator reference FunctionalData(source,target)
15077 */
15078private pattern mayInRelationterminator_reference_FunctionalData(
15079 problem:LogicProblem, interpretation:PartialInterpretation,
15080 source: DefinedElement, target:DefinedElement)
15081{
15082 find interpretation(problem,interpretation);
15083 // The two endpoint of the link have to exist
15084 find mayExist(problem, interpretation, source);
15085 find mayExist(problem, interpretation, target);
15086 // Type consistency
15087 find mayInstanceOfFunctionalData_class(problem,interpretation,source);
15088 find mayInstanceOfFAMTerminator_class(problem,interpretation,target);
15089 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
15090 // the upper bound of the multiplicity should be considered.
15091 numberOfExistingReferences == count find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,_);
15092 check(numberOfExistingReferences < 1);
15093 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
15094 // the upper bound of the opposite reference multiplicity should be considered.
15095 numberOfExistingOppositeReferences == count find mustInRelationdata_reference_FAMTerminator(problem,interpretation,target,_);
15096 check(numberOfExistingOppositeReferences < 1);
15097 // The reference is containment, then a new reference cannot be create if:
15098 // 1. Multiple parents
15099 neg find mustContains4(problem,interpretation,_,target);
15100 // 2. Circle in the containment hierarchy
15101 neg find mustTransitiveContains(source,target);
15102} or {
15103 find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,target);
15104}
15105/**
15106 * Matcher for detecting tuples t where []interface reference FunctionalData(source,target)
15107 */
15108private pattern mustInRelationinterface_reference_FunctionalData(
15109 problem:LogicProblem, interpretation:PartialInterpretation,
15110 source: DefinedElement, target:DefinedElement)
15111{
15112 find interpretation(problem,interpretation);
15113 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
15114 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface reference FunctionalData");
15115 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
15116 BinaryElementRelationLink.param1(link,source);
15117 BinaryElementRelationLink.param2(link,target);
15118}
15119/**
15120 * Matcher for detecting tuples t where <>interface reference FunctionalData(source,target)
15121 */
15122private pattern mayInRelationinterface_reference_FunctionalData(
15123 problem:LogicProblem, interpretation:PartialInterpretation,
15124 source: DefinedElement, target:DefinedElement)
15125{
15126 find interpretation(problem,interpretation);
15127 // The two endpoint of the link have to exist
15128 find mayExist(problem, interpretation, source);
15129 find mayExist(problem, interpretation, target);
15130 // Type consistency
15131 find mayInstanceOfFunctionalData_class(problem,interpretation,source);
15132 find mayInstanceOfFunctionalInterface_class(problem,interpretation,target);
15133 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
15134 // the upper bound of the multiplicity should be considered.
15135 numberOfExistingReferences == count find mustInRelationinterface_reference_FunctionalData(problem,interpretation,source,_);
15136 check(numberOfExistingReferences < 1);
15137 // The eOpposite of the reference is containment, then a referene cannot be created if
15138 // 1. Multiple parents
15139 neg find mustContains4(problem,interpretation,source,_);
15140 // 2. Circle in the containment hierarchy
15141 neg find mustTransitiveContains(source,target);
15142} or {
15143 find mustInRelationinterface_reference_FunctionalData(problem,interpretation,source,target);
15144}
15145/**
15146 * Matcher for detecting tuples t where []type attribute Function(source,target)
15147 */
15148 private pattern mustInRelationtype_attribute_Function(
15149 problem:LogicProblem, interpretation:PartialInterpretation,
15150 source: DefinedElement, target:DefinedElement)
15151 {
15152 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_type(problem,interpretation,source,target);
15153 }
15154/**
15155 * Matcher for detecting tuples t where []type attribute Function(source,target)
15156 */
15157 private pattern mayInRelationtype_attribute_Function(
15158 problem:LogicProblem, interpretation:PartialInterpretation,
15159 source: DefinedElement, target:DefinedElement)
15160 {
15161 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_type(problem,interpretation,source,target);
15162 }
15163
15164//////////
15165// 1.3 Relation Definition Indexers
15166//////////
15167// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test fam terminatorAndInformation
15168private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_terminatorAndInformation(
15169 problem:LogicProblem, interpretation:PartialInterpretation,
15170 var_T, var_I)
15171{
15172 find interpretation(problem,interpretation);
15173 find mustInstanceOfFAMTerminator_class(problem,interpretation,var_T);
15174 find mustInstanceOfInformationLink_class(problem,interpretation,var_I);
15175 // T is exported
15176 // I is exported
15177 find mustInstanceOfFunctionalOutput_class(problem,interpretation,var_Out);
15178 find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,var_Out,var_virtual0);
15179 find mustInstanceOfInformationLink_class(problem,interpretation,var_virtual0);
15180 var_virtual0 == var_I;
15181 find mustInstanceOfFunctionalOutput_class(problem,interpretation,var_Out);
15182 find mustInRelationterminator_reference_FunctionalData(problem,interpretation,var_Out,var_virtual1);
15183 find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1);
15184 var_virtual1 == var_T;
15185}or{
15186 find interpretation(problem,interpretation);
15187 find mustInstanceOfFAMTerminator_class(problem,interpretation,var_T);
15188 find mustInstanceOfInformationLink_class(problem,interpretation,var_I);
15189 // T is exported
15190 // I is exported
15191 find mustInstanceOfInformationLink_class(problem,interpretation,var_I);
15192 find mustInRelationto_reference_InformationLink(problem,interpretation,var_I,var_virtual0);
15193 find mustInstanceOfFunctionalInput_class(problem,interpretation,var_virtual0);
15194 var_virtual0 == var_In;
15195 find mustInstanceOfFunctionalInput_class(problem,interpretation,var_In);
15196 find mustInRelationterminator_reference_FunctionalData(problem,interpretation,var_In,var_virtual1);
15197 find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1);
15198 var_virtual1 == var_T;
15199}
15200private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_terminatorAndInformation(
15201 problem:LogicProblem, interpretation:PartialInterpretation,
15202 var_T, var_I)
15203{
15204 find interpretation(problem,interpretation);
15205 find mayInstanceOfFAMTerminator_class(problem,interpretation,var_T);
15206 find mayInstanceOfInformationLink_class(problem,interpretation,var_I);
15207 // T is exported
15208 // I is exported
15209 find mayInstanceOfFunctionalOutput_class(problem,interpretation,var_Out);
15210 find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,var_Out,var_virtual0);
15211 find mayInstanceOfInformationLink_class(problem,interpretation,var_virtual0);
15212 find mayEquivalent(problem, interpretation, var_virtual0, var_I);
15213 find mayInstanceOfFunctionalOutput_class(problem,interpretation,var_Out);
15214 find mayInRelationterminator_reference_FunctionalData(problem,interpretation,var_Out,var_virtual1);
15215 find mayInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1);
15216 find mayEquivalent(problem, interpretation, var_virtual1, var_T);
15217}or{
15218 find interpretation(problem,interpretation);
15219 find mayInstanceOfFAMTerminator_class(problem,interpretation,var_T);
15220 find mayInstanceOfInformationLink_class(problem,interpretation,var_I);
15221 // T is exported
15222 // I is exported
15223 find mayInstanceOfInformationLink_class(problem,interpretation,var_I);
15224 find mayInRelationto_reference_InformationLink(problem,interpretation,var_I,var_virtual0);
15225 find mayInstanceOfFunctionalInput_class(problem,interpretation,var_virtual0);
15226 find mayEquivalent(problem, interpretation, var_virtual0, var_In);
15227 find mayInstanceOfFunctionalInput_class(problem,interpretation,var_In);
15228 find mayInRelationterminator_reference_FunctionalData(problem,interpretation,var_In,var_virtual1);
15229 find mayInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1);
15230 find mayEquivalent(problem, interpretation, var_virtual1, var_T);
15231}
15232private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_terminatorAndInformation(
15233 problem:LogicProblem, interpretation:PartialInterpretation,
15234 var_T, var_I)
15235{
15236 find interpretation(problem,interpretation);
15237 find mustInstanceOfFAMTerminator_class(problem,interpretation,var_T);
15238 find mustInstanceOfInformationLink_class(problem,interpretation,var_I);
15239 // T is exported
15240 // I is exported
15241 find mustInstanceOfFunctionalOutput_class(problem,interpretation,var_Out);
15242 find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,var_Out,var_virtual0);
15243 find mustInstanceOfInformationLink_class(problem,interpretation,var_virtual0);
15244 var_virtual0 == var_I;
15245 find mustInstanceOfFunctionalOutput_class(problem,interpretation,var_Out);
15246 find mustInRelationterminator_reference_FunctionalData(problem,interpretation,var_Out,var_virtual1);
15247 find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1);
15248 var_virtual1 == var_T;
15249}or{
15250 find interpretation(problem,interpretation);
15251 find mustInstanceOfFAMTerminator_class(problem,interpretation,var_T);
15252 find mustInstanceOfInformationLink_class(problem,interpretation,var_I);
15253 // T is exported
15254 // I is exported
15255 find mustInstanceOfInformationLink_class(problem,interpretation,var_I);
15256 find mustInRelationto_reference_InformationLink(problem,interpretation,var_I,var_virtual0);
15257 find mustInstanceOfFunctionalInput_class(problem,interpretation,var_virtual0);
15258 var_virtual0 == var_In;
15259 find mustInstanceOfFunctionalInput_class(problem,interpretation,var_In);
15260 find mustInRelationterminator_reference_FunctionalData(problem,interpretation,var_In,var_virtual1);
15261 find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1);
15262 var_virtual1 == var_T;
15263}
15264// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test fam type
15265private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_type(
15266 problem:LogicProblem, interpretation:PartialInterpretation,
15267 var_This, var_Target)
15268{
15269 find interpretation(problem,interpretation);
15270 find mustInstanceOfFunction_class(problem,interpretation,var_This);
15271 // type constraint is enforced by construction
15272 // This is exported
15273 // Target is exported
15274 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(problem,interpretation,_var__Model,var_This);
15275 var_virtual0 == const_Root_FunctionType;DefinedElement.name(const_Root_FunctionType,"Root FunctionType"); //LogicProblem.elements(problem,const_Root_FunctionType);
15276 var_Target == var_virtual0;
15277}or{
15278 find interpretation(problem,interpretation);
15279 find mustInstanceOfFunction_class(problem,interpretation,var_This);
15280 // type constraint is enforced by construction
15281 // This is exported
15282 // Target is exported
15283 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,_var__Child,var_This);
15284 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(problem,interpretation,_var__Model,var_This);
15285 var_virtual0 == const_Leaf_FunctionType;DefinedElement.name(const_Leaf_FunctionType,"Leaf FunctionType"); //LogicProblem.elements(problem,const_Leaf_FunctionType);
15286 var_Target == var_virtual0;
15287}or{
15288 find interpretation(problem,interpretation);
15289 find mustInstanceOfFunction_class(problem,interpretation,var_This);
15290 // type constraint is enforced by construction
15291 // This is exported
15292 // Target is exported
15293 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,var_This,_var__Par);
15294 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,_var__Child,var_This);
15295 var_virtual0 == const_Intermediate_FunctionType;DefinedElement.name(const_Intermediate_FunctionType,"Intermediate FunctionType"); //LogicProblem.elements(problem,const_Intermediate_FunctionType);
15296 var_Target == var_virtual0;
15297}
15298private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_type(
15299 problem:LogicProblem, interpretation:PartialInterpretation,
15300 var_This, var_Target)
15301{
15302 find interpretation(problem,interpretation);
15303 find mayInstanceOfFunction_class(problem,interpretation,var_This);
15304 // type constraint is enforced by construction
15305 // This is exported
15306 // Target is exported
15307 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(problem,interpretation,_var__Model,var_This);
15308 var_virtual0 == const_Root_FunctionType;DefinedElement.name(const_Root_FunctionType,"Root FunctionType"); //LogicProblem.elements(problem,const_Root_FunctionType);
15309 find mayEquivalent(problem, interpretation, var_Target, var_virtual0);
15310}or{
15311 find interpretation(problem,interpretation);
15312 find mayInstanceOfFunction_class(problem,interpretation,var_This);
15313 // type constraint is enforced by construction
15314 // This is exported
15315 // Target is exported
15316 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,_var__Child,var_This);
15317 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(problem,interpretation,_var__Model,var_This);
15318 var_virtual0 == const_Leaf_FunctionType;DefinedElement.name(const_Leaf_FunctionType,"Leaf FunctionType"); //LogicProblem.elements(problem,const_Leaf_FunctionType);
15319 find mayEquivalent(problem, interpretation, var_Target, var_virtual0);
15320}or{
15321 find interpretation(problem,interpretation);
15322 find mayInstanceOfFunction_class(problem,interpretation,var_This);
15323 // type constraint is enforced by construction
15324 // This is exported
15325 // Target is exported
15326 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,var_This,_var__Par);
15327 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,_var__Child,var_This);
15328 var_virtual0 == const_Intermediate_FunctionType;DefinedElement.name(const_Intermediate_FunctionType,"Intermediate FunctionType"); //LogicProblem.elements(problem,const_Intermediate_FunctionType);
15329 find mayEquivalent(problem, interpretation, var_Target, var_virtual0);
15330}
15331private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_type(
15332 problem:LogicProblem, interpretation:PartialInterpretation,
15333 var_This, var_Target)
15334{
15335 find interpretation(problem,interpretation);
15336 find mustInstanceOfFunction_class(problem,interpretation,var_This);
15337 // type constraint is enforced by construction
15338 // This is exported
15339 // Target is exported
15340 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(problem,interpretation,_var__Model,var_This);
15341 var_virtual0 == const_Root_FunctionType;DefinedElement.name(const_Root_FunctionType,"Root FunctionType"); //LogicProblem.elements(problem,const_Root_FunctionType);
15342 var_Target == var_virtual0;
15343}or{
15344 find interpretation(problem,interpretation);
15345 find mustInstanceOfFunction_class(problem,interpretation,var_This);
15346 // type constraint is enforced by construction
15347 // This is exported
15348 // Target is exported
15349 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,_var__Child,var_This);
15350 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(problem,interpretation,_var__Model,var_This);
15351 var_virtual0 == const_Leaf_FunctionType;DefinedElement.name(const_Leaf_FunctionType,"Leaf FunctionType"); //LogicProblem.elements(problem,const_Leaf_FunctionType);
15352 var_Target == var_virtual0;
15353}or{
15354 find interpretation(problem,interpretation);
15355 find mustInstanceOfFunction_class(problem,interpretation,var_This);
15356 // type constraint is enforced by construction
15357 // This is exported
15358 // Target is exported
15359 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,var_This,_var__Par);
15360 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,_var__Child,var_This);
15361 var_virtual0 == const_Intermediate_FunctionType;DefinedElement.name(const_Intermediate_FunctionType,"Intermediate FunctionType"); //LogicProblem.elements(problem,const_Intermediate_FunctionType);
15362 var_Target == var_virtual0;
15363}
15364// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test fam rootElements
15365private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(
15366 problem:LogicProblem, interpretation:PartialInterpretation,
15367 var_Model, var_Root)
15368{
15369 find interpretation(problem,interpretation);
15370 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Model);
15371 find mustInstanceOfFunction_class(problem,interpretation,var_Root);
15372 // Model is exported
15373 // Root is exported
15374 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Model);
15375 find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,var_Model,var_virtual0);
15376 find mustInstanceOfFunctionalElement_class(problem,interpretation,var_virtual0);
15377 var_virtual0 == var_Root;
15378}
15379private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(
15380 problem:LogicProblem, interpretation:PartialInterpretation,
15381 var_Model, var_Root)
15382{
15383 find interpretation(problem,interpretation);
15384 find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Model);
15385 find mayInstanceOfFunction_class(problem,interpretation,var_Root);
15386 // Model is exported
15387 // Root is exported
15388 find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Model);
15389 find mayInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,var_Model,var_virtual0);
15390 find mayInstanceOfFunctionalElement_class(problem,interpretation,var_virtual0);
15391 find mayEquivalent(problem, interpretation, var_virtual0, var_Root);
15392}
15393private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(
15394 problem:LogicProblem, interpretation:PartialInterpretation,
15395 var_Model, var_Root)
15396{
15397 find interpretation(problem,interpretation);
15398 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Model);
15399 find mustInstanceOfFunction_class(problem,interpretation,var_Root);
15400 // Model is exported
15401 // Root is exported
15402 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Model);
15403 find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,var_Model,var_virtual0);
15404 find mustInstanceOfFunctionalElement_class(problem,interpretation,var_virtual0);
15405 var_virtual0 == var_Root;
15406}
15407// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test fam parent
15408private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(
15409 problem:LogicProblem, interpretation:PartialInterpretation,
15410 var_Func, var_Par)
15411{
15412 find interpretation(problem,interpretation);
15413 find mustInstanceOfFunction_class(problem,interpretation,var_Func);
15414 find mustInstanceOfFunction_class(problem,interpretation,var_Par);
15415 // Func is exported
15416 // Par is exported
15417 find mustInstanceOfFunction_class(problem,interpretation,var_Func);
15418 find mustInRelationparent_reference_FunctionalElement(problem,interpretation,var_Func,var_virtual0);
15419 find mustInstanceOfFunction_class(problem,interpretation,var_virtual0);
15420 var_virtual0 == var_Par;
15421}
15422private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(
15423 problem:LogicProblem, interpretation:PartialInterpretation,
15424 var_Func, var_Par)
15425{
15426 find interpretation(problem,interpretation);
15427 find mayInstanceOfFunction_class(problem,interpretation,var_Func);
15428 find mayInstanceOfFunction_class(problem,interpretation,var_Par);
15429 // Func is exported
15430 // Par is exported
15431 find mayInstanceOfFunction_class(problem,interpretation,var_Func);
15432 find mayInRelationparent_reference_FunctionalElement(problem,interpretation,var_Func,var_virtual0);
15433 find mayInstanceOfFunction_class(problem,interpretation,var_virtual0);
15434 find mayEquivalent(problem, interpretation, var_virtual0, var_Par);
15435}
15436private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(
15437 problem:LogicProblem, interpretation:PartialInterpretation,
15438 var_Func, var_Par)
15439{
15440 find interpretation(problem,interpretation);
15441 find mustInstanceOfFunction_class(problem,interpretation,var_Func);
15442 find mustInstanceOfFunction_class(problem,interpretation,var_Par);
15443 // Func is exported
15444 // Par is exported
15445 find mustInstanceOfFunction_class(problem,interpretation,var_Func);
15446 find mustInRelationparent_reference_FunctionalElement(problem,interpretation,var_Func,var_virtual0);
15447 find mustInstanceOfFunction_class(problem,interpretation,var_virtual0);
15448 var_virtual0 == var_Par;
15449}
15450// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test fam model
15451private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_model(
15452 problem:LogicProblem, interpretation:PartialInterpretation,
15453 var_This, var_Target)
15454{
15455 find interpretation(problem,interpretation);
15456 find mustInstanceOfFunctionalElement_class(problem,interpretation,var_This);
15457 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Target);
15458 // This is exported
15459 // Target is exported
15460 find mustInstanceOfFunctionalElement_class(problem,interpretation,var_This);
15461 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Target);
15462}
15463private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_model(
15464 problem:LogicProblem, interpretation:PartialInterpretation,
15465 var_This, var_Target)
15466{
15467 find interpretation(problem,interpretation);
15468 find mayInstanceOfFunctionalElement_class(problem,interpretation,var_This);
15469 find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Target);
15470 // This is exported
15471 // Target is exported
15472 find mayInstanceOfFunctionalElement_class(problem,interpretation,var_This);
15473 find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Target);
15474}
15475private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_model(
15476 problem:LogicProblem, interpretation:PartialInterpretation,
15477 var_This, var_Target)
15478{
15479 find interpretation(problem,interpretation);
15480 find mustInstanceOfFunctionalElement_class(problem,interpretation,var_This);
15481 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Target);
15482 // This is exported
15483 // Target is exported
15484 find mustInstanceOfFunctionalElement_class(problem,interpretation,var_This);
15485 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Target);
15486}
15487
15488//////////
15489// 1.4 Containment Indexer
15490//////////
15491private pattern mustContains2(source: DefinedElement, target: DefinedElement) {
15492 find mustContains4(_,_,source,target);
15493}
15494
15495private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation,
15496 source: DefinedElement, target: DefinedElement)
15497 { find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,target); }or
15498
15499 { find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,source,target); }or
15500
15501 { find mustInRelationsubElements_reference_Function(problem,interpretation,source,target); }or
15502
15503 { find mustInRelationdata_reference_FunctionalInterface(problem,interpretation,source,target); }or
15504
15505 { find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,source,target); }or
15506
15507 { find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,target); }
15508
15509private pattern mustTransitiveContains(source,target) {
15510 find mustContains2+(source,target);
15511}
15512
15513//////////
15514// 2. Invalidation Indexers
15515//////////
15516// 2.1 Invalidated by WF Queries
15517//////////
15518
15519//////////
15520// 3. Unfinishedness Indexers
15521//////////
15522// 3.1 Unfinishedness Measured by Multiplicity
15523//////////
15524pattern unfinishedLowerMultiplicity_to_reference_InformationLink(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) {
15525 find interpretation(problem,interpretation);
15526 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
15527 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"to reference InformationLink");
15528 find mustInstanceOfInformationLink_class(problem,interpretation,object);
15529 numberOfExistingReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,object,_);
15530 check(numberOfExistingReferences < 1);
15531 missingMultiplicity == eval(1-numberOfExistingReferences);
15532}
15533
15534//////////
15535// 3.2 Unfinishedness Measured by WF Queries
15536//////////
15537
15538//////////
15539// 4. Refinement Indexers
15540//////////
15541// 4.1 Object constructors
15542//////////
15543private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation)
15544{
15545 find interpretation(problem,interpretation);
15546 find mustInstanceOfFunctionalInterface_class(problem,interpretation,root);
15547 find mustExist(problem, interpretation, root);
15548}or{
15549 find interpretation(problem,interpretation);
15550 find mustInstanceOfFunctionalElement_class(problem,interpretation,root);
15551 find mustExist(problem, interpretation, root);
15552}or{
15553 find interpretation(problem,interpretation);
15554 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,root);
15555 find mustExist(problem, interpretation, root);
15556}or{
15557 find interpretation(problem,interpretation);
15558 find mustInstanceOfFAMTerminator_class(problem,interpretation,root);
15559 find mustExist(problem, interpretation, root);
15560}or{
15561 find interpretation(problem,interpretation);
15562 find mustInstanceOfFunctionalInput_class(problem,interpretation,root);
15563 find mustExist(problem, interpretation, root);
15564}or{
15565 find interpretation(problem,interpretation);
15566 find mustInstanceOfFunctionalOutput_class(problem,interpretation,root);
15567 find mustExist(problem, interpretation, root);
15568}or{
15569 find interpretation(problem,interpretation);
15570 find mustInstanceOfInformationLink_class(problem,interpretation,root);
15571 find mustExist(problem, interpretation, root);
15572}or{
15573 find interpretation(problem,interpretation);
15574 find mustInstanceOfFunction_class(problem,interpretation,root);
15575 find mustExist(problem, interpretation, root);
15576}or{
15577 find interpretation(problem,interpretation);
15578 find mustInstanceOfFunctionalData_class(problem,interpretation,root);
15579 find mustExist(problem, interpretation, root);
15580}or{
15581 find interpretation(problem,interpretation);
15582 find mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem,interpretation,root);
15583 find mustExist(problem, interpretation, root);
15584}or{
15585 find interpretation(problem,interpretation);
15586 find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,root);
15587 find mustExist(problem, interpretation, root);
15588}
15589pattern createObject_FAMTerminator_class_by_terminator_reference_FunctionalData_with_data_reference_FAMTerminator(
15590 problem:LogicProblem, interpretation:PartialInterpretation,
15591 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
15592 container:DefinedElement)
15593{
15594 find interpretation(problem,interpretation);
15595 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
15596 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class");
15597 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
15598 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"terminator reference FunctionalData");
15599 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
15600 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"data reference FAMTerminator");
15601 find mustInstanceOfFunctionalData_class(problem,interpretation,container);
15602 find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject);
15603 find mayInRelationterminator_reference_FunctionalData(problem,interpretation,container,newObject);
15604 find mustExist(problem, interpretation, container);
15605 neg find mustExist(problem, interpretation, newObject);
15606}
15607pattern createObject_FAMTerminator_class(
15608 problem:LogicProblem, interpretation:PartialInterpretation,
15609 typeInterpretation:PartialComplexTypeInterpretation)
15610{
15611 find interpretation(problem,interpretation);
15612 neg find hasElementInContainment(problem,interpretation);
15613 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
15614 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class");
15615 find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject);
15616 find mayExist(problem, interpretation, newObject);
15617 neg find mustExist(problem, interpretation, newObject);
15618}
15619pattern createObject_FunctionalInput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData(
15620 problem:LogicProblem, interpretation:PartialInterpretation,
15621 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
15622 container:DefinedElement)
15623{
15624 find interpretation(problem,interpretation);
15625 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
15626 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class");
15627 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
15628 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface");
15629 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
15630 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData");
15631 find mustInstanceOfFunctionalInterface_class(problem,interpretation,container);
15632 find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject);
15633 find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject);
15634 find mustExist(problem, interpretation, container);
15635 neg find mustExist(problem, interpretation, newObject);
15636}
15637pattern createObject_FunctionalInput_class(
15638 problem:LogicProblem, interpretation:PartialInterpretation,
15639 typeInterpretation:PartialComplexTypeInterpretation)
15640{
15641 find interpretation(problem,interpretation);
15642 neg find hasElementInContainment(problem,interpretation);
15643 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
15644 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class");
15645 find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject);
15646 find mayExist(problem, interpretation, newObject);
15647 neg find mustExist(problem, interpretation, newObject);
15648}
15649pattern createObject_FunctionalOutput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData(
15650 problem:LogicProblem, interpretation:PartialInterpretation,
15651 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
15652 container:DefinedElement)
15653{
15654 find interpretation(problem,interpretation);
15655 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
15656 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class");
15657 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
15658 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface");
15659 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
15660 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData");
15661 find mustInstanceOfFunctionalInterface_class(problem,interpretation,container);
15662 find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject);
15663 find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject);
15664 find mustExist(problem, interpretation, container);
15665 neg find mustExist(problem, interpretation, newObject);
15666}
15667pattern createObject_FunctionalOutput_class(
15668 problem:LogicProblem, interpretation:PartialInterpretation,
15669 typeInterpretation:PartialComplexTypeInterpretation)
15670{
15671 find interpretation(problem,interpretation);
15672 neg find hasElementInContainment(problem,interpretation);
15673 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
15674 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class");
15675 find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject);
15676 find mayExist(problem, interpretation, newObject);
15677 neg find mustExist(problem, interpretation, newObject);
15678}
15679pattern createObject_FunctionalInterface_class_by_interface_reference_FunctionalElement_with_element_reference_FunctionalInterface(
15680 problem:LogicProblem, interpretation:PartialInterpretation,
15681 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
15682 container:DefinedElement)
15683{
15684 find interpretation(problem,interpretation);
15685 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
15686 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class");
15687 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
15688 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"interface reference FunctionalElement");
15689 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
15690 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"element reference FunctionalInterface");
15691 find mustInstanceOfFunctionalElement_class(problem,interpretation,container);
15692 find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject);
15693 find mayInRelationinterface_reference_FunctionalElement(problem,interpretation,container,newObject);
15694 find mustExist(problem, interpretation, container);
15695 neg find mustExist(problem, interpretation, newObject);
15696}
15697pattern createObject_FunctionalInterface_class(
15698 problem:LogicProblem, interpretation:PartialInterpretation,
15699 typeInterpretation:PartialComplexTypeInterpretation)
15700{
15701 find interpretation(problem,interpretation);
15702 neg find hasElementInContainment(problem,interpretation);
15703 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
15704 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class");
15705 find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject);
15706 find mayExist(problem, interpretation, newObject);
15707 neg find mustExist(problem, interpretation, newObject);
15708}
15709pattern createObject_Function_class_by_rootElements_reference_FunctionalArchitectureModel(
15710 problem:LogicProblem, interpretation:PartialInterpretation,
15711 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
15712 container:DefinedElement)
15713{
15714 find interpretation(problem,interpretation);
15715 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
15716 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class");
15717 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
15718 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"rootElements reference FunctionalArchitectureModel");
15719 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,container);
15720 find mayInstanceOfFunction_class(problem,interpretation,newObject);
15721 find mayInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,container,newObject);
15722 find mustExist(problem, interpretation, container);
15723 neg find mustExist(problem, interpretation, newObject);
15724}
15725pattern createObject_Function_class_by_subElements_reference_Function_with_parent_reference_FunctionalElement(
15726 problem:LogicProblem, interpretation:PartialInterpretation,
15727 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
15728 container:DefinedElement)
15729{
15730 find interpretation(problem,interpretation);
15731 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
15732 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class");
15733 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
15734 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"subElements reference Function");
15735 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
15736 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FunctionalElement");
15737 find mustInstanceOfFunction_class(problem,interpretation,container);
15738 find mayInstanceOfFunction_class(problem,interpretation,newObject);
15739 find mayInRelationsubElements_reference_Function(problem,interpretation,container,newObject);
15740 find mustExist(problem, interpretation, container);
15741 neg find mustExist(problem, interpretation, newObject);
15742}
15743pattern createObject_Function_class(
15744 problem:LogicProblem, interpretation:PartialInterpretation,
15745 typeInterpretation:PartialComplexTypeInterpretation)
15746{
15747 find interpretation(problem,interpretation);
15748 neg find hasElementInContainment(problem,interpretation);
15749 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
15750 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class");
15751 find mayInstanceOfFunction_class(problem,interpretation,newObject);
15752 find mayExist(problem, interpretation, newObject);
15753 neg find mustExist(problem, interpretation, newObject);
15754}
15755pattern createObject_FunctionalArchitectureModel_class_UndefinedPart(
15756 problem:LogicProblem, interpretation:PartialInterpretation,
15757 typeInterpretation:PartialComplexTypeInterpretation)
15758{
15759 find interpretation(problem,interpretation);
15760 neg find hasElementInContainment(problem,interpretation);
15761 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
15762 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalArchitectureModel class UndefinedPart");
15763 find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,newObject);
15764 find mayExist(problem, interpretation, newObject);
15765 neg find mustExist(problem, interpretation, newObject);
15766}
15767pattern createObject_InformationLink_class_by_outgoingLinks_reference_FunctionalOutput_with_from_reference_InformationLink(
15768 problem:LogicProblem, interpretation:PartialInterpretation,
15769 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
15770 container:DefinedElement)
15771{
15772 find interpretation(problem,interpretation);
15773 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
15774 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class");
15775 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
15776 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingLinks reference FunctionalOutput");
15777 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
15778 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"from reference InformationLink");
15779 find mustInstanceOfFunctionalOutput_class(problem,interpretation,container);
15780 find mayInstanceOfInformationLink_class(problem,interpretation,newObject);
15781 find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,container,newObject);
15782 find mustExist(problem, interpretation, container);
15783 neg find mustExist(problem, interpretation, newObject);
15784}
15785pattern createObject_InformationLink_class(
15786 problem:LogicProblem, interpretation:PartialInterpretation,
15787 typeInterpretation:PartialComplexTypeInterpretation)
15788{
15789 find interpretation(problem,interpretation);
15790 neg find hasElementInContainment(problem,interpretation);
15791 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
15792 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class");
15793 find mayInstanceOfInformationLink_class(problem,interpretation,newObject);
15794 find mayExist(problem, interpretation, newObject);
15795 neg find mustExist(problem, interpretation, newObject);
15796}
15797
15798//////////
15799// 4.2 Type refinement
15800//////////
15801pattern refineTypeTo_FAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
15802 find interpretation(problem,interpretation);
15803 PartialInterpretation.newElements(interpretation,element);
15804 find mayInstanceOfFAMTerminator_class(problem,interpretation,element);
15805 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
15806 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
15807 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
15808 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
15809 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
15810 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
15811}
15812pattern refineTypeTo_FunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
15813 find interpretation(problem,interpretation);
15814 PartialInterpretation.newElements(interpretation,element);
15815 find mayInstanceOfFunctionalInput_class(problem,interpretation,element);
15816 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
15817 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
15818 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
15819 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
15820 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
15821 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
15822 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
15823}
15824pattern refineTypeTo_FunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
15825 find interpretation(problem,interpretation);
15826 PartialInterpretation.newElements(interpretation,element);
15827 find mayInstanceOfFunctionalOutput_class(problem,interpretation,element);
15828 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
15829 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
15830 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
15831 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
15832 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
15833 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
15834 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
15835}
15836pattern refineTypeTo_FunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
15837 find interpretation(problem,interpretation);
15838 PartialInterpretation.newElements(interpretation,element);
15839 find mayInstanceOfFunctionalInterface_class(problem,interpretation,element);
15840 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
15841 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
15842 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
15843 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
15844 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
15845 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
15846}
15847pattern refineTypeTo_Function_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
15848 find interpretation(problem,interpretation);
15849 PartialInterpretation.newElements(interpretation,element);
15850 find mayInstanceOfFunction_class(problem,interpretation,element);
15851 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
15852 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
15853 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
15854 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
15855 neg find mustInstanceOfFunction_class(problem,interpretation,element);
15856 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
15857}
15858pattern refineTypeTo_FunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
15859 find interpretation(problem,interpretation);
15860 PartialInterpretation.newElements(interpretation,element);
15861 find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element);
15862 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
15863 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
15864 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
15865 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
15866 neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element);
15867 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
15868}
15869pattern refineTypeTo_InformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
15870 find interpretation(problem,interpretation);
15871 PartialInterpretation.newElements(interpretation,element);
15872 find mayInstanceOfInformationLink_class(problem,interpretation,element);
15873 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
15874 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
15875 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
15876 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
15877 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
15878 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
15879}
15880
15881//////////
15882// 4.3 Relation refinement
15883//////////
15884pattern refineRelation_model_reference_FunctionalElement(
15885 problem:LogicProblem, interpretation:PartialInterpretation,
15886 relationIterpretation:PartialRelationInterpretation,
15887 from: DefinedElement, to: DefinedElement)
15888{
15889 find interpretation(problem,interpretation);
15890 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
15891 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement");
15892 find mustExist(problem, interpretation, from);
15893 find mustExist(problem, interpretation, to);
15894 find mustInstanceOfFunctionalElement_class(problem,interpretation,from);
15895 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,to);
15896 find mayInRelationmodel_reference_FunctionalElement(problem,interpretation,from,to);
15897 neg find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,from,to);
15898}
15899pattern refineRelation_IncomingLinks_reference_FunctionalInput_and_to_reference_InformationLink(
15900 problem:LogicProblem, interpretation:PartialInterpretation,
15901 relationIterpretation:PartialRelationInterpretation, oppositeInterpretation:PartialRelationInterpretation,
15902 from: DefinedElement, to: DefinedElement)
15903{
15904 find interpretation(problem,interpretation);
15905 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
15906 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"IncomingLinks reference FunctionalInput");
15907 PartialInterpretation.partialrelationinterpretation(interpretation,oppositeInterpretation);
15908 PartialRelationInterpretation.interpretationOf.name(oppositeInterpretation,"to reference InformationLink");
15909 find mustExist(problem, interpretation, from);
15910 find mustExist(problem, interpretation, to);
15911 find mustInstanceOfFunctionalInput_class(problem,interpretation,from);
15912 find mustInstanceOfInformationLink_class(problem,interpretation,to);
15913 find mayInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,from,to);
15914 neg find mustInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,from,to);
15915}
15916pattern refineRelation_type_attribute_Function(
15917 problem:LogicProblem, interpretation:PartialInterpretation,
15918 relationIterpretation:PartialRelationInterpretation,
15919 from: DefinedElement, to: DefinedElement)
15920{
15921 find interpretation(problem,interpretation);
15922 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
15923 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function");
15924 find mustExist(problem, interpretation, from);
15925 find mustExist(problem, interpretation, to);
15926 find mustInstanceOfFunction_class(problem,interpretation,from);
15927 find mustInstanceOfFunctionType_enum(problem,interpretation,to);
15928 find mayInRelationtype_attribute_Function(problem,interpretation,from,to);
15929 neg find mustInRelationtype_attribute_Function(problem,interpretation,from,to);
15930}
15931import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage"
15932import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem"
15933import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language"
15934
15935//////////
15936// 0. Util
15937//////////
15938private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) {
15939 PartialInterpretation.problem(interpretation,problem);
15940}
15941
15942/////////////////////////
15943// 0.1 Existence
15944/////////////////////////
15945private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
15946 find interpretation(problem,interpretation);
15947 LogicProblem.elements(problem,element);
15948} or {
15949 find interpretation(problem,interpretation);
15950 PartialInterpretation.newElements(interpretation,element);
15951}
15952
15953private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
15954 find mustExist(problem,interpretation,element);
15955} or {
15956 find interpretation(problem,interpretation);
15957 neg find elementCloseWorld(element);
15958 PartialInterpretation.openWorldElements(interpretation,element);
15959}
15960
15961private pattern elementCloseWorld(element:DefinedElement) {
15962 PartialInterpretation.openWorldElements(i,element);
15963 PartialInterpretation.maxNewElements(i,0);
15964} or {
15965 Scope.targetTypeInterpretation(scope,interpretation);
15966 PartialTypeInterpratation.elements(interpretation,element);
15967 Scope.maxNewElements(scope,0);
15968}
15969
15970////////////////////////
15971// 0.2 Equivalence
15972////////////////////////
15973pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) {
15974 find mayExist(problem,interpretation,a);
15975 find mayExist(problem,interpretation,b);
15976 a == b;
15977}
15978
15979////////////////////////
15980// 0.3 Required Patterns by TypeIndexer
15981////////////////////////
15982private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) {
15983 find interpretation(problem,interpretation);
15984 LogicProblem.types(problem,type);
15985 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
15986 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
15987}
15988
15989private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) {
15990 find interpretation(problem,interpretation);
15991 LogicProblem.types(problem,type);
15992 TypeDefinition.elements(type,element);
15993} or {
15994 find interpretation(problem,interpretation);
15995 find typeInterpretation(problem,interpretation,type,typeInterpretation);
15996 PartialComplexTypeInterpretation.elements(typeInterpretation,element);
15997}
15998
15999private pattern isPrimitive(element: PrimitiveElement) {
16000 PrimitiveElement(element);
16001}
16002
16003//////////
16004// 1. Problem-Specific Base Indexers
16005//////////
16006// 1.1 Type Indexers
16007//////////
16008// 1.1.1 primitive Type Indexers
16009//////////
16010
16011//////////
16012// 1.1.2 domain-specific Type Indexers
16013//////////
16014/**
16015 * An element must be an instance of type "FunctionalElement class".
16016 */
16017private pattern mustInstanceOfFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
16018 Type.name(type,"FunctionalElement class");
16019 find directInstanceOf(problem,interpretation,element,type);
16020}
16021private pattern scopeDisallowsNewFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation) {
16022 find interpretation(problem,interpretation);
16023 PartialInterpretation.scopes(interpretation,scope);
16024 Scope.targetTypeInterpretation(scope,typeInterpretation);
16025 Scope.maxNewElements(scope,0);
16026 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
16027 Type.name(type,"FunctionalElement class");
16028}
16029
16030/**
16031 * An element may be an instance of type "FunctionalElement class".
16032 */
16033private pattern mayInstanceOfFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
16034{
16035 find interpretation(problem,interpretation);
16036 PartialInterpretation.newElements(interpretation,element);
16037 neg find mustInstanceOfFunction_class(problem,interpretation,element);
16038 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
16039 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
16040 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
16041 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
16042 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
16043 neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation);
16044 neg find isPrimitive(element);
16045} or {
16046 find interpretation(problem,interpretation);
16047 PartialInterpretation.openWorldElements(interpretation,element);
16048 neg find mustInstanceOfFunction_class(problem,interpretation,element);
16049 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
16050 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
16051 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
16052 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
16053 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
16054 neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation);
16055 neg find isPrimitive(element);
16056} or
16057{ find mustInstanceOfFunctionalElement_class(problem,interpretation,element); }
16058/**
16059 * An element must be an instance of type "FunctionalArchitectureModel class".
16060 */
16061private pattern mustInstanceOfFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
16062 Type.name(type,"FunctionalArchitectureModel class");
16063 find directInstanceOf(problem,interpretation,element,type);
16064}
16065private pattern scopeDisallowsNewFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation) {
16066 find interpretation(problem,interpretation);
16067 PartialInterpretation.scopes(interpretation,scope);
16068 Scope.targetTypeInterpretation(scope,typeInterpretation);
16069 Scope.maxNewElements(scope,0);
16070 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
16071 Type.name(type,"FunctionalArchitectureModel class");
16072}
16073
16074/**
16075 * An element may be an instance of type "FunctionalArchitectureModel class".
16076 */
16077private pattern mayInstanceOfFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
16078{
16079 find interpretation(problem,interpretation);
16080 PartialInterpretation.newElements(interpretation,element);
16081 neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element);
16082 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
16083 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
16084 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
16085 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
16086 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
16087 neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation);
16088 neg find isPrimitive(element);
16089} or {
16090 find interpretation(problem,interpretation);
16091 PartialInterpretation.openWorldElements(interpretation,element);
16092 neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element);
16093 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
16094 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
16095 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
16096 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
16097 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
16098 neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation);
16099 neg find isPrimitive(element);
16100} or
16101{ find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); }
16102/**
16103 * An element must be an instance of type "Function class".
16104 */
16105private pattern mustInstanceOfFunction_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
16106 Type.name(type,"Function class");
16107 find directInstanceOf(problem,interpretation,element,type);
16108}
16109private pattern scopeDisallowsNewFunction_class(problem:LogicProblem, interpretation:PartialInterpretation) {
16110 find interpretation(problem,interpretation);
16111 PartialInterpretation.scopes(interpretation,scope);
16112 Scope.targetTypeInterpretation(scope,typeInterpretation);
16113 Scope.maxNewElements(scope,0);
16114 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
16115 Type.name(type,"Function class");
16116}
16117
16118/**
16119 * An element may be an instance of type "Function class".
16120 */
16121private pattern mayInstanceOfFunction_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
16122{
16123 find interpretation(problem,interpretation);
16124 PartialInterpretation.newElements(interpretation,element);
16125 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
16126 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
16127 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
16128 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
16129 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
16130 neg find scopeDisallowsNewFunction_class(problem, interpretation);
16131 neg find isPrimitive(element);
16132} or {
16133 find interpretation(problem,interpretation);
16134 PartialInterpretation.openWorldElements(interpretation,element);
16135 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
16136 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
16137 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
16138 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
16139 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
16140 neg find scopeDisallowsNewFunction_class(problem, interpretation);
16141 neg find isPrimitive(element);
16142} or
16143{ find mustInstanceOfFunction_class(problem,interpretation,element); }
16144/**
16145 * An element must be an instance of type "FAMTerminator class".
16146 */
16147private pattern mustInstanceOfFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
16148 Type.name(type,"FAMTerminator class");
16149 find directInstanceOf(problem,interpretation,element,type);
16150}
16151private pattern scopeDisallowsNewFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation) {
16152 find interpretation(problem,interpretation);
16153 PartialInterpretation.scopes(interpretation,scope);
16154 Scope.targetTypeInterpretation(scope,typeInterpretation);
16155 Scope.maxNewElements(scope,0);
16156 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
16157 Type.name(type,"FAMTerminator class");
16158}
16159
16160/**
16161 * An element may be an instance of type "FAMTerminator class".
16162 */
16163private pattern mayInstanceOfFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
16164{
16165 find interpretation(problem,interpretation);
16166 PartialInterpretation.newElements(interpretation,element);
16167 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
16168 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
16169 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
16170 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
16171 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
16172 neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation);
16173 neg find isPrimitive(element);
16174} or {
16175 find interpretation(problem,interpretation);
16176 PartialInterpretation.openWorldElements(interpretation,element);
16177 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
16178 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
16179 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
16180 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
16181 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
16182 neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation);
16183 neg find isPrimitive(element);
16184} or
16185{ find mustInstanceOfFAMTerminator_class(problem,interpretation,element); }
16186/**
16187 * An element must be an instance of type "InformationLink class".
16188 */
16189private pattern mustInstanceOfInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
16190 Type.name(type,"InformationLink class");
16191 find directInstanceOf(problem,interpretation,element,type);
16192}
16193private pattern scopeDisallowsNewInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation) {
16194 find interpretation(problem,interpretation);
16195 PartialInterpretation.scopes(interpretation,scope);
16196 Scope.targetTypeInterpretation(scope,typeInterpretation);
16197 Scope.maxNewElements(scope,0);
16198 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
16199 Type.name(type,"InformationLink class");
16200}
16201
16202/**
16203 * An element may be an instance of type "InformationLink class".
16204 */
16205private pattern mayInstanceOfInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
16206{
16207 find interpretation(problem,interpretation);
16208 PartialInterpretation.newElements(interpretation,element);
16209 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
16210 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
16211 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
16212 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
16213 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
16214 neg find scopeDisallowsNewInformationLink_class(problem, interpretation);
16215 neg find isPrimitive(element);
16216} or {
16217 find interpretation(problem,interpretation);
16218 PartialInterpretation.openWorldElements(interpretation,element);
16219 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
16220 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
16221 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
16222 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
16223 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
16224 neg find scopeDisallowsNewInformationLink_class(problem, interpretation);
16225 neg find isPrimitive(element);
16226} or
16227{ find mustInstanceOfInformationLink_class(problem,interpretation,element); }
16228/**
16229 * An element must be an instance of type "FunctionalInterface class".
16230 */
16231private pattern mustInstanceOfFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
16232 Type.name(type,"FunctionalInterface class");
16233 find directInstanceOf(problem,interpretation,element,type);
16234}
16235private pattern scopeDisallowsNewFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation) {
16236 find interpretation(problem,interpretation);
16237 PartialInterpretation.scopes(interpretation,scope);
16238 Scope.targetTypeInterpretation(scope,typeInterpretation);
16239 Scope.maxNewElements(scope,0);
16240 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
16241 Type.name(type,"FunctionalInterface class");
16242}
16243
16244/**
16245 * An element may be an instance of type "FunctionalInterface class".
16246 */
16247private pattern mayInstanceOfFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
16248{
16249 find interpretation(problem,interpretation);
16250 PartialInterpretation.newElements(interpretation,element);
16251 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
16252 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
16253 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
16254 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
16255 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
16256 neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation);
16257 neg find isPrimitive(element);
16258} or {
16259 find interpretation(problem,interpretation);
16260 PartialInterpretation.openWorldElements(interpretation,element);
16261 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
16262 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
16263 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
16264 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
16265 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
16266 neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation);
16267 neg find isPrimitive(element);
16268} or
16269{ find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); }
16270/**
16271 * An element must be an instance of type "FunctionalInput class".
16272 */
16273private pattern mustInstanceOfFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
16274 Type.name(type,"FunctionalInput class");
16275 find directInstanceOf(problem,interpretation,element,type);
16276}
16277private pattern scopeDisallowsNewFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation) {
16278 find interpretation(problem,interpretation);
16279 PartialInterpretation.scopes(interpretation,scope);
16280 Scope.targetTypeInterpretation(scope,typeInterpretation);
16281 Scope.maxNewElements(scope,0);
16282 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
16283 Type.name(type,"FunctionalInput class");
16284}
16285
16286/**
16287 * An element may be an instance of type "FunctionalInput class".
16288 */
16289private pattern mayInstanceOfFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
16290{
16291 find interpretation(problem,interpretation);
16292 PartialInterpretation.newElements(interpretation,element);
16293 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
16294 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
16295 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
16296 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
16297 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
16298 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
16299 neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation);
16300 neg find isPrimitive(element);
16301} or {
16302 find interpretation(problem,interpretation);
16303 PartialInterpretation.openWorldElements(interpretation,element);
16304 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
16305 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
16306 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
16307 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
16308 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
16309 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
16310 neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation);
16311 neg find isPrimitive(element);
16312} or
16313{ find mustInstanceOfFunctionalInput_class(problem,interpretation,element); }
16314/**
16315 * An element must be an instance of type "FunctionalOutput class".
16316 */
16317private pattern mustInstanceOfFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
16318 Type.name(type,"FunctionalOutput class");
16319 find directInstanceOf(problem,interpretation,element,type);
16320}
16321private pattern scopeDisallowsNewFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation) {
16322 find interpretation(problem,interpretation);
16323 PartialInterpretation.scopes(interpretation,scope);
16324 Scope.targetTypeInterpretation(scope,typeInterpretation);
16325 Scope.maxNewElements(scope,0);
16326 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
16327 Type.name(type,"FunctionalOutput class");
16328}
16329
16330/**
16331 * An element may be an instance of type "FunctionalOutput class".
16332 */
16333private pattern mayInstanceOfFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
16334{
16335 find interpretation(problem,interpretation);
16336 PartialInterpretation.newElements(interpretation,element);
16337 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
16338 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
16339 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
16340 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
16341 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
16342 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
16343 neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation);
16344 neg find isPrimitive(element);
16345} or {
16346 find interpretation(problem,interpretation);
16347 PartialInterpretation.openWorldElements(interpretation,element);
16348 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
16349 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
16350 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
16351 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
16352 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
16353 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
16354 neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation);
16355 neg find isPrimitive(element);
16356} or
16357{ find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); }
16358/**
16359 * An element must be an instance of type "FunctionalData class".
16360 */
16361private pattern mustInstanceOfFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
16362 Type.name(type,"FunctionalData class");
16363 find directInstanceOf(problem,interpretation,element,type);
16364}
16365private pattern scopeDisallowsNewFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation) {
16366 find interpretation(problem,interpretation);
16367 PartialInterpretation.scopes(interpretation,scope);
16368 Scope.targetTypeInterpretation(scope,typeInterpretation);
16369 Scope.maxNewElements(scope,0);
16370 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
16371 Type.name(type,"FunctionalData class");
16372}
16373
16374/**
16375 * An element may be an instance of type "FunctionalData class".
16376 */
16377private pattern mayInstanceOfFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
16378{
16379 find interpretation(problem,interpretation);
16380 PartialInterpretation.newElements(interpretation,element);
16381 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
16382 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
16383 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
16384 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
16385 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
16386 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
16387 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
16388 neg find scopeDisallowsNewFunctionalData_class(problem, interpretation);
16389 neg find isPrimitive(element);
16390} or {
16391 find interpretation(problem,interpretation);
16392 PartialInterpretation.openWorldElements(interpretation,element);
16393 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
16394 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
16395 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
16396 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
16397 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
16398 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
16399 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
16400 neg find scopeDisallowsNewFunctionalData_class(problem, interpretation);
16401 neg find isPrimitive(element);
16402} or
16403{ find mustInstanceOfFunctionalData_class(problem,interpretation,element); }
16404/**
16405 * An element must be an instance of type "FunctionType enum".
16406 */
16407private pattern mustInstanceOfFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
16408 Type.name(type,"FunctionType enum");
16409 find directInstanceOf(problem,interpretation,element,type);
16410}
16411private pattern scopeDisallowsNewFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation) {
16412 find interpretation(problem,interpretation);
16413 PartialInterpretation.scopes(interpretation,scope);
16414 Scope.targetTypeInterpretation(scope,typeInterpretation);
16415 Scope.maxNewElements(scope,0);
16416 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
16417 Type.name(type,"FunctionType enum");
16418}
16419
16420/**
16421 * An element may be an instance of type "FunctionType enum".
16422 */
16423private pattern mayInstanceOfFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
16424{ find mustInstanceOfFunctionType_enum(problem,interpretation,element); }
16425/**
16426 * An element must be an instance of type "FunctionalArchitectureModel class DefinedPart".
16427 */
16428private pattern mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
16429 Type.name(type,"FunctionalArchitectureModel class DefinedPart");
16430 find directInstanceOf(problem,interpretation,element,type);
16431}
16432private pattern scopeDisallowsNewFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
16433 find interpretation(problem,interpretation);
16434 PartialInterpretation.scopes(interpretation,scope);
16435 Scope.targetTypeInterpretation(scope,typeInterpretation);
16436 Scope.maxNewElements(scope,0);
16437 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
16438 Type.name(type,"FunctionalArchitectureModel class DefinedPart");
16439}
16440
16441/**
16442 * An element may be an instance of type "FunctionalArchitectureModel class DefinedPart".
16443 */
16444private pattern mayInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
16445{ find mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem,interpretation,element); }
16446/**
16447 * An element must be an instance of type "FunctionalArchitectureModel class UndefinedPart".
16448 */
16449private pattern mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
16450 Type.name(type,"FunctionalArchitectureModel class UndefinedPart");
16451 find directInstanceOf(problem,interpretation,element,type);
16452}
16453private pattern scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
16454 find interpretation(problem,interpretation);
16455 PartialInterpretation.scopes(interpretation,scope);
16456 Scope.targetTypeInterpretation(scope,typeInterpretation);
16457 Scope.maxNewElements(scope,0);
16458 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
16459 Type.name(type,"FunctionalArchitectureModel class UndefinedPart");
16460}
16461
16462/**
16463 * An element may be an instance of type "FunctionalArchitectureModel class UndefinedPart".
16464 */
16465private pattern mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
16466{
16467 find interpretation(problem,interpretation);
16468 PartialInterpretation.newElements(interpretation,element);
16469 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
16470 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
16471 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
16472 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
16473 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
16474 neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation);
16475 neg find isPrimitive(element);
16476} or {
16477 find interpretation(problem,interpretation);
16478 PartialInterpretation.openWorldElements(interpretation,element);
16479 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
16480 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
16481 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
16482 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
16483 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
16484 neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation);
16485 neg find isPrimitive(element);
16486} or
16487{ find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); }
16488
16489//////////
16490// 1.2 Relation Declaration Indexers
16491//////////
16492/**
16493 * Matcher for detecting tuples t where []interface reference FunctionalElement(source,target)
16494 */
16495private pattern mustInRelationinterface_reference_FunctionalElement(
16496 problem:LogicProblem, interpretation:PartialInterpretation,
16497 source: DefinedElement, target:DefinedElement)
16498{
16499 find interpretation(problem,interpretation);
16500 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
16501 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface reference FunctionalElement");
16502 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
16503 BinaryElementRelationLink.param1(link,source);
16504 BinaryElementRelationLink.param2(link,target);
16505}
16506/**
16507 * Matcher for detecting tuples t where <>interface reference FunctionalElement(source,target)
16508 */
16509private pattern mayInRelationinterface_reference_FunctionalElement(
16510 problem:LogicProblem, interpretation:PartialInterpretation,
16511 source: DefinedElement, target:DefinedElement)
16512{
16513 find interpretation(problem,interpretation);
16514 // The two endpoint of the link have to exist
16515 find mayExist(problem, interpretation, source);
16516 find mayExist(problem, interpretation, target);
16517 // Type consistency
16518 find mayInstanceOfFunctionalElement_class(problem,interpretation,source);
16519 find mayInstanceOfFunctionalInterface_class(problem,interpretation,target);
16520 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
16521 // the upper bound of the multiplicity should be considered.
16522 numberOfExistingReferences == count find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,_);
16523 check(numberOfExistingReferences < 1);
16524 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
16525 // the upper bound of the opposite reference multiplicity should be considered.
16526 numberOfExistingOppositeReferences == count find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,target,_);
16527 check(numberOfExistingOppositeReferences < 1);
16528 // The reference is containment, then a new reference cannot be create if:
16529 // 1. Multiple parents
16530 neg find mustContains4(problem,interpretation,_,target);
16531 // 2. Circle in the containment hierarchy
16532 neg find mustTransitiveContains(source,target);
16533} or {
16534 find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,target);
16535}
16536/**
16537 * Matcher for detecting tuples t where []model reference FunctionalElement(source,target)
16538 */
16539private pattern mustInRelationmodel_reference_FunctionalElement(
16540 problem:LogicProblem, interpretation:PartialInterpretation,
16541 source: DefinedElement, target:DefinedElement)
16542{
16543 find interpretation(problem,interpretation);
16544 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
16545 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement");
16546 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
16547 BinaryElementRelationLink.param1(link,source);
16548 BinaryElementRelationLink.param2(link,target);
16549}
16550/**
16551 * Matcher for detecting tuples t where <>model reference FunctionalElement(source,target)
16552 */
16553private pattern mayInRelationmodel_reference_FunctionalElement(
16554 problem:LogicProblem, interpretation:PartialInterpretation,
16555 source: DefinedElement, target:DefinedElement)
16556{
16557 find interpretation(problem,interpretation);
16558 // The two endpoint of the link have to exist
16559 find mayExist(problem, interpretation, source);
16560 find mayExist(problem, interpretation, target);
16561 // Type consistency
16562 find mayInstanceOfFunctionalElement_class(problem,interpretation,source);
16563 find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,target);
16564 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
16565 // the upper bound of the multiplicity should be considered.
16566 numberOfExistingReferences == count find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,source,_);
16567 check(numberOfExistingReferences < 1);
16568} or {
16569 find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,source,target);
16570}
16571/**
16572 * Matcher for detecting tuples t where []parent reference FunctionalElement(source,target)
16573 */
16574private pattern mustInRelationparent_reference_FunctionalElement(
16575 problem:LogicProblem, interpretation:PartialInterpretation,
16576 source: DefinedElement, target:DefinedElement)
16577{
16578 find interpretation(problem,interpretation);
16579 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
16580 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"parent reference FunctionalElement");
16581 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
16582 BinaryElementRelationLink.param1(link,source);
16583 BinaryElementRelationLink.param2(link,target);
16584}
16585/**
16586 * Matcher for detecting tuples t where <>parent reference FunctionalElement(source,target)
16587 */
16588private pattern mayInRelationparent_reference_FunctionalElement(
16589 problem:LogicProblem, interpretation:PartialInterpretation,
16590 source: DefinedElement, target:DefinedElement)
16591{
16592 find interpretation(problem,interpretation);
16593 // The two endpoint of the link have to exist
16594 find mayExist(problem, interpretation, source);
16595 find mayExist(problem, interpretation, target);
16596 // Type consistency
16597 find mayInstanceOfFunctionalElement_class(problem,interpretation,source);
16598 find mayInstanceOfFunction_class(problem,interpretation,target);
16599 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
16600 // the upper bound of the multiplicity should be considered.
16601 numberOfExistingReferences == count find mustInRelationparent_reference_FunctionalElement(problem,interpretation,source,_);
16602 check(numberOfExistingReferences < 1);
16603 // The eOpposite of the reference is containment, then a referene cannot be created if
16604 // 1. Multiple parents
16605 neg find mustContains4(problem,interpretation,source,_);
16606 // 2. Circle in the containment hierarchy
16607 neg find mustTransitiveContains(source,target);
16608} or {
16609 find mustInRelationparent_reference_FunctionalElement(problem,interpretation,source,target);
16610}
16611/**
16612 * Matcher for detecting tuples t where []rootElements reference FunctionalArchitectureModel(source,target)
16613 */
16614private pattern mustInRelationrootElements_reference_FunctionalArchitectureModel(
16615 problem:LogicProblem, interpretation:PartialInterpretation,
16616 source: DefinedElement, target:DefinedElement)
16617{
16618 find interpretation(problem,interpretation);
16619 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
16620 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"rootElements reference FunctionalArchitectureModel");
16621 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
16622 BinaryElementRelationLink.param1(link,source);
16623 BinaryElementRelationLink.param2(link,target);
16624}
16625/**
16626 * Matcher for detecting tuples t where <>rootElements reference FunctionalArchitectureModel(source,target)
16627 */
16628private pattern mayInRelationrootElements_reference_FunctionalArchitectureModel(
16629 problem:LogicProblem, interpretation:PartialInterpretation,
16630 source: DefinedElement, target:DefinedElement)
16631{
16632 find interpretation(problem,interpretation);
16633 // The two endpoint of the link have to exist
16634 find mayExist(problem, interpretation, source);
16635 find mayExist(problem, interpretation, target);
16636 // Type consistency
16637 find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,source);
16638 find mayInstanceOfFunctionalElement_class(problem,interpretation,target);
16639 // The reference is containment, then a new reference cannot be create if:
16640 // 1. Multiple parents
16641 neg find mustContains4(problem,interpretation,_,target);
16642 // 2. Circle in the containment hierarchy
16643 neg find mustTransitiveContains(source,target);
16644} or {
16645 find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,source,target);
16646}
16647/**
16648 * Matcher for detecting tuples t where []subElements reference Function(source,target)
16649 */
16650private pattern mustInRelationsubElements_reference_Function(
16651 problem:LogicProblem, interpretation:PartialInterpretation,
16652 source: DefinedElement, target:DefinedElement)
16653{
16654 find interpretation(problem,interpretation);
16655 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
16656 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"subElements reference Function");
16657 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
16658 BinaryElementRelationLink.param1(link,source);
16659 BinaryElementRelationLink.param2(link,target);
16660}
16661/**
16662 * Matcher for detecting tuples t where <>subElements reference Function(source,target)
16663 */
16664private pattern mayInRelationsubElements_reference_Function(
16665 problem:LogicProblem, interpretation:PartialInterpretation,
16666 source: DefinedElement, target:DefinedElement)
16667{
16668 find interpretation(problem,interpretation);
16669 // The two endpoint of the link have to exist
16670 find mayExist(problem, interpretation, source);
16671 find mayExist(problem, interpretation, target);
16672 // Type consistency
16673 find mayInstanceOfFunction_class(problem,interpretation,source);
16674 find mayInstanceOfFunctionalElement_class(problem,interpretation,target);
16675 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
16676 // the upper bound of the opposite reference multiplicity should be considered.
16677 numberOfExistingOppositeReferences == count find mustInRelationparent_reference_FunctionalElement(problem,interpretation,target,_);
16678 check(numberOfExistingOppositeReferences < 1);
16679 // The reference is containment, then a new reference cannot be create if:
16680 // 1. Multiple parents
16681 neg find mustContains4(problem,interpretation,_,target);
16682 // 2. Circle in the containment hierarchy
16683 neg find mustTransitiveContains(source,target);
16684} or {
16685 find mustInRelationsubElements_reference_Function(problem,interpretation,source,target);
16686}
16687/**
16688 * Matcher for detecting tuples t where []data reference FAMTerminator(source,target)
16689 */
16690private pattern mustInRelationdata_reference_FAMTerminator(
16691 problem:LogicProblem, interpretation:PartialInterpretation,
16692 source: DefinedElement, target:DefinedElement)
16693{
16694 find interpretation(problem,interpretation);
16695 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
16696 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"data reference FAMTerminator");
16697 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
16698 BinaryElementRelationLink.param1(link,source);
16699 BinaryElementRelationLink.param2(link,target);
16700}
16701/**
16702 * Matcher for detecting tuples t where <>data reference FAMTerminator(source,target)
16703 */
16704private pattern mayInRelationdata_reference_FAMTerminator(
16705 problem:LogicProblem, interpretation:PartialInterpretation,
16706 source: DefinedElement, target:DefinedElement)
16707{
16708 find interpretation(problem,interpretation);
16709 // The two endpoint of the link have to exist
16710 find mayExist(problem, interpretation, source);
16711 find mayExist(problem, interpretation, target);
16712 // Type consistency
16713 find mayInstanceOfFAMTerminator_class(problem,interpretation,source);
16714 find mayInstanceOfFunctionalData_class(problem,interpretation,target);
16715 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
16716 // the upper bound of the multiplicity should be considered.
16717 numberOfExistingReferences == count find mustInRelationdata_reference_FAMTerminator(problem,interpretation,source,_);
16718 check(numberOfExistingReferences < 1);
16719 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
16720 // the upper bound of the opposite reference multiplicity should be considered.
16721 numberOfExistingOppositeReferences == count find mustInRelationterminator_reference_FunctionalData(problem,interpretation,target,_);
16722 check(numberOfExistingOppositeReferences < 1);
16723 // The eOpposite of the reference is containment, then a referene cannot be created if
16724 // 1. Multiple parents
16725 neg find mustContains4(problem,interpretation,source,_);
16726 // 2. Circle in the containment hierarchy
16727 neg find mustTransitiveContains(source,target);
16728} or {
16729 find mustInRelationdata_reference_FAMTerminator(problem,interpretation,source,target);
16730}
16731/**
16732 * Matcher for detecting tuples t where []from reference InformationLink(source,target)
16733 */
16734private pattern mustInRelationfrom_reference_InformationLink(
16735 problem:LogicProblem, interpretation:PartialInterpretation,
16736 source: DefinedElement, target:DefinedElement)
16737{
16738 find interpretation(problem,interpretation);
16739 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
16740 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"from reference InformationLink");
16741 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
16742 BinaryElementRelationLink.param1(link,source);
16743 BinaryElementRelationLink.param2(link,target);
16744}
16745/**
16746 * Matcher for detecting tuples t where <>from reference InformationLink(source,target)
16747 */
16748private pattern mayInRelationfrom_reference_InformationLink(
16749 problem:LogicProblem, interpretation:PartialInterpretation,
16750 source: DefinedElement, target:DefinedElement)
16751{
16752 find interpretation(problem,interpretation);
16753 // The two endpoint of the link have to exist
16754 find mayExist(problem, interpretation, source);
16755 find mayExist(problem, interpretation, target);
16756 // Type consistency
16757 find mayInstanceOfInformationLink_class(problem,interpretation,source);
16758 find mayInstanceOfFunctionalOutput_class(problem,interpretation,target);
16759 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
16760 // the upper bound of the multiplicity should be considered.
16761 numberOfExistingReferences == count find mustInRelationfrom_reference_InformationLink(problem,interpretation,source,_);
16762 check(numberOfExistingReferences < 1);
16763 // The eOpposite of the reference is containment, then a referene cannot be created if
16764 // 1. Multiple parents
16765 neg find mustContains4(problem,interpretation,source,_);
16766 // 2. Circle in the containment hierarchy
16767 neg find mustTransitiveContains(source,target);
16768} or {
16769 find mustInRelationfrom_reference_InformationLink(problem,interpretation,source,target);
16770}
16771/**
16772 * Matcher for detecting tuples t where []to reference InformationLink(source,target)
16773 */
16774private pattern mustInRelationto_reference_InformationLink(
16775 problem:LogicProblem, interpretation:PartialInterpretation,
16776 source: DefinedElement, target:DefinedElement)
16777{
16778 find interpretation(problem,interpretation);
16779 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
16780 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"to reference InformationLink");
16781 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
16782 BinaryElementRelationLink.param1(link,source);
16783 BinaryElementRelationLink.param2(link,target);
16784}
16785/**
16786 * Matcher for detecting tuples t where <>to reference InformationLink(source,target)
16787 */
16788private pattern mayInRelationto_reference_InformationLink(
16789 problem:LogicProblem, interpretation:PartialInterpretation,
16790 source: DefinedElement, target:DefinedElement)
16791{
16792 find interpretation(problem,interpretation);
16793 // The two endpoint of the link have to exist
16794 find mayExist(problem, interpretation, source);
16795 find mayExist(problem, interpretation, target);
16796 // Type consistency
16797 find mayInstanceOfInformationLink_class(problem,interpretation,source);
16798 find mayInstanceOfFunctionalInput_class(problem,interpretation,target);
16799 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
16800 // the upper bound of the multiplicity should be considered.
16801 numberOfExistingReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,source,_);
16802 check(numberOfExistingReferences < 1);
16803} or {
16804 find mustInRelationto_reference_InformationLink(problem,interpretation,source,target);
16805}
16806/**
16807 * Matcher for detecting tuples t where []data reference FunctionalInterface(source,target)
16808 */
16809private pattern mustInRelationdata_reference_FunctionalInterface(
16810 problem:LogicProblem, interpretation:PartialInterpretation,
16811 source: DefinedElement, target:DefinedElement)
16812{
16813 find interpretation(problem,interpretation);
16814 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
16815 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"data reference FunctionalInterface");
16816 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
16817 BinaryElementRelationLink.param1(link,source);
16818 BinaryElementRelationLink.param2(link,target);
16819}
16820/**
16821 * Matcher for detecting tuples t where <>data reference FunctionalInterface(source,target)
16822 */
16823private pattern mayInRelationdata_reference_FunctionalInterface(
16824 problem:LogicProblem, interpretation:PartialInterpretation,
16825 source: DefinedElement, target:DefinedElement)
16826{
16827 find interpretation(problem,interpretation);
16828 // The two endpoint of the link have to exist
16829 find mayExist(problem, interpretation, source);
16830 find mayExist(problem, interpretation, target);
16831 // Type consistency
16832 find mayInstanceOfFunctionalInterface_class(problem,interpretation,source);
16833 find mayInstanceOfFunctionalData_class(problem,interpretation,target);
16834 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
16835 // the upper bound of the opposite reference multiplicity should be considered.
16836 numberOfExistingOppositeReferences == count find mustInRelationinterface_reference_FunctionalData(problem,interpretation,target,_);
16837 check(numberOfExistingOppositeReferences < 1);
16838 // The reference is containment, then a new reference cannot be create if:
16839 // 1. Multiple parents
16840 neg find mustContains4(problem,interpretation,_,target);
16841 // 2. Circle in the containment hierarchy
16842 neg find mustTransitiveContains(source,target);
16843} or {
16844 find mustInRelationdata_reference_FunctionalInterface(problem,interpretation,source,target);
16845}
16846/**
16847 * Matcher for detecting tuples t where []element reference FunctionalInterface(source,target)
16848 */
16849private pattern mustInRelationelement_reference_FunctionalInterface(
16850 problem:LogicProblem, interpretation:PartialInterpretation,
16851 source: DefinedElement, target:DefinedElement)
16852{
16853 find interpretation(problem,interpretation);
16854 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
16855 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"element reference FunctionalInterface");
16856 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
16857 BinaryElementRelationLink.param1(link,source);
16858 BinaryElementRelationLink.param2(link,target);
16859}
16860/**
16861 * Matcher for detecting tuples t where <>element reference FunctionalInterface(source,target)
16862 */
16863private pattern mayInRelationelement_reference_FunctionalInterface(
16864 problem:LogicProblem, interpretation:PartialInterpretation,
16865 source: DefinedElement, target:DefinedElement)
16866{
16867 find interpretation(problem,interpretation);
16868 // The two endpoint of the link have to exist
16869 find mayExist(problem, interpretation, source);
16870 find mayExist(problem, interpretation, target);
16871 // Type consistency
16872 find mayInstanceOfFunctionalInterface_class(problem,interpretation,source);
16873 find mayInstanceOfFunctionalElement_class(problem,interpretation,target);
16874 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
16875 // the upper bound of the multiplicity should be considered.
16876 numberOfExistingReferences == count find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,source,_);
16877 check(numberOfExistingReferences < 1);
16878 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
16879 // the upper bound of the opposite reference multiplicity should be considered.
16880 numberOfExistingOppositeReferences == count find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,target,_);
16881 check(numberOfExistingOppositeReferences < 1);
16882 // The eOpposite of the reference is containment, then a referene cannot be created if
16883 // 1. Multiple parents
16884 neg find mustContains4(problem,interpretation,source,_);
16885 // 2. Circle in the containment hierarchy
16886 neg find mustTransitiveContains(source,target);
16887} or {
16888 find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,source,target);
16889}
16890/**
16891 * Matcher for detecting tuples t where []IncomingLinks reference FunctionalInput(source,target)
16892 */
16893private pattern mustInRelationIncomingLinks_reference_FunctionalInput(
16894 problem:LogicProblem, interpretation:PartialInterpretation,
16895 source: DefinedElement, target:DefinedElement)
16896{
16897 find interpretation(problem,interpretation);
16898 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
16899 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"IncomingLinks reference FunctionalInput");
16900 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
16901 BinaryElementRelationLink.param1(link,source);
16902 BinaryElementRelationLink.param2(link,target);
16903}
16904/**
16905 * Matcher for detecting tuples t where <>IncomingLinks reference FunctionalInput(source,target)
16906 */
16907private pattern mayInRelationIncomingLinks_reference_FunctionalInput(
16908 problem:LogicProblem, interpretation:PartialInterpretation,
16909 source: DefinedElement, target:DefinedElement)
16910{
16911 find interpretation(problem,interpretation);
16912 // The two endpoint of the link have to exist
16913 find mayExist(problem, interpretation, source);
16914 find mayExist(problem, interpretation, target);
16915 // Type consistency
16916 find mayInstanceOfFunctionalInput_class(problem,interpretation,source);
16917 find mayInstanceOfInformationLink_class(problem,interpretation,target);
16918 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
16919 // the upper bound of the opposite reference multiplicity should be considered.
16920 numberOfExistingOppositeReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,target,_);
16921 check(numberOfExistingOppositeReferences < 1);
16922} or {
16923 find mustInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,source,target);
16924}
16925/**
16926 * Matcher for detecting tuples t where []outgoingLinks reference FunctionalOutput(source,target)
16927 */
16928private pattern mustInRelationoutgoingLinks_reference_FunctionalOutput(
16929 problem:LogicProblem, interpretation:PartialInterpretation,
16930 source: DefinedElement, target:DefinedElement)
16931{
16932 find interpretation(problem,interpretation);
16933 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
16934 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"outgoingLinks reference FunctionalOutput");
16935 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
16936 BinaryElementRelationLink.param1(link,source);
16937 BinaryElementRelationLink.param2(link,target);
16938}
16939/**
16940 * Matcher for detecting tuples t where <>outgoingLinks reference FunctionalOutput(source,target)
16941 */
16942private pattern mayInRelationoutgoingLinks_reference_FunctionalOutput(
16943 problem:LogicProblem, interpretation:PartialInterpretation,
16944 source: DefinedElement, target:DefinedElement)
16945{
16946 find interpretation(problem,interpretation);
16947 // The two endpoint of the link have to exist
16948 find mayExist(problem, interpretation, source);
16949 find mayExist(problem, interpretation, target);
16950 // Type consistency
16951 find mayInstanceOfFunctionalOutput_class(problem,interpretation,source);
16952 find mayInstanceOfInformationLink_class(problem,interpretation,target);
16953 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
16954 // the upper bound of the opposite reference multiplicity should be considered.
16955 numberOfExistingOppositeReferences == count find mustInRelationfrom_reference_InformationLink(problem,interpretation,target,_);
16956 check(numberOfExistingOppositeReferences < 1);
16957 // The reference is containment, then a new reference cannot be create if:
16958 // 1. Multiple parents
16959 neg find mustContains4(problem,interpretation,_,target);
16960 // 2. Circle in the containment hierarchy
16961 neg find mustTransitiveContains(source,target);
16962} or {
16963 find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,source,target);
16964}
16965/**
16966 * Matcher for detecting tuples t where []terminator reference FunctionalData(source,target)
16967 */
16968private pattern mustInRelationterminator_reference_FunctionalData(
16969 problem:LogicProblem, interpretation:PartialInterpretation,
16970 source: DefinedElement, target:DefinedElement)
16971{
16972 find interpretation(problem,interpretation);
16973 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
16974 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"terminator reference FunctionalData");
16975 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
16976 BinaryElementRelationLink.param1(link,source);
16977 BinaryElementRelationLink.param2(link,target);
16978}
16979/**
16980 * Matcher for detecting tuples t where <>terminator reference FunctionalData(source,target)
16981 */
16982private pattern mayInRelationterminator_reference_FunctionalData(
16983 problem:LogicProblem, interpretation:PartialInterpretation,
16984 source: DefinedElement, target:DefinedElement)
16985{
16986 find interpretation(problem,interpretation);
16987 // The two endpoint of the link have to exist
16988 find mayExist(problem, interpretation, source);
16989 find mayExist(problem, interpretation, target);
16990 // Type consistency
16991 find mayInstanceOfFunctionalData_class(problem,interpretation,source);
16992 find mayInstanceOfFAMTerminator_class(problem,interpretation,target);
16993 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
16994 // the upper bound of the multiplicity should be considered.
16995 numberOfExistingReferences == count find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,_);
16996 check(numberOfExistingReferences < 1);
16997 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
16998 // the upper bound of the opposite reference multiplicity should be considered.
16999 numberOfExistingOppositeReferences == count find mustInRelationdata_reference_FAMTerminator(problem,interpretation,target,_);
17000 check(numberOfExistingOppositeReferences < 1);
17001 // The reference is containment, then a new reference cannot be create if:
17002 // 1. Multiple parents
17003 neg find mustContains4(problem,interpretation,_,target);
17004 // 2. Circle in the containment hierarchy
17005 neg find mustTransitiveContains(source,target);
17006} or {
17007 find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,target);
17008}
17009/**
17010 * Matcher for detecting tuples t where []interface reference FunctionalData(source,target)
17011 */
17012private pattern mustInRelationinterface_reference_FunctionalData(
17013 problem:LogicProblem, interpretation:PartialInterpretation,
17014 source: DefinedElement, target:DefinedElement)
17015{
17016 find interpretation(problem,interpretation);
17017 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
17018 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface reference FunctionalData");
17019 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
17020 BinaryElementRelationLink.param1(link,source);
17021 BinaryElementRelationLink.param2(link,target);
17022}
17023/**
17024 * Matcher for detecting tuples t where <>interface reference FunctionalData(source,target)
17025 */
17026private pattern mayInRelationinterface_reference_FunctionalData(
17027 problem:LogicProblem, interpretation:PartialInterpretation,
17028 source: DefinedElement, target:DefinedElement)
17029{
17030 find interpretation(problem,interpretation);
17031 // The two endpoint of the link have to exist
17032 find mayExist(problem, interpretation, source);
17033 find mayExist(problem, interpretation, target);
17034 // Type consistency
17035 find mayInstanceOfFunctionalData_class(problem,interpretation,source);
17036 find mayInstanceOfFunctionalInterface_class(problem,interpretation,target);
17037 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
17038 // the upper bound of the multiplicity should be considered.
17039 numberOfExistingReferences == count find mustInRelationinterface_reference_FunctionalData(problem,interpretation,source,_);
17040 check(numberOfExistingReferences < 1);
17041 // The eOpposite of the reference is containment, then a referene cannot be created if
17042 // 1. Multiple parents
17043 neg find mustContains4(problem,interpretation,source,_);
17044 // 2. Circle in the containment hierarchy
17045 neg find mustTransitiveContains(source,target);
17046} or {
17047 find mustInRelationinterface_reference_FunctionalData(problem,interpretation,source,target);
17048}
17049/**
17050 * Matcher for detecting tuples t where []type attribute Function(source,target)
17051 */
17052private pattern mustInRelationtype_attribute_Function(
17053 problem:LogicProblem, interpretation:PartialInterpretation,
17054 source: DefinedElement, target:DefinedElement)
17055{
17056 find interpretation(problem,interpretation);
17057 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
17058 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function");
17059 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
17060 BinaryElementRelationLink.param1(link,source);
17061 BinaryElementRelationLink.param2(link,target);
17062}
17063/**
17064 * Matcher for detecting tuples t where <>type attribute Function(source,target)
17065 */
17066private pattern mayInRelationtype_attribute_Function(
17067 problem:LogicProblem, interpretation:PartialInterpretation,
17068 source: DefinedElement, target:DefinedElement)
17069{
17070 find interpretation(problem,interpretation);
17071 // The two endpoint of the link have to exist
17072 find mayExist(problem, interpretation, source);
17073 find mayExist(problem, interpretation, target);
17074 // Type consistency
17075 find mayInstanceOfFunction_class(problem,interpretation,source);
17076 find mayInstanceOfFunctionType_enum(problem,interpretation,target);
17077 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
17078 // the upper bound of the multiplicity should be considered.
17079 numberOfExistingReferences == count find mustInRelationtype_attribute_Function(problem,interpretation,source,_);
17080 check(numberOfExistingReferences < 1);
17081} or {
17082 find mustInRelationtype_attribute_Function(problem,interpretation,source,target);
17083}
17084
17085//////////
17086// 1.3 Relation Definition Indexers
17087//////////
17088
17089//////////
17090// 1.4 Containment Indexer
17091//////////
17092private pattern mustContains2(source: DefinedElement, target: DefinedElement) {
17093 find mustContains4(_,_,source,target);
17094}
17095
17096private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation,
17097 source: DefinedElement, target: DefinedElement)
17098 { find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,target); }or
17099
17100 { find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,source,target); }or
17101
17102 { find mustInRelationsubElements_reference_Function(problem,interpretation,source,target); }or
17103
17104 { find mustInRelationdata_reference_FunctionalInterface(problem,interpretation,source,target); }or
17105
17106 { find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,source,target); }or
17107
17108 { find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,target); }
17109
17110private pattern mustTransitiveContains(source,target) {
17111 find mustContains2+(source,target);
17112}
17113
17114//////////
17115// 2. Invalidation Indexers
17116//////////
17117// 2.1 Invalidated by WF Queries
17118//////////
17119
17120//////////
17121// 3. Unfinishedness Indexers
17122//////////
17123// 3.1 Unfinishedness Measured by Multiplicity
17124//////////
17125pattern unfinishedLowerMultiplicity_model_reference_FunctionalElement(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) {
17126 find interpretation(problem,interpretation);
17127 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
17128 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement");
17129 find mustInstanceOfFunctionalElement_class(problem,interpretation,object);
17130 numberOfExistingReferences == count find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,object,_);
17131 check(numberOfExistingReferences < 1);
17132 missingMultiplicity == eval(1-numberOfExistingReferences);
17133}
17134pattern unfinishedLowerMultiplicity_to_reference_InformationLink(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) {
17135 find interpretation(problem,interpretation);
17136 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
17137 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"to reference InformationLink");
17138 find mustInstanceOfInformationLink_class(problem,interpretation,object);
17139 numberOfExistingReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,object,_);
17140 check(numberOfExistingReferences < 1);
17141 missingMultiplicity == eval(1-numberOfExistingReferences);
17142}
17143pattern unfinishedLowerMultiplicity_type_attribute_Function(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) {
17144 find interpretation(problem,interpretation);
17145 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
17146 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function");
17147 find mustInstanceOfFunction_class(problem,interpretation,object);
17148 numberOfExistingReferences == count find mustInRelationtype_attribute_Function(problem,interpretation,object,_);
17149 check(numberOfExistingReferences < 1);
17150 missingMultiplicity == eval(1-numberOfExistingReferences);
17151}
17152
17153//////////
17154// 3.2 Unfinishedness Measured by WF Queries
17155//////////
17156
17157//////////
17158// 4. Refinement Indexers
17159//////////
17160// 4.1 Object constructors
17161//////////
17162private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation)
17163{
17164 find interpretation(problem,interpretation);
17165 find mustInstanceOfFunction_class(problem,interpretation,root);
17166 find mustExist(problem, interpretation, root);
17167}or{
17168 find interpretation(problem,interpretation);
17169 find mustInstanceOfFunctionalElement_class(problem,interpretation,root);
17170 find mustExist(problem, interpretation, root);
17171}or{
17172 find interpretation(problem,interpretation);
17173 find mustInstanceOfFunctionalOutput_class(problem,interpretation,root);
17174 find mustExist(problem, interpretation, root);
17175}or{
17176 find interpretation(problem,interpretation);
17177 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,root);
17178 find mustExist(problem, interpretation, root);
17179}or{
17180 find interpretation(problem,interpretation);
17181 find mustInstanceOfFunctionalData_class(problem,interpretation,root);
17182 find mustExist(problem, interpretation, root);
17183}or{
17184 find interpretation(problem,interpretation);
17185 find mustInstanceOfFAMTerminator_class(problem,interpretation,root);
17186 find mustExist(problem, interpretation, root);
17187}or{
17188 find interpretation(problem,interpretation);
17189 find mustInstanceOfFunctionalInterface_class(problem,interpretation,root);
17190 find mustExist(problem, interpretation, root);
17191}or{
17192 find interpretation(problem,interpretation);
17193 find mustInstanceOfFunctionalInput_class(problem,interpretation,root);
17194 find mustExist(problem, interpretation, root);
17195}or{
17196 find interpretation(problem,interpretation);
17197 find mustInstanceOfInformationLink_class(problem,interpretation,root);
17198 find mustExist(problem, interpretation, root);
17199}or{
17200 find interpretation(problem,interpretation);
17201 find mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem,interpretation,root);
17202 find mustExist(problem, interpretation, root);
17203}or{
17204 find interpretation(problem,interpretation);
17205 find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,root);
17206 find mustExist(problem, interpretation, root);
17207}
17208pattern createObject_Function_class_by_rootElements_reference_FunctionalArchitectureModel(
17209 problem:LogicProblem, interpretation:PartialInterpretation,
17210 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
17211 container:DefinedElement)
17212{
17213 find interpretation(problem,interpretation);
17214 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
17215 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class");
17216 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
17217 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"rootElements reference FunctionalArchitectureModel");
17218 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,container);
17219 find mayInstanceOfFunction_class(problem,interpretation,newObject);
17220 find mayInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,container,newObject);
17221 find mustExist(problem, interpretation, container);
17222 neg find mustExist(problem, interpretation, newObject);
17223}
17224pattern createObject_Function_class_by_subElements_reference_Function_with_parent_reference_FunctionalElement(
17225 problem:LogicProblem, interpretation:PartialInterpretation,
17226 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
17227 container:DefinedElement)
17228{
17229 find interpretation(problem,interpretation);
17230 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
17231 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class");
17232 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
17233 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"subElements reference Function");
17234 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
17235 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FunctionalElement");
17236 find mustInstanceOfFunction_class(problem,interpretation,container);
17237 find mayInstanceOfFunction_class(problem,interpretation,newObject);
17238 find mayInRelationsubElements_reference_Function(problem,interpretation,container,newObject);
17239 find mustExist(problem, interpretation, container);
17240 neg find mustExist(problem, interpretation, newObject);
17241}
17242pattern createObject_Function_class(
17243 problem:LogicProblem, interpretation:PartialInterpretation,
17244 typeInterpretation:PartialComplexTypeInterpretation)
17245{
17246 find interpretation(problem,interpretation);
17247 neg find hasElementInContainment(problem,interpretation);
17248 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
17249 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class");
17250 find mayInstanceOfFunction_class(problem,interpretation,newObject);
17251 find mayExist(problem, interpretation, newObject);
17252 neg find mustExist(problem, interpretation, newObject);
17253}
17254pattern createObject_FunctionalArchitectureModel_class_UndefinedPart(
17255 problem:LogicProblem, interpretation:PartialInterpretation,
17256 typeInterpretation:PartialComplexTypeInterpretation)
17257{
17258 find interpretation(problem,interpretation);
17259 neg find hasElementInContainment(problem,interpretation);
17260 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
17261 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalArchitectureModel class UndefinedPart");
17262 find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,newObject);
17263 find mayExist(problem, interpretation, newObject);
17264 neg find mustExist(problem, interpretation, newObject);
17265}
17266pattern createObject_FunctionalOutput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData(
17267 problem:LogicProblem, interpretation:PartialInterpretation,
17268 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
17269 container:DefinedElement)
17270{
17271 find interpretation(problem,interpretation);
17272 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
17273 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class");
17274 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
17275 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface");
17276 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
17277 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData");
17278 find mustInstanceOfFunctionalInterface_class(problem,interpretation,container);
17279 find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject);
17280 find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject);
17281 find mustExist(problem, interpretation, container);
17282 neg find mustExist(problem, interpretation, newObject);
17283}
17284pattern createObject_FunctionalOutput_class(
17285 problem:LogicProblem, interpretation:PartialInterpretation,
17286 typeInterpretation:PartialComplexTypeInterpretation)
17287{
17288 find interpretation(problem,interpretation);
17289 neg find hasElementInContainment(problem,interpretation);
17290 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
17291 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class");
17292 find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject);
17293 find mayExist(problem, interpretation, newObject);
17294 neg find mustExist(problem, interpretation, newObject);
17295}
17296pattern createObject_FAMTerminator_class_by_terminator_reference_FunctionalData_with_data_reference_FAMTerminator(
17297 problem:LogicProblem, interpretation:PartialInterpretation,
17298 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
17299 container:DefinedElement)
17300{
17301 find interpretation(problem,interpretation);
17302 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
17303 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class");
17304 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
17305 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"terminator reference FunctionalData");
17306 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
17307 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"data reference FAMTerminator");
17308 find mustInstanceOfFunctionalData_class(problem,interpretation,container);
17309 find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject);
17310 find mayInRelationterminator_reference_FunctionalData(problem,interpretation,container,newObject);
17311 find mustExist(problem, interpretation, container);
17312 neg find mustExist(problem, interpretation, newObject);
17313}
17314pattern createObject_FAMTerminator_class(
17315 problem:LogicProblem, interpretation:PartialInterpretation,
17316 typeInterpretation:PartialComplexTypeInterpretation)
17317{
17318 find interpretation(problem,interpretation);
17319 neg find hasElementInContainment(problem,interpretation);
17320 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
17321 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class");
17322 find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject);
17323 find mayExist(problem, interpretation, newObject);
17324 neg find mustExist(problem, interpretation, newObject);
17325}
17326pattern createObject_FunctionalInput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData(
17327 problem:LogicProblem, interpretation:PartialInterpretation,
17328 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
17329 container:DefinedElement)
17330{
17331 find interpretation(problem,interpretation);
17332 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
17333 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class");
17334 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
17335 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface");
17336 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
17337 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData");
17338 find mustInstanceOfFunctionalInterface_class(problem,interpretation,container);
17339 find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject);
17340 find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject);
17341 find mustExist(problem, interpretation, container);
17342 neg find mustExist(problem, interpretation, newObject);
17343}
17344pattern createObject_FunctionalInput_class(
17345 problem:LogicProblem, interpretation:PartialInterpretation,
17346 typeInterpretation:PartialComplexTypeInterpretation)
17347{
17348 find interpretation(problem,interpretation);
17349 neg find hasElementInContainment(problem,interpretation);
17350 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
17351 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class");
17352 find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject);
17353 find mayExist(problem, interpretation, newObject);
17354 neg find mustExist(problem, interpretation, newObject);
17355}
17356pattern createObject_InformationLink_class_by_outgoingLinks_reference_FunctionalOutput_with_from_reference_InformationLink(
17357 problem:LogicProblem, interpretation:PartialInterpretation,
17358 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
17359 container:DefinedElement)
17360{
17361 find interpretation(problem,interpretation);
17362 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
17363 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class");
17364 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
17365 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingLinks reference FunctionalOutput");
17366 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
17367 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"from reference InformationLink");
17368 find mustInstanceOfFunctionalOutput_class(problem,interpretation,container);
17369 find mayInstanceOfInformationLink_class(problem,interpretation,newObject);
17370 find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,container,newObject);
17371 find mustExist(problem, interpretation, container);
17372 neg find mustExist(problem, interpretation, newObject);
17373}
17374pattern createObject_InformationLink_class(
17375 problem:LogicProblem, interpretation:PartialInterpretation,
17376 typeInterpretation:PartialComplexTypeInterpretation)
17377{
17378 find interpretation(problem,interpretation);
17379 neg find hasElementInContainment(problem,interpretation);
17380 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
17381 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class");
17382 find mayInstanceOfInformationLink_class(problem,interpretation,newObject);
17383 find mayExist(problem, interpretation, newObject);
17384 neg find mustExist(problem, interpretation, newObject);
17385}
17386pattern createObject_FunctionalInterface_class_by_interface_reference_FunctionalElement_with_element_reference_FunctionalInterface(
17387 problem:LogicProblem, interpretation:PartialInterpretation,
17388 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
17389 container:DefinedElement)
17390{
17391 find interpretation(problem,interpretation);
17392 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
17393 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class");
17394 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
17395 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"interface reference FunctionalElement");
17396 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
17397 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"element reference FunctionalInterface");
17398 find mustInstanceOfFunctionalElement_class(problem,interpretation,container);
17399 find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject);
17400 find mayInRelationinterface_reference_FunctionalElement(problem,interpretation,container,newObject);
17401 find mustExist(problem, interpretation, container);
17402 neg find mustExist(problem, interpretation, newObject);
17403}
17404pattern createObject_FunctionalInterface_class(
17405 problem:LogicProblem, interpretation:PartialInterpretation,
17406 typeInterpretation:PartialComplexTypeInterpretation)
17407{
17408 find interpretation(problem,interpretation);
17409 neg find hasElementInContainment(problem,interpretation);
17410 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
17411 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class");
17412 find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject);
17413 find mayExist(problem, interpretation, newObject);
17414 neg find mustExist(problem, interpretation, newObject);
17415}
17416
17417//////////
17418// 4.2 Type refinement
17419//////////
17420pattern refineTypeTo_Function_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
17421 find interpretation(problem,interpretation);
17422 PartialInterpretation.newElements(interpretation,element);
17423 find mayInstanceOfFunction_class(problem,interpretation,element);
17424 neg find mustInstanceOfFunction_class(problem,interpretation,element);
17425 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
17426 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
17427 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
17428 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
17429 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
17430}
17431pattern refineTypeTo_FunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
17432 find interpretation(problem,interpretation);
17433 PartialInterpretation.newElements(interpretation,element);
17434 find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element);
17435 neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element);
17436 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
17437 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
17438 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
17439 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
17440 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
17441}
17442pattern refineTypeTo_FunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
17443 find interpretation(problem,interpretation);
17444 PartialInterpretation.newElements(interpretation,element);
17445 find mayInstanceOfFunctionalOutput_class(problem,interpretation,element);
17446 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
17447 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
17448 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
17449 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
17450 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
17451 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
17452 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
17453}
17454pattern refineTypeTo_FAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
17455 find interpretation(problem,interpretation);
17456 PartialInterpretation.newElements(interpretation,element);
17457 find mayInstanceOfFAMTerminator_class(problem,interpretation,element);
17458 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
17459 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
17460 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
17461 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
17462 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
17463 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
17464}
17465pattern refineTypeTo_FunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
17466 find interpretation(problem,interpretation);
17467 PartialInterpretation.newElements(interpretation,element);
17468 find mayInstanceOfFunctionalInput_class(problem,interpretation,element);
17469 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
17470 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
17471 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
17472 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
17473 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
17474 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
17475 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
17476}
17477pattern refineTypeTo_InformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
17478 find interpretation(problem,interpretation);
17479 PartialInterpretation.newElements(interpretation,element);
17480 find mayInstanceOfInformationLink_class(problem,interpretation,element);
17481 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
17482 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
17483 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
17484 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
17485 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
17486 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
17487}
17488pattern refineTypeTo_FunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
17489 find interpretation(problem,interpretation);
17490 PartialInterpretation.newElements(interpretation,element);
17491 find mayInstanceOfFunctionalInterface_class(problem,interpretation,element);
17492 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
17493 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
17494 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
17495 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
17496 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
17497 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
17498}
17499
17500//////////
17501// 4.3 Relation refinement
17502//////////
17503pattern refineRelation_model_reference_FunctionalElement(
17504 problem:LogicProblem, interpretation:PartialInterpretation,
17505 relationIterpretation:PartialRelationInterpretation,
17506 from: DefinedElement, to: DefinedElement)
17507{
17508 find interpretation(problem,interpretation);
17509 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
17510 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement");
17511 find mustExist(problem, interpretation, from);
17512 find mustExist(problem, interpretation, to);
17513 find mustInstanceOfFunctionalElement_class(problem,interpretation,from);
17514 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,to);
17515 find mayInRelationmodel_reference_FunctionalElement(problem,interpretation,from,to);
17516 neg find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,from,to);
17517}
17518pattern refineRelation_IncomingLinks_reference_FunctionalInput_and_to_reference_InformationLink(
17519 problem:LogicProblem, interpretation:PartialInterpretation,
17520 relationIterpretation:PartialRelationInterpretation, oppositeInterpretation:PartialRelationInterpretation,
17521 from: DefinedElement, to: DefinedElement)
17522{
17523 find interpretation(problem,interpretation);
17524 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
17525 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"IncomingLinks reference FunctionalInput");
17526 PartialInterpretation.partialrelationinterpretation(interpretation,oppositeInterpretation);
17527 PartialRelationInterpretation.interpretationOf.name(oppositeInterpretation,"to reference InformationLink");
17528 find mustExist(problem, interpretation, from);
17529 find mustExist(problem, interpretation, to);
17530 find mustInstanceOfFunctionalInput_class(problem,interpretation,from);
17531 find mustInstanceOfInformationLink_class(problem,interpretation,to);
17532 find mayInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,from,to);
17533 neg find mustInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,from,to);
17534}
17535pattern refineRelation_type_attribute_Function(
17536 problem:LogicProblem, interpretation:PartialInterpretation,
17537 relationIterpretation:PartialRelationInterpretation,
17538 from: DefinedElement, to: DefinedElement)
17539{
17540 find interpretation(problem,interpretation);
17541 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
17542 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function");
17543 find mustExist(problem, interpretation, from);
17544 find mustExist(problem, interpretation, to);
17545 find mustInstanceOfFunction_class(problem,interpretation,from);
17546 find mustInstanceOfFunctionType_enum(problem,interpretation,to);
17547 find mayInRelationtype_attribute_Function(problem,interpretation,from,to);
17548 neg find mustInRelationtype_attribute_Function(problem,interpretation,from,to);
17549}
17550import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage"
17551import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem"
17552import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language"
17553
17554//////////
17555// 0. Util
17556//////////
17557private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) {
17558 PartialInterpretation.problem(interpretation,problem);
17559}
17560
17561/////////////////////////
17562// 0.1 Existence
17563/////////////////////////
17564private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
17565 find interpretation(problem,interpretation);
17566 LogicProblem.elements(problem,element);
17567} or {
17568 find interpretation(problem,interpretation);
17569 PartialInterpretation.newElements(interpretation,element);
17570}
17571
17572private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
17573 find mustExist(problem,interpretation,element);
17574} or {
17575 find interpretation(problem,interpretation);
17576 neg find elementCloseWorld(element);
17577 PartialInterpretation.openWorldElements(interpretation,element);
17578}
17579
17580private pattern elementCloseWorld(element:DefinedElement) {
17581 PartialInterpretation.openWorldElements(i,element);
17582 PartialInterpretation.maxNewElements(i,0);
17583} or {
17584 Scope.targetTypeInterpretation(scope,interpretation);
17585 PartialTypeInterpratation.elements(interpretation,element);
17586 Scope.maxNewElements(scope,0);
17587}
17588
17589////////////////////////
17590// 0.2 Equivalence
17591////////////////////////
17592pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) {
17593 find mayExist(problem,interpretation,a);
17594 find mayExist(problem,interpretation,b);
17595 a == b;
17596}
17597
17598////////////////////////
17599// 0.3 Required Patterns by TypeIndexer
17600////////////////////////
17601private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) {
17602 find interpretation(problem,interpretation);
17603 LogicProblem.types(problem,type);
17604 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
17605 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
17606}
17607
17608private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) {
17609 find interpretation(problem,interpretation);
17610 LogicProblem.types(problem,type);
17611 TypeDefinition.elements(type,element);
17612} or {
17613 find interpretation(problem,interpretation);
17614 find typeInterpretation(problem,interpretation,type,typeInterpretation);
17615 PartialComplexTypeInterpretation.elements(typeInterpretation,element);
17616}
17617
17618private pattern isPrimitive(element: PrimitiveElement) {
17619 PrimitiveElement(element);
17620}
17621
17622//////////
17623// 1. Problem-Specific Base Indexers
17624//////////
17625// 1.1 Type Indexers
17626//////////
17627// 1.1.1 primitive Type Indexers
17628//////////
17629
17630//////////
17631// 1.1.2 domain-specific Type Indexers
17632//////////
17633/**
17634 * An element must be an instance of type "FunctionalElement class".
17635 */
17636private pattern mustInstanceOfFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
17637 Type.name(type,"FunctionalElement class");
17638 find directInstanceOf(problem,interpretation,element,type);
17639}
17640private pattern scopeDisallowsNewFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation) {
17641 find interpretation(problem,interpretation);
17642 PartialInterpretation.scopes(interpretation,scope);
17643 Scope.targetTypeInterpretation(scope,typeInterpretation);
17644 Scope.maxNewElements(scope,0);
17645 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
17646 Type.name(type,"FunctionalElement class");
17647}
17648
17649/**
17650 * An element may be an instance of type "FunctionalElement class".
17651 */
17652private pattern mayInstanceOfFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
17653{
17654 find interpretation(problem,interpretation);
17655 PartialInterpretation.newElements(interpretation,element);
17656 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
17657 neg find mustInstanceOfFunction_class(problem,interpretation,element);
17658 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
17659 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
17660 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
17661 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
17662 neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation);
17663 neg find isPrimitive(element);
17664} or {
17665 find interpretation(problem,interpretation);
17666 PartialInterpretation.openWorldElements(interpretation,element);
17667 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
17668 neg find mustInstanceOfFunction_class(problem,interpretation,element);
17669 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
17670 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
17671 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
17672 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
17673 neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation);
17674 neg find isPrimitive(element);
17675} or
17676{ find mustInstanceOfFunctionalElement_class(problem,interpretation,element); }
17677/**
17678 * An element must be an instance of type "FunctionalArchitectureModel class".
17679 */
17680private pattern mustInstanceOfFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
17681 Type.name(type,"FunctionalArchitectureModel class");
17682 find directInstanceOf(problem,interpretation,element,type);
17683}
17684private pattern scopeDisallowsNewFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation) {
17685 find interpretation(problem,interpretation);
17686 PartialInterpretation.scopes(interpretation,scope);
17687 Scope.targetTypeInterpretation(scope,typeInterpretation);
17688 Scope.maxNewElements(scope,0);
17689 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
17690 Type.name(type,"FunctionalArchitectureModel class");
17691}
17692
17693/**
17694 * An element may be an instance of type "FunctionalArchitectureModel class".
17695 */
17696private pattern mayInstanceOfFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
17697{
17698 find interpretation(problem,interpretation);
17699 PartialInterpretation.newElements(interpretation,element);
17700 neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element);
17701 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
17702 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
17703 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
17704 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
17705 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
17706 neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation);
17707 neg find isPrimitive(element);
17708} or {
17709 find interpretation(problem,interpretation);
17710 PartialInterpretation.openWorldElements(interpretation,element);
17711 neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element);
17712 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
17713 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
17714 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
17715 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
17716 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
17717 neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation);
17718 neg find isPrimitive(element);
17719} or
17720{ find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); }
17721/**
17722 * An element must be an instance of type "Function class".
17723 */
17724private pattern mustInstanceOfFunction_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
17725 Type.name(type,"Function class");
17726 find directInstanceOf(problem,interpretation,element,type);
17727}
17728private pattern scopeDisallowsNewFunction_class(problem:LogicProblem, interpretation:PartialInterpretation) {
17729 find interpretation(problem,interpretation);
17730 PartialInterpretation.scopes(interpretation,scope);
17731 Scope.targetTypeInterpretation(scope,typeInterpretation);
17732 Scope.maxNewElements(scope,0);
17733 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
17734 Type.name(type,"Function class");
17735}
17736
17737/**
17738 * An element may be an instance of type "Function class".
17739 */
17740private pattern mayInstanceOfFunction_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
17741{
17742 find interpretation(problem,interpretation);
17743 PartialInterpretation.newElements(interpretation,element);
17744 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
17745 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
17746 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
17747 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
17748 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
17749 neg find scopeDisallowsNewFunction_class(problem, interpretation);
17750 neg find isPrimitive(element);
17751} or {
17752 find interpretation(problem,interpretation);
17753 PartialInterpretation.openWorldElements(interpretation,element);
17754 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
17755 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
17756 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
17757 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
17758 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
17759 neg find scopeDisallowsNewFunction_class(problem, interpretation);
17760 neg find isPrimitive(element);
17761} or
17762{ find mustInstanceOfFunction_class(problem,interpretation,element); }
17763/**
17764 * An element must be an instance of type "FAMTerminator class".
17765 */
17766private pattern mustInstanceOfFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
17767 Type.name(type,"FAMTerminator class");
17768 find directInstanceOf(problem,interpretation,element,type);
17769}
17770private pattern scopeDisallowsNewFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation) {
17771 find interpretation(problem,interpretation);
17772 PartialInterpretation.scopes(interpretation,scope);
17773 Scope.targetTypeInterpretation(scope,typeInterpretation);
17774 Scope.maxNewElements(scope,0);
17775 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
17776 Type.name(type,"FAMTerminator class");
17777}
17778
17779/**
17780 * An element may be an instance of type "FAMTerminator class".
17781 */
17782private pattern mayInstanceOfFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
17783{
17784 find interpretation(problem,interpretation);
17785 PartialInterpretation.newElements(interpretation,element);
17786 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
17787 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
17788 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
17789 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
17790 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
17791 neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation);
17792 neg find isPrimitive(element);
17793} or {
17794 find interpretation(problem,interpretation);
17795 PartialInterpretation.openWorldElements(interpretation,element);
17796 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
17797 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
17798 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
17799 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
17800 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
17801 neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation);
17802 neg find isPrimitive(element);
17803} or
17804{ find mustInstanceOfFAMTerminator_class(problem,interpretation,element); }
17805/**
17806 * An element must be an instance of type "InformationLink class".
17807 */
17808private pattern mustInstanceOfInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
17809 Type.name(type,"InformationLink class");
17810 find directInstanceOf(problem,interpretation,element,type);
17811}
17812private pattern scopeDisallowsNewInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation) {
17813 find interpretation(problem,interpretation);
17814 PartialInterpretation.scopes(interpretation,scope);
17815 Scope.targetTypeInterpretation(scope,typeInterpretation);
17816 Scope.maxNewElements(scope,0);
17817 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
17818 Type.name(type,"InformationLink class");
17819}
17820
17821/**
17822 * An element may be an instance of type "InformationLink class".
17823 */
17824private pattern mayInstanceOfInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
17825{
17826 find interpretation(problem,interpretation);
17827 PartialInterpretation.newElements(interpretation,element);
17828 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
17829 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
17830 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
17831 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
17832 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
17833 neg find scopeDisallowsNewInformationLink_class(problem, interpretation);
17834 neg find isPrimitive(element);
17835} or {
17836 find interpretation(problem,interpretation);
17837 PartialInterpretation.openWorldElements(interpretation,element);
17838 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
17839 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
17840 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
17841 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
17842 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
17843 neg find scopeDisallowsNewInformationLink_class(problem, interpretation);
17844 neg find isPrimitive(element);
17845} or
17846{ find mustInstanceOfInformationLink_class(problem,interpretation,element); }
17847/**
17848 * An element must be an instance of type "FunctionalInterface class".
17849 */
17850private pattern mustInstanceOfFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
17851 Type.name(type,"FunctionalInterface class");
17852 find directInstanceOf(problem,interpretation,element,type);
17853}
17854private pattern scopeDisallowsNewFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation) {
17855 find interpretation(problem,interpretation);
17856 PartialInterpretation.scopes(interpretation,scope);
17857 Scope.targetTypeInterpretation(scope,typeInterpretation);
17858 Scope.maxNewElements(scope,0);
17859 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
17860 Type.name(type,"FunctionalInterface class");
17861}
17862
17863/**
17864 * An element may be an instance of type "FunctionalInterface class".
17865 */
17866private pattern mayInstanceOfFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
17867{
17868 find interpretation(problem,interpretation);
17869 PartialInterpretation.newElements(interpretation,element);
17870 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
17871 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
17872 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
17873 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
17874 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
17875 neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation);
17876 neg find isPrimitive(element);
17877} or {
17878 find interpretation(problem,interpretation);
17879 PartialInterpretation.openWorldElements(interpretation,element);
17880 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
17881 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
17882 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
17883 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
17884 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
17885 neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation);
17886 neg find isPrimitive(element);
17887} or
17888{ find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); }
17889/**
17890 * An element must be an instance of type "FunctionalInput class".
17891 */
17892private pattern mustInstanceOfFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
17893 Type.name(type,"FunctionalInput class");
17894 find directInstanceOf(problem,interpretation,element,type);
17895}
17896private pattern scopeDisallowsNewFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation) {
17897 find interpretation(problem,interpretation);
17898 PartialInterpretation.scopes(interpretation,scope);
17899 Scope.targetTypeInterpretation(scope,typeInterpretation);
17900 Scope.maxNewElements(scope,0);
17901 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
17902 Type.name(type,"FunctionalInput class");
17903}
17904
17905/**
17906 * An element may be an instance of type "FunctionalInput class".
17907 */
17908private pattern mayInstanceOfFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
17909{
17910 find interpretation(problem,interpretation);
17911 PartialInterpretation.newElements(interpretation,element);
17912 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
17913 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
17914 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
17915 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
17916 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
17917 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
17918 neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation);
17919 neg find isPrimitive(element);
17920} or {
17921 find interpretation(problem,interpretation);
17922 PartialInterpretation.openWorldElements(interpretation,element);
17923 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
17924 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
17925 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
17926 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
17927 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
17928 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
17929 neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation);
17930 neg find isPrimitive(element);
17931} or
17932{ find mustInstanceOfFunctionalInput_class(problem,interpretation,element); }
17933/**
17934 * An element must be an instance of type "FunctionalOutput class".
17935 */
17936private pattern mustInstanceOfFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
17937 Type.name(type,"FunctionalOutput class");
17938 find directInstanceOf(problem,interpretation,element,type);
17939}
17940private pattern scopeDisallowsNewFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation) {
17941 find interpretation(problem,interpretation);
17942 PartialInterpretation.scopes(interpretation,scope);
17943 Scope.targetTypeInterpretation(scope,typeInterpretation);
17944 Scope.maxNewElements(scope,0);
17945 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
17946 Type.name(type,"FunctionalOutput class");
17947}
17948
17949/**
17950 * An element may be an instance of type "FunctionalOutput class".
17951 */
17952private pattern mayInstanceOfFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
17953{
17954 find interpretation(problem,interpretation);
17955 PartialInterpretation.newElements(interpretation,element);
17956 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
17957 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
17958 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
17959 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
17960 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
17961 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
17962 neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation);
17963 neg find isPrimitive(element);
17964} or {
17965 find interpretation(problem,interpretation);
17966 PartialInterpretation.openWorldElements(interpretation,element);
17967 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
17968 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
17969 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
17970 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
17971 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
17972 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
17973 neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation);
17974 neg find isPrimitive(element);
17975} or
17976{ find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); }
17977/**
17978 * An element must be an instance of type "FunctionalData class".
17979 */
17980private pattern mustInstanceOfFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
17981 Type.name(type,"FunctionalData class");
17982 find directInstanceOf(problem,interpretation,element,type);
17983}
17984private pattern scopeDisallowsNewFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation) {
17985 find interpretation(problem,interpretation);
17986 PartialInterpretation.scopes(interpretation,scope);
17987 Scope.targetTypeInterpretation(scope,typeInterpretation);
17988 Scope.maxNewElements(scope,0);
17989 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
17990 Type.name(type,"FunctionalData class");
17991}
17992
17993/**
17994 * An element may be an instance of type "FunctionalData class".
17995 */
17996private pattern mayInstanceOfFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
17997{
17998 find interpretation(problem,interpretation);
17999 PartialInterpretation.newElements(interpretation,element);
18000 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
18001 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
18002 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
18003 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
18004 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
18005 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
18006 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
18007 neg find scopeDisallowsNewFunctionalData_class(problem, interpretation);
18008 neg find isPrimitive(element);
18009} or {
18010 find interpretation(problem,interpretation);
18011 PartialInterpretation.openWorldElements(interpretation,element);
18012 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
18013 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
18014 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
18015 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
18016 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
18017 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
18018 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
18019 neg find scopeDisallowsNewFunctionalData_class(problem, interpretation);
18020 neg find isPrimitive(element);
18021} or
18022{ find mustInstanceOfFunctionalData_class(problem,interpretation,element); }
18023/**
18024 * An element must be an instance of type "FunctionType enum".
18025 */
18026private pattern mustInstanceOfFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
18027 Type.name(type,"FunctionType enum");
18028 find directInstanceOf(problem,interpretation,element,type);
18029}
18030private pattern scopeDisallowsNewFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation) {
18031 find interpretation(problem,interpretation);
18032 PartialInterpretation.scopes(interpretation,scope);
18033 Scope.targetTypeInterpretation(scope,typeInterpretation);
18034 Scope.maxNewElements(scope,0);
18035 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
18036 Type.name(type,"FunctionType enum");
18037}
18038
18039/**
18040 * An element may be an instance of type "FunctionType enum".
18041 */
18042private pattern mayInstanceOfFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
18043{ find mustInstanceOfFunctionType_enum(problem,interpretation,element); }
18044/**
18045 * An element must be an instance of type "FunctionalArchitectureModel class DefinedPart".
18046 */
18047private pattern mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
18048 Type.name(type,"FunctionalArchitectureModel class DefinedPart");
18049 find directInstanceOf(problem,interpretation,element,type);
18050}
18051private pattern scopeDisallowsNewFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
18052 find interpretation(problem,interpretation);
18053 PartialInterpretation.scopes(interpretation,scope);
18054 Scope.targetTypeInterpretation(scope,typeInterpretation);
18055 Scope.maxNewElements(scope,0);
18056 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
18057 Type.name(type,"FunctionalArchitectureModel class DefinedPart");
18058}
18059
18060/**
18061 * An element may be an instance of type "FunctionalArchitectureModel class DefinedPart".
18062 */
18063private pattern mayInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
18064{ find mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem,interpretation,element); }
18065/**
18066 * An element must be an instance of type "FunctionalArchitectureModel class UndefinedPart".
18067 */
18068private pattern mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
18069 Type.name(type,"FunctionalArchitectureModel class UndefinedPart");
18070 find directInstanceOf(problem,interpretation,element,type);
18071}
18072private pattern scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
18073 find interpretation(problem,interpretation);
18074 PartialInterpretation.scopes(interpretation,scope);
18075 Scope.targetTypeInterpretation(scope,typeInterpretation);
18076 Scope.maxNewElements(scope,0);
18077 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
18078 Type.name(type,"FunctionalArchitectureModel class UndefinedPart");
18079}
18080
18081/**
18082 * An element may be an instance of type "FunctionalArchitectureModel class UndefinedPart".
18083 */
18084private pattern mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
18085{
18086 find interpretation(problem,interpretation);
18087 PartialInterpretation.newElements(interpretation,element);
18088 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
18089 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
18090 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
18091 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
18092 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
18093 neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation);
18094 neg find isPrimitive(element);
18095} or {
18096 find interpretation(problem,interpretation);
18097 PartialInterpretation.openWorldElements(interpretation,element);
18098 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
18099 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
18100 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
18101 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
18102 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
18103 neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation);
18104 neg find isPrimitive(element);
18105} or
18106{ find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); }
18107
18108//////////
18109// 1.2 Relation Declaration Indexers
18110//////////
18111/**
18112 * Matcher for detecting tuples t where []interface reference FunctionalElement(source,target)
18113 */
18114private pattern mustInRelationinterface_reference_FunctionalElement(
18115 problem:LogicProblem, interpretation:PartialInterpretation,
18116 source: DefinedElement, target:DefinedElement)
18117{
18118 find interpretation(problem,interpretation);
18119 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
18120 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface reference FunctionalElement");
18121 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
18122 BinaryElementRelationLink.param1(link,source);
18123 BinaryElementRelationLink.param2(link,target);
18124}
18125/**
18126 * Matcher for detecting tuples t where <>interface reference FunctionalElement(source,target)
18127 */
18128private pattern mayInRelationinterface_reference_FunctionalElement(
18129 problem:LogicProblem, interpretation:PartialInterpretation,
18130 source: DefinedElement, target:DefinedElement)
18131{
18132 find interpretation(problem,interpretation);
18133 // The two endpoint of the link have to exist
18134 find mayExist(problem, interpretation, source);
18135 find mayExist(problem, interpretation, target);
18136 // Type consistency
18137 find mayInstanceOfFunctionalElement_class(problem,interpretation,source);
18138 find mayInstanceOfFunctionalInterface_class(problem,interpretation,target);
18139 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
18140 // the upper bound of the multiplicity should be considered.
18141 numberOfExistingReferences == count find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,_);
18142 check(numberOfExistingReferences < 1);
18143 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
18144 // the upper bound of the opposite reference multiplicity should be considered.
18145 numberOfExistingOppositeReferences == count find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,target,_);
18146 check(numberOfExistingOppositeReferences < 1);
18147 // The reference is containment, then a new reference cannot be create if:
18148 // 1. Multiple parents
18149 neg find mustContains4(problem,interpretation,_,target);
18150 // 2. Circle in the containment hierarchy
18151 neg find mustTransitiveContains(source,target);
18152} or {
18153 find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,target);
18154}
18155/**
18156 * Matcher for detecting tuples t where []model reference FunctionalElement(source,target)
18157 */
18158private pattern mustInRelationmodel_reference_FunctionalElement(
18159 problem:LogicProblem, interpretation:PartialInterpretation,
18160 source: DefinedElement, target:DefinedElement)
18161{
18162 find interpretation(problem,interpretation);
18163 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
18164 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement");
18165 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
18166 BinaryElementRelationLink.param1(link,source);
18167 BinaryElementRelationLink.param2(link,target);
18168}
18169/**
18170 * Matcher for detecting tuples t where <>model reference FunctionalElement(source,target)
18171 */
18172private pattern mayInRelationmodel_reference_FunctionalElement(
18173 problem:LogicProblem, interpretation:PartialInterpretation,
18174 source: DefinedElement, target:DefinedElement)
18175{
18176 find interpretation(problem,interpretation);
18177 // The two endpoint of the link have to exist
18178 find mayExist(problem, interpretation, source);
18179 find mayExist(problem, interpretation, target);
18180 // Type consistency
18181 find mayInstanceOfFunctionalElement_class(problem,interpretation,source);
18182 find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,target);
18183 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
18184 // the upper bound of the multiplicity should be considered.
18185 numberOfExistingReferences == count find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,source,_);
18186 check(numberOfExistingReferences < 1);
18187} or {
18188 find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,source,target);
18189}
18190/**
18191 * Matcher for detecting tuples t where []parent reference FunctionalElement(source,target)
18192 */
18193private pattern mustInRelationparent_reference_FunctionalElement(
18194 problem:LogicProblem, interpretation:PartialInterpretation,
18195 source: DefinedElement, target:DefinedElement)
18196{
18197 find interpretation(problem,interpretation);
18198 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
18199 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"parent reference FunctionalElement");
18200 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
18201 BinaryElementRelationLink.param1(link,source);
18202 BinaryElementRelationLink.param2(link,target);
18203}
18204/**
18205 * Matcher for detecting tuples t where <>parent reference FunctionalElement(source,target)
18206 */
18207private pattern mayInRelationparent_reference_FunctionalElement(
18208 problem:LogicProblem, interpretation:PartialInterpretation,
18209 source: DefinedElement, target:DefinedElement)
18210{
18211 find interpretation(problem,interpretation);
18212 // The two endpoint of the link have to exist
18213 find mayExist(problem, interpretation, source);
18214 find mayExist(problem, interpretation, target);
18215 // Type consistency
18216 find mayInstanceOfFunctionalElement_class(problem,interpretation,source);
18217 find mayInstanceOfFunction_class(problem,interpretation,target);
18218 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
18219 // the upper bound of the multiplicity should be considered.
18220 numberOfExistingReferences == count find mustInRelationparent_reference_FunctionalElement(problem,interpretation,source,_);
18221 check(numberOfExistingReferences < 1);
18222 // The eOpposite of the reference is containment, then a referene cannot be created if
18223 // 1. Multiple parents
18224 neg find mustContains4(problem,interpretation,source,_);
18225 // 2. Circle in the containment hierarchy
18226 neg find mustTransitiveContains(source,target);
18227} or {
18228 find mustInRelationparent_reference_FunctionalElement(problem,interpretation,source,target);
18229}
18230/**
18231 * Matcher for detecting tuples t where []rootElements reference FunctionalArchitectureModel(source,target)
18232 */
18233private pattern mustInRelationrootElements_reference_FunctionalArchitectureModel(
18234 problem:LogicProblem, interpretation:PartialInterpretation,
18235 source: DefinedElement, target:DefinedElement)
18236{
18237 find interpretation(problem,interpretation);
18238 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
18239 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"rootElements reference FunctionalArchitectureModel");
18240 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
18241 BinaryElementRelationLink.param1(link,source);
18242 BinaryElementRelationLink.param2(link,target);
18243}
18244/**
18245 * Matcher for detecting tuples t where <>rootElements reference FunctionalArchitectureModel(source,target)
18246 */
18247private pattern mayInRelationrootElements_reference_FunctionalArchitectureModel(
18248 problem:LogicProblem, interpretation:PartialInterpretation,
18249 source: DefinedElement, target:DefinedElement)
18250{
18251 find interpretation(problem,interpretation);
18252 // The two endpoint of the link have to exist
18253 find mayExist(problem, interpretation, source);
18254 find mayExist(problem, interpretation, target);
18255 // Type consistency
18256 find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,source);
18257 find mayInstanceOfFunctionalElement_class(problem,interpretation,target);
18258 // The reference is containment, then a new reference cannot be create if:
18259 // 1. Multiple parents
18260 neg find mustContains4(problem,interpretation,_,target);
18261 // 2. Circle in the containment hierarchy
18262 neg find mustTransitiveContains(source,target);
18263} or {
18264 find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,source,target);
18265}
18266/**
18267 * Matcher for detecting tuples t where []subElements reference Function(source,target)
18268 */
18269private pattern mustInRelationsubElements_reference_Function(
18270 problem:LogicProblem, interpretation:PartialInterpretation,
18271 source: DefinedElement, target:DefinedElement)
18272{
18273 find interpretation(problem,interpretation);
18274 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
18275 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"subElements reference Function");
18276 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
18277 BinaryElementRelationLink.param1(link,source);
18278 BinaryElementRelationLink.param2(link,target);
18279}
18280/**
18281 * Matcher for detecting tuples t where <>subElements reference Function(source,target)
18282 */
18283private pattern mayInRelationsubElements_reference_Function(
18284 problem:LogicProblem, interpretation:PartialInterpretation,
18285 source: DefinedElement, target:DefinedElement)
18286{
18287 find interpretation(problem,interpretation);
18288 // The two endpoint of the link have to exist
18289 find mayExist(problem, interpretation, source);
18290 find mayExist(problem, interpretation, target);
18291 // Type consistency
18292 find mayInstanceOfFunction_class(problem,interpretation,source);
18293 find mayInstanceOfFunctionalElement_class(problem,interpretation,target);
18294 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
18295 // the upper bound of the opposite reference multiplicity should be considered.
18296 numberOfExistingOppositeReferences == count find mustInRelationparent_reference_FunctionalElement(problem,interpretation,target,_);
18297 check(numberOfExistingOppositeReferences < 1);
18298 // The reference is containment, then a new reference cannot be create if:
18299 // 1. Multiple parents
18300 neg find mustContains4(problem,interpretation,_,target);
18301 // 2. Circle in the containment hierarchy
18302 neg find mustTransitiveContains(source,target);
18303} or {
18304 find mustInRelationsubElements_reference_Function(problem,interpretation,source,target);
18305}
18306/**
18307 * Matcher for detecting tuples t where []data reference FAMTerminator(source,target)
18308 */
18309private pattern mustInRelationdata_reference_FAMTerminator(
18310 problem:LogicProblem, interpretation:PartialInterpretation,
18311 source: DefinedElement, target:DefinedElement)
18312{
18313 find interpretation(problem,interpretation);
18314 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
18315 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"data reference FAMTerminator");
18316 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
18317 BinaryElementRelationLink.param1(link,source);
18318 BinaryElementRelationLink.param2(link,target);
18319}
18320/**
18321 * Matcher for detecting tuples t where <>data reference FAMTerminator(source,target)
18322 */
18323private pattern mayInRelationdata_reference_FAMTerminator(
18324 problem:LogicProblem, interpretation:PartialInterpretation,
18325 source: DefinedElement, target:DefinedElement)
18326{
18327 find interpretation(problem,interpretation);
18328 // The two endpoint of the link have to exist
18329 find mayExist(problem, interpretation, source);
18330 find mayExist(problem, interpretation, target);
18331 // Type consistency
18332 find mayInstanceOfFAMTerminator_class(problem,interpretation,source);
18333 find mayInstanceOfFunctionalData_class(problem,interpretation,target);
18334 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
18335 // the upper bound of the multiplicity should be considered.
18336 numberOfExistingReferences == count find mustInRelationdata_reference_FAMTerminator(problem,interpretation,source,_);
18337 check(numberOfExistingReferences < 1);
18338 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
18339 // the upper bound of the opposite reference multiplicity should be considered.
18340 numberOfExistingOppositeReferences == count find mustInRelationterminator_reference_FunctionalData(problem,interpretation,target,_);
18341 check(numberOfExistingOppositeReferences < 1);
18342 // The eOpposite of the reference is containment, then a referene cannot be created if
18343 // 1. Multiple parents
18344 neg find mustContains4(problem,interpretation,source,_);
18345 // 2. Circle in the containment hierarchy
18346 neg find mustTransitiveContains(source,target);
18347} or {
18348 find mustInRelationdata_reference_FAMTerminator(problem,interpretation,source,target);
18349}
18350/**
18351 * Matcher for detecting tuples t where []from reference InformationLink(source,target)
18352 */
18353private pattern mustInRelationfrom_reference_InformationLink(
18354 problem:LogicProblem, interpretation:PartialInterpretation,
18355 source: DefinedElement, target:DefinedElement)
18356{
18357 find interpretation(problem,interpretation);
18358 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
18359 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"from reference InformationLink");
18360 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
18361 BinaryElementRelationLink.param1(link,source);
18362 BinaryElementRelationLink.param2(link,target);
18363}
18364/**
18365 * Matcher for detecting tuples t where <>from reference InformationLink(source,target)
18366 */
18367private pattern mayInRelationfrom_reference_InformationLink(
18368 problem:LogicProblem, interpretation:PartialInterpretation,
18369 source: DefinedElement, target:DefinedElement)
18370{
18371 find interpretation(problem,interpretation);
18372 // The two endpoint of the link have to exist
18373 find mayExist(problem, interpretation, source);
18374 find mayExist(problem, interpretation, target);
18375 // Type consistency
18376 find mayInstanceOfInformationLink_class(problem,interpretation,source);
18377 find mayInstanceOfFunctionalOutput_class(problem,interpretation,target);
18378 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
18379 // the upper bound of the multiplicity should be considered.
18380 numberOfExistingReferences == count find mustInRelationfrom_reference_InformationLink(problem,interpretation,source,_);
18381 check(numberOfExistingReferences < 1);
18382 // The eOpposite of the reference is containment, then a referene cannot be created if
18383 // 1. Multiple parents
18384 neg find mustContains4(problem,interpretation,source,_);
18385 // 2. Circle in the containment hierarchy
18386 neg find mustTransitiveContains(source,target);
18387} or {
18388 find mustInRelationfrom_reference_InformationLink(problem,interpretation,source,target);
18389}
18390/**
18391 * Matcher for detecting tuples t where []to reference InformationLink(source,target)
18392 */
18393private pattern mustInRelationto_reference_InformationLink(
18394 problem:LogicProblem, interpretation:PartialInterpretation,
18395 source: DefinedElement, target:DefinedElement)
18396{
18397 find interpretation(problem,interpretation);
18398 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
18399 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"to reference InformationLink");
18400 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
18401 BinaryElementRelationLink.param1(link,source);
18402 BinaryElementRelationLink.param2(link,target);
18403}
18404/**
18405 * Matcher for detecting tuples t where <>to reference InformationLink(source,target)
18406 */
18407private pattern mayInRelationto_reference_InformationLink(
18408 problem:LogicProblem, interpretation:PartialInterpretation,
18409 source: DefinedElement, target:DefinedElement)
18410{
18411 find interpretation(problem,interpretation);
18412 // The two endpoint of the link have to exist
18413 find mayExist(problem, interpretation, source);
18414 find mayExist(problem, interpretation, target);
18415 // Type consistency
18416 find mayInstanceOfInformationLink_class(problem,interpretation,source);
18417 find mayInstanceOfFunctionalInput_class(problem,interpretation,target);
18418 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
18419 // the upper bound of the multiplicity should be considered.
18420 numberOfExistingReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,source,_);
18421 check(numberOfExistingReferences < 1);
18422} or {
18423 find mustInRelationto_reference_InformationLink(problem,interpretation,source,target);
18424}
18425/**
18426 * Matcher for detecting tuples t where []data reference FunctionalInterface(source,target)
18427 */
18428private pattern mustInRelationdata_reference_FunctionalInterface(
18429 problem:LogicProblem, interpretation:PartialInterpretation,
18430 source: DefinedElement, target:DefinedElement)
18431{
18432 find interpretation(problem,interpretation);
18433 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
18434 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"data reference FunctionalInterface");
18435 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
18436 BinaryElementRelationLink.param1(link,source);
18437 BinaryElementRelationLink.param2(link,target);
18438}
18439/**
18440 * Matcher for detecting tuples t where <>data reference FunctionalInterface(source,target)
18441 */
18442private pattern mayInRelationdata_reference_FunctionalInterface(
18443 problem:LogicProblem, interpretation:PartialInterpretation,
18444 source: DefinedElement, target:DefinedElement)
18445{
18446 find interpretation(problem,interpretation);
18447 // The two endpoint of the link have to exist
18448 find mayExist(problem, interpretation, source);
18449 find mayExist(problem, interpretation, target);
18450 // Type consistency
18451 find mayInstanceOfFunctionalInterface_class(problem,interpretation,source);
18452 find mayInstanceOfFunctionalData_class(problem,interpretation,target);
18453 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
18454 // the upper bound of the opposite reference multiplicity should be considered.
18455 numberOfExistingOppositeReferences == count find mustInRelationinterface_reference_FunctionalData(problem,interpretation,target,_);
18456 check(numberOfExistingOppositeReferences < 1);
18457 // The reference is containment, then a new reference cannot be create if:
18458 // 1. Multiple parents
18459 neg find mustContains4(problem,interpretation,_,target);
18460 // 2. Circle in the containment hierarchy
18461 neg find mustTransitiveContains(source,target);
18462} or {
18463 find mustInRelationdata_reference_FunctionalInterface(problem,interpretation,source,target);
18464}
18465/**
18466 * Matcher for detecting tuples t where []element reference FunctionalInterface(source,target)
18467 */
18468private pattern mustInRelationelement_reference_FunctionalInterface(
18469 problem:LogicProblem, interpretation:PartialInterpretation,
18470 source: DefinedElement, target:DefinedElement)
18471{
18472 find interpretation(problem,interpretation);
18473 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
18474 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"element reference FunctionalInterface");
18475 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
18476 BinaryElementRelationLink.param1(link,source);
18477 BinaryElementRelationLink.param2(link,target);
18478}
18479/**
18480 * Matcher for detecting tuples t where <>element reference FunctionalInterface(source,target)
18481 */
18482private pattern mayInRelationelement_reference_FunctionalInterface(
18483 problem:LogicProblem, interpretation:PartialInterpretation,
18484 source: DefinedElement, target:DefinedElement)
18485{
18486 find interpretation(problem,interpretation);
18487 // The two endpoint of the link have to exist
18488 find mayExist(problem, interpretation, source);
18489 find mayExist(problem, interpretation, target);
18490 // Type consistency
18491 find mayInstanceOfFunctionalInterface_class(problem,interpretation,source);
18492 find mayInstanceOfFunctionalElement_class(problem,interpretation,target);
18493 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
18494 // the upper bound of the multiplicity should be considered.
18495 numberOfExistingReferences == count find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,source,_);
18496 check(numberOfExistingReferences < 1);
18497 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
18498 // the upper bound of the opposite reference multiplicity should be considered.
18499 numberOfExistingOppositeReferences == count find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,target,_);
18500 check(numberOfExistingOppositeReferences < 1);
18501 // The eOpposite of the reference is containment, then a referene cannot be created if
18502 // 1. Multiple parents
18503 neg find mustContains4(problem,interpretation,source,_);
18504 // 2. Circle in the containment hierarchy
18505 neg find mustTransitiveContains(source,target);
18506} or {
18507 find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,source,target);
18508}
18509/**
18510 * Matcher for detecting tuples t where []IncomingLinks reference FunctionalInput(source,target)
18511 */
18512private pattern mustInRelationIncomingLinks_reference_FunctionalInput(
18513 problem:LogicProblem, interpretation:PartialInterpretation,
18514 source: DefinedElement, target:DefinedElement)
18515{
18516 find interpretation(problem,interpretation);
18517 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
18518 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"IncomingLinks reference FunctionalInput");
18519 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
18520 BinaryElementRelationLink.param1(link,source);
18521 BinaryElementRelationLink.param2(link,target);
18522}
18523/**
18524 * Matcher for detecting tuples t where <>IncomingLinks reference FunctionalInput(source,target)
18525 */
18526private pattern mayInRelationIncomingLinks_reference_FunctionalInput(
18527 problem:LogicProblem, interpretation:PartialInterpretation,
18528 source: DefinedElement, target:DefinedElement)
18529{
18530 find interpretation(problem,interpretation);
18531 // The two endpoint of the link have to exist
18532 find mayExist(problem, interpretation, source);
18533 find mayExist(problem, interpretation, target);
18534 // Type consistency
18535 find mayInstanceOfFunctionalInput_class(problem,interpretation,source);
18536 find mayInstanceOfInformationLink_class(problem,interpretation,target);
18537 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
18538 // the upper bound of the opposite reference multiplicity should be considered.
18539 numberOfExistingOppositeReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,target,_);
18540 check(numberOfExistingOppositeReferences < 1);
18541} or {
18542 find mustInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,source,target);
18543}
18544/**
18545 * Matcher for detecting tuples t where []outgoingLinks reference FunctionalOutput(source,target)
18546 */
18547private pattern mustInRelationoutgoingLinks_reference_FunctionalOutput(
18548 problem:LogicProblem, interpretation:PartialInterpretation,
18549 source: DefinedElement, target:DefinedElement)
18550{
18551 find interpretation(problem,interpretation);
18552 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
18553 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"outgoingLinks reference FunctionalOutput");
18554 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
18555 BinaryElementRelationLink.param1(link,source);
18556 BinaryElementRelationLink.param2(link,target);
18557}
18558/**
18559 * Matcher for detecting tuples t where <>outgoingLinks reference FunctionalOutput(source,target)
18560 */
18561private pattern mayInRelationoutgoingLinks_reference_FunctionalOutput(
18562 problem:LogicProblem, interpretation:PartialInterpretation,
18563 source: DefinedElement, target:DefinedElement)
18564{
18565 find interpretation(problem,interpretation);
18566 // The two endpoint of the link have to exist
18567 find mayExist(problem, interpretation, source);
18568 find mayExist(problem, interpretation, target);
18569 // Type consistency
18570 find mayInstanceOfFunctionalOutput_class(problem,interpretation,source);
18571 find mayInstanceOfInformationLink_class(problem,interpretation,target);
18572 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
18573 // the upper bound of the opposite reference multiplicity should be considered.
18574 numberOfExistingOppositeReferences == count find mustInRelationfrom_reference_InformationLink(problem,interpretation,target,_);
18575 check(numberOfExistingOppositeReferences < 1);
18576 // The reference is containment, then a new reference cannot be create if:
18577 // 1. Multiple parents
18578 neg find mustContains4(problem,interpretation,_,target);
18579 // 2. Circle in the containment hierarchy
18580 neg find mustTransitiveContains(source,target);
18581} or {
18582 find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,source,target);
18583}
18584/**
18585 * Matcher for detecting tuples t where []terminator reference FunctionalData(source,target)
18586 */
18587private pattern mustInRelationterminator_reference_FunctionalData(
18588 problem:LogicProblem, interpretation:PartialInterpretation,
18589 source: DefinedElement, target:DefinedElement)
18590{
18591 find interpretation(problem,interpretation);
18592 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
18593 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"terminator reference FunctionalData");
18594 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
18595 BinaryElementRelationLink.param1(link,source);
18596 BinaryElementRelationLink.param2(link,target);
18597}
18598/**
18599 * Matcher for detecting tuples t where <>terminator reference FunctionalData(source,target)
18600 */
18601private pattern mayInRelationterminator_reference_FunctionalData(
18602 problem:LogicProblem, interpretation:PartialInterpretation,
18603 source: DefinedElement, target:DefinedElement)
18604{
18605 find interpretation(problem,interpretation);
18606 // The two endpoint of the link have to exist
18607 find mayExist(problem, interpretation, source);
18608 find mayExist(problem, interpretation, target);
18609 // Type consistency
18610 find mayInstanceOfFunctionalData_class(problem,interpretation,source);
18611 find mayInstanceOfFAMTerminator_class(problem,interpretation,target);
18612 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
18613 // the upper bound of the multiplicity should be considered.
18614 numberOfExistingReferences == count find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,_);
18615 check(numberOfExistingReferences < 1);
18616 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
18617 // the upper bound of the opposite reference multiplicity should be considered.
18618 numberOfExistingOppositeReferences == count find mustInRelationdata_reference_FAMTerminator(problem,interpretation,target,_);
18619 check(numberOfExistingOppositeReferences < 1);
18620 // The reference is containment, then a new reference cannot be create if:
18621 // 1. Multiple parents
18622 neg find mustContains4(problem,interpretation,_,target);
18623 // 2. Circle in the containment hierarchy
18624 neg find mustTransitiveContains(source,target);
18625} or {
18626 find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,target);
18627}
18628/**
18629 * Matcher for detecting tuples t where []interface reference FunctionalData(source,target)
18630 */
18631private pattern mustInRelationinterface_reference_FunctionalData(
18632 problem:LogicProblem, interpretation:PartialInterpretation,
18633 source: DefinedElement, target:DefinedElement)
18634{
18635 find interpretation(problem,interpretation);
18636 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
18637 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface reference FunctionalData");
18638 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
18639 BinaryElementRelationLink.param1(link,source);
18640 BinaryElementRelationLink.param2(link,target);
18641}
18642/**
18643 * Matcher for detecting tuples t where <>interface reference FunctionalData(source,target)
18644 */
18645private pattern mayInRelationinterface_reference_FunctionalData(
18646 problem:LogicProblem, interpretation:PartialInterpretation,
18647 source: DefinedElement, target:DefinedElement)
18648{
18649 find interpretation(problem,interpretation);
18650 // The two endpoint of the link have to exist
18651 find mayExist(problem, interpretation, source);
18652 find mayExist(problem, interpretation, target);
18653 // Type consistency
18654 find mayInstanceOfFunctionalData_class(problem,interpretation,source);
18655 find mayInstanceOfFunctionalInterface_class(problem,interpretation,target);
18656 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
18657 // the upper bound of the multiplicity should be considered.
18658 numberOfExistingReferences == count find mustInRelationinterface_reference_FunctionalData(problem,interpretation,source,_);
18659 check(numberOfExistingReferences < 1);
18660 // The eOpposite of the reference is containment, then a referene cannot be created if
18661 // 1. Multiple parents
18662 neg find mustContains4(problem,interpretation,source,_);
18663 // 2. Circle in the containment hierarchy
18664 neg find mustTransitiveContains(source,target);
18665} or {
18666 find mustInRelationinterface_reference_FunctionalData(problem,interpretation,source,target);
18667}
18668/**
18669 * Matcher for detecting tuples t where []type attribute Function(source,target)
18670 */
18671private pattern mustInRelationtype_attribute_Function(
18672 problem:LogicProblem, interpretation:PartialInterpretation,
18673 source: DefinedElement, target:DefinedElement)
18674{
18675 find interpretation(problem,interpretation);
18676 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
18677 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function");
18678 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
18679 BinaryElementRelationLink.param1(link,source);
18680 BinaryElementRelationLink.param2(link,target);
18681}
18682/**
18683 * Matcher for detecting tuples t where <>type attribute Function(source,target)
18684 */
18685private pattern mayInRelationtype_attribute_Function(
18686 problem:LogicProblem, interpretation:PartialInterpretation,
18687 source: DefinedElement, target:DefinedElement)
18688{
18689 find interpretation(problem,interpretation);
18690 // The two endpoint of the link have to exist
18691 find mayExist(problem, interpretation, source);
18692 find mayExist(problem, interpretation, target);
18693 // Type consistency
18694 find mayInstanceOfFunction_class(problem,interpretation,source);
18695 find mayInstanceOfFunctionType_enum(problem,interpretation,target);
18696 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
18697 // the upper bound of the multiplicity should be considered.
18698 numberOfExistingReferences == count find mustInRelationtype_attribute_Function(problem,interpretation,source,_);
18699 check(numberOfExistingReferences < 1);
18700} or {
18701 find mustInRelationtype_attribute_Function(problem,interpretation,source,target);
18702}
18703
18704//////////
18705// 1.3 Relation Definition Indexers
18706//////////
18707
18708//////////
18709// 1.4 Containment Indexer
18710//////////
18711private pattern mustContains2(source: DefinedElement, target: DefinedElement) {
18712 find mustContains4(_,_,source,target);
18713}
18714
18715private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation,
18716 source: DefinedElement, target: DefinedElement)
18717 { find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,target); }or
18718
18719 { find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,source,target); }or
18720
18721 { find mustInRelationsubElements_reference_Function(problem,interpretation,source,target); }or
18722
18723 { find mustInRelationdata_reference_FunctionalInterface(problem,interpretation,source,target); }or
18724
18725 { find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,source,target); }or
18726
18727 { find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,target); }
18728
18729private pattern mustTransitiveContains(source,target) {
18730 find mustContains2+(source,target);
18731}
18732
18733//////////
18734// 2. Invalidation Indexers
18735//////////
18736// 2.1 Invalidated by WF Queries
18737//////////
18738
18739//////////
18740// 3. Unfinishedness Indexers
18741//////////
18742// 3.1 Unfinishedness Measured by Multiplicity
18743//////////
18744pattern unfinishedLowerMultiplicity_model_reference_FunctionalElement(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) {
18745 find interpretation(problem,interpretation);
18746 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
18747 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement");
18748 find mustInstanceOfFunctionalElement_class(problem,interpretation,object);
18749 numberOfExistingReferences == count find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,object,_);
18750 check(numberOfExistingReferences < 1);
18751 missingMultiplicity == eval(1-numberOfExistingReferences);
18752}
18753pattern unfinishedLowerMultiplicity_to_reference_InformationLink(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) {
18754 find interpretation(problem,interpretation);
18755 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
18756 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"to reference InformationLink");
18757 find mustInstanceOfInformationLink_class(problem,interpretation,object);
18758 numberOfExistingReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,object,_);
18759 check(numberOfExistingReferences < 1);
18760 missingMultiplicity == eval(1-numberOfExistingReferences);
18761}
18762pattern unfinishedLowerMultiplicity_type_attribute_Function(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) {
18763 find interpretation(problem,interpretation);
18764 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
18765 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function");
18766 find mustInstanceOfFunction_class(problem,interpretation,object);
18767 numberOfExistingReferences == count find mustInRelationtype_attribute_Function(problem,interpretation,object,_);
18768 check(numberOfExistingReferences < 1);
18769 missingMultiplicity == eval(1-numberOfExistingReferences);
18770}
18771
18772//////////
18773// 3.2 Unfinishedness Measured by WF Queries
18774//////////
18775
18776//////////
18777// 4. Refinement Indexers
18778//////////
18779// 4.1 Object constructors
18780//////////
18781private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation)
18782{
18783 find interpretation(problem,interpretation);
18784 find mustInstanceOfFunctionalInput_class(problem,interpretation,root);
18785 find mustExist(problem, interpretation, root);
18786}or{
18787 find interpretation(problem,interpretation);
18788 find mustInstanceOfFAMTerminator_class(problem,interpretation,root);
18789 find mustExist(problem, interpretation, root);
18790}or{
18791 find interpretation(problem,interpretation);
18792 find mustInstanceOfFunctionalData_class(problem,interpretation,root);
18793 find mustExist(problem, interpretation, root);
18794}or{
18795 find interpretation(problem,interpretation);
18796 find mustInstanceOfFunctionalInterface_class(problem,interpretation,root);
18797 find mustExist(problem, interpretation, root);
18798}or{
18799 find interpretation(problem,interpretation);
18800 find mustInstanceOfInformationLink_class(problem,interpretation,root);
18801 find mustExist(problem, interpretation, root);
18802}or{
18803 find interpretation(problem,interpretation);
18804 find mustInstanceOfFunctionalOutput_class(problem,interpretation,root);
18805 find mustExist(problem, interpretation, root);
18806}or{
18807 find interpretation(problem,interpretation);
18808 find mustInstanceOfFunctionalElement_class(problem,interpretation,root);
18809 find mustExist(problem, interpretation, root);
18810}or{
18811 find interpretation(problem,interpretation);
18812 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,root);
18813 find mustExist(problem, interpretation, root);
18814}or{
18815 find interpretation(problem,interpretation);
18816 find mustInstanceOfFunction_class(problem,interpretation,root);
18817 find mustExist(problem, interpretation, root);
18818}or{
18819 find interpretation(problem,interpretation);
18820 find mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem,interpretation,root);
18821 find mustExist(problem, interpretation, root);
18822}or{
18823 find interpretation(problem,interpretation);
18824 find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,root);
18825 find mustExist(problem, interpretation, root);
18826}
18827pattern createObject_FunctionalArchitectureModel_class_UndefinedPart(
18828 problem:LogicProblem, interpretation:PartialInterpretation,
18829 typeInterpretation:PartialComplexTypeInterpretation)
18830{
18831 find interpretation(problem,interpretation);
18832 neg find hasElementInContainment(problem,interpretation);
18833 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
18834 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalArchitectureModel class UndefinedPart");
18835 find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,newObject);
18836 find mayExist(problem, interpretation, newObject);
18837 neg find mustExist(problem, interpretation, newObject);
18838}
18839pattern createObject_Function_class_by_rootElements_reference_FunctionalArchitectureModel(
18840 problem:LogicProblem, interpretation:PartialInterpretation,
18841 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
18842 container:DefinedElement)
18843{
18844 find interpretation(problem,interpretation);
18845 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
18846 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class");
18847 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
18848 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"rootElements reference FunctionalArchitectureModel");
18849 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,container);
18850 find mayInstanceOfFunction_class(problem,interpretation,newObject);
18851 find mayInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,container,newObject);
18852 find mustExist(problem, interpretation, container);
18853 neg find mustExist(problem, interpretation, newObject);
18854}
18855pattern createObject_Function_class_by_subElements_reference_Function_with_parent_reference_FunctionalElement(
18856 problem:LogicProblem, interpretation:PartialInterpretation,
18857 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
18858 container:DefinedElement)
18859{
18860 find interpretation(problem,interpretation);
18861 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
18862 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class");
18863 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
18864 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"subElements reference Function");
18865 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
18866 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FunctionalElement");
18867 find mustInstanceOfFunction_class(problem,interpretation,container);
18868 find mayInstanceOfFunction_class(problem,interpretation,newObject);
18869 find mayInRelationsubElements_reference_Function(problem,interpretation,container,newObject);
18870 find mustExist(problem, interpretation, container);
18871 neg find mustExist(problem, interpretation, newObject);
18872}
18873pattern createObject_Function_class(
18874 problem:LogicProblem, interpretation:PartialInterpretation,
18875 typeInterpretation:PartialComplexTypeInterpretation)
18876{
18877 find interpretation(problem,interpretation);
18878 neg find hasElementInContainment(problem,interpretation);
18879 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
18880 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class");
18881 find mayInstanceOfFunction_class(problem,interpretation,newObject);
18882 find mayExist(problem, interpretation, newObject);
18883 neg find mustExist(problem, interpretation, newObject);
18884}
18885pattern createObject_FunctionalOutput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData(
18886 problem:LogicProblem, interpretation:PartialInterpretation,
18887 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
18888 container:DefinedElement)
18889{
18890 find interpretation(problem,interpretation);
18891 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
18892 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class");
18893 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
18894 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface");
18895 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
18896 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData");
18897 find mustInstanceOfFunctionalInterface_class(problem,interpretation,container);
18898 find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject);
18899 find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject);
18900 find mustExist(problem, interpretation, container);
18901 neg find mustExist(problem, interpretation, newObject);
18902}
18903pattern createObject_FunctionalOutput_class(
18904 problem:LogicProblem, interpretation:PartialInterpretation,
18905 typeInterpretation:PartialComplexTypeInterpretation)
18906{
18907 find interpretation(problem,interpretation);
18908 neg find hasElementInContainment(problem,interpretation);
18909 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
18910 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class");
18911 find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject);
18912 find mayExist(problem, interpretation, newObject);
18913 neg find mustExist(problem, interpretation, newObject);
18914}
18915pattern createObject_FAMTerminator_class_by_terminator_reference_FunctionalData_with_data_reference_FAMTerminator(
18916 problem:LogicProblem, interpretation:PartialInterpretation,
18917 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
18918 container:DefinedElement)
18919{
18920 find interpretation(problem,interpretation);
18921 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
18922 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class");
18923 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
18924 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"terminator reference FunctionalData");
18925 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
18926 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"data reference FAMTerminator");
18927 find mustInstanceOfFunctionalData_class(problem,interpretation,container);
18928 find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject);
18929 find mayInRelationterminator_reference_FunctionalData(problem,interpretation,container,newObject);
18930 find mustExist(problem, interpretation, container);
18931 neg find mustExist(problem, interpretation, newObject);
18932}
18933pattern createObject_FAMTerminator_class(
18934 problem:LogicProblem, interpretation:PartialInterpretation,
18935 typeInterpretation:PartialComplexTypeInterpretation)
18936{
18937 find interpretation(problem,interpretation);
18938 neg find hasElementInContainment(problem,interpretation);
18939 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
18940 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class");
18941 find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject);
18942 find mayExist(problem, interpretation, newObject);
18943 neg find mustExist(problem, interpretation, newObject);
18944}
18945pattern createObject_FunctionalInput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData(
18946 problem:LogicProblem, interpretation:PartialInterpretation,
18947 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
18948 container:DefinedElement)
18949{
18950 find interpretation(problem,interpretation);
18951 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
18952 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class");
18953 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
18954 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface");
18955 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
18956 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData");
18957 find mustInstanceOfFunctionalInterface_class(problem,interpretation,container);
18958 find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject);
18959 find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject);
18960 find mustExist(problem, interpretation, container);
18961 neg find mustExist(problem, interpretation, newObject);
18962}
18963pattern createObject_FunctionalInput_class(
18964 problem:LogicProblem, interpretation:PartialInterpretation,
18965 typeInterpretation:PartialComplexTypeInterpretation)
18966{
18967 find interpretation(problem,interpretation);
18968 neg find hasElementInContainment(problem,interpretation);
18969 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
18970 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class");
18971 find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject);
18972 find mayExist(problem, interpretation, newObject);
18973 neg find mustExist(problem, interpretation, newObject);
18974}
18975pattern createObject_InformationLink_class_by_outgoingLinks_reference_FunctionalOutput_with_from_reference_InformationLink(
18976 problem:LogicProblem, interpretation:PartialInterpretation,
18977 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
18978 container:DefinedElement)
18979{
18980 find interpretation(problem,interpretation);
18981 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
18982 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class");
18983 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
18984 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingLinks reference FunctionalOutput");
18985 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
18986 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"from reference InformationLink");
18987 find mustInstanceOfFunctionalOutput_class(problem,interpretation,container);
18988 find mayInstanceOfInformationLink_class(problem,interpretation,newObject);
18989 find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,container,newObject);
18990 find mustExist(problem, interpretation, container);
18991 neg find mustExist(problem, interpretation, newObject);
18992}
18993pattern createObject_InformationLink_class(
18994 problem:LogicProblem, interpretation:PartialInterpretation,
18995 typeInterpretation:PartialComplexTypeInterpretation)
18996{
18997 find interpretation(problem,interpretation);
18998 neg find hasElementInContainment(problem,interpretation);
18999 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
19000 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class");
19001 find mayInstanceOfInformationLink_class(problem,interpretation,newObject);
19002 find mayExist(problem, interpretation, newObject);
19003 neg find mustExist(problem, interpretation, newObject);
19004}
19005pattern createObject_FunctionalInterface_class_by_interface_reference_FunctionalElement_with_element_reference_FunctionalInterface(
19006 problem:LogicProblem, interpretation:PartialInterpretation,
19007 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
19008 container:DefinedElement)
19009{
19010 find interpretation(problem,interpretation);
19011 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
19012 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class");
19013 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
19014 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"interface reference FunctionalElement");
19015 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
19016 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"element reference FunctionalInterface");
19017 find mustInstanceOfFunctionalElement_class(problem,interpretation,container);
19018 find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject);
19019 find mayInRelationinterface_reference_FunctionalElement(problem,interpretation,container,newObject);
19020 find mustExist(problem, interpretation, container);
19021 neg find mustExist(problem, interpretation, newObject);
19022}
19023pattern createObject_FunctionalInterface_class(
19024 problem:LogicProblem, interpretation:PartialInterpretation,
19025 typeInterpretation:PartialComplexTypeInterpretation)
19026{
19027 find interpretation(problem,interpretation);
19028 neg find hasElementInContainment(problem,interpretation);
19029 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
19030 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class");
19031 find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject);
19032 find mayExist(problem, interpretation, newObject);
19033 neg find mustExist(problem, interpretation, newObject);
19034}
19035
19036//////////
19037// 4.2 Type refinement
19038//////////
19039pattern refineTypeTo_FunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
19040 find interpretation(problem,interpretation);
19041 PartialInterpretation.newElements(interpretation,element);
19042 find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element);
19043 neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element);
19044 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
19045 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
19046 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
19047 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
19048 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
19049}
19050pattern refineTypeTo_Function_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
19051 find interpretation(problem,interpretation);
19052 PartialInterpretation.newElements(interpretation,element);
19053 find mayInstanceOfFunction_class(problem,interpretation,element);
19054 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
19055 neg find mustInstanceOfFunction_class(problem,interpretation,element);
19056 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
19057 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
19058 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
19059 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
19060}
19061pattern refineTypeTo_FunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
19062 find interpretation(problem,interpretation);
19063 PartialInterpretation.newElements(interpretation,element);
19064 find mayInstanceOfFunctionalOutput_class(problem,interpretation,element);
19065 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
19066 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
19067 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
19068 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
19069 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
19070 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
19071 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
19072}
19073pattern refineTypeTo_FAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
19074 find interpretation(problem,interpretation);
19075 PartialInterpretation.newElements(interpretation,element);
19076 find mayInstanceOfFAMTerminator_class(problem,interpretation,element);
19077 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
19078 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
19079 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
19080 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
19081 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
19082 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
19083}
19084pattern refineTypeTo_FunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
19085 find interpretation(problem,interpretation);
19086 PartialInterpretation.newElements(interpretation,element);
19087 find mayInstanceOfFunctionalInput_class(problem,interpretation,element);
19088 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
19089 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
19090 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
19091 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
19092 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
19093 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
19094 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
19095}
19096pattern refineTypeTo_InformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
19097 find interpretation(problem,interpretation);
19098 PartialInterpretation.newElements(interpretation,element);
19099 find mayInstanceOfInformationLink_class(problem,interpretation,element);
19100 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
19101 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
19102 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
19103 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
19104 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
19105 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
19106}
19107pattern refineTypeTo_FunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
19108 find interpretation(problem,interpretation);
19109 PartialInterpretation.newElements(interpretation,element);
19110 find mayInstanceOfFunctionalInterface_class(problem,interpretation,element);
19111 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
19112 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
19113 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
19114 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
19115 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
19116 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
19117}
19118
19119//////////
19120// 4.3 Relation refinement
19121//////////
19122pattern refineRelation_model_reference_FunctionalElement(
19123 problem:LogicProblem, interpretation:PartialInterpretation,
19124 relationIterpretation:PartialRelationInterpretation,
19125 from: DefinedElement, to: DefinedElement)
19126{
19127 find interpretation(problem,interpretation);
19128 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
19129 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement");
19130 find mustExist(problem, interpretation, from);
19131 find mustExist(problem, interpretation, to);
19132 find mustInstanceOfFunctionalElement_class(problem,interpretation,from);
19133 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,to);
19134 find mayInRelationmodel_reference_FunctionalElement(problem,interpretation,from,to);
19135 neg find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,from,to);
19136}
19137pattern refineRelation_IncomingLinks_reference_FunctionalInput_and_to_reference_InformationLink(
19138 problem:LogicProblem, interpretation:PartialInterpretation,
19139 relationIterpretation:PartialRelationInterpretation, oppositeInterpretation:PartialRelationInterpretation,
19140 from: DefinedElement, to: DefinedElement)
19141{
19142 find interpretation(problem,interpretation);
19143 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
19144 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"IncomingLinks reference FunctionalInput");
19145 PartialInterpretation.partialrelationinterpretation(interpretation,oppositeInterpretation);
19146 PartialRelationInterpretation.interpretationOf.name(oppositeInterpretation,"to reference InformationLink");
19147 find mustExist(problem, interpretation, from);
19148 find mustExist(problem, interpretation, to);
19149 find mustInstanceOfFunctionalInput_class(problem,interpretation,from);
19150 find mustInstanceOfInformationLink_class(problem,interpretation,to);
19151 find mayInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,from,to);
19152 neg find mustInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,from,to);
19153}
19154pattern refineRelation_type_attribute_Function(
19155 problem:LogicProblem, interpretation:PartialInterpretation,
19156 relationIterpretation:PartialRelationInterpretation,
19157 from: DefinedElement, to: DefinedElement)
19158{
19159 find interpretation(problem,interpretation);
19160 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
19161 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function");
19162 find mustExist(problem, interpretation, from);
19163 find mustExist(problem, interpretation, to);
19164 find mustInstanceOfFunction_class(problem,interpretation,from);
19165 find mustInstanceOfFunctionType_enum(problem,interpretation,to);
19166 find mayInRelationtype_attribute_Function(problem,interpretation,from,to);
19167 neg find mustInRelationtype_attribute_Function(problem,interpretation,from,to);
19168}
19169import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage"
19170import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem"
19171import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language"
19172
19173//////////
19174// 0. Util
19175//////////
19176private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) {
19177 PartialInterpretation.problem(interpretation,problem);
19178}
19179
19180/////////////////////////
19181// 0.1 Existence
19182/////////////////////////
19183private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
19184 find interpretation(problem,interpretation);
19185 LogicProblem.elements(problem,element);
19186} or {
19187 find interpretation(problem,interpretation);
19188 PartialInterpretation.newElements(interpretation,element);
19189}
19190
19191private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
19192 find mustExist(problem,interpretation,element);
19193} or {
19194 find interpretation(problem,interpretation);
19195 neg find elementCloseWorld(element);
19196 PartialInterpretation.openWorldElements(interpretation,element);
19197}
19198
19199private pattern elementCloseWorld(element:DefinedElement) {
19200 PartialInterpretation.openWorldElements(i,element);
19201 PartialInterpretation.maxNewElements(i,0);
19202} or {
19203 Scope.targetTypeInterpretation(scope,interpretation);
19204 PartialTypeInterpratation.elements(interpretation,element);
19205 Scope.maxNewElements(scope,0);
19206}
19207
19208////////////////////////
19209// 0.2 Equivalence
19210////////////////////////
19211pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) {
19212 find mayExist(problem,interpretation,a);
19213 find mayExist(problem,interpretation,b);
19214 a == b;
19215}
19216
19217////////////////////////
19218// 0.3 Required Patterns by TypeIndexer
19219////////////////////////
19220private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) {
19221 find interpretation(problem,interpretation);
19222 LogicProblem.types(problem,type);
19223 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
19224 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
19225}
19226
19227private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) {
19228 find interpretation(problem,interpretation);
19229 LogicProblem.types(problem,type);
19230 TypeDefinition.elements(type,element);
19231} or {
19232 find interpretation(problem,interpretation);
19233 find typeInterpretation(problem,interpretation,type,typeInterpretation);
19234 PartialComplexTypeInterpretation.elements(typeInterpretation,element);
19235}
19236
19237private pattern isPrimitive(element: PrimitiveElement) {
19238 PrimitiveElement(element);
19239}
19240
19241//////////
19242// 1. Problem-Specific Base Indexers
19243//////////
19244// 1.1 Type Indexers
19245//////////
19246// 1.1.1 primitive Type Indexers
19247//////////
19248
19249//////////
19250// 1.1.2 domain-specific Type Indexers
19251//////////
19252/**
19253 * An element must be an instance of type "FunctionalElement class".
19254 */
19255private pattern mustInstanceOfFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
19256 Type.name(type,"FunctionalElement class");
19257 find directInstanceOf(problem,interpretation,element,type);
19258}
19259private pattern scopeDisallowsNewFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation) {
19260 find interpretation(problem,interpretation);
19261 PartialInterpretation.scopes(interpretation,scope);
19262 Scope.targetTypeInterpretation(scope,typeInterpretation);
19263 Scope.maxNewElements(scope,0);
19264 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
19265 Type.name(type,"FunctionalElement class");
19266}
19267
19268/**
19269 * An element may be an instance of type "FunctionalElement class".
19270 */
19271private pattern mayInstanceOfFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
19272{
19273 find interpretation(problem,interpretation);
19274 PartialInterpretation.newElements(interpretation,element);
19275 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
19276 neg find mustInstanceOfFunction_class(problem,interpretation,element);
19277 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
19278 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
19279 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
19280 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
19281 neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation);
19282 neg find isPrimitive(element);
19283} or {
19284 find interpretation(problem,interpretation);
19285 PartialInterpretation.openWorldElements(interpretation,element);
19286 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
19287 neg find mustInstanceOfFunction_class(problem,interpretation,element);
19288 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
19289 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
19290 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
19291 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
19292 neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation);
19293 neg find isPrimitive(element);
19294} or
19295{ find mustInstanceOfFunctionalElement_class(problem,interpretation,element); }
19296/**
19297 * An element must be an instance of type "FunctionalArchitectureModel class".
19298 */
19299private pattern mustInstanceOfFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
19300 Type.name(type,"FunctionalArchitectureModel class");
19301 find directInstanceOf(problem,interpretation,element,type);
19302}
19303private pattern scopeDisallowsNewFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation) {
19304 find interpretation(problem,interpretation);
19305 PartialInterpretation.scopes(interpretation,scope);
19306 Scope.targetTypeInterpretation(scope,typeInterpretation);
19307 Scope.maxNewElements(scope,0);
19308 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
19309 Type.name(type,"FunctionalArchitectureModel class");
19310}
19311
19312/**
19313 * An element may be an instance of type "FunctionalArchitectureModel class".
19314 */
19315private pattern mayInstanceOfFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
19316{
19317 find interpretation(problem,interpretation);
19318 PartialInterpretation.newElements(interpretation,element);
19319 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
19320 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
19321 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
19322 neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element);
19323 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
19324 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
19325 neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation);
19326 neg find isPrimitive(element);
19327} or {
19328 find interpretation(problem,interpretation);
19329 PartialInterpretation.openWorldElements(interpretation,element);
19330 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
19331 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
19332 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
19333 neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element);
19334 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
19335 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
19336 neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation);
19337 neg find isPrimitive(element);
19338} or
19339{ find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); }
19340/**
19341 * An element must be an instance of type "Function class".
19342 */
19343private pattern mustInstanceOfFunction_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
19344 Type.name(type,"Function class");
19345 find directInstanceOf(problem,interpretation,element,type);
19346}
19347private pattern scopeDisallowsNewFunction_class(problem:LogicProblem, interpretation:PartialInterpretation) {
19348 find interpretation(problem,interpretation);
19349 PartialInterpretation.scopes(interpretation,scope);
19350 Scope.targetTypeInterpretation(scope,typeInterpretation);
19351 Scope.maxNewElements(scope,0);
19352 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
19353 Type.name(type,"Function class");
19354}
19355
19356/**
19357 * An element may be an instance of type "Function class".
19358 */
19359private pattern mayInstanceOfFunction_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
19360{
19361 find interpretation(problem,interpretation);
19362 PartialInterpretation.newElements(interpretation,element);
19363 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
19364 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
19365 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
19366 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
19367 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
19368 neg find scopeDisallowsNewFunction_class(problem, interpretation);
19369 neg find isPrimitive(element);
19370} or {
19371 find interpretation(problem,interpretation);
19372 PartialInterpretation.openWorldElements(interpretation,element);
19373 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
19374 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
19375 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
19376 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
19377 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
19378 neg find scopeDisallowsNewFunction_class(problem, interpretation);
19379 neg find isPrimitive(element);
19380} or
19381{ find mustInstanceOfFunction_class(problem,interpretation,element); }
19382/**
19383 * An element must be an instance of type "FAMTerminator class".
19384 */
19385private pattern mustInstanceOfFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
19386 Type.name(type,"FAMTerminator class");
19387 find directInstanceOf(problem,interpretation,element,type);
19388}
19389private pattern scopeDisallowsNewFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation) {
19390 find interpretation(problem,interpretation);
19391 PartialInterpretation.scopes(interpretation,scope);
19392 Scope.targetTypeInterpretation(scope,typeInterpretation);
19393 Scope.maxNewElements(scope,0);
19394 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
19395 Type.name(type,"FAMTerminator class");
19396}
19397
19398/**
19399 * An element may be an instance of type "FAMTerminator class".
19400 */
19401private pattern mayInstanceOfFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
19402{
19403 find interpretation(problem,interpretation);
19404 PartialInterpretation.newElements(interpretation,element);
19405 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
19406 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
19407 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
19408 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
19409 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
19410 neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation);
19411 neg find isPrimitive(element);
19412} or {
19413 find interpretation(problem,interpretation);
19414 PartialInterpretation.openWorldElements(interpretation,element);
19415 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
19416 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
19417 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
19418 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
19419 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
19420 neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation);
19421 neg find isPrimitive(element);
19422} or
19423{ find mustInstanceOfFAMTerminator_class(problem,interpretation,element); }
19424/**
19425 * An element must be an instance of type "InformationLink class".
19426 */
19427private pattern mustInstanceOfInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
19428 Type.name(type,"InformationLink class");
19429 find directInstanceOf(problem,interpretation,element,type);
19430}
19431private pattern scopeDisallowsNewInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation) {
19432 find interpretation(problem,interpretation);
19433 PartialInterpretation.scopes(interpretation,scope);
19434 Scope.targetTypeInterpretation(scope,typeInterpretation);
19435 Scope.maxNewElements(scope,0);
19436 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
19437 Type.name(type,"InformationLink class");
19438}
19439
19440/**
19441 * An element may be an instance of type "InformationLink class".
19442 */
19443private pattern mayInstanceOfInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
19444{
19445 find interpretation(problem,interpretation);
19446 PartialInterpretation.newElements(interpretation,element);
19447 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
19448 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
19449 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
19450 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
19451 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
19452 neg find scopeDisallowsNewInformationLink_class(problem, interpretation);
19453 neg find isPrimitive(element);
19454} or {
19455 find interpretation(problem,interpretation);
19456 PartialInterpretation.openWorldElements(interpretation,element);
19457 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
19458 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
19459 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
19460 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
19461 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
19462 neg find scopeDisallowsNewInformationLink_class(problem, interpretation);
19463 neg find isPrimitive(element);
19464} or
19465{ find mustInstanceOfInformationLink_class(problem,interpretation,element); }
19466/**
19467 * An element must be an instance of type "FunctionalInterface class".
19468 */
19469private pattern mustInstanceOfFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
19470 Type.name(type,"FunctionalInterface class");
19471 find directInstanceOf(problem,interpretation,element,type);
19472}
19473private pattern scopeDisallowsNewFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation) {
19474 find interpretation(problem,interpretation);
19475 PartialInterpretation.scopes(interpretation,scope);
19476 Scope.targetTypeInterpretation(scope,typeInterpretation);
19477 Scope.maxNewElements(scope,0);
19478 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
19479 Type.name(type,"FunctionalInterface class");
19480}
19481
19482/**
19483 * An element may be an instance of type "FunctionalInterface class".
19484 */
19485private pattern mayInstanceOfFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
19486{
19487 find interpretation(problem,interpretation);
19488 PartialInterpretation.newElements(interpretation,element);
19489 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
19490 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
19491 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
19492 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
19493 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
19494 neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation);
19495 neg find isPrimitive(element);
19496} or {
19497 find interpretation(problem,interpretation);
19498 PartialInterpretation.openWorldElements(interpretation,element);
19499 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
19500 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
19501 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
19502 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
19503 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
19504 neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation);
19505 neg find isPrimitive(element);
19506} or
19507{ find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); }
19508/**
19509 * An element must be an instance of type "FunctionalInput class".
19510 */
19511private pattern mustInstanceOfFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
19512 Type.name(type,"FunctionalInput class");
19513 find directInstanceOf(problem,interpretation,element,type);
19514}
19515private pattern scopeDisallowsNewFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation) {
19516 find interpretation(problem,interpretation);
19517 PartialInterpretation.scopes(interpretation,scope);
19518 Scope.targetTypeInterpretation(scope,typeInterpretation);
19519 Scope.maxNewElements(scope,0);
19520 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
19521 Type.name(type,"FunctionalInput class");
19522}
19523
19524/**
19525 * An element may be an instance of type "FunctionalInput class".
19526 */
19527private pattern mayInstanceOfFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
19528{
19529 find interpretation(problem,interpretation);
19530 PartialInterpretation.newElements(interpretation,element);
19531 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
19532 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
19533 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
19534 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
19535 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
19536 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
19537 neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation);
19538 neg find isPrimitive(element);
19539} or {
19540 find interpretation(problem,interpretation);
19541 PartialInterpretation.openWorldElements(interpretation,element);
19542 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
19543 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
19544 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
19545 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
19546 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
19547 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
19548 neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation);
19549 neg find isPrimitive(element);
19550} or
19551{ find mustInstanceOfFunctionalInput_class(problem,interpretation,element); }
19552/**
19553 * An element must be an instance of type "FunctionalOutput class".
19554 */
19555private pattern mustInstanceOfFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
19556 Type.name(type,"FunctionalOutput class");
19557 find directInstanceOf(problem,interpretation,element,type);
19558}
19559private pattern scopeDisallowsNewFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation) {
19560 find interpretation(problem,interpretation);
19561 PartialInterpretation.scopes(interpretation,scope);
19562 Scope.targetTypeInterpretation(scope,typeInterpretation);
19563 Scope.maxNewElements(scope,0);
19564 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
19565 Type.name(type,"FunctionalOutput class");
19566}
19567
19568/**
19569 * An element may be an instance of type "FunctionalOutput class".
19570 */
19571private pattern mayInstanceOfFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
19572{
19573 find interpretation(problem,interpretation);
19574 PartialInterpretation.newElements(interpretation,element);
19575 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
19576 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
19577 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
19578 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
19579 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
19580 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
19581 neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation);
19582 neg find isPrimitive(element);
19583} or {
19584 find interpretation(problem,interpretation);
19585 PartialInterpretation.openWorldElements(interpretation,element);
19586 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
19587 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
19588 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
19589 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
19590 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
19591 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
19592 neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation);
19593 neg find isPrimitive(element);
19594} or
19595{ find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); }
19596/**
19597 * An element must be an instance of type "FunctionalData class".
19598 */
19599private pattern mustInstanceOfFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
19600 Type.name(type,"FunctionalData class");
19601 find directInstanceOf(problem,interpretation,element,type);
19602}
19603private pattern scopeDisallowsNewFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation) {
19604 find interpretation(problem,interpretation);
19605 PartialInterpretation.scopes(interpretation,scope);
19606 Scope.targetTypeInterpretation(scope,typeInterpretation);
19607 Scope.maxNewElements(scope,0);
19608 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
19609 Type.name(type,"FunctionalData class");
19610}
19611
19612/**
19613 * An element may be an instance of type "FunctionalData class".
19614 */
19615private pattern mayInstanceOfFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
19616{
19617 find interpretation(problem,interpretation);
19618 PartialInterpretation.newElements(interpretation,element);
19619 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
19620 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
19621 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
19622 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
19623 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
19624 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
19625 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
19626 neg find scopeDisallowsNewFunctionalData_class(problem, interpretation);
19627 neg find isPrimitive(element);
19628} or {
19629 find interpretation(problem,interpretation);
19630 PartialInterpretation.openWorldElements(interpretation,element);
19631 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
19632 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
19633 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
19634 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
19635 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
19636 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
19637 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
19638 neg find scopeDisallowsNewFunctionalData_class(problem, interpretation);
19639 neg find isPrimitive(element);
19640} or
19641{ find mustInstanceOfFunctionalData_class(problem,interpretation,element); }
19642/**
19643 * An element must be an instance of type "FunctionType enum".
19644 */
19645private pattern mustInstanceOfFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
19646 Type.name(type,"FunctionType enum");
19647 find directInstanceOf(problem,interpretation,element,type);
19648}
19649private pattern scopeDisallowsNewFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation) {
19650 find interpretation(problem,interpretation);
19651 PartialInterpretation.scopes(interpretation,scope);
19652 Scope.targetTypeInterpretation(scope,typeInterpretation);
19653 Scope.maxNewElements(scope,0);
19654 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
19655 Type.name(type,"FunctionType enum");
19656}
19657
19658/**
19659 * An element may be an instance of type "FunctionType enum".
19660 */
19661private pattern mayInstanceOfFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
19662{ find mustInstanceOfFunctionType_enum(problem,interpretation,element); }
19663/**
19664 * An element must be an instance of type "FunctionalArchitectureModel class DefinedPart".
19665 */
19666private pattern mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
19667 Type.name(type,"FunctionalArchitectureModel class DefinedPart");
19668 find directInstanceOf(problem,interpretation,element,type);
19669}
19670private pattern scopeDisallowsNewFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
19671 find interpretation(problem,interpretation);
19672 PartialInterpretation.scopes(interpretation,scope);
19673 Scope.targetTypeInterpretation(scope,typeInterpretation);
19674 Scope.maxNewElements(scope,0);
19675 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
19676 Type.name(type,"FunctionalArchitectureModel class DefinedPart");
19677}
19678
19679/**
19680 * An element may be an instance of type "FunctionalArchitectureModel class DefinedPart".
19681 */
19682private pattern mayInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
19683{ find mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem,interpretation,element); }
19684/**
19685 * An element must be an instance of type "FunctionalArchitectureModel class UndefinedPart".
19686 */
19687private pattern mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
19688 Type.name(type,"FunctionalArchitectureModel class UndefinedPart");
19689 find directInstanceOf(problem,interpretation,element,type);
19690}
19691private pattern scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
19692 find interpretation(problem,interpretation);
19693 PartialInterpretation.scopes(interpretation,scope);
19694 Scope.targetTypeInterpretation(scope,typeInterpretation);
19695 Scope.maxNewElements(scope,0);
19696 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
19697 Type.name(type,"FunctionalArchitectureModel class UndefinedPart");
19698}
19699
19700/**
19701 * An element may be an instance of type "FunctionalArchitectureModel class UndefinedPart".
19702 */
19703private pattern mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
19704{
19705 find interpretation(problem,interpretation);
19706 PartialInterpretation.newElements(interpretation,element);
19707 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
19708 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
19709 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
19710 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
19711 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
19712 neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation);
19713 neg find isPrimitive(element);
19714} or {
19715 find interpretation(problem,interpretation);
19716 PartialInterpretation.openWorldElements(interpretation,element);
19717 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
19718 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
19719 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
19720 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
19721 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
19722 neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation);
19723 neg find isPrimitive(element);
19724} or
19725{ find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); }
19726
19727//////////
19728// 1.2 Relation Declaration Indexers
19729//////////
19730/**
19731 * Matcher for detecting tuples t where []interface reference FunctionalElement(source,target)
19732 */
19733private pattern mustInRelationinterface_reference_FunctionalElement(
19734 problem:LogicProblem, interpretation:PartialInterpretation,
19735 source: DefinedElement, target:DefinedElement)
19736{
19737 find interpretation(problem,interpretation);
19738 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
19739 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface reference FunctionalElement");
19740 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
19741 BinaryElementRelationLink.param1(link,source);
19742 BinaryElementRelationLink.param2(link,target);
19743}
19744/**
19745 * Matcher for detecting tuples t where <>interface reference FunctionalElement(source,target)
19746 */
19747private pattern mayInRelationinterface_reference_FunctionalElement(
19748 problem:LogicProblem, interpretation:PartialInterpretation,
19749 source: DefinedElement, target:DefinedElement)
19750{
19751 find interpretation(problem,interpretation);
19752 // The two endpoint of the link have to exist
19753 find mayExist(problem, interpretation, source);
19754 find mayExist(problem, interpretation, target);
19755 // Type consistency
19756 find mayInstanceOfFunctionalElement_class(problem,interpretation,source);
19757 find mayInstanceOfFunctionalInterface_class(problem,interpretation,target);
19758 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
19759 // the upper bound of the multiplicity should be considered.
19760 numberOfExistingReferences == count find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,_);
19761 check(numberOfExistingReferences < 1);
19762 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
19763 // the upper bound of the opposite reference multiplicity should be considered.
19764 numberOfExistingOppositeReferences == count find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,target,_);
19765 check(numberOfExistingOppositeReferences < 1);
19766 // The reference is containment, then a new reference cannot be create if:
19767 // 1. Multiple parents
19768 neg find mustContains4(problem,interpretation,_,target);
19769 // 2. Circle in the containment hierarchy
19770 neg find mustTransitiveContains(source,target);
19771} or {
19772 find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,target);
19773}
19774/**
19775 * Matcher for detecting tuples t where []model reference FunctionalElement(source,target)
19776 */
19777private pattern mustInRelationmodel_reference_FunctionalElement(
19778 problem:LogicProblem, interpretation:PartialInterpretation,
19779 source: DefinedElement, target:DefinedElement)
19780{
19781 find interpretation(problem,interpretation);
19782 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
19783 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement");
19784 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
19785 BinaryElementRelationLink.param1(link,source);
19786 BinaryElementRelationLink.param2(link,target);
19787}
19788/**
19789 * Matcher for detecting tuples t where <>model reference FunctionalElement(source,target)
19790 */
19791private pattern mayInRelationmodel_reference_FunctionalElement(
19792 problem:LogicProblem, interpretation:PartialInterpretation,
19793 source: DefinedElement, target:DefinedElement)
19794{
19795 find interpretation(problem,interpretation);
19796 // The two endpoint of the link have to exist
19797 find mayExist(problem, interpretation, source);
19798 find mayExist(problem, interpretation, target);
19799 // Type consistency
19800 find mayInstanceOfFunctionalElement_class(problem,interpretation,source);
19801 find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,target);
19802 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
19803 // the upper bound of the multiplicity should be considered.
19804 numberOfExistingReferences == count find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,source,_);
19805 check(numberOfExistingReferences < 1);
19806} or {
19807 find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,source,target);
19808}
19809/**
19810 * Matcher for detecting tuples t where []parent reference FunctionalElement(source,target)
19811 */
19812private pattern mustInRelationparent_reference_FunctionalElement(
19813 problem:LogicProblem, interpretation:PartialInterpretation,
19814 source: DefinedElement, target:DefinedElement)
19815{
19816 find interpretation(problem,interpretation);
19817 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
19818 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"parent reference FunctionalElement");
19819 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
19820 BinaryElementRelationLink.param1(link,source);
19821 BinaryElementRelationLink.param2(link,target);
19822}
19823/**
19824 * Matcher for detecting tuples t where <>parent reference FunctionalElement(source,target)
19825 */
19826private pattern mayInRelationparent_reference_FunctionalElement(
19827 problem:LogicProblem, interpretation:PartialInterpretation,
19828 source: DefinedElement, target:DefinedElement)
19829{
19830 find interpretation(problem,interpretation);
19831 // The two endpoint of the link have to exist
19832 find mayExist(problem, interpretation, source);
19833 find mayExist(problem, interpretation, target);
19834 // Type consistency
19835 find mayInstanceOfFunctionalElement_class(problem,interpretation,source);
19836 find mayInstanceOfFunction_class(problem,interpretation,target);
19837 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
19838 // the upper bound of the multiplicity should be considered.
19839 numberOfExistingReferences == count find mustInRelationparent_reference_FunctionalElement(problem,interpretation,source,_);
19840 check(numberOfExistingReferences < 1);
19841 // The eOpposite of the reference is containment, then a referene cannot be created if
19842 // 1. Multiple parents
19843 neg find mustContains4(problem,interpretation,source,_);
19844 // 2. Circle in the containment hierarchy
19845 neg find mustTransitiveContains(source,target);
19846} or {
19847 find mustInRelationparent_reference_FunctionalElement(problem,interpretation,source,target);
19848}
19849/**
19850 * Matcher for detecting tuples t where []rootElements reference FunctionalArchitectureModel(source,target)
19851 */
19852private pattern mustInRelationrootElements_reference_FunctionalArchitectureModel(
19853 problem:LogicProblem, interpretation:PartialInterpretation,
19854 source: DefinedElement, target:DefinedElement)
19855{
19856 find interpretation(problem,interpretation);
19857 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
19858 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"rootElements reference FunctionalArchitectureModel");
19859 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
19860 BinaryElementRelationLink.param1(link,source);
19861 BinaryElementRelationLink.param2(link,target);
19862}
19863/**
19864 * Matcher for detecting tuples t where <>rootElements reference FunctionalArchitectureModel(source,target)
19865 */
19866private pattern mayInRelationrootElements_reference_FunctionalArchitectureModel(
19867 problem:LogicProblem, interpretation:PartialInterpretation,
19868 source: DefinedElement, target:DefinedElement)
19869{
19870 find interpretation(problem,interpretation);
19871 // The two endpoint of the link have to exist
19872 find mayExist(problem, interpretation, source);
19873 find mayExist(problem, interpretation, target);
19874 // Type consistency
19875 find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,source);
19876 find mayInstanceOfFunctionalElement_class(problem,interpretation,target);
19877 // The reference is containment, then a new reference cannot be create if:
19878 // 1. Multiple parents
19879 neg find mustContains4(problem,interpretation,_,target);
19880 // 2. Circle in the containment hierarchy
19881 neg find mustTransitiveContains(source,target);
19882} or {
19883 find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,source,target);
19884}
19885/**
19886 * Matcher for detecting tuples t where []subElements reference Function(source,target)
19887 */
19888private pattern mustInRelationsubElements_reference_Function(
19889 problem:LogicProblem, interpretation:PartialInterpretation,
19890 source: DefinedElement, target:DefinedElement)
19891{
19892 find interpretation(problem,interpretation);
19893 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
19894 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"subElements reference Function");
19895 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
19896 BinaryElementRelationLink.param1(link,source);
19897 BinaryElementRelationLink.param2(link,target);
19898}
19899/**
19900 * Matcher for detecting tuples t where <>subElements reference Function(source,target)
19901 */
19902private pattern mayInRelationsubElements_reference_Function(
19903 problem:LogicProblem, interpretation:PartialInterpretation,
19904 source: DefinedElement, target:DefinedElement)
19905{
19906 find interpretation(problem,interpretation);
19907 // The two endpoint of the link have to exist
19908 find mayExist(problem, interpretation, source);
19909 find mayExist(problem, interpretation, target);
19910 // Type consistency
19911 find mayInstanceOfFunction_class(problem,interpretation,source);
19912 find mayInstanceOfFunctionalElement_class(problem,interpretation,target);
19913 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
19914 // the upper bound of the opposite reference multiplicity should be considered.
19915 numberOfExistingOppositeReferences == count find mustInRelationparent_reference_FunctionalElement(problem,interpretation,target,_);
19916 check(numberOfExistingOppositeReferences < 1);
19917 // The reference is containment, then a new reference cannot be create if:
19918 // 1. Multiple parents
19919 neg find mustContains4(problem,interpretation,_,target);
19920 // 2. Circle in the containment hierarchy
19921 neg find mustTransitiveContains(source,target);
19922} or {
19923 find mustInRelationsubElements_reference_Function(problem,interpretation,source,target);
19924}
19925/**
19926 * Matcher for detecting tuples t where []data reference FAMTerminator(source,target)
19927 */
19928private pattern mustInRelationdata_reference_FAMTerminator(
19929 problem:LogicProblem, interpretation:PartialInterpretation,
19930 source: DefinedElement, target:DefinedElement)
19931{
19932 find interpretation(problem,interpretation);
19933 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
19934 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"data reference FAMTerminator");
19935 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
19936 BinaryElementRelationLink.param1(link,source);
19937 BinaryElementRelationLink.param2(link,target);
19938}
19939/**
19940 * Matcher for detecting tuples t where <>data reference FAMTerminator(source,target)
19941 */
19942private pattern mayInRelationdata_reference_FAMTerminator(
19943 problem:LogicProblem, interpretation:PartialInterpretation,
19944 source: DefinedElement, target:DefinedElement)
19945{
19946 find interpretation(problem,interpretation);
19947 // The two endpoint of the link have to exist
19948 find mayExist(problem, interpretation, source);
19949 find mayExist(problem, interpretation, target);
19950 // Type consistency
19951 find mayInstanceOfFAMTerminator_class(problem,interpretation,source);
19952 find mayInstanceOfFunctionalData_class(problem,interpretation,target);
19953 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
19954 // the upper bound of the multiplicity should be considered.
19955 numberOfExistingReferences == count find mustInRelationdata_reference_FAMTerminator(problem,interpretation,source,_);
19956 check(numberOfExistingReferences < 1);
19957 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
19958 // the upper bound of the opposite reference multiplicity should be considered.
19959 numberOfExistingOppositeReferences == count find mustInRelationterminator_reference_FunctionalData(problem,interpretation,target,_);
19960 check(numberOfExistingOppositeReferences < 1);
19961 // The eOpposite of the reference is containment, then a referene cannot be created if
19962 // 1. Multiple parents
19963 neg find mustContains4(problem,interpretation,source,_);
19964 // 2. Circle in the containment hierarchy
19965 neg find mustTransitiveContains(source,target);
19966} or {
19967 find mustInRelationdata_reference_FAMTerminator(problem,interpretation,source,target);
19968}
19969/**
19970 * Matcher for detecting tuples t where []from reference InformationLink(source,target)
19971 */
19972private pattern mustInRelationfrom_reference_InformationLink(
19973 problem:LogicProblem, interpretation:PartialInterpretation,
19974 source: DefinedElement, target:DefinedElement)
19975{
19976 find interpretation(problem,interpretation);
19977 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
19978 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"from reference InformationLink");
19979 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
19980 BinaryElementRelationLink.param1(link,source);
19981 BinaryElementRelationLink.param2(link,target);
19982}
19983/**
19984 * Matcher for detecting tuples t where <>from reference InformationLink(source,target)
19985 */
19986private pattern mayInRelationfrom_reference_InformationLink(
19987 problem:LogicProblem, interpretation:PartialInterpretation,
19988 source: DefinedElement, target:DefinedElement)
19989{
19990 find interpretation(problem,interpretation);
19991 // The two endpoint of the link have to exist
19992 find mayExist(problem, interpretation, source);
19993 find mayExist(problem, interpretation, target);
19994 // Type consistency
19995 find mayInstanceOfInformationLink_class(problem,interpretation,source);
19996 find mayInstanceOfFunctionalOutput_class(problem,interpretation,target);
19997 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
19998 // the upper bound of the multiplicity should be considered.
19999 numberOfExistingReferences == count find mustInRelationfrom_reference_InformationLink(problem,interpretation,source,_);
20000 check(numberOfExistingReferences < 1);
20001 // The eOpposite of the reference is containment, then a referene cannot be created if
20002 // 1. Multiple parents
20003 neg find mustContains4(problem,interpretation,source,_);
20004 // 2. Circle in the containment hierarchy
20005 neg find mustTransitiveContains(source,target);
20006} or {
20007 find mustInRelationfrom_reference_InformationLink(problem,interpretation,source,target);
20008}
20009/**
20010 * Matcher for detecting tuples t where []to reference InformationLink(source,target)
20011 */
20012private pattern mustInRelationto_reference_InformationLink(
20013 problem:LogicProblem, interpretation:PartialInterpretation,
20014 source: DefinedElement, target:DefinedElement)
20015{
20016 find interpretation(problem,interpretation);
20017 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
20018 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"to reference InformationLink");
20019 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
20020 BinaryElementRelationLink.param1(link,source);
20021 BinaryElementRelationLink.param2(link,target);
20022}
20023/**
20024 * Matcher for detecting tuples t where <>to reference InformationLink(source,target)
20025 */
20026private pattern mayInRelationto_reference_InformationLink(
20027 problem:LogicProblem, interpretation:PartialInterpretation,
20028 source: DefinedElement, target:DefinedElement)
20029{
20030 find interpretation(problem,interpretation);
20031 // The two endpoint of the link have to exist
20032 find mayExist(problem, interpretation, source);
20033 find mayExist(problem, interpretation, target);
20034 // Type consistency
20035 find mayInstanceOfInformationLink_class(problem,interpretation,source);
20036 find mayInstanceOfFunctionalInput_class(problem,interpretation,target);
20037 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
20038 // the upper bound of the multiplicity should be considered.
20039 numberOfExistingReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,source,_);
20040 check(numberOfExistingReferences < 1);
20041} or {
20042 find mustInRelationto_reference_InformationLink(problem,interpretation,source,target);
20043}
20044/**
20045 * Matcher for detecting tuples t where []data reference FunctionalInterface(source,target)
20046 */
20047private pattern mustInRelationdata_reference_FunctionalInterface(
20048 problem:LogicProblem, interpretation:PartialInterpretation,
20049 source: DefinedElement, target:DefinedElement)
20050{
20051 find interpretation(problem,interpretation);
20052 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
20053 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"data reference FunctionalInterface");
20054 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
20055 BinaryElementRelationLink.param1(link,source);
20056 BinaryElementRelationLink.param2(link,target);
20057}
20058/**
20059 * Matcher for detecting tuples t where <>data reference FunctionalInterface(source,target)
20060 */
20061private pattern mayInRelationdata_reference_FunctionalInterface(
20062 problem:LogicProblem, interpretation:PartialInterpretation,
20063 source: DefinedElement, target:DefinedElement)
20064{
20065 find interpretation(problem,interpretation);
20066 // The two endpoint of the link have to exist
20067 find mayExist(problem, interpretation, source);
20068 find mayExist(problem, interpretation, target);
20069 // Type consistency
20070 find mayInstanceOfFunctionalInterface_class(problem,interpretation,source);
20071 find mayInstanceOfFunctionalData_class(problem,interpretation,target);
20072 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
20073 // the upper bound of the opposite reference multiplicity should be considered.
20074 numberOfExistingOppositeReferences == count find mustInRelationinterface_reference_FunctionalData(problem,interpretation,target,_);
20075 check(numberOfExistingOppositeReferences < 1);
20076 // The reference is containment, then a new reference cannot be create if:
20077 // 1. Multiple parents
20078 neg find mustContains4(problem,interpretation,_,target);
20079 // 2. Circle in the containment hierarchy
20080 neg find mustTransitiveContains(source,target);
20081} or {
20082 find mustInRelationdata_reference_FunctionalInterface(problem,interpretation,source,target);
20083}
20084/**
20085 * Matcher for detecting tuples t where []element reference FunctionalInterface(source,target)
20086 */
20087private pattern mustInRelationelement_reference_FunctionalInterface(
20088 problem:LogicProblem, interpretation:PartialInterpretation,
20089 source: DefinedElement, target:DefinedElement)
20090{
20091 find interpretation(problem,interpretation);
20092 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
20093 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"element reference FunctionalInterface");
20094 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
20095 BinaryElementRelationLink.param1(link,source);
20096 BinaryElementRelationLink.param2(link,target);
20097}
20098/**
20099 * Matcher for detecting tuples t where <>element reference FunctionalInterface(source,target)
20100 */
20101private pattern mayInRelationelement_reference_FunctionalInterface(
20102 problem:LogicProblem, interpretation:PartialInterpretation,
20103 source: DefinedElement, target:DefinedElement)
20104{
20105 find interpretation(problem,interpretation);
20106 // The two endpoint of the link have to exist
20107 find mayExist(problem, interpretation, source);
20108 find mayExist(problem, interpretation, target);
20109 // Type consistency
20110 find mayInstanceOfFunctionalInterface_class(problem,interpretation,source);
20111 find mayInstanceOfFunctionalElement_class(problem,interpretation,target);
20112 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
20113 // the upper bound of the multiplicity should be considered.
20114 numberOfExistingReferences == count find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,source,_);
20115 check(numberOfExistingReferences < 1);
20116 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
20117 // the upper bound of the opposite reference multiplicity should be considered.
20118 numberOfExistingOppositeReferences == count find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,target,_);
20119 check(numberOfExistingOppositeReferences < 1);
20120 // The eOpposite of the reference is containment, then a referene cannot be created if
20121 // 1. Multiple parents
20122 neg find mustContains4(problem,interpretation,source,_);
20123 // 2. Circle in the containment hierarchy
20124 neg find mustTransitiveContains(source,target);
20125} or {
20126 find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,source,target);
20127}
20128/**
20129 * Matcher for detecting tuples t where []IncomingLinks reference FunctionalInput(source,target)
20130 */
20131private pattern mustInRelationIncomingLinks_reference_FunctionalInput(
20132 problem:LogicProblem, interpretation:PartialInterpretation,
20133 source: DefinedElement, target:DefinedElement)
20134{
20135 find interpretation(problem,interpretation);
20136 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
20137 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"IncomingLinks reference FunctionalInput");
20138 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
20139 BinaryElementRelationLink.param1(link,source);
20140 BinaryElementRelationLink.param2(link,target);
20141}
20142/**
20143 * Matcher for detecting tuples t where <>IncomingLinks reference FunctionalInput(source,target)
20144 */
20145private pattern mayInRelationIncomingLinks_reference_FunctionalInput(
20146 problem:LogicProblem, interpretation:PartialInterpretation,
20147 source: DefinedElement, target:DefinedElement)
20148{
20149 find interpretation(problem,interpretation);
20150 // The two endpoint of the link have to exist
20151 find mayExist(problem, interpretation, source);
20152 find mayExist(problem, interpretation, target);
20153 // Type consistency
20154 find mayInstanceOfFunctionalInput_class(problem,interpretation,source);
20155 find mayInstanceOfInformationLink_class(problem,interpretation,target);
20156 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
20157 // the upper bound of the opposite reference multiplicity should be considered.
20158 numberOfExistingOppositeReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,target,_);
20159 check(numberOfExistingOppositeReferences < 1);
20160} or {
20161 find mustInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,source,target);
20162}
20163/**
20164 * Matcher for detecting tuples t where []outgoingLinks reference FunctionalOutput(source,target)
20165 */
20166private pattern mustInRelationoutgoingLinks_reference_FunctionalOutput(
20167 problem:LogicProblem, interpretation:PartialInterpretation,
20168 source: DefinedElement, target:DefinedElement)
20169{
20170 find interpretation(problem,interpretation);
20171 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
20172 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"outgoingLinks reference FunctionalOutput");
20173 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
20174 BinaryElementRelationLink.param1(link,source);
20175 BinaryElementRelationLink.param2(link,target);
20176}
20177/**
20178 * Matcher for detecting tuples t where <>outgoingLinks reference FunctionalOutput(source,target)
20179 */
20180private pattern mayInRelationoutgoingLinks_reference_FunctionalOutput(
20181 problem:LogicProblem, interpretation:PartialInterpretation,
20182 source: DefinedElement, target:DefinedElement)
20183{
20184 find interpretation(problem,interpretation);
20185 // The two endpoint of the link have to exist
20186 find mayExist(problem, interpretation, source);
20187 find mayExist(problem, interpretation, target);
20188 // Type consistency
20189 find mayInstanceOfFunctionalOutput_class(problem,interpretation,source);
20190 find mayInstanceOfInformationLink_class(problem,interpretation,target);
20191 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
20192 // the upper bound of the opposite reference multiplicity should be considered.
20193 numberOfExistingOppositeReferences == count find mustInRelationfrom_reference_InformationLink(problem,interpretation,target,_);
20194 check(numberOfExistingOppositeReferences < 1);
20195 // The reference is containment, then a new reference cannot be create if:
20196 // 1. Multiple parents
20197 neg find mustContains4(problem,interpretation,_,target);
20198 // 2. Circle in the containment hierarchy
20199 neg find mustTransitiveContains(source,target);
20200} or {
20201 find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,source,target);
20202}
20203/**
20204 * Matcher for detecting tuples t where []terminator reference FunctionalData(source,target)
20205 */
20206private pattern mustInRelationterminator_reference_FunctionalData(
20207 problem:LogicProblem, interpretation:PartialInterpretation,
20208 source: DefinedElement, target:DefinedElement)
20209{
20210 find interpretation(problem,interpretation);
20211 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
20212 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"terminator reference FunctionalData");
20213 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
20214 BinaryElementRelationLink.param1(link,source);
20215 BinaryElementRelationLink.param2(link,target);
20216}
20217/**
20218 * Matcher for detecting tuples t where <>terminator reference FunctionalData(source,target)
20219 */
20220private pattern mayInRelationterminator_reference_FunctionalData(
20221 problem:LogicProblem, interpretation:PartialInterpretation,
20222 source: DefinedElement, target:DefinedElement)
20223{
20224 find interpretation(problem,interpretation);
20225 // The two endpoint of the link have to exist
20226 find mayExist(problem, interpretation, source);
20227 find mayExist(problem, interpretation, target);
20228 // Type consistency
20229 find mayInstanceOfFunctionalData_class(problem,interpretation,source);
20230 find mayInstanceOfFAMTerminator_class(problem,interpretation,target);
20231 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
20232 // the upper bound of the multiplicity should be considered.
20233 numberOfExistingReferences == count find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,_);
20234 check(numberOfExistingReferences < 1);
20235 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
20236 // the upper bound of the opposite reference multiplicity should be considered.
20237 numberOfExistingOppositeReferences == count find mustInRelationdata_reference_FAMTerminator(problem,interpretation,target,_);
20238 check(numberOfExistingOppositeReferences < 1);
20239 // The reference is containment, then a new reference cannot be create if:
20240 // 1. Multiple parents
20241 neg find mustContains4(problem,interpretation,_,target);
20242 // 2. Circle in the containment hierarchy
20243 neg find mustTransitiveContains(source,target);
20244} or {
20245 find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,target);
20246}
20247/**
20248 * Matcher for detecting tuples t where []interface reference FunctionalData(source,target)
20249 */
20250private pattern mustInRelationinterface_reference_FunctionalData(
20251 problem:LogicProblem, interpretation:PartialInterpretation,
20252 source: DefinedElement, target:DefinedElement)
20253{
20254 find interpretation(problem,interpretation);
20255 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
20256 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface reference FunctionalData");
20257 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
20258 BinaryElementRelationLink.param1(link,source);
20259 BinaryElementRelationLink.param2(link,target);
20260}
20261/**
20262 * Matcher for detecting tuples t where <>interface reference FunctionalData(source,target)
20263 */
20264private pattern mayInRelationinterface_reference_FunctionalData(
20265 problem:LogicProblem, interpretation:PartialInterpretation,
20266 source: DefinedElement, target:DefinedElement)
20267{
20268 find interpretation(problem,interpretation);
20269 // The two endpoint of the link have to exist
20270 find mayExist(problem, interpretation, source);
20271 find mayExist(problem, interpretation, target);
20272 // Type consistency
20273 find mayInstanceOfFunctionalData_class(problem,interpretation,source);
20274 find mayInstanceOfFunctionalInterface_class(problem,interpretation,target);
20275 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
20276 // the upper bound of the multiplicity should be considered.
20277 numberOfExistingReferences == count find mustInRelationinterface_reference_FunctionalData(problem,interpretation,source,_);
20278 check(numberOfExistingReferences < 1);
20279 // The eOpposite of the reference is containment, then a referene cannot be created if
20280 // 1. Multiple parents
20281 neg find mustContains4(problem,interpretation,source,_);
20282 // 2. Circle in the containment hierarchy
20283 neg find mustTransitiveContains(source,target);
20284} or {
20285 find mustInRelationinterface_reference_FunctionalData(problem,interpretation,source,target);
20286}
20287/**
20288 * Matcher for detecting tuples t where []type attribute Function(source,target)
20289 */
20290private pattern mustInRelationtype_attribute_Function(
20291 problem:LogicProblem, interpretation:PartialInterpretation,
20292 source: DefinedElement, target:DefinedElement)
20293{
20294 find interpretation(problem,interpretation);
20295 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
20296 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function");
20297 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
20298 BinaryElementRelationLink.param1(link,source);
20299 BinaryElementRelationLink.param2(link,target);
20300}
20301/**
20302 * Matcher for detecting tuples t where <>type attribute Function(source,target)
20303 */
20304private pattern mayInRelationtype_attribute_Function(
20305 problem:LogicProblem, interpretation:PartialInterpretation,
20306 source: DefinedElement, target:DefinedElement)
20307{
20308 find interpretation(problem,interpretation);
20309 // The two endpoint of the link have to exist
20310 find mayExist(problem, interpretation, source);
20311 find mayExist(problem, interpretation, target);
20312 // Type consistency
20313 find mayInstanceOfFunction_class(problem,interpretation,source);
20314 find mayInstanceOfFunctionType_enum(problem,interpretation,target);
20315 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
20316 // the upper bound of the multiplicity should be considered.
20317 numberOfExistingReferences == count find mustInRelationtype_attribute_Function(problem,interpretation,source,_);
20318 check(numberOfExistingReferences < 1);
20319} or {
20320 find mustInRelationtype_attribute_Function(problem,interpretation,source,target);
20321}
20322
20323//////////
20324// 1.3 Relation Definition Indexers
20325//////////
20326
20327//////////
20328// 1.4 Containment Indexer
20329//////////
20330private pattern mustContains2(source: DefinedElement, target: DefinedElement) {
20331 find mustContains4(_,_,source,target);
20332}
20333
20334private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation,
20335 source: DefinedElement, target: DefinedElement)
20336 { find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,target); }or
20337
20338 { find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,source,target); }or
20339
20340 { find mustInRelationsubElements_reference_Function(problem,interpretation,source,target); }or
20341
20342 { find mustInRelationdata_reference_FunctionalInterface(problem,interpretation,source,target); }or
20343
20344 { find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,source,target); }or
20345
20346 { find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,target); }
20347
20348private pattern mustTransitiveContains(source,target) {
20349 find mustContains2+(source,target);
20350}
20351
20352//////////
20353// 2. Invalidation Indexers
20354//////////
20355// 2.1 Invalidated by WF Queries
20356//////////
20357
20358//////////
20359// 3. Unfinishedness Indexers
20360//////////
20361// 3.1 Unfinishedness Measured by Multiplicity
20362//////////
20363pattern unfinishedLowerMultiplicity_model_reference_FunctionalElement(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) {
20364 find interpretation(problem,interpretation);
20365 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
20366 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement");
20367 find mustInstanceOfFunctionalElement_class(problem,interpretation,object);
20368 numberOfExistingReferences == count find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,object,_);
20369 check(numberOfExistingReferences < 1);
20370 missingMultiplicity == eval(1-numberOfExistingReferences);
20371}
20372pattern unfinishedLowerMultiplicity_to_reference_InformationLink(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) {
20373 find interpretation(problem,interpretation);
20374 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
20375 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"to reference InformationLink");
20376 find mustInstanceOfInformationLink_class(problem,interpretation,object);
20377 numberOfExistingReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,object,_);
20378 check(numberOfExistingReferences < 1);
20379 missingMultiplicity == eval(1-numberOfExistingReferences);
20380}
20381pattern unfinishedLowerMultiplicity_type_attribute_Function(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) {
20382 find interpretation(problem,interpretation);
20383 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
20384 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function");
20385 find mustInstanceOfFunction_class(problem,interpretation,object);
20386 numberOfExistingReferences == count find mustInRelationtype_attribute_Function(problem,interpretation,object,_);
20387 check(numberOfExistingReferences < 1);
20388 missingMultiplicity == eval(1-numberOfExistingReferences);
20389}
20390
20391//////////
20392// 3.2 Unfinishedness Measured by WF Queries
20393//////////
20394
20395//////////
20396// 4. Refinement Indexers
20397//////////
20398// 4.1 Object constructors
20399//////////
20400private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation)
20401{
20402 find interpretation(problem,interpretation);
20403 find mustInstanceOfFunctionalInput_class(problem,interpretation,root);
20404 find mustExist(problem, interpretation, root);
20405}or{
20406 find interpretation(problem,interpretation);
20407 find mustInstanceOfFAMTerminator_class(problem,interpretation,root);
20408 find mustExist(problem, interpretation, root);
20409}or{
20410 find interpretation(problem,interpretation);
20411 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,root);
20412 find mustExist(problem, interpretation, root);
20413}or{
20414 find interpretation(problem,interpretation);
20415 find mustInstanceOfFunctionalElement_class(problem,interpretation,root);
20416 find mustExist(problem, interpretation, root);
20417}or{
20418 find interpretation(problem,interpretation);
20419 find mustInstanceOfFunction_class(problem,interpretation,root);
20420 find mustExist(problem, interpretation, root);
20421}or{
20422 find interpretation(problem,interpretation);
20423 find mustInstanceOfFunctionalData_class(problem,interpretation,root);
20424 find mustExist(problem, interpretation, root);
20425}or{
20426 find interpretation(problem,interpretation);
20427 find mustInstanceOfInformationLink_class(problem,interpretation,root);
20428 find mustExist(problem, interpretation, root);
20429}or{
20430 find interpretation(problem,interpretation);
20431 find mustInstanceOfFunctionalInterface_class(problem,interpretation,root);
20432 find mustExist(problem, interpretation, root);
20433}or{
20434 find interpretation(problem,interpretation);
20435 find mustInstanceOfFunctionalOutput_class(problem,interpretation,root);
20436 find mustExist(problem, interpretation, root);
20437}or{
20438 find interpretation(problem,interpretation);
20439 find mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem,interpretation,root);
20440 find mustExist(problem, interpretation, root);
20441}or{
20442 find interpretation(problem,interpretation);
20443 find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,root);
20444 find mustExist(problem, interpretation, root);
20445}
20446pattern createObject_FunctionalInterface_class_by_interface_reference_FunctionalElement_with_element_reference_FunctionalInterface(
20447 problem:LogicProblem, interpretation:PartialInterpretation,
20448 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
20449 container:DefinedElement)
20450{
20451 find interpretation(problem,interpretation);
20452 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
20453 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class");
20454 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
20455 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"interface reference FunctionalElement");
20456 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
20457 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"element reference FunctionalInterface");
20458 find mustInstanceOfFunctionalElement_class(problem,interpretation,container);
20459 find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject);
20460 find mayInRelationinterface_reference_FunctionalElement(problem,interpretation,container,newObject);
20461 find mustExist(problem, interpretation, container);
20462 neg find mustExist(problem, interpretation, newObject);
20463}
20464pattern createObject_FunctionalInterface_class(
20465 problem:LogicProblem, interpretation:PartialInterpretation,
20466 typeInterpretation:PartialComplexTypeInterpretation)
20467{
20468 find interpretation(problem,interpretation);
20469 neg find hasElementInContainment(problem,interpretation);
20470 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
20471 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class");
20472 find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject);
20473 find mayExist(problem, interpretation, newObject);
20474 neg find mustExist(problem, interpretation, newObject);
20475}
20476pattern createObject_Function_class_by_rootElements_reference_FunctionalArchitectureModel(
20477 problem:LogicProblem, interpretation:PartialInterpretation,
20478 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
20479 container:DefinedElement)
20480{
20481 find interpretation(problem,interpretation);
20482 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
20483 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class");
20484 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
20485 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"rootElements reference FunctionalArchitectureModel");
20486 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,container);
20487 find mayInstanceOfFunction_class(problem,interpretation,newObject);
20488 find mayInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,container,newObject);
20489 find mustExist(problem, interpretation, container);
20490 neg find mustExist(problem, interpretation, newObject);
20491}
20492pattern createObject_Function_class_by_subElements_reference_Function_with_parent_reference_FunctionalElement(
20493 problem:LogicProblem, interpretation:PartialInterpretation,
20494 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
20495 container:DefinedElement)
20496{
20497 find interpretation(problem,interpretation);
20498 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
20499 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class");
20500 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
20501 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"subElements reference Function");
20502 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
20503 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FunctionalElement");
20504 find mustInstanceOfFunction_class(problem,interpretation,container);
20505 find mayInstanceOfFunction_class(problem,interpretation,newObject);
20506 find mayInRelationsubElements_reference_Function(problem,interpretation,container,newObject);
20507 find mustExist(problem, interpretation, container);
20508 neg find mustExist(problem, interpretation, newObject);
20509}
20510pattern createObject_Function_class(
20511 problem:LogicProblem, interpretation:PartialInterpretation,
20512 typeInterpretation:PartialComplexTypeInterpretation)
20513{
20514 find interpretation(problem,interpretation);
20515 neg find hasElementInContainment(problem,interpretation);
20516 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
20517 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class");
20518 find mayInstanceOfFunction_class(problem,interpretation,newObject);
20519 find mayExist(problem, interpretation, newObject);
20520 neg find mustExist(problem, interpretation, newObject);
20521}
20522pattern createObject_FunctionalOutput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData(
20523 problem:LogicProblem, interpretation:PartialInterpretation,
20524 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
20525 container:DefinedElement)
20526{
20527 find interpretation(problem,interpretation);
20528 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
20529 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class");
20530 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
20531 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface");
20532 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
20533 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData");
20534 find mustInstanceOfFunctionalInterface_class(problem,interpretation,container);
20535 find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject);
20536 find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject);
20537 find mustExist(problem, interpretation, container);
20538 neg find mustExist(problem, interpretation, newObject);
20539}
20540pattern createObject_FunctionalOutput_class(
20541 problem:LogicProblem, interpretation:PartialInterpretation,
20542 typeInterpretation:PartialComplexTypeInterpretation)
20543{
20544 find interpretation(problem,interpretation);
20545 neg find hasElementInContainment(problem,interpretation);
20546 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
20547 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class");
20548 find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject);
20549 find mayExist(problem, interpretation, newObject);
20550 neg find mustExist(problem, interpretation, newObject);
20551}
20552pattern createObject_FunctionalInput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData(
20553 problem:LogicProblem, interpretation:PartialInterpretation,
20554 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
20555 container:DefinedElement)
20556{
20557 find interpretation(problem,interpretation);
20558 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
20559 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class");
20560 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
20561 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface");
20562 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
20563 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData");
20564 find mustInstanceOfFunctionalInterface_class(problem,interpretation,container);
20565 find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject);
20566 find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject);
20567 find mustExist(problem, interpretation, container);
20568 neg find mustExist(problem, interpretation, newObject);
20569}
20570pattern createObject_FunctionalInput_class(
20571 problem:LogicProblem, interpretation:PartialInterpretation,
20572 typeInterpretation:PartialComplexTypeInterpretation)
20573{
20574 find interpretation(problem,interpretation);
20575 neg find hasElementInContainment(problem,interpretation);
20576 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
20577 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class");
20578 find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject);
20579 find mayExist(problem, interpretation, newObject);
20580 neg find mustExist(problem, interpretation, newObject);
20581}
20582pattern createObject_FunctionalArchitectureModel_class_UndefinedPart(
20583 problem:LogicProblem, interpretation:PartialInterpretation,
20584 typeInterpretation:PartialComplexTypeInterpretation)
20585{
20586 find interpretation(problem,interpretation);
20587 neg find hasElementInContainment(problem,interpretation);
20588 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
20589 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalArchitectureModel class UndefinedPart");
20590 find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,newObject);
20591 find mayExist(problem, interpretation, newObject);
20592 neg find mustExist(problem, interpretation, newObject);
20593}
20594pattern createObject_InformationLink_class_by_outgoingLinks_reference_FunctionalOutput_with_from_reference_InformationLink(
20595 problem:LogicProblem, interpretation:PartialInterpretation,
20596 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
20597 container:DefinedElement)
20598{
20599 find interpretation(problem,interpretation);
20600 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
20601 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class");
20602 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
20603 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingLinks reference FunctionalOutput");
20604 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
20605 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"from reference InformationLink");
20606 find mustInstanceOfFunctionalOutput_class(problem,interpretation,container);
20607 find mayInstanceOfInformationLink_class(problem,interpretation,newObject);
20608 find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,container,newObject);
20609 find mustExist(problem, interpretation, container);
20610 neg find mustExist(problem, interpretation, newObject);
20611}
20612pattern createObject_InformationLink_class(
20613 problem:LogicProblem, interpretation:PartialInterpretation,
20614 typeInterpretation:PartialComplexTypeInterpretation)
20615{
20616 find interpretation(problem,interpretation);
20617 neg find hasElementInContainment(problem,interpretation);
20618 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
20619 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class");
20620 find mayInstanceOfInformationLink_class(problem,interpretation,newObject);
20621 find mayExist(problem, interpretation, newObject);
20622 neg find mustExist(problem, interpretation, newObject);
20623}
20624pattern createObject_FAMTerminator_class_by_terminator_reference_FunctionalData_with_data_reference_FAMTerminator(
20625 problem:LogicProblem, interpretation:PartialInterpretation,
20626 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
20627 container:DefinedElement)
20628{
20629 find interpretation(problem,interpretation);
20630 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
20631 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class");
20632 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
20633 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"terminator reference FunctionalData");
20634 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
20635 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"data reference FAMTerminator");
20636 find mustInstanceOfFunctionalData_class(problem,interpretation,container);
20637 find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject);
20638 find mayInRelationterminator_reference_FunctionalData(problem,interpretation,container,newObject);
20639 find mustExist(problem, interpretation, container);
20640 neg find mustExist(problem, interpretation, newObject);
20641}
20642pattern createObject_FAMTerminator_class(
20643 problem:LogicProblem, interpretation:PartialInterpretation,
20644 typeInterpretation:PartialComplexTypeInterpretation)
20645{
20646 find interpretation(problem,interpretation);
20647 neg find hasElementInContainment(problem,interpretation);
20648 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
20649 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class");
20650 find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject);
20651 find mayExist(problem, interpretation, newObject);
20652 neg find mustExist(problem, interpretation, newObject);
20653}
20654
20655//////////
20656// 4.2 Type refinement
20657//////////
20658pattern refineTypeTo_FunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
20659 find interpretation(problem,interpretation);
20660 PartialInterpretation.newElements(interpretation,element);
20661 find mayInstanceOfFunctionalInterface_class(problem,interpretation,element);
20662 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
20663 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
20664 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
20665 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
20666 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
20667 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
20668}
20669pattern refineTypeTo_Function_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
20670 find interpretation(problem,interpretation);
20671 PartialInterpretation.newElements(interpretation,element);
20672 find mayInstanceOfFunction_class(problem,interpretation,element);
20673 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
20674 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
20675 neg find mustInstanceOfFunction_class(problem,interpretation,element);
20676 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
20677 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
20678 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
20679}
20680pattern refineTypeTo_FunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
20681 find interpretation(problem,interpretation);
20682 PartialInterpretation.newElements(interpretation,element);
20683 find mayInstanceOfFunctionalOutput_class(problem,interpretation,element);
20684 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
20685 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
20686 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
20687 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
20688 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
20689 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
20690 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
20691}
20692pattern refineTypeTo_FunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
20693 find interpretation(problem,interpretation);
20694 PartialInterpretation.newElements(interpretation,element);
20695 find mayInstanceOfFunctionalInput_class(problem,interpretation,element);
20696 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
20697 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
20698 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
20699 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
20700 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
20701 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
20702 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
20703}
20704pattern refineTypeTo_FunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
20705 find interpretation(problem,interpretation);
20706 PartialInterpretation.newElements(interpretation,element);
20707 find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element);
20708 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
20709 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
20710 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
20711 neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element);
20712 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
20713 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
20714}
20715pattern refineTypeTo_InformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
20716 find interpretation(problem,interpretation);
20717 PartialInterpretation.newElements(interpretation,element);
20718 find mayInstanceOfInformationLink_class(problem,interpretation,element);
20719 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
20720 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
20721 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
20722 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
20723 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
20724 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
20725}
20726pattern refineTypeTo_FAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
20727 find interpretation(problem,interpretation);
20728 PartialInterpretation.newElements(interpretation,element);
20729 find mayInstanceOfFAMTerminator_class(problem,interpretation,element);
20730 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
20731 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
20732 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
20733 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
20734 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
20735 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
20736}
20737
20738//////////
20739// 4.3 Relation refinement
20740//////////
20741pattern refineRelation_model_reference_FunctionalElement(
20742 problem:LogicProblem, interpretation:PartialInterpretation,
20743 relationIterpretation:PartialRelationInterpretation,
20744 from: DefinedElement, to: DefinedElement)
20745{
20746 find interpretation(problem,interpretation);
20747 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
20748 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement");
20749 find mustExist(problem, interpretation, from);
20750 find mustExist(problem, interpretation, to);
20751 find mustInstanceOfFunctionalElement_class(problem,interpretation,from);
20752 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,to);
20753 find mayInRelationmodel_reference_FunctionalElement(problem,interpretation,from,to);
20754 neg find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,from,to);
20755}
20756pattern refineRelation_IncomingLinks_reference_FunctionalInput_and_to_reference_InformationLink(
20757 problem:LogicProblem, interpretation:PartialInterpretation,
20758 relationIterpretation:PartialRelationInterpretation, oppositeInterpretation:PartialRelationInterpretation,
20759 from: DefinedElement, to: DefinedElement)
20760{
20761 find interpretation(problem,interpretation);
20762 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
20763 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"IncomingLinks reference FunctionalInput");
20764 PartialInterpretation.partialrelationinterpretation(interpretation,oppositeInterpretation);
20765 PartialRelationInterpretation.interpretationOf.name(oppositeInterpretation,"to reference InformationLink");
20766 find mustExist(problem, interpretation, from);
20767 find mustExist(problem, interpretation, to);
20768 find mustInstanceOfFunctionalInput_class(problem,interpretation,from);
20769 find mustInstanceOfInformationLink_class(problem,interpretation,to);
20770 find mayInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,from,to);
20771 neg find mustInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,from,to);
20772}
20773pattern refineRelation_type_attribute_Function(
20774 problem:LogicProblem, interpretation:PartialInterpretation,
20775 relationIterpretation:PartialRelationInterpretation,
20776 from: DefinedElement, to: DefinedElement)
20777{
20778 find interpretation(problem,interpretation);
20779 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
20780 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function");
20781 find mustExist(problem, interpretation, from);
20782 find mustExist(problem, interpretation, to);
20783 find mustInstanceOfFunction_class(problem,interpretation,from);
20784 find mustInstanceOfFunctionType_enum(problem,interpretation,to);
20785 find mayInRelationtype_attribute_Function(problem,interpretation,from,to);
20786 neg find mustInRelationtype_attribute_Function(problem,interpretation,from,to);
20787}
20788import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage"
20789import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem"
20790import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language"
20791
20792//////////
20793// 0. Util
20794//////////
20795private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) {
20796 PartialInterpretation.problem(interpretation,problem);
20797}
20798
20799/////////////////////////
20800// 0.1 Existence
20801/////////////////////////
20802private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
20803 find interpretation(problem,interpretation);
20804 LogicProblem.elements(problem,element);
20805} or {
20806 find interpretation(problem,interpretation);
20807 PartialInterpretation.newElements(interpretation,element);
20808}
20809
20810private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
20811 find mustExist(problem,interpretation,element);
20812} or {
20813 find interpretation(problem,interpretation);
20814 neg find elementCloseWorld(element);
20815 PartialInterpretation.openWorldElements(interpretation,element);
20816}
20817
20818private pattern elementCloseWorld(element:DefinedElement) {
20819 PartialInterpretation.openWorldElements(i,element);
20820 PartialInterpretation.maxNewElements(i,0);
20821} or {
20822 Scope.targetTypeInterpretation(scope,interpretation);
20823 PartialTypeInterpratation.elements(interpretation,element);
20824 Scope.maxNewElements(scope,0);
20825}
20826
20827////////////////////////
20828// 0.2 Equivalence
20829////////////////////////
20830pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) {
20831 find mayExist(problem,interpretation,a);
20832 find mayExist(problem,interpretation,b);
20833 a == b;
20834}
20835
20836////////////////////////
20837// 0.3 Required Patterns by TypeIndexer
20838////////////////////////
20839private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) {
20840 find interpretation(problem,interpretation);
20841 LogicProblem.types(problem,type);
20842 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
20843 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
20844}
20845
20846private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) {
20847 find interpretation(problem,interpretation);
20848 LogicProblem.types(problem,type);
20849 TypeDefinition.elements(type,element);
20850} or {
20851 find interpretation(problem,interpretation);
20852 find typeInterpretation(problem,interpretation,type,typeInterpretation);
20853 PartialComplexTypeInterpretation.elements(typeInterpretation,element);
20854}
20855
20856private pattern isPrimitive(element: PrimitiveElement) {
20857 PrimitiveElement(element);
20858}
20859
20860//////////
20861// 1. Problem-Specific Base Indexers
20862//////////
20863// 1.1 Type Indexers
20864//////////
20865// 1.1.1 primitive Type Indexers
20866//////////
20867
20868//////////
20869// 1.1.2 domain-specific Type Indexers
20870//////////
20871/**
20872 * An element must be an instance of type "FunctionalElement class".
20873 */
20874private pattern mustInstanceOfFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
20875 Type.name(type,"FunctionalElement class");
20876 find directInstanceOf(problem,interpretation,element,type);
20877}
20878private pattern scopeDisallowsNewFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation) {
20879 find interpretation(problem,interpretation);
20880 PartialInterpretation.scopes(interpretation,scope);
20881 Scope.targetTypeInterpretation(scope,typeInterpretation);
20882 Scope.maxNewElements(scope,0);
20883 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
20884 Type.name(type,"FunctionalElement class");
20885}
20886
20887/**
20888 * An element may be an instance of type "FunctionalElement class".
20889 */
20890private pattern mayInstanceOfFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
20891{
20892 find interpretation(problem,interpretation);
20893 PartialInterpretation.newElements(interpretation,element);
20894 neg find mustInstanceOfFunction_class(problem,interpretation,element);
20895 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
20896 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
20897 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
20898 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
20899 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
20900 neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation);
20901 neg find isPrimitive(element);
20902} or {
20903 find interpretation(problem,interpretation);
20904 PartialInterpretation.openWorldElements(interpretation,element);
20905 neg find mustInstanceOfFunction_class(problem,interpretation,element);
20906 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
20907 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
20908 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
20909 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
20910 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
20911 neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation);
20912 neg find isPrimitive(element);
20913} or
20914{ find mustInstanceOfFunctionalElement_class(problem,interpretation,element); }
20915/**
20916 * An element must be an instance of type "FunctionalArchitectureModel class".
20917 */
20918private pattern mustInstanceOfFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
20919 Type.name(type,"FunctionalArchitectureModel class");
20920 find directInstanceOf(problem,interpretation,element,type);
20921}
20922private pattern scopeDisallowsNewFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation) {
20923 find interpretation(problem,interpretation);
20924 PartialInterpretation.scopes(interpretation,scope);
20925 Scope.targetTypeInterpretation(scope,typeInterpretation);
20926 Scope.maxNewElements(scope,0);
20927 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
20928 Type.name(type,"FunctionalArchitectureModel class");
20929}
20930
20931/**
20932 * An element may be an instance of type "FunctionalArchitectureModel class".
20933 */
20934private pattern mayInstanceOfFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
20935{
20936 find interpretation(problem,interpretation);
20937 PartialInterpretation.newElements(interpretation,element);
20938 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
20939 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
20940 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
20941 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
20942 neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element);
20943 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
20944 neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation);
20945 neg find isPrimitive(element);
20946} or {
20947 find interpretation(problem,interpretation);
20948 PartialInterpretation.openWorldElements(interpretation,element);
20949 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
20950 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
20951 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
20952 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
20953 neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element);
20954 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
20955 neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation);
20956 neg find isPrimitive(element);
20957} or
20958{ find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); }
20959/**
20960 * An element must be an instance of type "Function class".
20961 */
20962private pattern mustInstanceOfFunction_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
20963 Type.name(type,"Function class");
20964 find directInstanceOf(problem,interpretation,element,type);
20965}
20966private pattern scopeDisallowsNewFunction_class(problem:LogicProblem, interpretation:PartialInterpretation) {
20967 find interpretation(problem,interpretation);
20968 PartialInterpretation.scopes(interpretation,scope);
20969 Scope.targetTypeInterpretation(scope,typeInterpretation);
20970 Scope.maxNewElements(scope,0);
20971 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
20972 Type.name(type,"Function class");
20973}
20974
20975/**
20976 * An element may be an instance of type "Function class".
20977 */
20978private pattern mayInstanceOfFunction_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
20979{
20980 find interpretation(problem,interpretation);
20981 PartialInterpretation.newElements(interpretation,element);
20982 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
20983 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
20984 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
20985 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
20986 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
20987 neg find scopeDisallowsNewFunction_class(problem, interpretation);
20988 neg find isPrimitive(element);
20989} or {
20990 find interpretation(problem,interpretation);
20991 PartialInterpretation.openWorldElements(interpretation,element);
20992 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
20993 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
20994 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
20995 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
20996 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
20997 neg find scopeDisallowsNewFunction_class(problem, interpretation);
20998 neg find isPrimitive(element);
20999} or
21000{ find mustInstanceOfFunction_class(problem,interpretation,element); }
21001/**
21002 * An element must be an instance of type "FAMTerminator class".
21003 */
21004private pattern mustInstanceOfFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
21005 Type.name(type,"FAMTerminator class");
21006 find directInstanceOf(problem,interpretation,element,type);
21007}
21008private pattern scopeDisallowsNewFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation) {
21009 find interpretation(problem,interpretation);
21010 PartialInterpretation.scopes(interpretation,scope);
21011 Scope.targetTypeInterpretation(scope,typeInterpretation);
21012 Scope.maxNewElements(scope,0);
21013 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
21014 Type.name(type,"FAMTerminator class");
21015}
21016
21017/**
21018 * An element may be an instance of type "FAMTerminator class".
21019 */
21020private pattern mayInstanceOfFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
21021{
21022 find interpretation(problem,interpretation);
21023 PartialInterpretation.newElements(interpretation,element);
21024 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
21025 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
21026 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
21027 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
21028 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
21029 neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation);
21030 neg find isPrimitive(element);
21031} or {
21032 find interpretation(problem,interpretation);
21033 PartialInterpretation.openWorldElements(interpretation,element);
21034 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
21035 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
21036 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
21037 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
21038 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
21039 neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation);
21040 neg find isPrimitive(element);
21041} or
21042{ find mustInstanceOfFAMTerminator_class(problem,interpretation,element); }
21043/**
21044 * An element must be an instance of type "InformationLink class".
21045 */
21046private pattern mustInstanceOfInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
21047 Type.name(type,"InformationLink class");
21048 find directInstanceOf(problem,interpretation,element,type);
21049}
21050private pattern scopeDisallowsNewInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation) {
21051 find interpretation(problem,interpretation);
21052 PartialInterpretation.scopes(interpretation,scope);
21053 Scope.targetTypeInterpretation(scope,typeInterpretation);
21054 Scope.maxNewElements(scope,0);
21055 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
21056 Type.name(type,"InformationLink class");
21057}
21058
21059/**
21060 * An element may be an instance of type "InformationLink class".
21061 */
21062private pattern mayInstanceOfInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
21063{
21064 find interpretation(problem,interpretation);
21065 PartialInterpretation.newElements(interpretation,element);
21066 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
21067 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
21068 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
21069 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
21070 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
21071 neg find scopeDisallowsNewInformationLink_class(problem, interpretation);
21072 neg find isPrimitive(element);
21073} or {
21074 find interpretation(problem,interpretation);
21075 PartialInterpretation.openWorldElements(interpretation,element);
21076 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
21077 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
21078 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
21079 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
21080 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
21081 neg find scopeDisallowsNewInformationLink_class(problem, interpretation);
21082 neg find isPrimitive(element);
21083} or
21084{ find mustInstanceOfInformationLink_class(problem,interpretation,element); }
21085/**
21086 * An element must be an instance of type "FunctionalInterface class".
21087 */
21088private pattern mustInstanceOfFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
21089 Type.name(type,"FunctionalInterface class");
21090 find directInstanceOf(problem,interpretation,element,type);
21091}
21092private pattern scopeDisallowsNewFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation) {
21093 find interpretation(problem,interpretation);
21094 PartialInterpretation.scopes(interpretation,scope);
21095 Scope.targetTypeInterpretation(scope,typeInterpretation);
21096 Scope.maxNewElements(scope,0);
21097 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
21098 Type.name(type,"FunctionalInterface class");
21099}
21100
21101/**
21102 * An element may be an instance of type "FunctionalInterface class".
21103 */
21104private pattern mayInstanceOfFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
21105{
21106 find interpretation(problem,interpretation);
21107 PartialInterpretation.newElements(interpretation,element);
21108 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
21109 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
21110 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
21111 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
21112 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
21113 neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation);
21114 neg find isPrimitive(element);
21115} or {
21116 find interpretation(problem,interpretation);
21117 PartialInterpretation.openWorldElements(interpretation,element);
21118 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
21119 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
21120 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
21121 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
21122 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
21123 neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation);
21124 neg find isPrimitive(element);
21125} or
21126{ find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); }
21127/**
21128 * An element must be an instance of type "FunctionalInput class".
21129 */
21130private pattern mustInstanceOfFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
21131 Type.name(type,"FunctionalInput class");
21132 find directInstanceOf(problem,interpretation,element,type);
21133}
21134private pattern scopeDisallowsNewFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation) {
21135 find interpretation(problem,interpretation);
21136 PartialInterpretation.scopes(interpretation,scope);
21137 Scope.targetTypeInterpretation(scope,typeInterpretation);
21138 Scope.maxNewElements(scope,0);
21139 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
21140 Type.name(type,"FunctionalInput class");
21141}
21142
21143/**
21144 * An element may be an instance of type "FunctionalInput class".
21145 */
21146private pattern mayInstanceOfFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
21147{
21148 find interpretation(problem,interpretation);
21149 PartialInterpretation.newElements(interpretation,element);
21150 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
21151 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
21152 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
21153 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
21154 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
21155 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
21156 neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation);
21157 neg find isPrimitive(element);
21158} or {
21159 find interpretation(problem,interpretation);
21160 PartialInterpretation.openWorldElements(interpretation,element);
21161 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
21162 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
21163 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
21164 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
21165 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
21166 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
21167 neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation);
21168 neg find isPrimitive(element);
21169} or
21170{ find mustInstanceOfFunctionalInput_class(problem,interpretation,element); }
21171/**
21172 * An element must be an instance of type "FunctionalOutput class".
21173 */
21174private pattern mustInstanceOfFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
21175 Type.name(type,"FunctionalOutput class");
21176 find directInstanceOf(problem,interpretation,element,type);
21177}
21178private pattern scopeDisallowsNewFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation) {
21179 find interpretation(problem,interpretation);
21180 PartialInterpretation.scopes(interpretation,scope);
21181 Scope.targetTypeInterpretation(scope,typeInterpretation);
21182 Scope.maxNewElements(scope,0);
21183 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
21184 Type.name(type,"FunctionalOutput class");
21185}
21186
21187/**
21188 * An element may be an instance of type "FunctionalOutput class".
21189 */
21190private pattern mayInstanceOfFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
21191{
21192 find interpretation(problem,interpretation);
21193 PartialInterpretation.newElements(interpretation,element);
21194 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
21195 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
21196 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
21197 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
21198 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
21199 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
21200 neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation);
21201 neg find isPrimitive(element);
21202} or {
21203 find interpretation(problem,interpretation);
21204 PartialInterpretation.openWorldElements(interpretation,element);
21205 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
21206 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
21207 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
21208 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
21209 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
21210 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
21211 neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation);
21212 neg find isPrimitive(element);
21213} or
21214{ find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); }
21215/**
21216 * An element must be an instance of type "FunctionalData class".
21217 */
21218private pattern mustInstanceOfFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
21219 Type.name(type,"FunctionalData class");
21220 find directInstanceOf(problem,interpretation,element,type);
21221}
21222private pattern scopeDisallowsNewFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation) {
21223 find interpretation(problem,interpretation);
21224 PartialInterpretation.scopes(interpretation,scope);
21225 Scope.targetTypeInterpretation(scope,typeInterpretation);
21226 Scope.maxNewElements(scope,0);
21227 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
21228 Type.name(type,"FunctionalData class");
21229}
21230
21231/**
21232 * An element may be an instance of type "FunctionalData class".
21233 */
21234private pattern mayInstanceOfFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
21235{
21236 find interpretation(problem,interpretation);
21237 PartialInterpretation.newElements(interpretation,element);
21238 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
21239 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
21240 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
21241 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
21242 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
21243 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
21244 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
21245 neg find scopeDisallowsNewFunctionalData_class(problem, interpretation);
21246 neg find isPrimitive(element);
21247} or {
21248 find interpretation(problem,interpretation);
21249 PartialInterpretation.openWorldElements(interpretation,element);
21250 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
21251 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
21252 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
21253 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
21254 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
21255 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
21256 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
21257 neg find scopeDisallowsNewFunctionalData_class(problem, interpretation);
21258 neg find isPrimitive(element);
21259} or
21260{ find mustInstanceOfFunctionalData_class(problem,interpretation,element); }
21261/**
21262 * An element must be an instance of type "FunctionType enum".
21263 */
21264private pattern mustInstanceOfFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
21265 Type.name(type,"FunctionType enum");
21266 find directInstanceOf(problem,interpretation,element,type);
21267}
21268private pattern scopeDisallowsNewFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation) {
21269 find interpretation(problem,interpretation);
21270 PartialInterpretation.scopes(interpretation,scope);
21271 Scope.targetTypeInterpretation(scope,typeInterpretation);
21272 Scope.maxNewElements(scope,0);
21273 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
21274 Type.name(type,"FunctionType enum");
21275}
21276
21277/**
21278 * An element may be an instance of type "FunctionType enum".
21279 */
21280private pattern mayInstanceOfFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
21281{ find mustInstanceOfFunctionType_enum(problem,interpretation,element); }
21282/**
21283 * An element must be an instance of type "FunctionalArchitectureModel class DefinedPart".
21284 */
21285private pattern mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
21286 Type.name(type,"FunctionalArchitectureModel class DefinedPart");
21287 find directInstanceOf(problem,interpretation,element,type);
21288}
21289private pattern scopeDisallowsNewFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
21290 find interpretation(problem,interpretation);
21291 PartialInterpretation.scopes(interpretation,scope);
21292 Scope.targetTypeInterpretation(scope,typeInterpretation);
21293 Scope.maxNewElements(scope,0);
21294 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
21295 Type.name(type,"FunctionalArchitectureModel class DefinedPart");
21296}
21297
21298/**
21299 * An element may be an instance of type "FunctionalArchitectureModel class DefinedPart".
21300 */
21301private pattern mayInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
21302{ find mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem,interpretation,element); }
21303/**
21304 * An element must be an instance of type "FunctionalArchitectureModel class UndefinedPart".
21305 */
21306private pattern mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
21307 Type.name(type,"FunctionalArchitectureModel class UndefinedPart");
21308 find directInstanceOf(problem,interpretation,element,type);
21309}
21310private pattern scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
21311 find interpretation(problem,interpretation);
21312 PartialInterpretation.scopes(interpretation,scope);
21313 Scope.targetTypeInterpretation(scope,typeInterpretation);
21314 Scope.maxNewElements(scope,0);
21315 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
21316 Type.name(type,"FunctionalArchitectureModel class UndefinedPart");
21317}
21318
21319/**
21320 * An element may be an instance of type "FunctionalArchitectureModel class UndefinedPart".
21321 */
21322private pattern mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
21323{
21324 find interpretation(problem,interpretation);
21325 PartialInterpretation.newElements(interpretation,element);
21326 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
21327 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
21328 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
21329 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
21330 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
21331 neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation);
21332 neg find isPrimitive(element);
21333} or {
21334 find interpretation(problem,interpretation);
21335 PartialInterpretation.openWorldElements(interpretation,element);
21336 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
21337 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
21338 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
21339 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
21340 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
21341 neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation);
21342 neg find isPrimitive(element);
21343} or
21344{ find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); }
21345
21346//////////
21347// 1.2 Relation Declaration Indexers
21348//////////
21349/**
21350 * Matcher for detecting tuples t where []interface reference FunctionalElement(source,target)
21351 */
21352private pattern mustInRelationinterface_reference_FunctionalElement(
21353 problem:LogicProblem, interpretation:PartialInterpretation,
21354 source: DefinedElement, target:DefinedElement)
21355{
21356 find interpretation(problem,interpretation);
21357 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
21358 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface reference FunctionalElement");
21359 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
21360 BinaryElementRelationLink.param1(link,source);
21361 BinaryElementRelationLink.param2(link,target);
21362}
21363/**
21364 * Matcher for detecting tuples t where <>interface reference FunctionalElement(source,target)
21365 */
21366private pattern mayInRelationinterface_reference_FunctionalElement(
21367 problem:LogicProblem, interpretation:PartialInterpretation,
21368 source: DefinedElement, target:DefinedElement)
21369{
21370 find interpretation(problem,interpretation);
21371 // The two endpoint of the link have to exist
21372 find mayExist(problem, interpretation, source);
21373 find mayExist(problem, interpretation, target);
21374 // Type consistency
21375 find mayInstanceOfFunctionalElement_class(problem,interpretation,source);
21376 find mayInstanceOfFunctionalInterface_class(problem,interpretation,target);
21377 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
21378 // the upper bound of the multiplicity should be considered.
21379 numberOfExistingReferences == count find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,_);
21380 check(numberOfExistingReferences < 1);
21381 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
21382 // the upper bound of the opposite reference multiplicity should be considered.
21383 numberOfExistingOppositeReferences == count find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,target,_);
21384 check(numberOfExistingOppositeReferences < 1);
21385 // The reference is containment, then a new reference cannot be create if:
21386 // 1. Multiple parents
21387 neg find mustContains4(problem,interpretation,_,target);
21388 // 2. Circle in the containment hierarchy
21389 neg find mustTransitiveContains(source,target);
21390} or {
21391 find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,target);
21392}
21393/**
21394 * Matcher for detecting tuples t where []model reference FunctionalElement(source,target)
21395 */
21396 private pattern mustInRelationmodel_reference_FunctionalElement(
21397 problem:LogicProblem, interpretation:PartialInterpretation,
21398 source: DefinedElement, target:DefinedElement)
21399 {
21400 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_model(problem,interpretation,source,target);
21401 }
21402/**
21403 * Matcher for detecting tuples t where []model reference FunctionalElement(source,target)
21404 */
21405 private pattern mayInRelationmodel_reference_FunctionalElement(
21406 problem:LogicProblem, interpretation:PartialInterpretation,
21407 source: DefinedElement, target:DefinedElement)
21408 {
21409 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_model(problem,interpretation,source,target);
21410 }
21411/**
21412 * Matcher for detecting tuples t where []parent reference FunctionalElement(source,target)
21413 */
21414private pattern mustInRelationparent_reference_FunctionalElement(
21415 problem:LogicProblem, interpretation:PartialInterpretation,
21416 source: DefinedElement, target:DefinedElement)
21417{
21418 find interpretation(problem,interpretation);
21419 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
21420 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"parent reference FunctionalElement");
21421 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
21422 BinaryElementRelationLink.param1(link,source);
21423 BinaryElementRelationLink.param2(link,target);
21424}
21425/**
21426 * Matcher for detecting tuples t where <>parent reference FunctionalElement(source,target)
21427 */
21428private pattern mayInRelationparent_reference_FunctionalElement(
21429 problem:LogicProblem, interpretation:PartialInterpretation,
21430 source: DefinedElement, target:DefinedElement)
21431{
21432 find interpretation(problem,interpretation);
21433 // The two endpoint of the link have to exist
21434 find mayExist(problem, interpretation, source);
21435 find mayExist(problem, interpretation, target);
21436 // Type consistency
21437 find mayInstanceOfFunctionalElement_class(problem,interpretation,source);
21438 find mayInstanceOfFunction_class(problem,interpretation,target);
21439 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
21440 // the upper bound of the multiplicity should be considered.
21441 numberOfExistingReferences == count find mustInRelationparent_reference_FunctionalElement(problem,interpretation,source,_);
21442 check(numberOfExistingReferences < 1);
21443 // The eOpposite of the reference is containment, then a referene cannot be created if
21444 // 1. Multiple parents
21445 neg find mustContains4(problem,interpretation,source,_);
21446 // 2. Circle in the containment hierarchy
21447 neg find mustTransitiveContains(source,target);
21448} or {
21449 find mustInRelationparent_reference_FunctionalElement(problem,interpretation,source,target);
21450}
21451/**
21452 * Matcher for detecting tuples t where []rootElements reference FunctionalArchitectureModel(source,target)
21453 */
21454private pattern mustInRelationrootElements_reference_FunctionalArchitectureModel(
21455 problem:LogicProblem, interpretation:PartialInterpretation,
21456 source: DefinedElement, target:DefinedElement)
21457{
21458 find interpretation(problem,interpretation);
21459 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
21460 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"rootElements reference FunctionalArchitectureModel");
21461 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
21462 BinaryElementRelationLink.param1(link,source);
21463 BinaryElementRelationLink.param2(link,target);
21464}
21465/**
21466 * Matcher for detecting tuples t where <>rootElements reference FunctionalArchitectureModel(source,target)
21467 */
21468private pattern mayInRelationrootElements_reference_FunctionalArchitectureModel(
21469 problem:LogicProblem, interpretation:PartialInterpretation,
21470 source: DefinedElement, target:DefinedElement)
21471{
21472 find interpretation(problem,interpretation);
21473 // The two endpoint of the link have to exist
21474 find mayExist(problem, interpretation, source);
21475 find mayExist(problem, interpretation, target);
21476 // Type consistency
21477 find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,source);
21478 find mayInstanceOfFunctionalElement_class(problem,interpretation,target);
21479 // The reference is containment, then a new reference cannot be create if:
21480 // 1. Multiple parents
21481 neg find mustContains4(problem,interpretation,_,target);
21482 // 2. Circle in the containment hierarchy
21483 neg find mustTransitiveContains(source,target);
21484} or {
21485 find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,source,target);
21486}
21487/**
21488 * Matcher for detecting tuples t where []subElements reference Function(source,target)
21489 */
21490private pattern mustInRelationsubElements_reference_Function(
21491 problem:LogicProblem, interpretation:PartialInterpretation,
21492 source: DefinedElement, target:DefinedElement)
21493{
21494 find interpretation(problem,interpretation);
21495 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
21496 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"subElements reference Function");
21497 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
21498 BinaryElementRelationLink.param1(link,source);
21499 BinaryElementRelationLink.param2(link,target);
21500}
21501/**
21502 * Matcher for detecting tuples t where <>subElements reference Function(source,target)
21503 */
21504private pattern mayInRelationsubElements_reference_Function(
21505 problem:LogicProblem, interpretation:PartialInterpretation,
21506 source: DefinedElement, target:DefinedElement)
21507{
21508 find interpretation(problem,interpretation);
21509 // The two endpoint of the link have to exist
21510 find mayExist(problem, interpretation, source);
21511 find mayExist(problem, interpretation, target);
21512 // Type consistency
21513 find mayInstanceOfFunction_class(problem,interpretation,source);
21514 find mayInstanceOfFunctionalElement_class(problem,interpretation,target);
21515 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
21516 // the upper bound of the opposite reference multiplicity should be considered.
21517 numberOfExistingOppositeReferences == count find mustInRelationparent_reference_FunctionalElement(problem,interpretation,target,_);
21518 check(numberOfExistingOppositeReferences < 1);
21519 // The reference is containment, then a new reference cannot be create if:
21520 // 1. Multiple parents
21521 neg find mustContains4(problem,interpretation,_,target);
21522 // 2. Circle in the containment hierarchy
21523 neg find mustTransitiveContains(source,target);
21524} or {
21525 find mustInRelationsubElements_reference_Function(problem,interpretation,source,target);
21526}
21527/**
21528 * Matcher for detecting tuples t where []data reference FAMTerminator(source,target)
21529 */
21530private pattern mustInRelationdata_reference_FAMTerminator(
21531 problem:LogicProblem, interpretation:PartialInterpretation,
21532 source: DefinedElement, target:DefinedElement)
21533{
21534 find interpretation(problem,interpretation);
21535 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
21536 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"data reference FAMTerminator");
21537 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
21538 BinaryElementRelationLink.param1(link,source);
21539 BinaryElementRelationLink.param2(link,target);
21540}
21541/**
21542 * Matcher for detecting tuples t where <>data reference FAMTerminator(source,target)
21543 */
21544private pattern mayInRelationdata_reference_FAMTerminator(
21545 problem:LogicProblem, interpretation:PartialInterpretation,
21546 source: DefinedElement, target:DefinedElement)
21547{
21548 find interpretation(problem,interpretation);
21549 // The two endpoint of the link have to exist
21550 find mayExist(problem, interpretation, source);
21551 find mayExist(problem, interpretation, target);
21552 // Type consistency
21553 find mayInstanceOfFAMTerminator_class(problem,interpretation,source);
21554 find mayInstanceOfFunctionalData_class(problem,interpretation,target);
21555 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
21556 // the upper bound of the multiplicity should be considered.
21557 numberOfExistingReferences == count find mustInRelationdata_reference_FAMTerminator(problem,interpretation,source,_);
21558 check(numberOfExistingReferences < 1);
21559 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
21560 // the upper bound of the opposite reference multiplicity should be considered.
21561 numberOfExistingOppositeReferences == count find mustInRelationterminator_reference_FunctionalData(problem,interpretation,target,_);
21562 check(numberOfExistingOppositeReferences < 1);
21563 // The eOpposite of the reference is containment, then a referene cannot be created if
21564 // 1. Multiple parents
21565 neg find mustContains4(problem,interpretation,source,_);
21566 // 2. Circle in the containment hierarchy
21567 neg find mustTransitiveContains(source,target);
21568} or {
21569 find mustInRelationdata_reference_FAMTerminator(problem,interpretation,source,target);
21570}
21571/**
21572 * Matcher for detecting tuples t where []from reference InformationLink(source,target)
21573 */
21574private pattern mustInRelationfrom_reference_InformationLink(
21575 problem:LogicProblem, interpretation:PartialInterpretation,
21576 source: DefinedElement, target:DefinedElement)
21577{
21578 find interpretation(problem,interpretation);
21579 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
21580 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"from reference InformationLink");
21581 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
21582 BinaryElementRelationLink.param1(link,source);
21583 BinaryElementRelationLink.param2(link,target);
21584}
21585/**
21586 * Matcher for detecting tuples t where <>from reference InformationLink(source,target)
21587 */
21588private pattern mayInRelationfrom_reference_InformationLink(
21589 problem:LogicProblem, interpretation:PartialInterpretation,
21590 source: DefinedElement, target:DefinedElement)
21591{
21592 find interpretation(problem,interpretation);
21593 // The two endpoint of the link have to exist
21594 find mayExist(problem, interpretation, source);
21595 find mayExist(problem, interpretation, target);
21596 // Type consistency
21597 find mayInstanceOfInformationLink_class(problem,interpretation,source);
21598 find mayInstanceOfFunctionalOutput_class(problem,interpretation,target);
21599 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
21600 // the upper bound of the multiplicity should be considered.
21601 numberOfExistingReferences == count find mustInRelationfrom_reference_InformationLink(problem,interpretation,source,_);
21602 check(numberOfExistingReferences < 1);
21603 // The eOpposite of the reference is containment, then a referene cannot be created if
21604 // 1. Multiple parents
21605 neg find mustContains4(problem,interpretation,source,_);
21606 // 2. Circle in the containment hierarchy
21607 neg find mustTransitiveContains(source,target);
21608} or {
21609 find mustInRelationfrom_reference_InformationLink(problem,interpretation,source,target);
21610}
21611/**
21612 * Matcher for detecting tuples t where []to reference InformationLink(source,target)
21613 */
21614private pattern mustInRelationto_reference_InformationLink(
21615 problem:LogicProblem, interpretation:PartialInterpretation,
21616 source: DefinedElement, target:DefinedElement)
21617{
21618 find interpretation(problem,interpretation);
21619 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
21620 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"to reference InformationLink");
21621 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
21622 BinaryElementRelationLink.param1(link,source);
21623 BinaryElementRelationLink.param2(link,target);
21624}
21625/**
21626 * Matcher for detecting tuples t where <>to reference InformationLink(source,target)
21627 */
21628private pattern mayInRelationto_reference_InformationLink(
21629 problem:LogicProblem, interpretation:PartialInterpretation,
21630 source: DefinedElement, target:DefinedElement)
21631{
21632 find interpretation(problem,interpretation);
21633 // The two endpoint of the link have to exist
21634 find mayExist(problem, interpretation, source);
21635 find mayExist(problem, interpretation, target);
21636 // Type consistency
21637 find mayInstanceOfInformationLink_class(problem,interpretation,source);
21638 find mayInstanceOfFunctionalInput_class(problem,interpretation,target);
21639 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
21640 // the upper bound of the multiplicity should be considered.
21641 numberOfExistingReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,source,_);
21642 check(numberOfExistingReferences < 1);
21643} or {
21644 find mustInRelationto_reference_InformationLink(problem,interpretation,source,target);
21645}
21646/**
21647 * Matcher for detecting tuples t where []data reference FunctionalInterface(source,target)
21648 */
21649private pattern mustInRelationdata_reference_FunctionalInterface(
21650 problem:LogicProblem, interpretation:PartialInterpretation,
21651 source: DefinedElement, target:DefinedElement)
21652{
21653 find interpretation(problem,interpretation);
21654 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
21655 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"data reference FunctionalInterface");
21656 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
21657 BinaryElementRelationLink.param1(link,source);
21658 BinaryElementRelationLink.param2(link,target);
21659}
21660/**
21661 * Matcher for detecting tuples t where <>data reference FunctionalInterface(source,target)
21662 */
21663private pattern mayInRelationdata_reference_FunctionalInterface(
21664 problem:LogicProblem, interpretation:PartialInterpretation,
21665 source: DefinedElement, target:DefinedElement)
21666{
21667 find interpretation(problem,interpretation);
21668 // The two endpoint of the link have to exist
21669 find mayExist(problem, interpretation, source);
21670 find mayExist(problem, interpretation, target);
21671 // Type consistency
21672 find mayInstanceOfFunctionalInterface_class(problem,interpretation,source);
21673 find mayInstanceOfFunctionalData_class(problem,interpretation,target);
21674 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
21675 // the upper bound of the opposite reference multiplicity should be considered.
21676 numberOfExistingOppositeReferences == count find mustInRelationinterface_reference_FunctionalData(problem,interpretation,target,_);
21677 check(numberOfExistingOppositeReferences < 1);
21678 // The reference is containment, then a new reference cannot be create if:
21679 // 1. Multiple parents
21680 neg find mustContains4(problem,interpretation,_,target);
21681 // 2. Circle in the containment hierarchy
21682 neg find mustTransitiveContains(source,target);
21683} or {
21684 find mustInRelationdata_reference_FunctionalInterface(problem,interpretation,source,target);
21685}
21686/**
21687 * Matcher for detecting tuples t where []element reference FunctionalInterface(source,target)
21688 */
21689private pattern mustInRelationelement_reference_FunctionalInterface(
21690 problem:LogicProblem, interpretation:PartialInterpretation,
21691 source: DefinedElement, target:DefinedElement)
21692{
21693 find interpretation(problem,interpretation);
21694 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
21695 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"element reference FunctionalInterface");
21696 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
21697 BinaryElementRelationLink.param1(link,source);
21698 BinaryElementRelationLink.param2(link,target);
21699}
21700/**
21701 * Matcher for detecting tuples t where <>element reference FunctionalInterface(source,target)
21702 */
21703private pattern mayInRelationelement_reference_FunctionalInterface(
21704 problem:LogicProblem, interpretation:PartialInterpretation,
21705 source: DefinedElement, target:DefinedElement)
21706{
21707 find interpretation(problem,interpretation);
21708 // The two endpoint of the link have to exist
21709 find mayExist(problem, interpretation, source);
21710 find mayExist(problem, interpretation, target);
21711 // Type consistency
21712 find mayInstanceOfFunctionalInterface_class(problem,interpretation,source);
21713 find mayInstanceOfFunctionalElement_class(problem,interpretation,target);
21714 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
21715 // the upper bound of the multiplicity should be considered.
21716 numberOfExistingReferences == count find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,source,_);
21717 check(numberOfExistingReferences < 1);
21718 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
21719 // the upper bound of the opposite reference multiplicity should be considered.
21720 numberOfExistingOppositeReferences == count find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,target,_);
21721 check(numberOfExistingOppositeReferences < 1);
21722 // The eOpposite of the reference is containment, then a referene cannot be created if
21723 // 1. Multiple parents
21724 neg find mustContains4(problem,interpretation,source,_);
21725 // 2. Circle in the containment hierarchy
21726 neg find mustTransitiveContains(source,target);
21727} or {
21728 find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,source,target);
21729}
21730/**
21731 * Matcher for detecting tuples t where []IncomingLinks reference FunctionalInput(source,target)
21732 */
21733private pattern mustInRelationIncomingLinks_reference_FunctionalInput(
21734 problem:LogicProblem, interpretation:PartialInterpretation,
21735 source: DefinedElement, target:DefinedElement)
21736{
21737 find interpretation(problem,interpretation);
21738 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
21739 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"IncomingLinks reference FunctionalInput");
21740 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
21741 BinaryElementRelationLink.param1(link,source);
21742 BinaryElementRelationLink.param2(link,target);
21743}
21744/**
21745 * Matcher for detecting tuples t where <>IncomingLinks reference FunctionalInput(source,target)
21746 */
21747private pattern mayInRelationIncomingLinks_reference_FunctionalInput(
21748 problem:LogicProblem, interpretation:PartialInterpretation,
21749 source: DefinedElement, target:DefinedElement)
21750{
21751 find interpretation(problem,interpretation);
21752 // The two endpoint of the link have to exist
21753 find mayExist(problem, interpretation, source);
21754 find mayExist(problem, interpretation, target);
21755 // Type consistency
21756 find mayInstanceOfFunctionalInput_class(problem,interpretation,source);
21757 find mayInstanceOfInformationLink_class(problem,interpretation,target);
21758 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
21759 // the upper bound of the opposite reference multiplicity should be considered.
21760 numberOfExistingOppositeReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,target,_);
21761 check(numberOfExistingOppositeReferences < 1);
21762} or {
21763 find mustInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,source,target);
21764}
21765/**
21766 * Matcher for detecting tuples t where []outgoingLinks reference FunctionalOutput(source,target)
21767 */
21768private pattern mustInRelationoutgoingLinks_reference_FunctionalOutput(
21769 problem:LogicProblem, interpretation:PartialInterpretation,
21770 source: DefinedElement, target:DefinedElement)
21771{
21772 find interpretation(problem,interpretation);
21773 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
21774 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"outgoingLinks reference FunctionalOutput");
21775 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
21776 BinaryElementRelationLink.param1(link,source);
21777 BinaryElementRelationLink.param2(link,target);
21778}
21779/**
21780 * Matcher for detecting tuples t where <>outgoingLinks reference FunctionalOutput(source,target)
21781 */
21782private pattern mayInRelationoutgoingLinks_reference_FunctionalOutput(
21783 problem:LogicProblem, interpretation:PartialInterpretation,
21784 source: DefinedElement, target:DefinedElement)
21785{
21786 find interpretation(problem,interpretation);
21787 // The two endpoint of the link have to exist
21788 find mayExist(problem, interpretation, source);
21789 find mayExist(problem, interpretation, target);
21790 // Type consistency
21791 find mayInstanceOfFunctionalOutput_class(problem,interpretation,source);
21792 find mayInstanceOfInformationLink_class(problem,interpretation,target);
21793 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
21794 // the upper bound of the opposite reference multiplicity should be considered.
21795 numberOfExistingOppositeReferences == count find mustInRelationfrom_reference_InformationLink(problem,interpretation,target,_);
21796 check(numberOfExistingOppositeReferences < 1);
21797 // The reference is containment, then a new reference cannot be create if:
21798 // 1. Multiple parents
21799 neg find mustContains4(problem,interpretation,_,target);
21800 // 2. Circle in the containment hierarchy
21801 neg find mustTransitiveContains(source,target);
21802} or {
21803 find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,source,target);
21804}
21805/**
21806 * Matcher for detecting tuples t where []terminator reference FunctionalData(source,target)
21807 */
21808private pattern mustInRelationterminator_reference_FunctionalData(
21809 problem:LogicProblem, interpretation:PartialInterpretation,
21810 source: DefinedElement, target:DefinedElement)
21811{
21812 find interpretation(problem,interpretation);
21813 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
21814 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"terminator reference FunctionalData");
21815 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
21816 BinaryElementRelationLink.param1(link,source);
21817 BinaryElementRelationLink.param2(link,target);
21818}
21819/**
21820 * Matcher for detecting tuples t where <>terminator reference FunctionalData(source,target)
21821 */
21822private pattern mayInRelationterminator_reference_FunctionalData(
21823 problem:LogicProblem, interpretation:PartialInterpretation,
21824 source: DefinedElement, target:DefinedElement)
21825{
21826 find interpretation(problem,interpretation);
21827 // The two endpoint of the link have to exist
21828 find mayExist(problem, interpretation, source);
21829 find mayExist(problem, interpretation, target);
21830 // Type consistency
21831 find mayInstanceOfFunctionalData_class(problem,interpretation,source);
21832 find mayInstanceOfFAMTerminator_class(problem,interpretation,target);
21833 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
21834 // the upper bound of the multiplicity should be considered.
21835 numberOfExistingReferences == count find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,_);
21836 check(numberOfExistingReferences < 1);
21837 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
21838 // the upper bound of the opposite reference multiplicity should be considered.
21839 numberOfExistingOppositeReferences == count find mustInRelationdata_reference_FAMTerminator(problem,interpretation,target,_);
21840 check(numberOfExistingOppositeReferences < 1);
21841 // The reference is containment, then a new reference cannot be create if:
21842 // 1. Multiple parents
21843 neg find mustContains4(problem,interpretation,_,target);
21844 // 2. Circle in the containment hierarchy
21845 neg find mustTransitiveContains(source,target);
21846} or {
21847 find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,target);
21848}
21849/**
21850 * Matcher for detecting tuples t where []interface reference FunctionalData(source,target)
21851 */
21852private pattern mustInRelationinterface_reference_FunctionalData(
21853 problem:LogicProblem, interpretation:PartialInterpretation,
21854 source: DefinedElement, target:DefinedElement)
21855{
21856 find interpretation(problem,interpretation);
21857 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
21858 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface reference FunctionalData");
21859 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
21860 BinaryElementRelationLink.param1(link,source);
21861 BinaryElementRelationLink.param2(link,target);
21862}
21863/**
21864 * Matcher for detecting tuples t where <>interface reference FunctionalData(source,target)
21865 */
21866private pattern mayInRelationinterface_reference_FunctionalData(
21867 problem:LogicProblem, interpretation:PartialInterpretation,
21868 source: DefinedElement, target:DefinedElement)
21869{
21870 find interpretation(problem,interpretation);
21871 // The two endpoint of the link have to exist
21872 find mayExist(problem, interpretation, source);
21873 find mayExist(problem, interpretation, target);
21874 // Type consistency
21875 find mayInstanceOfFunctionalData_class(problem,interpretation,source);
21876 find mayInstanceOfFunctionalInterface_class(problem,interpretation,target);
21877 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
21878 // the upper bound of the multiplicity should be considered.
21879 numberOfExistingReferences == count find mustInRelationinterface_reference_FunctionalData(problem,interpretation,source,_);
21880 check(numberOfExistingReferences < 1);
21881 // The eOpposite of the reference is containment, then a referene cannot be created if
21882 // 1. Multiple parents
21883 neg find mustContains4(problem,interpretation,source,_);
21884 // 2. Circle in the containment hierarchy
21885 neg find mustTransitiveContains(source,target);
21886} or {
21887 find mustInRelationinterface_reference_FunctionalData(problem,interpretation,source,target);
21888}
21889/**
21890 * Matcher for detecting tuples t where []type attribute Function(source,target)
21891 */
21892 private pattern mustInRelationtype_attribute_Function(
21893 problem:LogicProblem, interpretation:PartialInterpretation,
21894 source: DefinedElement, target:DefinedElement)
21895 {
21896 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_type(problem,interpretation,source,target);
21897 }
21898/**
21899 * Matcher for detecting tuples t where []type attribute Function(source,target)
21900 */
21901 private pattern mayInRelationtype_attribute_Function(
21902 problem:LogicProblem, interpretation:PartialInterpretation,
21903 source: DefinedElement, target:DefinedElement)
21904 {
21905 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_type(problem,interpretation,source,target);
21906 }
21907
21908//////////
21909// 1.3 Relation Definition Indexers
21910//////////
21911// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test fam terminatorAndInformation
21912private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_terminatorAndInformation(
21913 problem:LogicProblem, interpretation:PartialInterpretation,
21914 var_T, var_I)
21915{
21916 find interpretation(problem,interpretation);
21917 find mustInstanceOfFAMTerminator_class(problem,interpretation,var_T);
21918 find mustInstanceOfInformationLink_class(problem,interpretation,var_I);
21919 // T is exported
21920 // I is exported
21921 find mustInstanceOfFunctionalOutput_class(problem,interpretation,var_Out);
21922 find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,var_Out,var_virtual0);
21923 find mustInstanceOfInformationLink_class(problem,interpretation,var_virtual0);
21924 var_virtual0 == var_I;
21925 find mustInstanceOfFunctionalOutput_class(problem,interpretation,var_Out);
21926 find mustInRelationterminator_reference_FunctionalData(problem,interpretation,var_Out,var_virtual1);
21927 find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1);
21928 var_virtual1 == var_T;
21929}or{
21930 find interpretation(problem,interpretation);
21931 find mustInstanceOfFAMTerminator_class(problem,interpretation,var_T);
21932 find mustInstanceOfInformationLink_class(problem,interpretation,var_I);
21933 // T is exported
21934 // I is exported
21935 find mustInstanceOfInformationLink_class(problem,interpretation,var_I);
21936 find mustInRelationto_reference_InformationLink(problem,interpretation,var_I,var_virtual0);
21937 find mustInstanceOfFunctionalInput_class(problem,interpretation,var_virtual0);
21938 var_virtual0 == var_In;
21939 find mustInstanceOfFunctionalInput_class(problem,interpretation,var_In);
21940 find mustInRelationterminator_reference_FunctionalData(problem,interpretation,var_In,var_virtual1);
21941 find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1);
21942 var_virtual1 == var_T;
21943}
21944private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_terminatorAndInformation(
21945 problem:LogicProblem, interpretation:PartialInterpretation,
21946 var_T, var_I)
21947{
21948 find interpretation(problem,interpretation);
21949 find mayInstanceOfFAMTerminator_class(problem,interpretation,var_T);
21950 find mayInstanceOfInformationLink_class(problem,interpretation,var_I);
21951 // T is exported
21952 // I is exported
21953 find mayInstanceOfFunctionalOutput_class(problem,interpretation,var_Out);
21954 find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,var_Out,var_virtual0);
21955 find mayInstanceOfInformationLink_class(problem,interpretation,var_virtual0);
21956 find mayEquivalent(problem, interpretation, var_virtual0, var_I);
21957 find mayInstanceOfFunctionalOutput_class(problem,interpretation,var_Out);
21958 find mayInRelationterminator_reference_FunctionalData(problem,interpretation,var_Out,var_virtual1);
21959 find mayInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1);
21960 find mayEquivalent(problem, interpretation, var_virtual1, var_T);
21961}or{
21962 find interpretation(problem,interpretation);
21963 find mayInstanceOfFAMTerminator_class(problem,interpretation,var_T);
21964 find mayInstanceOfInformationLink_class(problem,interpretation,var_I);
21965 // T is exported
21966 // I is exported
21967 find mayInstanceOfInformationLink_class(problem,interpretation,var_I);
21968 find mayInRelationto_reference_InformationLink(problem,interpretation,var_I,var_virtual0);
21969 find mayInstanceOfFunctionalInput_class(problem,interpretation,var_virtual0);
21970 find mayEquivalent(problem, interpretation, var_virtual0, var_In);
21971 find mayInstanceOfFunctionalInput_class(problem,interpretation,var_In);
21972 find mayInRelationterminator_reference_FunctionalData(problem,interpretation,var_In,var_virtual1);
21973 find mayInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1);
21974 find mayEquivalent(problem, interpretation, var_virtual1, var_T);
21975}
21976private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_terminatorAndInformation(
21977 problem:LogicProblem, interpretation:PartialInterpretation,
21978 var_T, var_I)
21979{
21980 find interpretation(problem,interpretation);
21981 find mustInstanceOfFAMTerminator_class(problem,interpretation,var_T);
21982 find mustInstanceOfInformationLink_class(problem,interpretation,var_I);
21983 // T is exported
21984 // I is exported
21985 find mustInstanceOfFunctionalOutput_class(problem,interpretation,var_Out);
21986 find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,var_Out,var_virtual0);
21987 find mustInstanceOfInformationLink_class(problem,interpretation,var_virtual0);
21988 var_virtual0 == var_I;
21989 find mustInstanceOfFunctionalOutput_class(problem,interpretation,var_Out);
21990 find mustInRelationterminator_reference_FunctionalData(problem,interpretation,var_Out,var_virtual1);
21991 find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1);
21992 var_virtual1 == var_T;
21993}or{
21994 find interpretation(problem,interpretation);
21995 find mustInstanceOfFAMTerminator_class(problem,interpretation,var_T);
21996 find mustInstanceOfInformationLink_class(problem,interpretation,var_I);
21997 // T is exported
21998 // I is exported
21999 find mustInstanceOfInformationLink_class(problem,interpretation,var_I);
22000 find mustInRelationto_reference_InformationLink(problem,interpretation,var_I,var_virtual0);
22001 find mustInstanceOfFunctionalInput_class(problem,interpretation,var_virtual0);
22002 var_virtual0 == var_In;
22003 find mustInstanceOfFunctionalInput_class(problem,interpretation,var_In);
22004 find mustInRelationterminator_reference_FunctionalData(problem,interpretation,var_In,var_virtual1);
22005 find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1);
22006 var_virtual1 == var_T;
22007}
22008// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test fam type
22009private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_type(
22010 problem:LogicProblem, interpretation:PartialInterpretation,
22011 var_This, var_Target)
22012{
22013 find interpretation(problem,interpretation);
22014 find mustInstanceOfFunction_class(problem,interpretation,var_This);
22015 // type constraint is enforced by construction
22016 // This is exported
22017 // Target is exported
22018 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(problem,interpretation,_var__Model,var_This);
22019 var_virtual0 == const_Root_FunctionType;DefinedElement.name(const_Root_FunctionType,"Root FunctionType"); //LogicProblem.elements(problem,const_Root_FunctionType);
22020 var_Target == var_virtual0;
22021}or{
22022 find interpretation(problem,interpretation);
22023 find mustInstanceOfFunction_class(problem,interpretation,var_This);
22024 // type constraint is enforced by construction
22025 // This is exported
22026 // Target is exported
22027 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,_var__Child,var_This);
22028 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(problem,interpretation,_var__Model,var_This);
22029 var_virtual0 == const_Leaf_FunctionType;DefinedElement.name(const_Leaf_FunctionType,"Leaf FunctionType"); //LogicProblem.elements(problem,const_Leaf_FunctionType);
22030 var_Target == var_virtual0;
22031}or{
22032 find interpretation(problem,interpretation);
22033 find mustInstanceOfFunction_class(problem,interpretation,var_This);
22034 // type constraint is enforced by construction
22035 // This is exported
22036 // Target is exported
22037 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,var_This,_var__Par);
22038 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,_var__Child,var_This);
22039 var_virtual0 == const_Intermediate_FunctionType;DefinedElement.name(const_Intermediate_FunctionType,"Intermediate FunctionType"); //LogicProblem.elements(problem,const_Intermediate_FunctionType);
22040 var_Target == var_virtual0;
22041}
22042private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_type(
22043 problem:LogicProblem, interpretation:PartialInterpretation,
22044 var_This, var_Target)
22045{
22046 find interpretation(problem,interpretation);
22047 find mayInstanceOfFunction_class(problem,interpretation,var_This);
22048 // type constraint is enforced by construction
22049 // This is exported
22050 // Target is exported
22051 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(problem,interpretation,_var__Model,var_This);
22052 var_virtual0 == const_Root_FunctionType;DefinedElement.name(const_Root_FunctionType,"Root FunctionType"); //LogicProblem.elements(problem,const_Root_FunctionType);
22053 find mayEquivalent(problem, interpretation, var_Target, var_virtual0);
22054}or{
22055 find interpretation(problem,interpretation);
22056 find mayInstanceOfFunction_class(problem,interpretation,var_This);
22057 // type constraint is enforced by construction
22058 // This is exported
22059 // Target is exported
22060 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,_var__Child,var_This);
22061 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(problem,interpretation,_var__Model,var_This);
22062 var_virtual0 == const_Leaf_FunctionType;DefinedElement.name(const_Leaf_FunctionType,"Leaf FunctionType"); //LogicProblem.elements(problem,const_Leaf_FunctionType);
22063 find mayEquivalent(problem, interpretation, var_Target, var_virtual0);
22064}or{
22065 find interpretation(problem,interpretation);
22066 find mayInstanceOfFunction_class(problem,interpretation,var_This);
22067 // type constraint is enforced by construction
22068 // This is exported
22069 // Target is exported
22070 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,var_This,_var__Par);
22071 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,_var__Child,var_This);
22072 var_virtual0 == const_Intermediate_FunctionType;DefinedElement.name(const_Intermediate_FunctionType,"Intermediate FunctionType"); //LogicProblem.elements(problem,const_Intermediate_FunctionType);
22073 find mayEquivalent(problem, interpretation, var_Target, var_virtual0);
22074}
22075private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_type(
22076 problem:LogicProblem, interpretation:PartialInterpretation,
22077 var_This, var_Target)
22078{
22079 find interpretation(problem,interpretation);
22080 find mustInstanceOfFunction_class(problem,interpretation,var_This);
22081 // type constraint is enforced by construction
22082 // This is exported
22083 // Target is exported
22084 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(problem,interpretation,_var__Model,var_This);
22085 var_virtual0 == const_Root_FunctionType;DefinedElement.name(const_Root_FunctionType,"Root FunctionType"); //LogicProblem.elements(problem,const_Root_FunctionType);
22086 var_Target == var_virtual0;
22087}or{
22088 find interpretation(problem,interpretation);
22089 find mustInstanceOfFunction_class(problem,interpretation,var_This);
22090 // type constraint is enforced by construction
22091 // This is exported
22092 // Target is exported
22093 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,_var__Child,var_This);
22094 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(problem,interpretation,_var__Model,var_This);
22095 var_virtual0 == const_Leaf_FunctionType;DefinedElement.name(const_Leaf_FunctionType,"Leaf FunctionType"); //LogicProblem.elements(problem,const_Leaf_FunctionType);
22096 var_Target == var_virtual0;
22097}or{
22098 find interpretation(problem,interpretation);
22099 find mustInstanceOfFunction_class(problem,interpretation,var_This);
22100 // type constraint is enforced by construction
22101 // This is exported
22102 // Target is exported
22103 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,var_This,_var__Par);
22104 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(problem,interpretation,_var__Child,var_This);
22105 var_virtual0 == const_Intermediate_FunctionType;DefinedElement.name(const_Intermediate_FunctionType,"Intermediate FunctionType"); //LogicProblem.elements(problem,const_Intermediate_FunctionType);
22106 var_Target == var_virtual0;
22107}
22108// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test fam rootElements
22109private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(
22110 problem:LogicProblem, interpretation:PartialInterpretation,
22111 var_Model, var_Root)
22112{
22113 find interpretation(problem,interpretation);
22114 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Model);
22115 find mustInstanceOfFunction_class(problem,interpretation,var_Root);
22116 // Model is exported
22117 // Root is exported
22118 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Model);
22119 find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,var_Model,var_virtual0);
22120 find mustInstanceOfFunctionalElement_class(problem,interpretation,var_virtual0);
22121 var_virtual0 == var_Root;
22122}
22123private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(
22124 problem:LogicProblem, interpretation:PartialInterpretation,
22125 var_Model, var_Root)
22126{
22127 find interpretation(problem,interpretation);
22128 find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Model);
22129 find mayInstanceOfFunction_class(problem,interpretation,var_Root);
22130 // Model is exported
22131 // Root is exported
22132 find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Model);
22133 find mayInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,var_Model,var_virtual0);
22134 find mayInstanceOfFunctionalElement_class(problem,interpretation,var_virtual0);
22135 find mayEquivalent(problem, interpretation, var_virtual0, var_Root);
22136}
22137private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_rootElements(
22138 problem:LogicProblem, interpretation:PartialInterpretation,
22139 var_Model, var_Root)
22140{
22141 find interpretation(problem,interpretation);
22142 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Model);
22143 find mustInstanceOfFunction_class(problem,interpretation,var_Root);
22144 // Model is exported
22145 // Root is exported
22146 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Model);
22147 find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,var_Model,var_virtual0);
22148 find mustInstanceOfFunctionalElement_class(problem,interpretation,var_virtual0);
22149 var_virtual0 == var_Root;
22150}
22151// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test fam parent
22152private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(
22153 problem:LogicProblem, interpretation:PartialInterpretation,
22154 var_Func, var_Par)
22155{
22156 find interpretation(problem,interpretation);
22157 find mustInstanceOfFunction_class(problem,interpretation,var_Func);
22158 find mustInstanceOfFunction_class(problem,interpretation,var_Par);
22159 // Func is exported
22160 // Par is exported
22161 find mustInstanceOfFunction_class(problem,interpretation,var_Func);
22162 find mustInRelationparent_reference_FunctionalElement(problem,interpretation,var_Func,var_virtual0);
22163 find mustInstanceOfFunction_class(problem,interpretation,var_virtual0);
22164 var_virtual0 == var_Par;
22165}
22166private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(
22167 problem:LogicProblem, interpretation:PartialInterpretation,
22168 var_Func, var_Par)
22169{
22170 find interpretation(problem,interpretation);
22171 find mayInstanceOfFunction_class(problem,interpretation,var_Func);
22172 find mayInstanceOfFunction_class(problem,interpretation,var_Par);
22173 // Func is exported
22174 // Par is exported
22175 find mayInstanceOfFunction_class(problem,interpretation,var_Func);
22176 find mayInRelationparent_reference_FunctionalElement(problem,interpretation,var_Func,var_virtual0);
22177 find mayInstanceOfFunction_class(problem,interpretation,var_virtual0);
22178 find mayEquivalent(problem, interpretation, var_virtual0, var_Par);
22179}
22180private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_parent(
22181 problem:LogicProblem, interpretation:PartialInterpretation,
22182 var_Func, var_Par)
22183{
22184 find interpretation(problem,interpretation);
22185 find mustInstanceOfFunction_class(problem,interpretation,var_Func);
22186 find mustInstanceOfFunction_class(problem,interpretation,var_Par);
22187 // Func is exported
22188 // Par is exported
22189 find mustInstanceOfFunction_class(problem,interpretation,var_Func);
22190 find mustInRelationparent_reference_FunctionalElement(problem,interpretation,var_Func,var_virtual0);
22191 find mustInstanceOfFunction_class(problem,interpretation,var_virtual0);
22192 var_virtual0 == var_Par;
22193}
22194// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test fam model
22195private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_model(
22196 problem:LogicProblem, interpretation:PartialInterpretation,
22197 var_This, var_Target)
22198{
22199 find interpretation(problem,interpretation);
22200 find mustInstanceOfFunctionalElement_class(problem,interpretation,var_This);
22201 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Target);
22202 // This is exported
22203 // Target is exported
22204 find mustInstanceOfFunctionalElement_class(problem,interpretation,var_This);
22205 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Target);
22206}
22207private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_model(
22208 problem:LogicProblem, interpretation:PartialInterpretation,
22209 var_This, var_Target)
22210{
22211 find interpretation(problem,interpretation);
22212 find mayInstanceOfFunctionalElement_class(problem,interpretation,var_This);
22213 find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Target);
22214 // This is exported
22215 // Target is exported
22216 find mayInstanceOfFunctionalElement_class(problem,interpretation,var_This);
22217 find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Target);
22218}
22219private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_model(
22220 problem:LogicProblem, interpretation:PartialInterpretation,
22221 var_This, var_Target)
22222{
22223 find interpretation(problem,interpretation);
22224 find mustInstanceOfFunctionalElement_class(problem,interpretation,var_This);
22225 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Target);
22226 // This is exported
22227 // Target is exported
22228 find mustInstanceOfFunctionalElement_class(problem,interpretation,var_This);
22229 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Target);
22230}
22231
22232//////////
22233// 1.4 Containment Indexer
22234//////////
22235private pattern mustContains2(source: DefinedElement, target: DefinedElement) {
22236 find mustContains4(_,_,source,target);
22237}
22238
22239private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation,
22240 source: DefinedElement, target: DefinedElement)
22241 { find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,target); }or
22242
22243 { find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,source,target); }or
22244
22245 { find mustInRelationsubElements_reference_Function(problem,interpretation,source,target); }or
22246
22247 { find mustInRelationdata_reference_FunctionalInterface(problem,interpretation,source,target); }or
22248
22249 { find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,source,target); }or
22250
22251 { find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,target); }
22252
22253private pattern mustTransitiveContains(source,target) {
22254 find mustContains2+(source,target);
22255}
22256
22257//////////
22258// 2. Invalidation Indexers
22259//////////
22260// 2.1 Invalidated by WF Queries
22261//////////
22262pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_terminatorAndInformation(problem:LogicProblem, interpretation:PartialInterpretation,
22263 var_T, var_I)
22264{
22265 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_terminatorAndInformation(problem,interpretation,var_T,var_I);
22266}
22267
22268//////////
22269// 3. Unfinishedness Indexers
22270//////////
22271// 3.1 Unfinishedness Measured by Multiplicity
22272//////////
22273pattern unfinishedLowerMultiplicity_to_reference_InformationLink(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) {
22274 find interpretation(problem,interpretation);
22275 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
22276 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"to reference InformationLink");
22277 find mustInstanceOfInformationLink_class(problem,interpretation,object);
22278 numberOfExistingReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,object,_);
22279 check(numberOfExistingReferences < 1);
22280 missingMultiplicity == eval(1-numberOfExistingReferences);
22281}
22282
22283//////////
22284// 3.2 Unfinishedness Measured by WF Queries
22285//////////
22286pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_terminatorAndInformation(problem:LogicProblem, interpretation:PartialInterpretation,
22287 var_T, var_I)
22288{
22289 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_fam_terminatorAndInformation(problem,interpretation,var_T,var_I);
22290}
22291
22292//////////
22293// 4. Refinement Indexers
22294//////////
22295// 4.1 Object constructors
22296//////////
22297private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation)
22298{
22299 find interpretation(problem,interpretation);
22300 find mustInstanceOfFunction_class(problem,interpretation,root);
22301 find mustExist(problem, interpretation, root);
22302}or{
22303 find interpretation(problem,interpretation);
22304 find mustInstanceOfFAMTerminator_class(problem,interpretation,root);
22305 find mustExist(problem, interpretation, root);
22306}or{
22307 find interpretation(problem,interpretation);
22308 find mustInstanceOfFunctionalOutput_class(problem,interpretation,root);
22309 find mustExist(problem, interpretation, root);
22310}or{
22311 find interpretation(problem,interpretation);
22312 find mustInstanceOfFunctionalData_class(problem,interpretation,root);
22313 find mustExist(problem, interpretation, root);
22314}or{
22315 find interpretation(problem,interpretation);
22316 find mustInstanceOfFunctionalInput_class(problem,interpretation,root);
22317 find mustExist(problem, interpretation, root);
22318}or{
22319 find interpretation(problem,interpretation);
22320 find mustInstanceOfInformationLink_class(problem,interpretation,root);
22321 find mustExist(problem, interpretation, root);
22322}or{
22323 find interpretation(problem,interpretation);
22324 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,root);
22325 find mustExist(problem, interpretation, root);
22326}or{
22327 find interpretation(problem,interpretation);
22328 find mustInstanceOfFunctionalInterface_class(problem,interpretation,root);
22329 find mustExist(problem, interpretation, root);
22330}or{
22331 find interpretation(problem,interpretation);
22332 find mustInstanceOfFunctionalElement_class(problem,interpretation,root);
22333 find mustExist(problem, interpretation, root);
22334}or{
22335 find interpretation(problem,interpretation);
22336 find mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem,interpretation,root);
22337 find mustExist(problem, interpretation, root);
22338}or{
22339 find interpretation(problem,interpretation);
22340 find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,root);
22341 find mustExist(problem, interpretation, root);
22342}
22343pattern createObject_FunctionalInterface_class_by_interface_reference_FunctionalElement_with_element_reference_FunctionalInterface(
22344 problem:LogicProblem, interpretation:PartialInterpretation,
22345 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
22346 container:DefinedElement)
22347{
22348 find interpretation(problem,interpretation);
22349 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
22350 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class");
22351 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
22352 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"interface reference FunctionalElement");
22353 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
22354 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"element reference FunctionalInterface");
22355 find mustInstanceOfFunctionalElement_class(problem,interpretation,container);
22356 find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject);
22357 find mayInRelationinterface_reference_FunctionalElement(problem,interpretation,container,newObject);
22358 find mustExist(problem, interpretation, container);
22359 neg find mustExist(problem, interpretation, newObject);
22360}
22361pattern createObject_FunctionalInterface_class(
22362 problem:LogicProblem, interpretation:PartialInterpretation,
22363 typeInterpretation:PartialComplexTypeInterpretation)
22364{
22365 find interpretation(problem,interpretation);
22366 neg find hasElementInContainment(problem,interpretation);
22367 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
22368 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class");
22369 find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject);
22370 find mayExist(problem, interpretation, newObject);
22371 neg find mustExist(problem, interpretation, newObject);
22372}
22373pattern createObject_Function_class_by_rootElements_reference_FunctionalArchitectureModel(
22374 problem:LogicProblem, interpretation:PartialInterpretation,
22375 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
22376 container:DefinedElement)
22377{
22378 find interpretation(problem,interpretation);
22379 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
22380 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class");
22381 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
22382 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"rootElements reference FunctionalArchitectureModel");
22383 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,container);
22384 find mayInstanceOfFunction_class(problem,interpretation,newObject);
22385 find mayInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,container,newObject);
22386 find mustExist(problem, interpretation, container);
22387 neg find mustExist(problem, interpretation, newObject);
22388}
22389pattern createObject_Function_class_by_subElements_reference_Function_with_parent_reference_FunctionalElement(
22390 problem:LogicProblem, interpretation:PartialInterpretation,
22391 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
22392 container:DefinedElement)
22393{
22394 find interpretation(problem,interpretation);
22395 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
22396 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class");
22397 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
22398 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"subElements reference Function");
22399 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
22400 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FunctionalElement");
22401 find mustInstanceOfFunction_class(problem,interpretation,container);
22402 find mayInstanceOfFunction_class(problem,interpretation,newObject);
22403 find mayInRelationsubElements_reference_Function(problem,interpretation,container,newObject);
22404 find mustExist(problem, interpretation, container);
22405 neg find mustExist(problem, interpretation, newObject);
22406}
22407pattern createObject_Function_class(
22408 problem:LogicProblem, interpretation:PartialInterpretation,
22409 typeInterpretation:PartialComplexTypeInterpretation)
22410{
22411 find interpretation(problem,interpretation);
22412 neg find hasElementInContainment(problem,interpretation);
22413 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
22414 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class");
22415 find mayInstanceOfFunction_class(problem,interpretation,newObject);
22416 find mayExist(problem, interpretation, newObject);
22417 neg find mustExist(problem, interpretation, newObject);
22418}
22419pattern createObject_FAMTerminator_class_by_terminator_reference_FunctionalData_with_data_reference_FAMTerminator(
22420 problem:LogicProblem, interpretation:PartialInterpretation,
22421 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
22422 container:DefinedElement)
22423{
22424 find interpretation(problem,interpretation);
22425 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
22426 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class");
22427 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
22428 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"terminator reference FunctionalData");
22429 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
22430 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"data reference FAMTerminator");
22431 find mustInstanceOfFunctionalData_class(problem,interpretation,container);
22432 find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject);
22433 find mayInRelationterminator_reference_FunctionalData(problem,interpretation,container,newObject);
22434 find mustExist(problem, interpretation, container);
22435 neg find mustExist(problem, interpretation, newObject);
22436}
22437pattern createObject_FAMTerminator_class(
22438 problem:LogicProblem, interpretation:PartialInterpretation,
22439 typeInterpretation:PartialComplexTypeInterpretation)
22440{
22441 find interpretation(problem,interpretation);
22442 neg find hasElementInContainment(problem,interpretation);
22443 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
22444 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class");
22445 find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject);
22446 find mayExist(problem, interpretation, newObject);
22447 neg find mustExist(problem, interpretation, newObject);
22448}
22449pattern createObject_FunctionalArchitectureModel_class_UndefinedPart(
22450 problem:LogicProblem, interpretation:PartialInterpretation,
22451 typeInterpretation:PartialComplexTypeInterpretation)
22452{
22453 find interpretation(problem,interpretation);
22454 neg find hasElementInContainment(problem,interpretation);
22455 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
22456 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalArchitectureModel class UndefinedPart");
22457 find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,newObject);
22458 find mayExist(problem, interpretation, newObject);
22459 neg find mustExist(problem, interpretation, newObject);
22460}
22461pattern createObject_InformationLink_class_by_outgoingLinks_reference_FunctionalOutput_with_from_reference_InformationLink(
22462 problem:LogicProblem, interpretation:PartialInterpretation,
22463 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
22464 container:DefinedElement)
22465{
22466 find interpretation(problem,interpretation);
22467 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
22468 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class");
22469 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
22470 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingLinks reference FunctionalOutput");
22471 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
22472 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"from reference InformationLink");
22473 find mustInstanceOfFunctionalOutput_class(problem,interpretation,container);
22474 find mayInstanceOfInformationLink_class(problem,interpretation,newObject);
22475 find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,container,newObject);
22476 find mustExist(problem, interpretation, container);
22477 neg find mustExist(problem, interpretation, newObject);
22478}
22479pattern createObject_InformationLink_class(
22480 problem:LogicProblem, interpretation:PartialInterpretation,
22481 typeInterpretation:PartialComplexTypeInterpretation)
22482{
22483 find interpretation(problem,interpretation);
22484 neg find hasElementInContainment(problem,interpretation);
22485 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
22486 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class");
22487 find mayInstanceOfInformationLink_class(problem,interpretation,newObject);
22488 find mayExist(problem, interpretation, newObject);
22489 neg find mustExist(problem, interpretation, newObject);
22490}
22491pattern createObject_FunctionalOutput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData(
22492 problem:LogicProblem, interpretation:PartialInterpretation,
22493 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
22494 container:DefinedElement)
22495{
22496 find interpretation(problem,interpretation);
22497 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
22498 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class");
22499 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
22500 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface");
22501 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
22502 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData");
22503 find mustInstanceOfFunctionalInterface_class(problem,interpretation,container);
22504 find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject);
22505 find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject);
22506 find mustExist(problem, interpretation, container);
22507 neg find mustExist(problem, interpretation, newObject);
22508}
22509pattern createObject_FunctionalOutput_class(
22510 problem:LogicProblem, interpretation:PartialInterpretation,
22511 typeInterpretation:PartialComplexTypeInterpretation)
22512{
22513 find interpretation(problem,interpretation);
22514 neg find hasElementInContainment(problem,interpretation);
22515 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
22516 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class");
22517 find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject);
22518 find mayExist(problem, interpretation, newObject);
22519 neg find mustExist(problem, interpretation, newObject);
22520}
22521pattern createObject_FunctionalInput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData(
22522 problem:LogicProblem, interpretation:PartialInterpretation,
22523 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
22524 container:DefinedElement)
22525{
22526 find interpretation(problem,interpretation);
22527 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
22528 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class");
22529 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
22530 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface");
22531 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
22532 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData");
22533 find mustInstanceOfFunctionalInterface_class(problem,interpretation,container);
22534 find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject);
22535 find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject);
22536 find mustExist(problem, interpretation, container);
22537 neg find mustExist(problem, interpretation, newObject);
22538}
22539pattern createObject_FunctionalInput_class(
22540 problem:LogicProblem, interpretation:PartialInterpretation,
22541 typeInterpretation:PartialComplexTypeInterpretation)
22542{
22543 find interpretation(problem,interpretation);
22544 neg find hasElementInContainment(problem,interpretation);
22545 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
22546 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class");
22547 find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject);
22548 find mayExist(problem, interpretation, newObject);
22549 neg find mustExist(problem, interpretation, newObject);
22550}
22551
22552//////////
22553// 4.2 Type refinement
22554//////////
22555pattern refineTypeTo_FunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
22556 find interpretation(problem,interpretation);
22557 PartialInterpretation.newElements(interpretation,element);
22558 find mayInstanceOfFunctionalInterface_class(problem,interpretation,element);
22559 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
22560 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
22561 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
22562 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
22563 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
22564 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
22565}
22566pattern refineTypeTo_Function_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
22567 find interpretation(problem,interpretation);
22568 PartialInterpretation.newElements(interpretation,element);
22569 find mayInstanceOfFunction_class(problem,interpretation,element);
22570 neg find mustInstanceOfFunction_class(problem,interpretation,element);
22571 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
22572 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
22573 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
22574 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
22575 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
22576}
22577pattern refineTypeTo_FAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
22578 find interpretation(problem,interpretation);
22579 PartialInterpretation.newElements(interpretation,element);
22580 find mayInstanceOfFAMTerminator_class(problem,interpretation,element);
22581 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
22582 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
22583 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
22584 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
22585 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
22586 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
22587}
22588pattern refineTypeTo_FunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
22589 find interpretation(problem,interpretation);
22590 PartialInterpretation.newElements(interpretation,element);
22591 find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element);
22592 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
22593 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
22594 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
22595 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
22596 neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element);
22597 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
22598}
22599pattern refineTypeTo_InformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
22600 find interpretation(problem,interpretation);
22601 PartialInterpretation.newElements(interpretation,element);
22602 find mayInstanceOfInformationLink_class(problem,interpretation,element);
22603 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
22604 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
22605 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
22606 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
22607 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
22608 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
22609}
22610pattern refineTypeTo_FunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
22611 find interpretation(problem,interpretation);
22612 PartialInterpretation.newElements(interpretation,element);
22613 find mayInstanceOfFunctionalOutput_class(problem,interpretation,element);
22614 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
22615 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
22616 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
22617 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
22618 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
22619 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
22620 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
22621}
22622pattern refineTypeTo_FunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
22623 find interpretation(problem,interpretation);
22624 PartialInterpretation.newElements(interpretation,element);
22625 find mayInstanceOfFunctionalInput_class(problem,interpretation,element);
22626 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
22627 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
22628 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
22629 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
22630 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
22631 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
22632 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
22633}
22634
22635//////////
22636// 4.3 Relation refinement
22637//////////
22638pattern refineRelation_model_reference_FunctionalElement(
22639 problem:LogicProblem, interpretation:PartialInterpretation,
22640 relationIterpretation:PartialRelationInterpretation,
22641 from: DefinedElement, to: DefinedElement)
22642{
22643 find interpretation(problem,interpretation);
22644 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
22645 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement");
22646 find mustExist(problem, interpretation, from);
22647 find mustExist(problem, interpretation, to);
22648 find mustInstanceOfFunctionalElement_class(problem,interpretation,from);
22649 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,to);
22650 find mayInRelationmodel_reference_FunctionalElement(problem,interpretation,from,to);
22651 neg find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,from,to);
22652}
22653pattern refineRelation_IncomingLinks_reference_FunctionalInput_and_to_reference_InformationLink(
22654 problem:LogicProblem, interpretation:PartialInterpretation,
22655 relationIterpretation:PartialRelationInterpretation, oppositeInterpretation:PartialRelationInterpretation,
22656 from: DefinedElement, to: DefinedElement)
22657{
22658 find interpretation(problem,interpretation);
22659 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
22660 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"IncomingLinks reference FunctionalInput");
22661 PartialInterpretation.partialrelationinterpretation(interpretation,oppositeInterpretation);
22662 PartialRelationInterpretation.interpretationOf.name(oppositeInterpretation,"to reference InformationLink");
22663 find mustExist(problem, interpretation, from);
22664 find mustExist(problem, interpretation, to);
22665 find mustInstanceOfFunctionalInput_class(problem,interpretation,from);
22666 find mustInstanceOfInformationLink_class(problem,interpretation,to);
22667 find mayInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,from,to);
22668 neg find mustInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,from,to);
22669}
22670pattern refineRelation_type_attribute_Function(
22671 problem:LogicProblem, interpretation:PartialInterpretation,
22672 relationIterpretation:PartialRelationInterpretation,
22673 from: DefinedElement, to: DefinedElement)
22674{
22675 find interpretation(problem,interpretation);
22676 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
22677 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function");
22678 find mustExist(problem, interpretation, from);
22679 find mustExist(problem, interpretation, to);
22680 find mustInstanceOfFunction_class(problem,interpretation,from);
22681 find mustInstanceOfFunctionType_enum(problem,interpretation,to);
22682 find mayInRelationtype_attribute_Function(problem,interpretation,from,to);
22683 neg find mustInRelationtype_attribute_Function(problem,interpretation,from,to);
22684}
22685import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage"
22686import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem"
22687import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language"
22688
22689//////////
22690// 0. Util
22691//////////
22692private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) {
22693 PartialInterpretation.problem(interpretation,problem);
22694}
22695
22696/////////////////////////
22697// 0.1 Existence
22698/////////////////////////
22699private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
22700 find interpretation(problem,interpretation);
22701 LogicProblem.elements(problem,element);
22702} or {
22703 find interpretation(problem,interpretation);
22704 PartialInterpretation.newElements(interpretation,element);
22705}
22706
22707private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
22708 find mustExist(problem,interpretation,element);
22709} or {
22710 find interpretation(problem,interpretation);
22711 neg find elementCloseWorld(element);
22712 PartialInterpretation.openWorldElements(interpretation,element);
22713}
22714
22715private pattern elementCloseWorld(element:DefinedElement) {
22716 PartialInterpretation.openWorldElements(i,element);
22717 PartialInterpretation.maxNewElements(i,0);
22718} or {
22719 Scope.targetTypeInterpretation(scope,interpretation);
22720 PartialTypeInterpratation.elements(interpretation,element);
22721 Scope.maxNewElements(scope,0);
22722}
22723
22724////////////////////////
22725// 0.2 Equivalence
22726////////////////////////
22727pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) {
22728 find mayExist(problem,interpretation,a);
22729 find mayExist(problem,interpretation,b);
22730 a == b;
22731}
22732
22733////////////////////////
22734// 0.3 Required Patterns by TypeIndexer
22735////////////////////////
22736private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) {
22737 find interpretation(problem,interpretation);
22738 LogicProblem.types(problem,type);
22739 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
22740 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
22741}
22742
22743private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) {
22744 find interpretation(problem,interpretation);
22745 LogicProblem.types(problem,type);
22746 TypeDefinition.elements(type,element);
22747} or {
22748 find interpretation(problem,interpretation);
22749 find typeInterpretation(problem,interpretation,type,typeInterpretation);
22750 PartialComplexTypeInterpretation.elements(typeInterpretation,element);
22751}
22752
22753private pattern isPrimitive(element: PrimitiveElement) {
22754 PrimitiveElement(element);
22755}
22756
22757//////////
22758// 1. Problem-Specific Base Indexers
22759//////////
22760// 1.1 Type Indexers
22761//////////
22762// 1.1.1 primitive Type Indexers
22763//////////
22764
22765//////////
22766// 1.1.2 domain-specific Type Indexers
22767//////////
22768/**
22769 * An element must be an instance of type "FunctionalElement class".
22770 */
22771private pattern mustInstanceOfFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
22772 Type.name(type,"FunctionalElement class");
22773 find directInstanceOf(problem,interpretation,element,type);
22774}
22775private pattern scopeDisallowsNewFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation) {
22776 find interpretation(problem,interpretation);
22777 PartialInterpretation.scopes(interpretation,scope);
22778 Scope.targetTypeInterpretation(scope,typeInterpretation);
22779 Scope.maxNewElements(scope,0);
22780 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
22781 Type.name(type,"FunctionalElement class");
22782}
22783
22784/**
22785 * An element may be an instance of type "FunctionalElement class".
22786 */
22787private pattern mayInstanceOfFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
22788{
22789 find interpretation(problem,interpretation);
22790 PartialInterpretation.newElements(interpretation,element);
22791 neg find mustInstanceOfFunction_class(problem,interpretation,element);
22792 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
22793 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
22794 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
22795 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
22796 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
22797 neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation);
22798 neg find isPrimitive(element);
22799} or {
22800 find interpretation(problem,interpretation);
22801 PartialInterpretation.openWorldElements(interpretation,element);
22802 neg find mustInstanceOfFunction_class(problem,interpretation,element);
22803 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
22804 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
22805 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
22806 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
22807 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
22808 neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation);
22809 neg find isPrimitive(element);
22810} or
22811{ find mustInstanceOfFunctionalElement_class(problem,interpretation,element); }
22812/**
22813 * An element must be an instance of type "FunctionalArchitectureModel class".
22814 */
22815private pattern mustInstanceOfFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
22816 Type.name(type,"FunctionalArchitectureModel class");
22817 find directInstanceOf(problem,interpretation,element,type);
22818}
22819private pattern scopeDisallowsNewFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation) {
22820 find interpretation(problem,interpretation);
22821 PartialInterpretation.scopes(interpretation,scope);
22822 Scope.targetTypeInterpretation(scope,typeInterpretation);
22823 Scope.maxNewElements(scope,0);
22824 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
22825 Type.name(type,"FunctionalArchitectureModel class");
22826}
22827
22828/**
22829 * An element may be an instance of type "FunctionalArchitectureModel class".
22830 */
22831private pattern mayInstanceOfFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
22832{
22833 find interpretation(problem,interpretation);
22834 PartialInterpretation.newElements(interpretation,element);
22835 neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element);
22836 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
22837 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
22838 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
22839 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
22840 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
22841 neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation);
22842 neg find isPrimitive(element);
22843} or {
22844 find interpretation(problem,interpretation);
22845 PartialInterpretation.openWorldElements(interpretation,element);
22846 neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element);
22847 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
22848 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
22849 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
22850 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
22851 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
22852 neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation);
22853 neg find isPrimitive(element);
22854} or
22855{ find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); }
22856/**
22857 * An element must be an instance of type "Function class".
22858 */
22859private pattern mustInstanceOfFunction_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
22860 Type.name(type,"Function class");
22861 find directInstanceOf(problem,interpretation,element,type);
22862}
22863private pattern scopeDisallowsNewFunction_class(problem:LogicProblem, interpretation:PartialInterpretation) {
22864 find interpretation(problem,interpretation);
22865 PartialInterpretation.scopes(interpretation,scope);
22866 Scope.targetTypeInterpretation(scope,typeInterpretation);
22867 Scope.maxNewElements(scope,0);
22868 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
22869 Type.name(type,"Function class");
22870}
22871
22872/**
22873 * An element may be an instance of type "Function class".
22874 */
22875private pattern mayInstanceOfFunction_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
22876{
22877 find interpretation(problem,interpretation);
22878 PartialInterpretation.newElements(interpretation,element);
22879 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
22880 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
22881 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
22882 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
22883 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
22884 neg find scopeDisallowsNewFunction_class(problem, interpretation);
22885 neg find isPrimitive(element);
22886} or {
22887 find interpretation(problem,interpretation);
22888 PartialInterpretation.openWorldElements(interpretation,element);
22889 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
22890 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
22891 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
22892 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
22893 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
22894 neg find scopeDisallowsNewFunction_class(problem, interpretation);
22895 neg find isPrimitive(element);
22896} or
22897{ find mustInstanceOfFunction_class(problem,interpretation,element); }
22898/**
22899 * An element must be an instance of type "FAMTerminator class".
22900 */
22901private pattern mustInstanceOfFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
22902 Type.name(type,"FAMTerminator class");
22903 find directInstanceOf(problem,interpretation,element,type);
22904}
22905private pattern scopeDisallowsNewFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation) {
22906 find interpretation(problem,interpretation);
22907 PartialInterpretation.scopes(interpretation,scope);
22908 Scope.targetTypeInterpretation(scope,typeInterpretation);
22909 Scope.maxNewElements(scope,0);
22910 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
22911 Type.name(type,"FAMTerminator class");
22912}
22913
22914/**
22915 * An element may be an instance of type "FAMTerminator class".
22916 */
22917private pattern mayInstanceOfFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
22918{
22919 find interpretation(problem,interpretation);
22920 PartialInterpretation.newElements(interpretation,element);
22921 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
22922 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
22923 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
22924 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
22925 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
22926 neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation);
22927 neg find isPrimitive(element);
22928} or {
22929 find interpretation(problem,interpretation);
22930 PartialInterpretation.openWorldElements(interpretation,element);
22931 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
22932 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
22933 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
22934 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
22935 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
22936 neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation);
22937 neg find isPrimitive(element);
22938} or
22939{ find mustInstanceOfFAMTerminator_class(problem,interpretation,element); }
22940/**
22941 * An element must be an instance of type "InformationLink class".
22942 */
22943private pattern mustInstanceOfInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
22944 Type.name(type,"InformationLink class");
22945 find directInstanceOf(problem,interpretation,element,type);
22946}
22947private pattern scopeDisallowsNewInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation) {
22948 find interpretation(problem,interpretation);
22949 PartialInterpretation.scopes(interpretation,scope);
22950 Scope.targetTypeInterpretation(scope,typeInterpretation);
22951 Scope.maxNewElements(scope,0);
22952 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
22953 Type.name(type,"InformationLink class");
22954}
22955
22956/**
22957 * An element may be an instance of type "InformationLink class".
22958 */
22959private pattern mayInstanceOfInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
22960{
22961 find interpretation(problem,interpretation);
22962 PartialInterpretation.newElements(interpretation,element);
22963 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
22964 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
22965 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
22966 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
22967 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
22968 neg find scopeDisallowsNewInformationLink_class(problem, interpretation);
22969 neg find isPrimitive(element);
22970} or {
22971 find interpretation(problem,interpretation);
22972 PartialInterpretation.openWorldElements(interpretation,element);
22973 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
22974 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
22975 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
22976 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
22977 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
22978 neg find scopeDisallowsNewInformationLink_class(problem, interpretation);
22979 neg find isPrimitive(element);
22980} or
22981{ find mustInstanceOfInformationLink_class(problem,interpretation,element); }
22982/**
22983 * An element must be an instance of type "FunctionalInterface class".
22984 */
22985private pattern mustInstanceOfFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
22986 Type.name(type,"FunctionalInterface class");
22987 find directInstanceOf(problem,interpretation,element,type);
22988}
22989private pattern scopeDisallowsNewFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation) {
22990 find interpretation(problem,interpretation);
22991 PartialInterpretation.scopes(interpretation,scope);
22992 Scope.targetTypeInterpretation(scope,typeInterpretation);
22993 Scope.maxNewElements(scope,0);
22994 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
22995 Type.name(type,"FunctionalInterface class");
22996}
22997
22998/**
22999 * An element may be an instance of type "FunctionalInterface class".
23000 */
23001private pattern mayInstanceOfFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
23002{
23003 find interpretation(problem,interpretation);
23004 PartialInterpretation.newElements(interpretation,element);
23005 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
23006 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
23007 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
23008 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
23009 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
23010 neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation);
23011 neg find isPrimitive(element);
23012} or {
23013 find interpretation(problem,interpretation);
23014 PartialInterpretation.openWorldElements(interpretation,element);
23015 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
23016 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
23017 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
23018 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
23019 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
23020 neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation);
23021 neg find isPrimitive(element);
23022} or
23023{ find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); }
23024/**
23025 * An element must be an instance of type "FunctionalInput class".
23026 */
23027private pattern mustInstanceOfFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
23028 Type.name(type,"FunctionalInput class");
23029 find directInstanceOf(problem,interpretation,element,type);
23030}
23031private pattern scopeDisallowsNewFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation) {
23032 find interpretation(problem,interpretation);
23033 PartialInterpretation.scopes(interpretation,scope);
23034 Scope.targetTypeInterpretation(scope,typeInterpretation);
23035 Scope.maxNewElements(scope,0);
23036 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
23037 Type.name(type,"FunctionalInput class");
23038}
23039
23040/**
23041 * An element may be an instance of type "FunctionalInput class".
23042 */
23043private pattern mayInstanceOfFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
23044{
23045 find interpretation(problem,interpretation);
23046 PartialInterpretation.newElements(interpretation,element);
23047 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
23048 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
23049 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
23050 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
23051 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
23052 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
23053 neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation);
23054 neg find isPrimitive(element);
23055} or {
23056 find interpretation(problem,interpretation);
23057 PartialInterpretation.openWorldElements(interpretation,element);
23058 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
23059 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
23060 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
23061 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
23062 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
23063 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
23064 neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation);
23065 neg find isPrimitive(element);
23066} or
23067{ find mustInstanceOfFunctionalInput_class(problem,interpretation,element); }
23068/**
23069 * An element must be an instance of type "FunctionalOutput class".
23070 */
23071private pattern mustInstanceOfFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
23072 Type.name(type,"FunctionalOutput class");
23073 find directInstanceOf(problem,interpretation,element,type);
23074}
23075private pattern scopeDisallowsNewFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation) {
23076 find interpretation(problem,interpretation);
23077 PartialInterpretation.scopes(interpretation,scope);
23078 Scope.targetTypeInterpretation(scope,typeInterpretation);
23079 Scope.maxNewElements(scope,0);
23080 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
23081 Type.name(type,"FunctionalOutput class");
23082}
23083
23084/**
23085 * An element may be an instance of type "FunctionalOutput class".
23086 */
23087private pattern mayInstanceOfFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
23088{
23089 find interpretation(problem,interpretation);
23090 PartialInterpretation.newElements(interpretation,element);
23091 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
23092 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
23093 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
23094 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
23095 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
23096 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
23097 neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation);
23098 neg find isPrimitive(element);
23099} or {
23100 find interpretation(problem,interpretation);
23101 PartialInterpretation.openWorldElements(interpretation,element);
23102 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
23103 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
23104 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
23105 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
23106 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
23107 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
23108 neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation);
23109 neg find isPrimitive(element);
23110} or
23111{ find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); }
23112/**
23113 * An element must be an instance of type "FunctionalData class".
23114 */
23115private pattern mustInstanceOfFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
23116 Type.name(type,"FunctionalData class");
23117 find directInstanceOf(problem,interpretation,element,type);
23118}
23119private pattern scopeDisallowsNewFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation) {
23120 find interpretation(problem,interpretation);
23121 PartialInterpretation.scopes(interpretation,scope);
23122 Scope.targetTypeInterpretation(scope,typeInterpretation);
23123 Scope.maxNewElements(scope,0);
23124 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
23125 Type.name(type,"FunctionalData class");
23126}
23127
23128/**
23129 * An element may be an instance of type "FunctionalData class".
23130 */
23131private pattern mayInstanceOfFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
23132{
23133 find interpretation(problem,interpretation);
23134 PartialInterpretation.newElements(interpretation,element);
23135 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
23136 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
23137 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
23138 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
23139 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
23140 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
23141 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
23142 neg find scopeDisallowsNewFunctionalData_class(problem, interpretation);
23143 neg find isPrimitive(element);
23144} or {
23145 find interpretation(problem,interpretation);
23146 PartialInterpretation.openWorldElements(interpretation,element);
23147 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
23148 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
23149 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
23150 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
23151 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
23152 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
23153 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
23154 neg find scopeDisallowsNewFunctionalData_class(problem, interpretation);
23155 neg find isPrimitive(element);
23156} or
23157{ find mustInstanceOfFunctionalData_class(problem,interpretation,element); }
23158/**
23159 * An element must be an instance of type "FunctionType enum".
23160 */
23161private pattern mustInstanceOfFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
23162 Type.name(type,"FunctionType enum");
23163 find directInstanceOf(problem,interpretation,element,type);
23164}
23165private pattern scopeDisallowsNewFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation) {
23166 find interpretation(problem,interpretation);
23167 PartialInterpretation.scopes(interpretation,scope);
23168 Scope.targetTypeInterpretation(scope,typeInterpretation);
23169 Scope.maxNewElements(scope,0);
23170 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
23171 Type.name(type,"FunctionType enum");
23172}
23173
23174/**
23175 * An element may be an instance of type "FunctionType enum".
23176 */
23177private pattern mayInstanceOfFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
23178{ find mustInstanceOfFunctionType_enum(problem,interpretation,element); }
23179/**
23180 * An element must be an instance of type "FunctionalArchitectureModel class DefinedPart".
23181 */
23182private pattern mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
23183 Type.name(type,"FunctionalArchitectureModel class DefinedPart");
23184 find directInstanceOf(problem,interpretation,element,type);
23185}
23186private pattern scopeDisallowsNewFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
23187 find interpretation(problem,interpretation);
23188 PartialInterpretation.scopes(interpretation,scope);
23189 Scope.targetTypeInterpretation(scope,typeInterpretation);
23190 Scope.maxNewElements(scope,0);
23191 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
23192 Type.name(type,"FunctionalArchitectureModel class DefinedPart");
23193}
23194
23195/**
23196 * An element may be an instance of type "FunctionalArchitectureModel class DefinedPart".
23197 */
23198private pattern mayInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
23199{ find mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem,interpretation,element); }
23200/**
23201 * An element must be an instance of type "FunctionalArchitectureModel class UndefinedPart".
23202 */
23203private pattern mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
23204 Type.name(type,"FunctionalArchitectureModel class UndefinedPart");
23205 find directInstanceOf(problem,interpretation,element,type);
23206}
23207private pattern scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
23208 find interpretation(problem,interpretation);
23209 PartialInterpretation.scopes(interpretation,scope);
23210 Scope.targetTypeInterpretation(scope,typeInterpretation);
23211 Scope.maxNewElements(scope,0);
23212 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
23213 Type.name(type,"FunctionalArchitectureModel class UndefinedPart");
23214}
23215
23216/**
23217 * An element may be an instance of type "FunctionalArchitectureModel class UndefinedPart".
23218 */
23219private pattern mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
23220{
23221 find interpretation(problem,interpretation);
23222 PartialInterpretation.newElements(interpretation,element);
23223 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
23224 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
23225 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
23226 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
23227 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
23228 neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation);
23229 neg find isPrimitive(element);
23230} or {
23231 find interpretation(problem,interpretation);
23232 PartialInterpretation.openWorldElements(interpretation,element);
23233 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
23234 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
23235 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
23236 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
23237 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
23238 neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation);
23239 neg find isPrimitive(element);
23240} or
23241{ find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); }
23242
23243//////////
23244// 1.2 Relation Declaration Indexers
23245//////////
23246/**
23247 * Matcher for detecting tuples t where []interface reference FunctionalElement(source,target)
23248 */
23249private pattern mustInRelationinterface_reference_FunctionalElement(
23250 problem:LogicProblem, interpretation:PartialInterpretation,
23251 source: DefinedElement, target:DefinedElement)
23252{
23253 find interpretation(problem,interpretation);
23254 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
23255 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface reference FunctionalElement");
23256 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
23257 BinaryElementRelationLink.param1(link,source);
23258 BinaryElementRelationLink.param2(link,target);
23259}
23260/**
23261 * Matcher for detecting tuples t where <>interface reference FunctionalElement(source,target)
23262 */
23263private pattern mayInRelationinterface_reference_FunctionalElement(
23264 problem:LogicProblem, interpretation:PartialInterpretation,
23265 source: DefinedElement, target:DefinedElement)
23266{
23267 find interpretation(problem,interpretation);
23268 // The two endpoint of the link have to exist
23269 find mayExist(problem, interpretation, source);
23270 find mayExist(problem, interpretation, target);
23271 // Type consistency
23272 find mayInstanceOfFunctionalElement_class(problem,interpretation,source);
23273 find mayInstanceOfFunctionalInterface_class(problem,interpretation,target);
23274 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
23275 // the upper bound of the multiplicity should be considered.
23276 numberOfExistingReferences == count find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,_);
23277 check(numberOfExistingReferences < 1);
23278 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
23279 // the upper bound of the opposite reference multiplicity should be considered.
23280 numberOfExistingOppositeReferences == count find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,target,_);
23281 check(numberOfExistingOppositeReferences < 1);
23282 // The reference is containment, then a new reference cannot be create if:
23283 // 1. Multiple parents
23284 neg find mustContains4(problem,interpretation,_,target);
23285 // 2. Circle in the containment hierarchy
23286 neg find mustTransitiveContains(source,target);
23287} or {
23288 find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,target);
23289}
23290/**
23291 * Matcher for detecting tuples t where []model reference FunctionalElement(source,target)
23292 */
23293 private pattern mustInRelationmodel_reference_FunctionalElement(
23294 problem:LogicProblem, interpretation:PartialInterpretation,
23295 source: DefinedElement, target:DefinedElement)
23296 {
23297 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_xyz_model(problem,interpretation,source,target);
23298 }
23299/**
23300 * Matcher for detecting tuples t where []model reference FunctionalElement(source,target)
23301 */
23302 private pattern mayInRelationmodel_reference_FunctionalElement(
23303 problem:LogicProblem, interpretation:PartialInterpretation,
23304 source: DefinedElement, target:DefinedElement)
23305 {
23306 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_xyz_model(problem,interpretation,source,target);
23307 }
23308/**
23309 * Matcher for detecting tuples t where []parent reference FunctionalElement(source,target)
23310 */
23311private pattern mustInRelationparent_reference_FunctionalElement(
23312 problem:LogicProblem, interpretation:PartialInterpretation,
23313 source: DefinedElement, target:DefinedElement)
23314{
23315 find interpretation(problem,interpretation);
23316 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
23317 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"parent reference FunctionalElement");
23318 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
23319 BinaryElementRelationLink.param1(link,source);
23320 BinaryElementRelationLink.param2(link,target);
23321}
23322/**
23323 * Matcher for detecting tuples t where <>parent reference FunctionalElement(source,target)
23324 */
23325private pattern mayInRelationparent_reference_FunctionalElement(
23326 problem:LogicProblem, interpretation:PartialInterpretation,
23327 source: DefinedElement, target:DefinedElement)
23328{
23329 find interpretation(problem,interpretation);
23330 // The two endpoint of the link have to exist
23331 find mayExist(problem, interpretation, source);
23332 find mayExist(problem, interpretation, target);
23333 // Type consistency
23334 find mayInstanceOfFunctionalElement_class(problem,interpretation,source);
23335 find mayInstanceOfFunction_class(problem,interpretation,target);
23336 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
23337 // the upper bound of the multiplicity should be considered.
23338 numberOfExistingReferences == count find mustInRelationparent_reference_FunctionalElement(problem,interpretation,source,_);
23339 check(numberOfExistingReferences < 1);
23340 // The eOpposite of the reference is containment, then a referene cannot be created if
23341 // 1. Multiple parents
23342 neg find mustContains4(problem,interpretation,source,_);
23343 // 2. Circle in the containment hierarchy
23344 neg find mustTransitiveContains(source,target);
23345} or {
23346 find mustInRelationparent_reference_FunctionalElement(problem,interpretation,source,target);
23347}
23348/**
23349 * Matcher for detecting tuples t where []rootElements reference FunctionalArchitectureModel(source,target)
23350 */
23351private pattern mustInRelationrootElements_reference_FunctionalArchitectureModel(
23352 problem:LogicProblem, interpretation:PartialInterpretation,
23353 source: DefinedElement, target:DefinedElement)
23354{
23355 find interpretation(problem,interpretation);
23356 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
23357 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"rootElements reference FunctionalArchitectureModel");
23358 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
23359 BinaryElementRelationLink.param1(link,source);
23360 BinaryElementRelationLink.param2(link,target);
23361}
23362/**
23363 * Matcher for detecting tuples t where <>rootElements reference FunctionalArchitectureModel(source,target)
23364 */
23365private pattern mayInRelationrootElements_reference_FunctionalArchitectureModel(
23366 problem:LogicProblem, interpretation:PartialInterpretation,
23367 source: DefinedElement, target:DefinedElement)
23368{
23369 find interpretation(problem,interpretation);
23370 // The two endpoint of the link have to exist
23371 find mayExist(problem, interpretation, source);
23372 find mayExist(problem, interpretation, target);
23373 // Type consistency
23374 find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,source);
23375 find mayInstanceOfFunctionalElement_class(problem,interpretation,target);
23376 // The reference is containment, then a new reference cannot be create if:
23377 // 1. Multiple parents
23378 neg find mustContains4(problem,interpretation,_,target);
23379 // 2. Circle in the containment hierarchy
23380 neg find mustTransitiveContains(source,target);
23381} or {
23382 find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,source,target);
23383}
23384/**
23385 * Matcher for detecting tuples t where []subElements reference Function(source,target)
23386 */
23387private pattern mustInRelationsubElements_reference_Function(
23388 problem:LogicProblem, interpretation:PartialInterpretation,
23389 source: DefinedElement, target:DefinedElement)
23390{
23391 find interpretation(problem,interpretation);
23392 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
23393 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"subElements reference Function");
23394 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
23395 BinaryElementRelationLink.param1(link,source);
23396 BinaryElementRelationLink.param2(link,target);
23397}
23398/**
23399 * Matcher for detecting tuples t where <>subElements reference Function(source,target)
23400 */
23401private pattern mayInRelationsubElements_reference_Function(
23402 problem:LogicProblem, interpretation:PartialInterpretation,
23403 source: DefinedElement, target:DefinedElement)
23404{
23405 find interpretation(problem,interpretation);
23406 // The two endpoint of the link have to exist
23407 find mayExist(problem, interpretation, source);
23408 find mayExist(problem, interpretation, target);
23409 // Type consistency
23410 find mayInstanceOfFunction_class(problem,interpretation,source);
23411 find mayInstanceOfFunctionalElement_class(problem,interpretation,target);
23412 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
23413 // the upper bound of the opposite reference multiplicity should be considered.
23414 numberOfExistingOppositeReferences == count find mustInRelationparent_reference_FunctionalElement(problem,interpretation,target,_);
23415 check(numberOfExistingOppositeReferences < 1);
23416 // The reference is containment, then a new reference cannot be create if:
23417 // 1. Multiple parents
23418 neg find mustContains4(problem,interpretation,_,target);
23419 // 2. Circle in the containment hierarchy
23420 neg find mustTransitiveContains(source,target);
23421} or {
23422 find mustInRelationsubElements_reference_Function(problem,interpretation,source,target);
23423}
23424/**
23425 * Matcher for detecting tuples t where []data reference FAMTerminator(source,target)
23426 */
23427private pattern mustInRelationdata_reference_FAMTerminator(
23428 problem:LogicProblem, interpretation:PartialInterpretation,
23429 source: DefinedElement, target:DefinedElement)
23430{
23431 find interpretation(problem,interpretation);
23432 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
23433 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"data reference FAMTerminator");
23434 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
23435 BinaryElementRelationLink.param1(link,source);
23436 BinaryElementRelationLink.param2(link,target);
23437}
23438/**
23439 * Matcher for detecting tuples t where <>data reference FAMTerminator(source,target)
23440 */
23441private pattern mayInRelationdata_reference_FAMTerminator(
23442 problem:LogicProblem, interpretation:PartialInterpretation,
23443 source: DefinedElement, target:DefinedElement)
23444{
23445 find interpretation(problem,interpretation);
23446 // The two endpoint of the link have to exist
23447 find mayExist(problem, interpretation, source);
23448 find mayExist(problem, interpretation, target);
23449 // Type consistency
23450 find mayInstanceOfFAMTerminator_class(problem,interpretation,source);
23451 find mayInstanceOfFunctionalData_class(problem,interpretation,target);
23452 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
23453 // the upper bound of the multiplicity should be considered.
23454 numberOfExistingReferences == count find mustInRelationdata_reference_FAMTerminator(problem,interpretation,source,_);
23455 check(numberOfExistingReferences < 1);
23456 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
23457 // the upper bound of the opposite reference multiplicity should be considered.
23458 numberOfExistingOppositeReferences == count find mustInRelationterminator_reference_FunctionalData(problem,interpretation,target,_);
23459 check(numberOfExistingOppositeReferences < 1);
23460 // The eOpposite of the reference is containment, then a referene cannot be created if
23461 // 1. Multiple parents
23462 neg find mustContains4(problem,interpretation,source,_);
23463 // 2. Circle in the containment hierarchy
23464 neg find mustTransitiveContains(source,target);
23465} or {
23466 find mustInRelationdata_reference_FAMTerminator(problem,interpretation,source,target);
23467}
23468/**
23469 * Matcher for detecting tuples t where []from reference InformationLink(source,target)
23470 */
23471private pattern mustInRelationfrom_reference_InformationLink(
23472 problem:LogicProblem, interpretation:PartialInterpretation,
23473 source: DefinedElement, target:DefinedElement)
23474{
23475 find interpretation(problem,interpretation);
23476 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
23477 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"from reference InformationLink");
23478 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
23479 BinaryElementRelationLink.param1(link,source);
23480 BinaryElementRelationLink.param2(link,target);
23481}
23482/**
23483 * Matcher for detecting tuples t where <>from reference InformationLink(source,target)
23484 */
23485private pattern mayInRelationfrom_reference_InformationLink(
23486 problem:LogicProblem, interpretation:PartialInterpretation,
23487 source: DefinedElement, target:DefinedElement)
23488{
23489 find interpretation(problem,interpretation);
23490 // The two endpoint of the link have to exist
23491 find mayExist(problem, interpretation, source);
23492 find mayExist(problem, interpretation, target);
23493 // Type consistency
23494 find mayInstanceOfInformationLink_class(problem,interpretation,source);
23495 find mayInstanceOfFunctionalOutput_class(problem,interpretation,target);
23496 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
23497 // the upper bound of the multiplicity should be considered.
23498 numberOfExistingReferences == count find mustInRelationfrom_reference_InformationLink(problem,interpretation,source,_);
23499 check(numberOfExistingReferences < 1);
23500 // The eOpposite of the reference is containment, then a referene cannot be created if
23501 // 1. Multiple parents
23502 neg find mustContains4(problem,interpretation,source,_);
23503 // 2. Circle in the containment hierarchy
23504 neg find mustTransitiveContains(source,target);
23505} or {
23506 find mustInRelationfrom_reference_InformationLink(problem,interpretation,source,target);
23507}
23508/**
23509 * Matcher for detecting tuples t where []to reference InformationLink(source,target)
23510 */
23511private pattern mustInRelationto_reference_InformationLink(
23512 problem:LogicProblem, interpretation:PartialInterpretation,
23513 source: DefinedElement, target:DefinedElement)
23514{
23515 find interpretation(problem,interpretation);
23516 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
23517 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"to reference InformationLink");
23518 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
23519 BinaryElementRelationLink.param1(link,source);
23520 BinaryElementRelationLink.param2(link,target);
23521}
23522/**
23523 * Matcher for detecting tuples t where <>to reference InformationLink(source,target)
23524 */
23525private pattern mayInRelationto_reference_InformationLink(
23526 problem:LogicProblem, interpretation:PartialInterpretation,
23527 source: DefinedElement, target:DefinedElement)
23528{
23529 find interpretation(problem,interpretation);
23530 // The two endpoint of the link have to exist
23531 find mayExist(problem, interpretation, source);
23532 find mayExist(problem, interpretation, target);
23533 // Type consistency
23534 find mayInstanceOfInformationLink_class(problem,interpretation,source);
23535 find mayInstanceOfFunctionalInput_class(problem,interpretation,target);
23536 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
23537 // the upper bound of the multiplicity should be considered.
23538 numberOfExistingReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,source,_);
23539 check(numberOfExistingReferences < 1);
23540} or {
23541 find mustInRelationto_reference_InformationLink(problem,interpretation,source,target);
23542}
23543/**
23544 * Matcher for detecting tuples t where []data reference FunctionalInterface(source,target)
23545 */
23546private pattern mustInRelationdata_reference_FunctionalInterface(
23547 problem:LogicProblem, interpretation:PartialInterpretation,
23548 source: DefinedElement, target:DefinedElement)
23549{
23550 find interpretation(problem,interpretation);
23551 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
23552 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"data reference FunctionalInterface");
23553 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
23554 BinaryElementRelationLink.param1(link,source);
23555 BinaryElementRelationLink.param2(link,target);
23556}
23557/**
23558 * Matcher for detecting tuples t where <>data reference FunctionalInterface(source,target)
23559 */
23560private pattern mayInRelationdata_reference_FunctionalInterface(
23561 problem:LogicProblem, interpretation:PartialInterpretation,
23562 source: DefinedElement, target:DefinedElement)
23563{
23564 find interpretation(problem,interpretation);
23565 // The two endpoint of the link have to exist
23566 find mayExist(problem, interpretation, source);
23567 find mayExist(problem, interpretation, target);
23568 // Type consistency
23569 find mayInstanceOfFunctionalInterface_class(problem,interpretation,source);
23570 find mayInstanceOfFunctionalData_class(problem,interpretation,target);
23571 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
23572 // the upper bound of the opposite reference multiplicity should be considered.
23573 numberOfExistingOppositeReferences == count find mustInRelationinterface_reference_FunctionalData(problem,interpretation,target,_);
23574 check(numberOfExistingOppositeReferences < 1);
23575 // The reference is containment, then a new reference cannot be create if:
23576 // 1. Multiple parents
23577 neg find mustContains4(problem,interpretation,_,target);
23578 // 2. Circle in the containment hierarchy
23579 neg find mustTransitiveContains(source,target);
23580} or {
23581 find mustInRelationdata_reference_FunctionalInterface(problem,interpretation,source,target);
23582}
23583/**
23584 * Matcher for detecting tuples t where []element reference FunctionalInterface(source,target)
23585 */
23586private pattern mustInRelationelement_reference_FunctionalInterface(
23587 problem:LogicProblem, interpretation:PartialInterpretation,
23588 source: DefinedElement, target:DefinedElement)
23589{
23590 find interpretation(problem,interpretation);
23591 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
23592 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"element reference FunctionalInterface");
23593 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
23594 BinaryElementRelationLink.param1(link,source);
23595 BinaryElementRelationLink.param2(link,target);
23596}
23597/**
23598 * Matcher for detecting tuples t where <>element reference FunctionalInterface(source,target)
23599 */
23600private pattern mayInRelationelement_reference_FunctionalInterface(
23601 problem:LogicProblem, interpretation:PartialInterpretation,
23602 source: DefinedElement, target:DefinedElement)
23603{
23604 find interpretation(problem,interpretation);
23605 // The two endpoint of the link have to exist
23606 find mayExist(problem, interpretation, source);
23607 find mayExist(problem, interpretation, target);
23608 // Type consistency
23609 find mayInstanceOfFunctionalInterface_class(problem,interpretation,source);
23610 find mayInstanceOfFunctionalElement_class(problem,interpretation,target);
23611 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
23612 // the upper bound of the multiplicity should be considered.
23613 numberOfExistingReferences == count find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,source,_);
23614 check(numberOfExistingReferences < 1);
23615 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
23616 // the upper bound of the opposite reference multiplicity should be considered.
23617 numberOfExistingOppositeReferences == count find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,target,_);
23618 check(numberOfExistingOppositeReferences < 1);
23619 // The eOpposite of the reference is containment, then a referene cannot be created if
23620 // 1. Multiple parents
23621 neg find mustContains4(problem,interpretation,source,_);
23622 // 2. Circle in the containment hierarchy
23623 neg find mustTransitiveContains(source,target);
23624} or {
23625 find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,source,target);
23626}
23627/**
23628 * Matcher for detecting tuples t where []IncomingLinks reference FunctionalInput(source,target)
23629 */
23630private pattern mustInRelationIncomingLinks_reference_FunctionalInput(
23631 problem:LogicProblem, interpretation:PartialInterpretation,
23632 source: DefinedElement, target:DefinedElement)
23633{
23634 find interpretation(problem,interpretation);
23635 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
23636 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"IncomingLinks reference FunctionalInput");
23637 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
23638 BinaryElementRelationLink.param1(link,source);
23639 BinaryElementRelationLink.param2(link,target);
23640}
23641/**
23642 * Matcher for detecting tuples t where <>IncomingLinks reference FunctionalInput(source,target)
23643 */
23644private pattern mayInRelationIncomingLinks_reference_FunctionalInput(
23645 problem:LogicProblem, interpretation:PartialInterpretation,
23646 source: DefinedElement, target:DefinedElement)
23647{
23648 find interpretation(problem,interpretation);
23649 // The two endpoint of the link have to exist
23650 find mayExist(problem, interpretation, source);
23651 find mayExist(problem, interpretation, target);
23652 // Type consistency
23653 find mayInstanceOfFunctionalInput_class(problem,interpretation,source);
23654 find mayInstanceOfInformationLink_class(problem,interpretation,target);
23655 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
23656 // the upper bound of the opposite reference multiplicity should be considered.
23657 numberOfExistingOppositeReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,target,_);
23658 check(numberOfExistingOppositeReferences < 1);
23659} or {
23660 find mustInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,source,target);
23661}
23662/**
23663 * Matcher for detecting tuples t where []outgoingLinks reference FunctionalOutput(source,target)
23664 */
23665private pattern mustInRelationoutgoingLinks_reference_FunctionalOutput(
23666 problem:LogicProblem, interpretation:PartialInterpretation,
23667 source: DefinedElement, target:DefinedElement)
23668{
23669 find interpretation(problem,interpretation);
23670 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
23671 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"outgoingLinks reference FunctionalOutput");
23672 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
23673 BinaryElementRelationLink.param1(link,source);
23674 BinaryElementRelationLink.param2(link,target);
23675}
23676/**
23677 * Matcher for detecting tuples t where <>outgoingLinks reference FunctionalOutput(source,target)
23678 */
23679private pattern mayInRelationoutgoingLinks_reference_FunctionalOutput(
23680 problem:LogicProblem, interpretation:PartialInterpretation,
23681 source: DefinedElement, target:DefinedElement)
23682{
23683 find interpretation(problem,interpretation);
23684 // The two endpoint of the link have to exist
23685 find mayExist(problem, interpretation, source);
23686 find mayExist(problem, interpretation, target);
23687 // Type consistency
23688 find mayInstanceOfFunctionalOutput_class(problem,interpretation,source);
23689 find mayInstanceOfInformationLink_class(problem,interpretation,target);
23690 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
23691 // the upper bound of the opposite reference multiplicity should be considered.
23692 numberOfExistingOppositeReferences == count find mustInRelationfrom_reference_InformationLink(problem,interpretation,target,_);
23693 check(numberOfExistingOppositeReferences < 1);
23694 // The reference is containment, then a new reference cannot be create if:
23695 // 1. Multiple parents
23696 neg find mustContains4(problem,interpretation,_,target);
23697 // 2. Circle in the containment hierarchy
23698 neg find mustTransitiveContains(source,target);
23699} or {
23700 find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,source,target);
23701}
23702/**
23703 * Matcher for detecting tuples t where []terminator reference FunctionalData(source,target)
23704 */
23705private pattern mustInRelationterminator_reference_FunctionalData(
23706 problem:LogicProblem, interpretation:PartialInterpretation,
23707 source: DefinedElement, target:DefinedElement)
23708{
23709 find interpretation(problem,interpretation);
23710 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
23711 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"terminator reference FunctionalData");
23712 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
23713 BinaryElementRelationLink.param1(link,source);
23714 BinaryElementRelationLink.param2(link,target);
23715}
23716/**
23717 * Matcher for detecting tuples t where <>terminator reference FunctionalData(source,target)
23718 */
23719private pattern mayInRelationterminator_reference_FunctionalData(
23720 problem:LogicProblem, interpretation:PartialInterpretation,
23721 source: DefinedElement, target:DefinedElement)
23722{
23723 find interpretation(problem,interpretation);
23724 // The two endpoint of the link have to exist
23725 find mayExist(problem, interpretation, source);
23726 find mayExist(problem, interpretation, target);
23727 // Type consistency
23728 find mayInstanceOfFunctionalData_class(problem,interpretation,source);
23729 find mayInstanceOfFAMTerminator_class(problem,interpretation,target);
23730 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
23731 // the upper bound of the multiplicity should be considered.
23732 numberOfExistingReferences == count find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,_);
23733 check(numberOfExistingReferences < 1);
23734 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
23735 // the upper bound of the opposite reference multiplicity should be considered.
23736 numberOfExistingOppositeReferences == count find mustInRelationdata_reference_FAMTerminator(problem,interpretation,target,_);
23737 check(numberOfExistingOppositeReferences < 1);
23738 // The reference is containment, then a new reference cannot be create if:
23739 // 1. Multiple parents
23740 neg find mustContains4(problem,interpretation,_,target);
23741 // 2. Circle in the containment hierarchy
23742 neg find mustTransitiveContains(source,target);
23743} or {
23744 find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,target);
23745}
23746/**
23747 * Matcher for detecting tuples t where []interface reference FunctionalData(source,target)
23748 */
23749private pattern mustInRelationinterface_reference_FunctionalData(
23750 problem:LogicProblem, interpretation:PartialInterpretation,
23751 source: DefinedElement, target:DefinedElement)
23752{
23753 find interpretation(problem,interpretation);
23754 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
23755 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface reference FunctionalData");
23756 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
23757 BinaryElementRelationLink.param1(link,source);
23758 BinaryElementRelationLink.param2(link,target);
23759}
23760/**
23761 * Matcher for detecting tuples t where <>interface reference FunctionalData(source,target)
23762 */
23763private pattern mayInRelationinterface_reference_FunctionalData(
23764 problem:LogicProblem, interpretation:PartialInterpretation,
23765 source: DefinedElement, target:DefinedElement)
23766{
23767 find interpretation(problem,interpretation);
23768 // The two endpoint of the link have to exist
23769 find mayExist(problem, interpretation, source);
23770 find mayExist(problem, interpretation, target);
23771 // Type consistency
23772 find mayInstanceOfFunctionalData_class(problem,interpretation,source);
23773 find mayInstanceOfFunctionalInterface_class(problem,interpretation,target);
23774 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
23775 // the upper bound of the multiplicity should be considered.
23776 numberOfExistingReferences == count find mustInRelationinterface_reference_FunctionalData(problem,interpretation,source,_);
23777 check(numberOfExistingReferences < 1);
23778 // The eOpposite of the reference is containment, then a referene cannot be created if
23779 // 1. Multiple parents
23780 neg find mustContains4(problem,interpretation,source,_);
23781 // 2. Circle in the containment hierarchy
23782 neg find mustTransitiveContains(source,target);
23783} or {
23784 find mustInRelationinterface_reference_FunctionalData(problem,interpretation,source,target);
23785}
23786/**
23787 * Matcher for detecting tuples t where []type attribute Function(source,target)
23788 */
23789 private pattern mustInRelationtype_attribute_Function(
23790 problem:LogicProblem, interpretation:PartialInterpretation,
23791 source: DefinedElement, target:DefinedElement)
23792 {
23793 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_xyz_type(problem,interpretation,source,target);
23794 }
23795/**
23796 * Matcher for detecting tuples t where []type attribute Function(source,target)
23797 */
23798 private pattern mayInRelationtype_attribute_Function(
23799 problem:LogicProblem, interpretation:PartialInterpretation,
23800 source: DefinedElement, target:DefinedElement)
23801 {
23802 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_xyz_type(problem,interpretation,source,target);
23803 }
23804
23805//////////
23806// 1.3 Relation Definition Indexers
23807//////////
23808// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test xyz terminatorAndInformation
23809private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_xyz_terminatorAndInformation(
23810 problem:LogicProblem, interpretation:PartialInterpretation,
23811 var_T, var_I)
23812{
23813 find interpretation(problem,interpretation);
23814 find mustInstanceOfFAMTerminator_class(problem,interpretation,var_T);
23815 find mustInstanceOfInformationLink_class(problem,interpretation,var_I);
23816 // T is exported
23817 // I is exported
23818 find mustInstanceOfFunctionalOutput_class(problem,interpretation,var_Out);
23819 find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,var_Out,var_virtual0);
23820 find mustInstanceOfInformationLink_class(problem,interpretation,var_virtual0);
23821 var_virtual0 == var_I;
23822 find mustInstanceOfFunctionalOutput_class(problem,interpretation,var_Out);
23823 find mustInRelationterminator_reference_FunctionalData(problem,interpretation,var_Out,var_virtual1);
23824 find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1);
23825 var_virtual1 == var_T;
23826}or{
23827 find interpretation(problem,interpretation);
23828 find mustInstanceOfFAMTerminator_class(problem,interpretation,var_T);
23829 find mustInstanceOfInformationLink_class(problem,interpretation,var_I);
23830 // T is exported
23831 // I is exported
23832 find mustInstanceOfInformationLink_class(problem,interpretation,var_I);
23833 find mustInRelationto_reference_InformationLink(problem,interpretation,var_I,var_virtual0);
23834 find mustInstanceOfFunctionalInput_class(problem,interpretation,var_virtual0);
23835 var_virtual0 == var_In;
23836 find mustInstanceOfFunctionalInput_class(problem,interpretation,var_In);
23837 find mustInRelationterminator_reference_FunctionalData(problem,interpretation,var_In,var_virtual1);
23838 find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1);
23839 var_virtual1 == var_T;
23840}
23841private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_xyz_terminatorAndInformation(
23842 problem:LogicProblem, interpretation:PartialInterpretation,
23843 var_T, var_I)
23844{
23845 find interpretation(problem,interpretation);
23846 find mayInstanceOfFAMTerminator_class(problem,interpretation,var_T);
23847 find mayInstanceOfInformationLink_class(problem,interpretation,var_I);
23848 // T is exported
23849 // I is exported
23850 find mayInstanceOfFunctionalOutput_class(problem,interpretation,var_Out);
23851 find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,var_Out,var_virtual0);
23852 find mayInstanceOfInformationLink_class(problem,interpretation,var_virtual0);
23853 find mayEquivalent(problem, interpretation, var_virtual0, var_I);
23854 find mayInstanceOfFunctionalOutput_class(problem,interpretation,var_Out);
23855 find mayInRelationterminator_reference_FunctionalData(problem,interpretation,var_Out,var_virtual1);
23856 find mayInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1);
23857 find mayEquivalent(problem, interpretation, var_virtual1, var_T);
23858}or{
23859 find interpretation(problem,interpretation);
23860 find mayInstanceOfFAMTerminator_class(problem,interpretation,var_T);
23861 find mayInstanceOfInformationLink_class(problem,interpretation,var_I);
23862 // T is exported
23863 // I is exported
23864 find mayInstanceOfInformationLink_class(problem,interpretation,var_I);
23865 find mayInRelationto_reference_InformationLink(problem,interpretation,var_I,var_virtual0);
23866 find mayInstanceOfFunctionalInput_class(problem,interpretation,var_virtual0);
23867 find mayEquivalent(problem, interpretation, var_virtual0, var_In);
23868 find mayInstanceOfFunctionalInput_class(problem,interpretation,var_In);
23869 find mayInRelationterminator_reference_FunctionalData(problem,interpretation,var_In,var_virtual1);
23870 find mayInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1);
23871 find mayEquivalent(problem, interpretation, var_virtual1, var_T);
23872}
23873private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_xyz_terminatorAndInformation(
23874 problem:LogicProblem, interpretation:PartialInterpretation,
23875 var_T, var_I)
23876{
23877 find interpretation(problem,interpretation);
23878 find mustInstanceOfFAMTerminator_class(problem,interpretation,var_T);
23879 find mustInstanceOfInformationLink_class(problem,interpretation,var_I);
23880 // T is exported
23881 // I is exported
23882 find mustInstanceOfFunctionalOutput_class(problem,interpretation,var_Out);
23883 find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,var_Out,var_virtual0);
23884 find mustInstanceOfInformationLink_class(problem,interpretation,var_virtual0);
23885 var_virtual0 == var_I;
23886 find mustInstanceOfFunctionalOutput_class(problem,interpretation,var_Out);
23887 find mustInRelationterminator_reference_FunctionalData(problem,interpretation,var_Out,var_virtual1);
23888 find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1);
23889 var_virtual1 == var_T;
23890}or{
23891 find interpretation(problem,interpretation);
23892 find mustInstanceOfFAMTerminator_class(problem,interpretation,var_T);
23893 find mustInstanceOfInformationLink_class(problem,interpretation,var_I);
23894 // T is exported
23895 // I is exported
23896 find mustInstanceOfInformationLink_class(problem,interpretation,var_I);
23897 find mustInRelationto_reference_InformationLink(problem,interpretation,var_I,var_virtual0);
23898 find mustInstanceOfFunctionalInput_class(problem,interpretation,var_virtual0);
23899 var_virtual0 == var_In;
23900 find mustInstanceOfFunctionalInput_class(problem,interpretation,var_In);
23901 find mustInRelationterminator_reference_FunctionalData(problem,interpretation,var_In,var_virtual1);
23902 find mustInstanceOfFAMTerminator_class(problem,interpretation,var_virtual1);
23903 var_virtual1 == var_T;
23904}
23905// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test xyz type
23906private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_xyz_type(
23907 problem:LogicProblem, interpretation:PartialInterpretation,
23908 var_This, var_Target)
23909{
23910 find interpretation(problem,interpretation);
23911 find mustInstanceOfFunction_class(problem,interpretation,var_This);
23912 // type constraint is enforced by construction
23913 // This is exported
23914 // Target is exported
23915 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_xyz_rootElements(problem,interpretation,_var__Model,var_This);
23916 var_virtual0 == const_Root_FunctionType;DefinedElement.name(const_Root_FunctionType,"Root FunctionType"); //LogicProblem.elements(problem,const_Root_FunctionType);
23917 var_Target == var_virtual0;
23918}or{
23919 find interpretation(problem,interpretation);
23920 find mustInstanceOfFunction_class(problem,interpretation,var_This);
23921 // type constraint is enforced by construction
23922 // This is exported
23923 // Target is exported
23924 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_xyz_parent(problem,interpretation,_var__Child,var_This);
23925 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_xyz_rootElements(problem,interpretation,_var__Model,var_This);
23926 var_virtual0 == const_Leaf_FunctionType;DefinedElement.name(const_Leaf_FunctionType,"Leaf FunctionType"); //LogicProblem.elements(problem,const_Leaf_FunctionType);
23927 var_Target == var_virtual0;
23928}or{
23929 find interpretation(problem,interpretation);
23930 find mustInstanceOfFunction_class(problem,interpretation,var_This);
23931 // type constraint is enforced by construction
23932 // This is exported
23933 // Target is exported
23934 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_xyz_parent(problem,interpretation,var_This,_var__Par);
23935 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_xyz_parent(problem,interpretation,_var__Child,var_This);
23936 var_virtual0 == const_Intermediate_FunctionType;DefinedElement.name(const_Intermediate_FunctionType,"Intermediate FunctionType"); //LogicProblem.elements(problem,const_Intermediate_FunctionType);
23937 var_Target == var_virtual0;
23938}
23939private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_xyz_type(
23940 problem:LogicProblem, interpretation:PartialInterpretation,
23941 var_This, var_Target)
23942{
23943 find interpretation(problem,interpretation);
23944 find mayInstanceOfFunction_class(problem,interpretation,var_This);
23945 // type constraint is enforced by construction
23946 // This is exported
23947 // Target is exported
23948 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_xyz_rootElements(problem,interpretation,_var__Model,var_This);
23949 var_virtual0 == const_Root_FunctionType;DefinedElement.name(const_Root_FunctionType,"Root FunctionType"); //LogicProblem.elements(problem,const_Root_FunctionType);
23950 find mayEquivalent(problem, interpretation, var_Target, var_virtual0);
23951}or{
23952 find interpretation(problem,interpretation);
23953 find mayInstanceOfFunction_class(problem,interpretation,var_This);
23954 // type constraint is enforced by construction
23955 // This is exported
23956 // Target is exported
23957 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_xyz_parent(problem,interpretation,_var__Child,var_This);
23958 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_xyz_rootElements(problem,interpretation,_var__Model,var_This);
23959 var_virtual0 == const_Leaf_FunctionType;DefinedElement.name(const_Leaf_FunctionType,"Leaf FunctionType"); //LogicProblem.elements(problem,const_Leaf_FunctionType);
23960 find mayEquivalent(problem, interpretation, var_Target, var_virtual0);
23961}or{
23962 find interpretation(problem,interpretation);
23963 find mayInstanceOfFunction_class(problem,interpretation,var_This);
23964 // type constraint is enforced by construction
23965 // This is exported
23966 // Target is exported
23967 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_xyz_parent(problem,interpretation,var_This,_var__Par);
23968 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_xyz_parent(problem,interpretation,_var__Child,var_This);
23969 var_virtual0 == const_Intermediate_FunctionType;DefinedElement.name(const_Intermediate_FunctionType,"Intermediate FunctionType"); //LogicProblem.elements(problem,const_Intermediate_FunctionType);
23970 find mayEquivalent(problem, interpretation, var_Target, var_virtual0);
23971}
23972private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_xyz_type(
23973 problem:LogicProblem, interpretation:PartialInterpretation,
23974 var_This, var_Target)
23975{
23976 find interpretation(problem,interpretation);
23977 find mustInstanceOfFunction_class(problem,interpretation,var_This);
23978 // type constraint is enforced by construction
23979 // This is exported
23980 // Target is exported
23981 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_xyz_rootElements(problem,interpretation,_var__Model,var_This);
23982 var_virtual0 == const_Root_FunctionType;DefinedElement.name(const_Root_FunctionType,"Root FunctionType"); //LogicProblem.elements(problem,const_Root_FunctionType);
23983 var_Target == var_virtual0;
23984}or{
23985 find interpretation(problem,interpretation);
23986 find mustInstanceOfFunction_class(problem,interpretation,var_This);
23987 // type constraint is enforced by construction
23988 // This is exported
23989 // Target is exported
23990 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_xyz_parent(problem,interpretation,_var__Child,var_This);
23991 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_xyz_rootElements(problem,interpretation,_var__Model,var_This);
23992 var_virtual0 == const_Leaf_FunctionType;DefinedElement.name(const_Leaf_FunctionType,"Leaf FunctionType"); //LogicProblem.elements(problem,const_Leaf_FunctionType);
23993 var_Target == var_virtual0;
23994}or{
23995 find interpretation(problem,interpretation);
23996 find mustInstanceOfFunction_class(problem,interpretation,var_This);
23997 // type constraint is enforced by construction
23998 // This is exported
23999 // Target is exported
24000 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_xyz_parent(problem,interpretation,var_This,_var__Par);
24001 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_xyz_parent(problem,interpretation,_var__Child,var_This);
24002 var_virtual0 == const_Intermediate_FunctionType;DefinedElement.name(const_Intermediate_FunctionType,"Intermediate FunctionType"); //LogicProblem.elements(problem,const_Intermediate_FunctionType);
24003 var_Target == var_virtual0;
24004}
24005// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test xyz rootElements
24006private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_xyz_rootElements(
24007 problem:LogicProblem, interpretation:PartialInterpretation,
24008 var_Model, var_Root)
24009{
24010 find interpretation(problem,interpretation);
24011 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Model);
24012 find mustInstanceOfFunction_class(problem,interpretation,var_Root);
24013 // Model is exported
24014 // Root is exported
24015 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Model);
24016 find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,var_Model,var_virtual0);
24017 find mustInstanceOfFunctionalElement_class(problem,interpretation,var_virtual0);
24018 var_virtual0 == var_Root;
24019}
24020private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_xyz_rootElements(
24021 problem:LogicProblem, interpretation:PartialInterpretation,
24022 var_Model, var_Root)
24023{
24024 find interpretation(problem,interpretation);
24025 find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Model);
24026 find mayInstanceOfFunction_class(problem,interpretation,var_Root);
24027 // Model is exported
24028 // Root is exported
24029 find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Model);
24030 find mayInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,var_Model,var_virtual0);
24031 find mayInstanceOfFunctionalElement_class(problem,interpretation,var_virtual0);
24032 find mayEquivalent(problem, interpretation, var_virtual0, var_Root);
24033}
24034private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_xyz_rootElements(
24035 problem:LogicProblem, interpretation:PartialInterpretation,
24036 var_Model, var_Root)
24037{
24038 find interpretation(problem,interpretation);
24039 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Model);
24040 find mustInstanceOfFunction_class(problem,interpretation,var_Root);
24041 // Model is exported
24042 // Root is exported
24043 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Model);
24044 find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,var_Model,var_virtual0);
24045 find mustInstanceOfFunctionalElement_class(problem,interpretation,var_virtual0);
24046 var_virtual0 == var_Root;
24047}
24048// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test xyz parent
24049private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_xyz_parent(
24050 problem:LogicProblem, interpretation:PartialInterpretation,
24051 var_Func, var_Par)
24052{
24053 find interpretation(problem,interpretation);
24054 find mustInstanceOfFunction_class(problem,interpretation,var_Func);
24055 find mustInstanceOfFunction_class(problem,interpretation,var_Par);
24056 // Func is exported
24057 // Par is exported
24058 find mustInstanceOfFunction_class(problem,interpretation,var_Func);
24059 find mustInRelationparent_reference_FunctionalElement(problem,interpretation,var_Func,var_virtual0);
24060 find mustInstanceOfFunction_class(problem,interpretation,var_virtual0);
24061 var_virtual0 == var_Par;
24062}
24063private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_xyz_parent(
24064 problem:LogicProblem, interpretation:PartialInterpretation,
24065 var_Func, var_Par)
24066{
24067 find interpretation(problem,interpretation);
24068 find mayInstanceOfFunction_class(problem,interpretation,var_Func);
24069 find mayInstanceOfFunction_class(problem,interpretation,var_Par);
24070 // Func is exported
24071 // Par is exported
24072 find mayInstanceOfFunction_class(problem,interpretation,var_Func);
24073 find mayInRelationparent_reference_FunctionalElement(problem,interpretation,var_Func,var_virtual0);
24074 find mayInstanceOfFunction_class(problem,interpretation,var_virtual0);
24075 find mayEquivalent(problem, interpretation, var_virtual0, var_Par);
24076}
24077private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_xyz_parent(
24078 problem:LogicProblem, interpretation:PartialInterpretation,
24079 var_Func, var_Par)
24080{
24081 find interpretation(problem,interpretation);
24082 find mustInstanceOfFunction_class(problem,interpretation,var_Func);
24083 find mustInstanceOfFunction_class(problem,interpretation,var_Par);
24084 // Func is exported
24085 // Par is exported
24086 find mustInstanceOfFunction_class(problem,interpretation,var_Func);
24087 find mustInRelationparent_reference_FunctionalElement(problem,interpretation,var_Func,var_virtual0);
24088 find mustInstanceOfFunction_class(problem,interpretation,var_virtual0);
24089 var_virtual0 == var_Par;
24090}
24091// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test xyz model
24092private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_xyz_model(
24093 problem:LogicProblem, interpretation:PartialInterpretation,
24094 var_This, var_Target)
24095{
24096 find interpretation(problem,interpretation);
24097 find mustInstanceOfFunctionalElement_class(problem,interpretation,var_This);
24098 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Target);
24099 // This is exported
24100 // Target is exported
24101 find mustInstanceOfFunctionalElement_class(problem,interpretation,var_This);
24102 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Target);
24103}
24104private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_xyz_model(
24105 problem:LogicProblem, interpretation:PartialInterpretation,
24106 var_This, var_Target)
24107{
24108 find interpretation(problem,interpretation);
24109 find mayInstanceOfFunctionalElement_class(problem,interpretation,var_This);
24110 find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Target);
24111 // This is exported
24112 // Target is exported
24113 find mayInstanceOfFunctionalElement_class(problem,interpretation,var_This);
24114 find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Target);
24115}
24116private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_xyz_model(
24117 problem:LogicProblem, interpretation:PartialInterpretation,
24118 var_This, var_Target)
24119{
24120 find interpretation(problem,interpretation);
24121 find mustInstanceOfFunctionalElement_class(problem,interpretation,var_This);
24122 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Target);
24123 // This is exported
24124 // Target is exported
24125 find mustInstanceOfFunctionalElement_class(problem,interpretation,var_This);
24126 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,var_Target);
24127}
24128
24129//////////
24130// 1.4 Containment Indexer
24131//////////
24132private pattern mustContains2(source: DefinedElement, target: DefinedElement) {
24133 find mustContains4(_,_,source,target);
24134}
24135
24136private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation,
24137 source: DefinedElement, target: DefinedElement)
24138 { find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,target); }or
24139
24140 { find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,source,target); }or
24141
24142 { find mustInRelationsubElements_reference_Function(problem,interpretation,source,target); }or
24143
24144 { find mustInRelationdata_reference_FunctionalInterface(problem,interpretation,source,target); }or
24145
24146 { find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,source,target); }or
24147
24148 { find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,target); }
24149
24150private pattern mustTransitiveContains(source,target) {
24151 find mustContains2+(source,target);
24152}
24153
24154//////////
24155// 2. Invalidation Indexers
24156//////////
24157// 2.1 Invalidated by WF Queries
24158//////////
24159pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_xyz_terminatorAndInformation(problem:LogicProblem, interpretation:PartialInterpretation,
24160 var_T, var_I)
24161{
24162 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_xyz_terminatorAndInformation(problem,interpretation,var_T,var_I);
24163}
24164
24165//////////
24166// 3. Unfinishedness Indexers
24167//////////
24168// 3.1 Unfinishedness Measured by Multiplicity
24169//////////
24170pattern unfinishedLowerMultiplicity_to_reference_InformationLink(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) {
24171 find interpretation(problem,interpretation);
24172 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
24173 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"to reference InformationLink");
24174 find mustInstanceOfInformationLink_class(problem,interpretation,object);
24175 numberOfExistingReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,object,_);
24176 check(numberOfExistingReferences < 1);
24177 missingMultiplicity == eval(1-numberOfExistingReferences);
24178}
24179
24180//////////
24181// 3.2 Unfinishedness Measured by WF Queries
24182//////////
24183pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_xyz_terminatorAndInformation(problem:LogicProblem, interpretation:PartialInterpretation,
24184 var_T, var_I)
24185{
24186 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_xyz_terminatorAndInformation(problem,interpretation,var_T,var_I);
24187}
24188
24189//////////
24190// 4. Refinement Indexers
24191//////////
24192// 4.1 Object constructors
24193//////////
24194private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation)
24195{
24196 find interpretation(problem,interpretation);
24197 find mustInstanceOfFunctionalInterface_class(problem,interpretation,root);
24198 find mustExist(problem, interpretation, root);
24199}or{
24200 find interpretation(problem,interpretation);
24201 find mustInstanceOfFunctionalData_class(problem,interpretation,root);
24202 find mustExist(problem, interpretation, root);
24203}or{
24204 find interpretation(problem,interpretation);
24205 find mustInstanceOfInformationLink_class(problem,interpretation,root);
24206 find mustExist(problem, interpretation, root);
24207}or{
24208 find interpretation(problem,interpretation);
24209 find mustInstanceOfFunction_class(problem,interpretation,root);
24210 find mustExist(problem, interpretation, root);
24211}or{
24212 find interpretation(problem,interpretation);
24213 find mustInstanceOfFAMTerminator_class(problem,interpretation,root);
24214 find mustExist(problem, interpretation, root);
24215}or{
24216 find interpretation(problem,interpretation);
24217 find mustInstanceOfFunctionalElement_class(problem,interpretation,root);
24218 find mustExist(problem, interpretation, root);
24219}or{
24220 find interpretation(problem,interpretation);
24221 find mustInstanceOfFunctionalOutput_class(problem,interpretation,root);
24222 find mustExist(problem, interpretation, root);
24223}or{
24224 find interpretation(problem,interpretation);
24225 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,root);
24226 find mustExist(problem, interpretation, root);
24227}or{
24228 find interpretation(problem,interpretation);
24229 find mustInstanceOfFunctionalInput_class(problem,interpretation,root);
24230 find mustExist(problem, interpretation, root);
24231}or{
24232 find interpretation(problem,interpretation);
24233 find mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem,interpretation,root);
24234 find mustExist(problem, interpretation, root);
24235}or{
24236 find interpretation(problem,interpretation);
24237 find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,root);
24238 find mustExist(problem, interpretation, root);
24239}
24240pattern createObject_FunctionalArchitectureModel_class_UndefinedPart(
24241 problem:LogicProblem, interpretation:PartialInterpretation,
24242 typeInterpretation:PartialComplexTypeInterpretation)
24243{
24244 find interpretation(problem,interpretation);
24245 neg find hasElementInContainment(problem,interpretation);
24246 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
24247 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalArchitectureModel class UndefinedPart");
24248 find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,newObject);
24249 find mayExist(problem, interpretation, newObject);
24250 neg find mustExist(problem, interpretation, newObject);
24251}
24252pattern createObject_Function_class_by_rootElements_reference_FunctionalArchitectureModel(
24253 problem:LogicProblem, interpretation:PartialInterpretation,
24254 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
24255 container:DefinedElement)
24256{
24257 find interpretation(problem,interpretation);
24258 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
24259 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class");
24260 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
24261 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"rootElements reference FunctionalArchitectureModel");
24262 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,container);
24263 find mayInstanceOfFunction_class(problem,interpretation,newObject);
24264 find mayInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,container,newObject);
24265 find mustExist(problem, interpretation, container);
24266 neg find mustExist(problem, interpretation, newObject);
24267}
24268pattern createObject_Function_class_by_subElements_reference_Function_with_parent_reference_FunctionalElement(
24269 problem:LogicProblem, interpretation:PartialInterpretation,
24270 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
24271 container:DefinedElement)
24272{
24273 find interpretation(problem,interpretation);
24274 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
24275 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class");
24276 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
24277 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"subElements reference Function");
24278 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
24279 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FunctionalElement");
24280 find mustInstanceOfFunction_class(problem,interpretation,container);
24281 find mayInstanceOfFunction_class(problem,interpretation,newObject);
24282 find mayInRelationsubElements_reference_Function(problem,interpretation,container,newObject);
24283 find mustExist(problem, interpretation, container);
24284 neg find mustExist(problem, interpretation, newObject);
24285}
24286pattern createObject_Function_class(
24287 problem:LogicProblem, interpretation:PartialInterpretation,
24288 typeInterpretation:PartialComplexTypeInterpretation)
24289{
24290 find interpretation(problem,interpretation);
24291 neg find hasElementInContainment(problem,interpretation);
24292 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
24293 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class");
24294 find mayInstanceOfFunction_class(problem,interpretation,newObject);
24295 find mayExist(problem, interpretation, newObject);
24296 neg find mustExist(problem, interpretation, newObject);
24297}
24298pattern createObject_InformationLink_class_by_outgoingLinks_reference_FunctionalOutput_with_from_reference_InformationLink(
24299 problem:LogicProblem, interpretation:PartialInterpretation,
24300 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
24301 container:DefinedElement)
24302{
24303 find interpretation(problem,interpretation);
24304 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
24305 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class");
24306 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
24307 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingLinks reference FunctionalOutput");
24308 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
24309 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"from reference InformationLink");
24310 find mustInstanceOfFunctionalOutput_class(problem,interpretation,container);
24311 find mayInstanceOfInformationLink_class(problem,interpretation,newObject);
24312 find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,container,newObject);
24313 find mustExist(problem, interpretation, container);
24314 neg find mustExist(problem, interpretation, newObject);
24315}
24316pattern createObject_InformationLink_class(
24317 problem:LogicProblem, interpretation:PartialInterpretation,
24318 typeInterpretation:PartialComplexTypeInterpretation)
24319{
24320 find interpretation(problem,interpretation);
24321 neg find hasElementInContainment(problem,interpretation);
24322 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
24323 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class");
24324 find mayInstanceOfInformationLink_class(problem,interpretation,newObject);
24325 find mayExist(problem, interpretation, newObject);
24326 neg find mustExist(problem, interpretation, newObject);
24327}
24328pattern createObject_FunctionalOutput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData(
24329 problem:LogicProblem, interpretation:PartialInterpretation,
24330 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
24331 container:DefinedElement)
24332{
24333 find interpretation(problem,interpretation);
24334 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
24335 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class");
24336 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
24337 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface");
24338 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
24339 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData");
24340 find mustInstanceOfFunctionalInterface_class(problem,interpretation,container);
24341 find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject);
24342 find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject);
24343 find mustExist(problem, interpretation, container);
24344 neg find mustExist(problem, interpretation, newObject);
24345}
24346pattern createObject_FunctionalOutput_class(
24347 problem:LogicProblem, interpretation:PartialInterpretation,
24348 typeInterpretation:PartialComplexTypeInterpretation)
24349{
24350 find interpretation(problem,interpretation);
24351 neg find hasElementInContainment(problem,interpretation);
24352 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
24353 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class");
24354 find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject);
24355 find mayExist(problem, interpretation, newObject);
24356 neg find mustExist(problem, interpretation, newObject);
24357}
24358pattern createObject_FAMTerminator_class_by_terminator_reference_FunctionalData_with_data_reference_FAMTerminator(
24359 problem:LogicProblem, interpretation:PartialInterpretation,
24360 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
24361 container:DefinedElement)
24362{
24363 find interpretation(problem,interpretation);
24364 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
24365 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class");
24366 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
24367 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"terminator reference FunctionalData");
24368 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
24369 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"data reference FAMTerminator");
24370 find mustInstanceOfFunctionalData_class(problem,interpretation,container);
24371 find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject);
24372 find mayInRelationterminator_reference_FunctionalData(problem,interpretation,container,newObject);
24373 find mustExist(problem, interpretation, container);
24374 neg find mustExist(problem, interpretation, newObject);
24375}
24376pattern createObject_FAMTerminator_class(
24377 problem:LogicProblem, interpretation:PartialInterpretation,
24378 typeInterpretation:PartialComplexTypeInterpretation)
24379{
24380 find interpretation(problem,interpretation);
24381 neg find hasElementInContainment(problem,interpretation);
24382 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
24383 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class");
24384 find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject);
24385 find mayExist(problem, interpretation, newObject);
24386 neg find mustExist(problem, interpretation, newObject);
24387}
24388pattern createObject_FunctionalInterface_class_by_interface_reference_FunctionalElement_with_element_reference_FunctionalInterface(
24389 problem:LogicProblem, interpretation:PartialInterpretation,
24390 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
24391 container:DefinedElement)
24392{
24393 find interpretation(problem,interpretation);
24394 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
24395 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class");
24396 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
24397 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"interface reference FunctionalElement");
24398 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
24399 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"element reference FunctionalInterface");
24400 find mustInstanceOfFunctionalElement_class(problem,interpretation,container);
24401 find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject);
24402 find mayInRelationinterface_reference_FunctionalElement(problem,interpretation,container,newObject);
24403 find mustExist(problem, interpretation, container);
24404 neg find mustExist(problem, interpretation, newObject);
24405}
24406pattern createObject_FunctionalInterface_class(
24407 problem:LogicProblem, interpretation:PartialInterpretation,
24408 typeInterpretation:PartialComplexTypeInterpretation)
24409{
24410 find interpretation(problem,interpretation);
24411 neg find hasElementInContainment(problem,interpretation);
24412 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
24413 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class");
24414 find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject);
24415 find mayExist(problem, interpretation, newObject);
24416 neg find mustExist(problem, interpretation, newObject);
24417}
24418pattern createObject_FunctionalInput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData(
24419 problem:LogicProblem, interpretation:PartialInterpretation,
24420 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
24421 container:DefinedElement)
24422{
24423 find interpretation(problem,interpretation);
24424 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
24425 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class");
24426 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
24427 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface");
24428 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
24429 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData");
24430 find mustInstanceOfFunctionalInterface_class(problem,interpretation,container);
24431 find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject);
24432 find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject);
24433 find mustExist(problem, interpretation, container);
24434 neg find mustExist(problem, interpretation, newObject);
24435}
24436pattern createObject_FunctionalInput_class(
24437 problem:LogicProblem, interpretation:PartialInterpretation,
24438 typeInterpretation:PartialComplexTypeInterpretation)
24439{
24440 find interpretation(problem,interpretation);
24441 neg find hasElementInContainment(problem,interpretation);
24442 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
24443 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class");
24444 find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject);
24445 find mayExist(problem, interpretation, newObject);
24446 neg find mustExist(problem, interpretation, newObject);
24447}
24448
24449//////////
24450// 4.2 Type refinement
24451//////////
24452pattern refineTypeTo_FunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
24453 find interpretation(problem,interpretation);
24454 PartialInterpretation.newElements(interpretation,element);
24455 find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element);
24456 neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element);
24457 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
24458 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
24459 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
24460 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
24461 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
24462}
24463pattern refineTypeTo_Function_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
24464 find interpretation(problem,interpretation);
24465 PartialInterpretation.newElements(interpretation,element);
24466 find mayInstanceOfFunction_class(problem,interpretation,element);
24467 neg find mustInstanceOfFunction_class(problem,interpretation,element);
24468 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
24469 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
24470 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
24471 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
24472 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
24473}
24474pattern refineTypeTo_InformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
24475 find interpretation(problem,interpretation);
24476 PartialInterpretation.newElements(interpretation,element);
24477 find mayInstanceOfInformationLink_class(problem,interpretation,element);
24478 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
24479 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
24480 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
24481 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
24482 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
24483 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
24484}
24485pattern refineTypeTo_FunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
24486 find interpretation(problem,interpretation);
24487 PartialInterpretation.newElements(interpretation,element);
24488 find mayInstanceOfFunctionalOutput_class(problem,interpretation,element);
24489 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
24490 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
24491 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
24492 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
24493 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
24494 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
24495 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
24496}
24497pattern refineTypeTo_FAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
24498 find interpretation(problem,interpretation);
24499 PartialInterpretation.newElements(interpretation,element);
24500 find mayInstanceOfFAMTerminator_class(problem,interpretation,element);
24501 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
24502 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
24503 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
24504 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
24505 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
24506 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
24507}
24508pattern refineTypeTo_FunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
24509 find interpretation(problem,interpretation);
24510 PartialInterpretation.newElements(interpretation,element);
24511 find mayInstanceOfFunctionalInterface_class(problem,interpretation,element);
24512 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
24513 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
24514 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
24515 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
24516 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
24517 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
24518}
24519pattern refineTypeTo_FunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
24520 find interpretation(problem,interpretation);
24521 PartialInterpretation.newElements(interpretation,element);
24522 find mayInstanceOfFunctionalInput_class(problem,interpretation,element);
24523 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
24524 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
24525 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
24526 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
24527 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
24528 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
24529 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
24530}
24531
24532//////////
24533// 4.3 Relation refinement
24534//////////
24535pattern refineRelation_model_reference_FunctionalElement(
24536 problem:LogicProblem, interpretation:PartialInterpretation,
24537 relationIterpretation:PartialRelationInterpretation,
24538 from: DefinedElement, to: DefinedElement)
24539{
24540 find interpretation(problem,interpretation);
24541 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
24542 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement");
24543 find mustExist(problem, interpretation, from);
24544 find mustExist(problem, interpretation, to);
24545 find mustInstanceOfFunctionalElement_class(problem,interpretation,from);
24546 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,to);
24547 find mayInRelationmodel_reference_FunctionalElement(problem,interpretation,from,to);
24548 neg find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,from,to);
24549}
24550pattern refineRelation_IncomingLinks_reference_FunctionalInput_and_to_reference_InformationLink(
24551 problem:LogicProblem, interpretation:PartialInterpretation,
24552 relationIterpretation:PartialRelationInterpretation, oppositeInterpretation:PartialRelationInterpretation,
24553 from: DefinedElement, to: DefinedElement)
24554{
24555 find interpretation(problem,interpretation);
24556 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
24557 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"IncomingLinks reference FunctionalInput");
24558 PartialInterpretation.partialrelationinterpretation(interpretation,oppositeInterpretation);
24559 PartialRelationInterpretation.interpretationOf.name(oppositeInterpretation,"to reference InformationLink");
24560 find mustExist(problem, interpretation, from);
24561 find mustExist(problem, interpretation, to);
24562 find mustInstanceOfFunctionalInput_class(problem,interpretation,from);
24563 find mustInstanceOfInformationLink_class(problem,interpretation,to);
24564 find mayInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,from,to);
24565 neg find mustInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,from,to);
24566}
24567pattern refineRelation_type_attribute_Function(
24568 problem:LogicProblem, interpretation:PartialInterpretation,
24569 relationIterpretation:PartialRelationInterpretation,
24570 from: DefinedElement, to: DefinedElement)
24571{
24572 find interpretation(problem,interpretation);
24573 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
24574 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function");
24575 find mustExist(problem, interpretation, from);
24576 find mustExist(problem, interpretation, to);
24577 find mustInstanceOfFunction_class(problem,interpretation,from);
24578 find mustInstanceOfFunctionType_enum(problem,interpretation,to);
24579 find mayInRelationtype_attribute_Function(problem,interpretation,from,to);
24580 neg find mustInRelationtype_attribute_Function(problem,interpretation,from,to);
24581}
24582import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage"
24583import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem"
24584import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language"
24585
24586//////////
24587// 0. Util
24588//////////
24589private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) {
24590 PartialInterpretation.problem(interpretation,problem);
24591}
24592
24593/////////////////////////
24594// 0.1 Existence
24595/////////////////////////
24596private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
24597 find interpretation(problem,interpretation);
24598 LogicProblem.elements(problem,element);
24599} or {
24600 find interpretation(problem,interpretation);
24601 PartialInterpretation.newElements(interpretation,element);
24602}
24603
24604private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
24605 find mustExist(problem,interpretation,element);
24606} or {
24607 find interpretation(problem,interpretation);
24608 neg find elementCloseWorld(element);
24609 PartialInterpretation.openWorldElements(interpretation,element);
24610}
24611
24612private pattern elementCloseWorld(element:DefinedElement) {
24613 PartialInterpretation.openWorldElements(i,element);
24614 PartialInterpretation.maxNewElements(i,0);
24615} or {
24616 Scope.targetTypeInterpretation(scope,interpretation);
24617 PartialTypeInterpratation.elements(interpretation,element);
24618 Scope.maxNewElements(scope,0);
24619}
24620
24621////////////////////////
24622// 0.2 Equivalence
24623////////////////////////
24624pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) {
24625 find mayExist(problem,interpretation,a);
24626 find mayExist(problem,interpretation,b);
24627 a == b;
24628}
24629
24630////////////////////////
24631// 0.3 Required Patterns by TypeIndexer
24632////////////////////////
24633private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) {
24634 find interpretation(problem,interpretation);
24635 LogicProblem.types(problem,type);
24636 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
24637 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
24638}
24639
24640private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) {
24641 find interpretation(problem,interpretation);
24642 LogicProblem.types(problem,type);
24643 TypeDefinition.elements(type,element);
24644} or {
24645 find interpretation(problem,interpretation);
24646 find typeInterpretation(problem,interpretation,type,typeInterpretation);
24647 PartialComplexTypeInterpretation.elements(typeInterpretation,element);
24648}
24649
24650private pattern isPrimitive(element: PrimitiveElement) {
24651 PrimitiveElement(element);
24652}
24653
24654//////////
24655// 1. Problem-Specific Base Indexers
24656//////////
24657// 1.1 Type Indexers
24658//////////
24659// 1.1.1 primitive Type Indexers
24660//////////
24661
24662//////////
24663// 1.1.2 domain-specific Type Indexers
24664//////////
24665/**
24666 * An element must be an instance of type "FunctionalElement class".
24667 */
24668private pattern mustInstanceOfFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
24669 Type.name(type,"FunctionalElement class");
24670 find directInstanceOf(problem,interpretation,element,type);
24671}
24672private pattern scopeDisallowsNewFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation) {
24673 find interpretation(problem,interpretation);
24674 PartialInterpretation.scopes(interpretation,scope);
24675 Scope.targetTypeInterpretation(scope,typeInterpretation);
24676 Scope.maxNewElements(scope,0);
24677 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
24678 Type.name(type,"FunctionalElement class");
24679}
24680
24681/**
24682 * An element may be an instance of type "FunctionalElement class".
24683 */
24684private pattern mayInstanceOfFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
24685{
24686 find interpretation(problem,interpretation);
24687 PartialInterpretation.newElements(interpretation,element);
24688 neg find mustInstanceOfFunction_class(problem,interpretation,element);
24689 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
24690 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
24691 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
24692 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
24693 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
24694 neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation);
24695 neg find isPrimitive(element);
24696} or {
24697 find interpretation(problem,interpretation);
24698 PartialInterpretation.openWorldElements(interpretation,element);
24699 neg find mustInstanceOfFunction_class(problem,interpretation,element);
24700 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
24701 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
24702 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
24703 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
24704 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
24705 neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation);
24706 neg find isPrimitive(element);
24707} or
24708{ find mustInstanceOfFunctionalElement_class(problem,interpretation,element); }
24709/**
24710 * An element must be an instance of type "FunctionalArchitectureModel class".
24711 */
24712private pattern mustInstanceOfFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
24713 Type.name(type,"FunctionalArchitectureModel class");
24714 find directInstanceOf(problem,interpretation,element,type);
24715}
24716private pattern scopeDisallowsNewFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation) {
24717 find interpretation(problem,interpretation);
24718 PartialInterpretation.scopes(interpretation,scope);
24719 Scope.targetTypeInterpretation(scope,typeInterpretation);
24720 Scope.maxNewElements(scope,0);
24721 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
24722 Type.name(type,"FunctionalArchitectureModel class");
24723}
24724
24725/**
24726 * An element may be an instance of type "FunctionalArchitectureModel class".
24727 */
24728private pattern mayInstanceOfFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
24729{
24730 find interpretation(problem,interpretation);
24731 PartialInterpretation.newElements(interpretation,element);
24732 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
24733 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
24734 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
24735 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
24736 neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element);
24737 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
24738 neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation);
24739 neg find isPrimitive(element);
24740} or {
24741 find interpretation(problem,interpretation);
24742 PartialInterpretation.openWorldElements(interpretation,element);
24743 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
24744 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
24745 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
24746 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
24747 neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element);
24748 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
24749 neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation);
24750 neg find isPrimitive(element);
24751} or
24752{ find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); }
24753/**
24754 * An element must be an instance of type "Function class".
24755 */
24756private pattern mustInstanceOfFunction_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
24757 Type.name(type,"Function class");
24758 find directInstanceOf(problem,interpretation,element,type);
24759}
24760private pattern scopeDisallowsNewFunction_class(problem:LogicProblem, interpretation:PartialInterpretation) {
24761 find interpretation(problem,interpretation);
24762 PartialInterpretation.scopes(interpretation,scope);
24763 Scope.targetTypeInterpretation(scope,typeInterpretation);
24764 Scope.maxNewElements(scope,0);
24765 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
24766 Type.name(type,"Function class");
24767}
24768
24769/**
24770 * An element may be an instance of type "Function class".
24771 */
24772private pattern mayInstanceOfFunction_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
24773{
24774 find interpretation(problem,interpretation);
24775 PartialInterpretation.newElements(interpretation,element);
24776 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
24777 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
24778 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
24779 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
24780 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
24781 neg find scopeDisallowsNewFunction_class(problem, interpretation);
24782 neg find isPrimitive(element);
24783} or {
24784 find interpretation(problem,interpretation);
24785 PartialInterpretation.openWorldElements(interpretation,element);
24786 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
24787 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
24788 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
24789 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
24790 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
24791 neg find scopeDisallowsNewFunction_class(problem, interpretation);
24792 neg find isPrimitive(element);
24793} or
24794{ find mustInstanceOfFunction_class(problem,interpretation,element); }
24795/**
24796 * An element must be an instance of type "FAMTerminator class".
24797 */
24798private pattern mustInstanceOfFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
24799 Type.name(type,"FAMTerminator class");
24800 find directInstanceOf(problem,interpretation,element,type);
24801}
24802private pattern scopeDisallowsNewFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation) {
24803 find interpretation(problem,interpretation);
24804 PartialInterpretation.scopes(interpretation,scope);
24805 Scope.targetTypeInterpretation(scope,typeInterpretation);
24806 Scope.maxNewElements(scope,0);
24807 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
24808 Type.name(type,"FAMTerminator class");
24809}
24810
24811/**
24812 * An element may be an instance of type "FAMTerminator class".
24813 */
24814private pattern mayInstanceOfFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
24815{
24816 find interpretation(problem,interpretation);
24817 PartialInterpretation.newElements(interpretation,element);
24818 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
24819 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
24820 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
24821 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
24822 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
24823 neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation);
24824 neg find isPrimitive(element);
24825} or {
24826 find interpretation(problem,interpretation);
24827 PartialInterpretation.openWorldElements(interpretation,element);
24828 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
24829 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
24830 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
24831 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
24832 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
24833 neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation);
24834 neg find isPrimitive(element);
24835} or
24836{ find mustInstanceOfFAMTerminator_class(problem,interpretation,element); }
24837/**
24838 * An element must be an instance of type "InformationLink class".
24839 */
24840private pattern mustInstanceOfInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
24841 Type.name(type,"InformationLink class");
24842 find directInstanceOf(problem,interpretation,element,type);
24843}
24844private pattern scopeDisallowsNewInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation) {
24845 find interpretation(problem,interpretation);
24846 PartialInterpretation.scopes(interpretation,scope);
24847 Scope.targetTypeInterpretation(scope,typeInterpretation);
24848 Scope.maxNewElements(scope,0);
24849 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
24850 Type.name(type,"InformationLink class");
24851}
24852
24853/**
24854 * An element may be an instance of type "InformationLink class".
24855 */
24856private pattern mayInstanceOfInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
24857{
24858 find interpretation(problem,interpretation);
24859 PartialInterpretation.newElements(interpretation,element);
24860 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
24861 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
24862 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
24863 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
24864 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
24865 neg find scopeDisallowsNewInformationLink_class(problem, interpretation);
24866 neg find isPrimitive(element);
24867} or {
24868 find interpretation(problem,interpretation);
24869 PartialInterpretation.openWorldElements(interpretation,element);
24870 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
24871 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
24872 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
24873 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
24874 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
24875 neg find scopeDisallowsNewInformationLink_class(problem, interpretation);
24876 neg find isPrimitive(element);
24877} or
24878{ find mustInstanceOfInformationLink_class(problem,interpretation,element); }
24879/**
24880 * An element must be an instance of type "FunctionalInterface class".
24881 */
24882private pattern mustInstanceOfFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
24883 Type.name(type,"FunctionalInterface class");
24884 find directInstanceOf(problem,interpretation,element,type);
24885}
24886private pattern scopeDisallowsNewFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation) {
24887 find interpretation(problem,interpretation);
24888 PartialInterpretation.scopes(interpretation,scope);
24889 Scope.targetTypeInterpretation(scope,typeInterpretation);
24890 Scope.maxNewElements(scope,0);
24891 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
24892 Type.name(type,"FunctionalInterface class");
24893}
24894
24895/**
24896 * An element may be an instance of type "FunctionalInterface class".
24897 */
24898private pattern mayInstanceOfFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
24899{
24900 find interpretation(problem,interpretation);
24901 PartialInterpretation.newElements(interpretation,element);
24902 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
24903 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
24904 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
24905 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
24906 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
24907 neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation);
24908 neg find isPrimitive(element);
24909} or {
24910 find interpretation(problem,interpretation);
24911 PartialInterpretation.openWorldElements(interpretation,element);
24912 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
24913 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
24914 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
24915 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
24916 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
24917 neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation);
24918 neg find isPrimitive(element);
24919} or
24920{ find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); }
24921/**
24922 * An element must be an instance of type "FunctionalInput class".
24923 */
24924private pattern mustInstanceOfFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
24925 Type.name(type,"FunctionalInput class");
24926 find directInstanceOf(problem,interpretation,element,type);
24927}
24928private pattern scopeDisallowsNewFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation) {
24929 find interpretation(problem,interpretation);
24930 PartialInterpretation.scopes(interpretation,scope);
24931 Scope.targetTypeInterpretation(scope,typeInterpretation);
24932 Scope.maxNewElements(scope,0);
24933 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
24934 Type.name(type,"FunctionalInput class");
24935}
24936
24937/**
24938 * An element may be an instance of type "FunctionalInput class".
24939 */
24940private pattern mayInstanceOfFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
24941{
24942 find interpretation(problem,interpretation);
24943 PartialInterpretation.newElements(interpretation,element);
24944 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
24945 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
24946 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
24947 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
24948 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
24949 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
24950 neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation);
24951 neg find isPrimitive(element);
24952} or {
24953 find interpretation(problem,interpretation);
24954 PartialInterpretation.openWorldElements(interpretation,element);
24955 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
24956 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
24957 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
24958 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
24959 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
24960 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
24961 neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation);
24962 neg find isPrimitive(element);
24963} or
24964{ find mustInstanceOfFunctionalInput_class(problem,interpretation,element); }
24965/**
24966 * An element must be an instance of type "FunctionalOutput class".
24967 */
24968private pattern mustInstanceOfFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
24969 Type.name(type,"FunctionalOutput class");
24970 find directInstanceOf(problem,interpretation,element,type);
24971}
24972private pattern scopeDisallowsNewFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation) {
24973 find interpretation(problem,interpretation);
24974 PartialInterpretation.scopes(interpretation,scope);
24975 Scope.targetTypeInterpretation(scope,typeInterpretation);
24976 Scope.maxNewElements(scope,0);
24977 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
24978 Type.name(type,"FunctionalOutput class");
24979}
24980
24981/**
24982 * An element may be an instance of type "FunctionalOutput class".
24983 */
24984private pattern mayInstanceOfFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
24985{
24986 find interpretation(problem,interpretation);
24987 PartialInterpretation.newElements(interpretation,element);
24988 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
24989 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
24990 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
24991 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
24992 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
24993 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
24994 neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation);
24995 neg find isPrimitive(element);
24996} or {
24997 find interpretation(problem,interpretation);
24998 PartialInterpretation.openWorldElements(interpretation,element);
24999 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
25000 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
25001 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
25002 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
25003 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
25004 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
25005 neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation);
25006 neg find isPrimitive(element);
25007} or
25008{ find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); }
25009/**
25010 * An element must be an instance of type "FunctionalData class".
25011 */
25012private pattern mustInstanceOfFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
25013 Type.name(type,"FunctionalData class");
25014 find directInstanceOf(problem,interpretation,element,type);
25015}
25016private pattern scopeDisallowsNewFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation) {
25017 find interpretation(problem,interpretation);
25018 PartialInterpretation.scopes(interpretation,scope);
25019 Scope.targetTypeInterpretation(scope,typeInterpretation);
25020 Scope.maxNewElements(scope,0);
25021 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
25022 Type.name(type,"FunctionalData class");
25023}
25024
25025/**
25026 * An element may be an instance of type "FunctionalData class".
25027 */
25028private pattern mayInstanceOfFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
25029{
25030 find interpretation(problem,interpretation);
25031 PartialInterpretation.newElements(interpretation,element);
25032 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
25033 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
25034 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
25035 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
25036 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
25037 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
25038 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
25039 neg find scopeDisallowsNewFunctionalData_class(problem, interpretation);
25040 neg find isPrimitive(element);
25041} or {
25042 find interpretation(problem,interpretation);
25043 PartialInterpretation.openWorldElements(interpretation,element);
25044 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
25045 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
25046 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
25047 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
25048 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
25049 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
25050 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
25051 neg find scopeDisallowsNewFunctionalData_class(problem, interpretation);
25052 neg find isPrimitive(element);
25053} or
25054{ find mustInstanceOfFunctionalData_class(problem,interpretation,element); }
25055/**
25056 * An element must be an instance of type "FunctionType enum".
25057 */
25058private pattern mustInstanceOfFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
25059 Type.name(type,"FunctionType enum");
25060 find directInstanceOf(problem,interpretation,element,type);
25061}
25062private pattern scopeDisallowsNewFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation) {
25063 find interpretation(problem,interpretation);
25064 PartialInterpretation.scopes(interpretation,scope);
25065 Scope.targetTypeInterpretation(scope,typeInterpretation);
25066 Scope.maxNewElements(scope,0);
25067 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
25068 Type.name(type,"FunctionType enum");
25069}
25070
25071/**
25072 * An element may be an instance of type "FunctionType enum".
25073 */
25074private pattern mayInstanceOfFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
25075{ find mustInstanceOfFunctionType_enum(problem,interpretation,element); }
25076/**
25077 * An element must be an instance of type "FunctionalArchitectureModel class DefinedPart".
25078 */
25079private pattern mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
25080 Type.name(type,"FunctionalArchitectureModel class DefinedPart");
25081 find directInstanceOf(problem,interpretation,element,type);
25082}
25083private pattern scopeDisallowsNewFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
25084 find interpretation(problem,interpretation);
25085 PartialInterpretation.scopes(interpretation,scope);
25086 Scope.targetTypeInterpretation(scope,typeInterpretation);
25087 Scope.maxNewElements(scope,0);
25088 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
25089 Type.name(type,"FunctionalArchitectureModel class DefinedPart");
25090}
25091
25092/**
25093 * An element may be an instance of type "FunctionalArchitectureModel class DefinedPart".
25094 */
25095private pattern mayInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
25096{ find mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem,interpretation,element); }
25097/**
25098 * An element must be an instance of type "FunctionalArchitectureModel class UndefinedPart".
25099 */
25100private pattern mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
25101 Type.name(type,"FunctionalArchitectureModel class UndefinedPart");
25102 find directInstanceOf(problem,interpretation,element,type);
25103}
25104private pattern scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
25105 find interpretation(problem,interpretation);
25106 PartialInterpretation.scopes(interpretation,scope);
25107 Scope.targetTypeInterpretation(scope,typeInterpretation);
25108 Scope.maxNewElements(scope,0);
25109 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
25110 Type.name(type,"FunctionalArchitectureModel class UndefinedPart");
25111}
25112
25113/**
25114 * An element may be an instance of type "FunctionalArchitectureModel class UndefinedPart".
25115 */
25116private pattern mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
25117{
25118 find interpretation(problem,interpretation);
25119 PartialInterpretation.newElements(interpretation,element);
25120 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
25121 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
25122 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
25123 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
25124 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
25125 neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation);
25126 neg find isPrimitive(element);
25127} or {
25128 find interpretation(problem,interpretation);
25129 PartialInterpretation.openWorldElements(interpretation,element);
25130 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
25131 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
25132 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
25133 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
25134 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
25135 neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation);
25136 neg find isPrimitive(element);
25137} or
25138{ find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); }
25139
25140//////////
25141// 1.2 Relation Declaration Indexers
25142//////////
25143/**
25144 * Matcher for detecting tuples t where []interface reference FunctionalElement(source,target)
25145 */
25146private pattern mustInRelationinterface_reference_FunctionalElement(
25147 problem:LogicProblem, interpretation:PartialInterpretation,
25148 source: DefinedElement, target:DefinedElement)
25149{
25150 find interpretation(problem,interpretation);
25151 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
25152 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface reference FunctionalElement");
25153 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
25154 BinaryElementRelationLink.param1(link,source);
25155 BinaryElementRelationLink.param2(link,target);
25156}
25157/**
25158 * Matcher for detecting tuples t where <>interface reference FunctionalElement(source,target)
25159 */
25160private pattern mayInRelationinterface_reference_FunctionalElement(
25161 problem:LogicProblem, interpretation:PartialInterpretation,
25162 source: DefinedElement, target:DefinedElement)
25163{
25164 find interpretation(problem,interpretation);
25165 // The two endpoint of the link have to exist
25166 find mayExist(problem, interpretation, source);
25167 find mayExist(problem, interpretation, target);
25168 // Type consistency
25169 find mayInstanceOfFunctionalElement_class(problem,interpretation,source);
25170 find mayInstanceOfFunctionalInterface_class(problem,interpretation,target);
25171 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
25172 // the upper bound of the multiplicity should be considered.
25173 numberOfExistingReferences == count find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,_);
25174 check(numberOfExistingReferences < 1);
25175 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
25176 // the upper bound of the opposite reference multiplicity should be considered.
25177 numberOfExistingOppositeReferences == count find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,target,_);
25178 check(numberOfExistingOppositeReferences < 1);
25179 // The reference is containment, then a new reference cannot be create if:
25180 // 1. Multiple parents
25181 neg find mustContains4(problem,interpretation,_,target);
25182 // 2. Circle in the containment hierarchy
25183 neg find mustTransitiveContains(source,target);
25184} or {
25185 find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,target);
25186}
25187/**
25188 * Matcher for detecting tuples t where []model reference FunctionalElement(source,target)
25189 */
25190private pattern mustInRelationmodel_reference_FunctionalElement(
25191 problem:LogicProblem, interpretation:PartialInterpretation,
25192 source: DefinedElement, target:DefinedElement)
25193{
25194 find interpretation(problem,interpretation);
25195 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
25196 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement");
25197 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
25198 BinaryElementRelationLink.param1(link,source);
25199 BinaryElementRelationLink.param2(link,target);
25200}
25201/**
25202 * Matcher for detecting tuples t where <>model reference FunctionalElement(source,target)
25203 */
25204private pattern mayInRelationmodel_reference_FunctionalElement(
25205 problem:LogicProblem, interpretation:PartialInterpretation,
25206 source: DefinedElement, target:DefinedElement)
25207{
25208 find interpretation(problem,interpretation);
25209 // The two endpoint of the link have to exist
25210 find mayExist(problem, interpretation, source);
25211 find mayExist(problem, interpretation, target);
25212 // Type consistency
25213 find mayInstanceOfFunctionalElement_class(problem,interpretation,source);
25214 find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,target);
25215 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
25216 // the upper bound of the multiplicity should be considered.
25217 numberOfExistingReferences == count find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,source,_);
25218 check(numberOfExistingReferences < 1);
25219} or {
25220 find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,source,target);
25221}
25222/**
25223 * Matcher for detecting tuples t where []parent reference FunctionalElement(source,target)
25224 */
25225private pattern mustInRelationparent_reference_FunctionalElement(
25226 problem:LogicProblem, interpretation:PartialInterpretation,
25227 source: DefinedElement, target:DefinedElement)
25228{
25229 find interpretation(problem,interpretation);
25230 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
25231 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"parent reference FunctionalElement");
25232 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
25233 BinaryElementRelationLink.param1(link,source);
25234 BinaryElementRelationLink.param2(link,target);
25235}
25236/**
25237 * Matcher for detecting tuples t where <>parent reference FunctionalElement(source,target)
25238 */
25239private pattern mayInRelationparent_reference_FunctionalElement(
25240 problem:LogicProblem, interpretation:PartialInterpretation,
25241 source: DefinedElement, target:DefinedElement)
25242{
25243 find interpretation(problem,interpretation);
25244 // The two endpoint of the link have to exist
25245 find mayExist(problem, interpretation, source);
25246 find mayExist(problem, interpretation, target);
25247 // Type consistency
25248 find mayInstanceOfFunctionalElement_class(problem,interpretation,source);
25249 find mayInstanceOfFunction_class(problem,interpretation,target);
25250 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
25251 // the upper bound of the multiplicity should be considered.
25252 numberOfExistingReferences == count find mustInRelationparent_reference_FunctionalElement(problem,interpretation,source,_);
25253 check(numberOfExistingReferences < 1);
25254 // The eOpposite of the reference is containment, then a referene cannot be created if
25255 // 1. Multiple parents
25256 neg find mustContains4(problem,interpretation,source,_);
25257 // 2. Circle in the containment hierarchy
25258 neg find mustTransitiveContains(source,target);
25259} or {
25260 find mustInRelationparent_reference_FunctionalElement(problem,interpretation,source,target);
25261}
25262/**
25263 * Matcher for detecting tuples t where []rootElements reference FunctionalArchitectureModel(source,target)
25264 */
25265private pattern mustInRelationrootElements_reference_FunctionalArchitectureModel(
25266 problem:LogicProblem, interpretation:PartialInterpretation,
25267 source: DefinedElement, target:DefinedElement)
25268{
25269 find interpretation(problem,interpretation);
25270 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
25271 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"rootElements reference FunctionalArchitectureModel");
25272 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
25273 BinaryElementRelationLink.param1(link,source);
25274 BinaryElementRelationLink.param2(link,target);
25275}
25276/**
25277 * Matcher for detecting tuples t where <>rootElements reference FunctionalArchitectureModel(source,target)
25278 */
25279private pattern mayInRelationrootElements_reference_FunctionalArchitectureModel(
25280 problem:LogicProblem, interpretation:PartialInterpretation,
25281 source: DefinedElement, target:DefinedElement)
25282{
25283 find interpretation(problem,interpretation);
25284 // The two endpoint of the link have to exist
25285 find mayExist(problem, interpretation, source);
25286 find mayExist(problem, interpretation, target);
25287 // Type consistency
25288 find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,source);
25289 find mayInstanceOfFunctionalElement_class(problem,interpretation,target);
25290 // The reference is containment, then a new reference cannot be create if:
25291 // 1. Multiple parents
25292 neg find mustContains4(problem,interpretation,_,target);
25293 // 2. Circle in the containment hierarchy
25294 neg find mustTransitiveContains(source,target);
25295} or {
25296 find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,source,target);
25297}
25298/**
25299 * Matcher for detecting tuples t where []subElements reference Function(source,target)
25300 */
25301private pattern mustInRelationsubElements_reference_Function(
25302 problem:LogicProblem, interpretation:PartialInterpretation,
25303 source: DefinedElement, target:DefinedElement)
25304{
25305 find interpretation(problem,interpretation);
25306 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
25307 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"subElements reference Function");
25308 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
25309 BinaryElementRelationLink.param1(link,source);
25310 BinaryElementRelationLink.param2(link,target);
25311}
25312/**
25313 * Matcher for detecting tuples t where <>subElements reference Function(source,target)
25314 */
25315private pattern mayInRelationsubElements_reference_Function(
25316 problem:LogicProblem, interpretation:PartialInterpretation,
25317 source: DefinedElement, target:DefinedElement)
25318{
25319 find interpretation(problem,interpretation);
25320 // The two endpoint of the link have to exist
25321 find mayExist(problem, interpretation, source);
25322 find mayExist(problem, interpretation, target);
25323 // Type consistency
25324 find mayInstanceOfFunction_class(problem,interpretation,source);
25325 find mayInstanceOfFunctionalElement_class(problem,interpretation,target);
25326 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
25327 // the upper bound of the opposite reference multiplicity should be considered.
25328 numberOfExistingOppositeReferences == count find mustInRelationparent_reference_FunctionalElement(problem,interpretation,target,_);
25329 check(numberOfExistingOppositeReferences < 1);
25330 // The reference is containment, then a new reference cannot be create if:
25331 // 1. Multiple parents
25332 neg find mustContains4(problem,interpretation,_,target);
25333 // 2. Circle in the containment hierarchy
25334 neg find mustTransitiveContains(source,target);
25335} or {
25336 find mustInRelationsubElements_reference_Function(problem,interpretation,source,target);
25337}
25338/**
25339 * Matcher for detecting tuples t where []data reference FAMTerminator(source,target)
25340 */
25341private pattern mustInRelationdata_reference_FAMTerminator(
25342 problem:LogicProblem, interpretation:PartialInterpretation,
25343 source: DefinedElement, target:DefinedElement)
25344{
25345 find interpretation(problem,interpretation);
25346 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
25347 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"data reference FAMTerminator");
25348 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
25349 BinaryElementRelationLink.param1(link,source);
25350 BinaryElementRelationLink.param2(link,target);
25351}
25352/**
25353 * Matcher for detecting tuples t where <>data reference FAMTerminator(source,target)
25354 */
25355private pattern mayInRelationdata_reference_FAMTerminator(
25356 problem:LogicProblem, interpretation:PartialInterpretation,
25357 source: DefinedElement, target:DefinedElement)
25358{
25359 find interpretation(problem,interpretation);
25360 // The two endpoint of the link have to exist
25361 find mayExist(problem, interpretation, source);
25362 find mayExist(problem, interpretation, target);
25363 // Type consistency
25364 find mayInstanceOfFAMTerminator_class(problem,interpretation,source);
25365 find mayInstanceOfFunctionalData_class(problem,interpretation,target);
25366 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
25367 // the upper bound of the multiplicity should be considered.
25368 numberOfExistingReferences == count find mustInRelationdata_reference_FAMTerminator(problem,interpretation,source,_);
25369 check(numberOfExistingReferences < 1);
25370 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
25371 // the upper bound of the opposite reference multiplicity should be considered.
25372 numberOfExistingOppositeReferences == count find mustInRelationterminator_reference_FunctionalData(problem,interpretation,target,_);
25373 check(numberOfExistingOppositeReferences < 1);
25374 // The eOpposite of the reference is containment, then a referene cannot be created if
25375 // 1. Multiple parents
25376 neg find mustContains4(problem,interpretation,source,_);
25377 // 2. Circle in the containment hierarchy
25378 neg find mustTransitiveContains(source,target);
25379} or {
25380 find mustInRelationdata_reference_FAMTerminator(problem,interpretation,source,target);
25381}
25382/**
25383 * Matcher for detecting tuples t where []from reference InformationLink(source,target)
25384 */
25385private pattern mustInRelationfrom_reference_InformationLink(
25386 problem:LogicProblem, interpretation:PartialInterpretation,
25387 source: DefinedElement, target:DefinedElement)
25388{
25389 find interpretation(problem,interpretation);
25390 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
25391 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"from reference InformationLink");
25392 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
25393 BinaryElementRelationLink.param1(link,source);
25394 BinaryElementRelationLink.param2(link,target);
25395}
25396/**
25397 * Matcher for detecting tuples t where <>from reference InformationLink(source,target)
25398 */
25399private pattern mayInRelationfrom_reference_InformationLink(
25400 problem:LogicProblem, interpretation:PartialInterpretation,
25401 source: DefinedElement, target:DefinedElement)
25402{
25403 find interpretation(problem,interpretation);
25404 // The two endpoint of the link have to exist
25405 find mayExist(problem, interpretation, source);
25406 find mayExist(problem, interpretation, target);
25407 // Type consistency
25408 find mayInstanceOfInformationLink_class(problem,interpretation,source);
25409 find mayInstanceOfFunctionalOutput_class(problem,interpretation,target);
25410 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
25411 // the upper bound of the multiplicity should be considered.
25412 numberOfExistingReferences == count find mustInRelationfrom_reference_InformationLink(problem,interpretation,source,_);
25413 check(numberOfExistingReferences < 1);
25414 // The eOpposite of the reference is containment, then a referene cannot be created if
25415 // 1. Multiple parents
25416 neg find mustContains4(problem,interpretation,source,_);
25417 // 2. Circle in the containment hierarchy
25418 neg find mustTransitiveContains(source,target);
25419} or {
25420 find mustInRelationfrom_reference_InformationLink(problem,interpretation,source,target);
25421}
25422/**
25423 * Matcher for detecting tuples t where []to reference InformationLink(source,target)
25424 */
25425private pattern mustInRelationto_reference_InformationLink(
25426 problem:LogicProblem, interpretation:PartialInterpretation,
25427 source: DefinedElement, target:DefinedElement)
25428{
25429 find interpretation(problem,interpretation);
25430 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
25431 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"to reference InformationLink");
25432 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
25433 BinaryElementRelationLink.param1(link,source);
25434 BinaryElementRelationLink.param2(link,target);
25435}
25436/**
25437 * Matcher for detecting tuples t where <>to reference InformationLink(source,target)
25438 */
25439private pattern mayInRelationto_reference_InformationLink(
25440 problem:LogicProblem, interpretation:PartialInterpretation,
25441 source: DefinedElement, target:DefinedElement)
25442{
25443 find interpretation(problem,interpretation);
25444 // The two endpoint of the link have to exist
25445 find mayExist(problem, interpretation, source);
25446 find mayExist(problem, interpretation, target);
25447 // Type consistency
25448 find mayInstanceOfInformationLink_class(problem,interpretation,source);
25449 find mayInstanceOfFunctionalInput_class(problem,interpretation,target);
25450 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
25451 // the upper bound of the multiplicity should be considered.
25452 numberOfExistingReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,source,_);
25453 check(numberOfExistingReferences < 1);
25454} or {
25455 find mustInRelationto_reference_InformationLink(problem,interpretation,source,target);
25456}
25457/**
25458 * Matcher for detecting tuples t where []data reference FunctionalInterface(source,target)
25459 */
25460private pattern mustInRelationdata_reference_FunctionalInterface(
25461 problem:LogicProblem, interpretation:PartialInterpretation,
25462 source: DefinedElement, target:DefinedElement)
25463{
25464 find interpretation(problem,interpretation);
25465 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
25466 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"data reference FunctionalInterface");
25467 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
25468 BinaryElementRelationLink.param1(link,source);
25469 BinaryElementRelationLink.param2(link,target);
25470}
25471/**
25472 * Matcher for detecting tuples t where <>data reference FunctionalInterface(source,target)
25473 */
25474private pattern mayInRelationdata_reference_FunctionalInterface(
25475 problem:LogicProblem, interpretation:PartialInterpretation,
25476 source: DefinedElement, target:DefinedElement)
25477{
25478 find interpretation(problem,interpretation);
25479 // The two endpoint of the link have to exist
25480 find mayExist(problem, interpretation, source);
25481 find mayExist(problem, interpretation, target);
25482 // Type consistency
25483 find mayInstanceOfFunctionalInterface_class(problem,interpretation,source);
25484 find mayInstanceOfFunctionalData_class(problem,interpretation,target);
25485 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
25486 // the upper bound of the opposite reference multiplicity should be considered.
25487 numberOfExistingOppositeReferences == count find mustInRelationinterface_reference_FunctionalData(problem,interpretation,target,_);
25488 check(numberOfExistingOppositeReferences < 1);
25489 // The reference is containment, then a new reference cannot be create if:
25490 // 1. Multiple parents
25491 neg find mustContains4(problem,interpretation,_,target);
25492 // 2. Circle in the containment hierarchy
25493 neg find mustTransitiveContains(source,target);
25494} or {
25495 find mustInRelationdata_reference_FunctionalInterface(problem,interpretation,source,target);
25496}
25497/**
25498 * Matcher for detecting tuples t where []element reference FunctionalInterface(source,target)
25499 */
25500private pattern mustInRelationelement_reference_FunctionalInterface(
25501 problem:LogicProblem, interpretation:PartialInterpretation,
25502 source: DefinedElement, target:DefinedElement)
25503{
25504 find interpretation(problem,interpretation);
25505 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
25506 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"element reference FunctionalInterface");
25507 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
25508 BinaryElementRelationLink.param1(link,source);
25509 BinaryElementRelationLink.param2(link,target);
25510}
25511/**
25512 * Matcher for detecting tuples t where <>element reference FunctionalInterface(source,target)
25513 */
25514private pattern mayInRelationelement_reference_FunctionalInterface(
25515 problem:LogicProblem, interpretation:PartialInterpretation,
25516 source: DefinedElement, target:DefinedElement)
25517{
25518 find interpretation(problem,interpretation);
25519 // The two endpoint of the link have to exist
25520 find mayExist(problem, interpretation, source);
25521 find mayExist(problem, interpretation, target);
25522 // Type consistency
25523 find mayInstanceOfFunctionalInterface_class(problem,interpretation,source);
25524 find mayInstanceOfFunctionalElement_class(problem,interpretation,target);
25525 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
25526 // the upper bound of the multiplicity should be considered.
25527 numberOfExistingReferences == count find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,source,_);
25528 check(numberOfExistingReferences < 1);
25529 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
25530 // the upper bound of the opposite reference multiplicity should be considered.
25531 numberOfExistingOppositeReferences == count find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,target,_);
25532 check(numberOfExistingOppositeReferences < 1);
25533 // The eOpposite of the reference is containment, then a referene cannot be created if
25534 // 1. Multiple parents
25535 neg find mustContains4(problem,interpretation,source,_);
25536 // 2. Circle in the containment hierarchy
25537 neg find mustTransitiveContains(source,target);
25538} or {
25539 find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,source,target);
25540}
25541/**
25542 * Matcher for detecting tuples t where []IncomingLinks reference FunctionalInput(source,target)
25543 */
25544private pattern mustInRelationIncomingLinks_reference_FunctionalInput(
25545 problem:LogicProblem, interpretation:PartialInterpretation,
25546 source: DefinedElement, target:DefinedElement)
25547{
25548 find interpretation(problem,interpretation);
25549 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
25550 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"IncomingLinks reference FunctionalInput");
25551 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
25552 BinaryElementRelationLink.param1(link,source);
25553 BinaryElementRelationLink.param2(link,target);
25554}
25555/**
25556 * Matcher for detecting tuples t where <>IncomingLinks reference FunctionalInput(source,target)
25557 */
25558private pattern mayInRelationIncomingLinks_reference_FunctionalInput(
25559 problem:LogicProblem, interpretation:PartialInterpretation,
25560 source: DefinedElement, target:DefinedElement)
25561{
25562 find interpretation(problem,interpretation);
25563 // The two endpoint of the link have to exist
25564 find mayExist(problem, interpretation, source);
25565 find mayExist(problem, interpretation, target);
25566 // Type consistency
25567 find mayInstanceOfFunctionalInput_class(problem,interpretation,source);
25568 find mayInstanceOfInformationLink_class(problem,interpretation,target);
25569 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
25570 // the upper bound of the opposite reference multiplicity should be considered.
25571 numberOfExistingOppositeReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,target,_);
25572 check(numberOfExistingOppositeReferences < 1);
25573} or {
25574 find mustInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,source,target);
25575}
25576/**
25577 * Matcher for detecting tuples t where []outgoingLinks reference FunctionalOutput(source,target)
25578 */
25579private pattern mustInRelationoutgoingLinks_reference_FunctionalOutput(
25580 problem:LogicProblem, interpretation:PartialInterpretation,
25581 source: DefinedElement, target:DefinedElement)
25582{
25583 find interpretation(problem,interpretation);
25584 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
25585 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"outgoingLinks reference FunctionalOutput");
25586 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
25587 BinaryElementRelationLink.param1(link,source);
25588 BinaryElementRelationLink.param2(link,target);
25589}
25590/**
25591 * Matcher for detecting tuples t where <>outgoingLinks reference FunctionalOutput(source,target)
25592 */
25593private pattern mayInRelationoutgoingLinks_reference_FunctionalOutput(
25594 problem:LogicProblem, interpretation:PartialInterpretation,
25595 source: DefinedElement, target:DefinedElement)
25596{
25597 find interpretation(problem,interpretation);
25598 // The two endpoint of the link have to exist
25599 find mayExist(problem, interpretation, source);
25600 find mayExist(problem, interpretation, target);
25601 // Type consistency
25602 find mayInstanceOfFunctionalOutput_class(problem,interpretation,source);
25603 find mayInstanceOfInformationLink_class(problem,interpretation,target);
25604 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
25605 // the upper bound of the opposite reference multiplicity should be considered.
25606 numberOfExistingOppositeReferences == count find mustInRelationfrom_reference_InformationLink(problem,interpretation,target,_);
25607 check(numberOfExistingOppositeReferences < 1);
25608 // The reference is containment, then a new reference cannot be create if:
25609 // 1. Multiple parents
25610 neg find mustContains4(problem,interpretation,_,target);
25611 // 2. Circle in the containment hierarchy
25612 neg find mustTransitiveContains(source,target);
25613} or {
25614 find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,source,target);
25615}
25616/**
25617 * Matcher for detecting tuples t where []terminator reference FunctionalData(source,target)
25618 */
25619private pattern mustInRelationterminator_reference_FunctionalData(
25620 problem:LogicProblem, interpretation:PartialInterpretation,
25621 source: DefinedElement, target:DefinedElement)
25622{
25623 find interpretation(problem,interpretation);
25624 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
25625 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"terminator reference FunctionalData");
25626 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
25627 BinaryElementRelationLink.param1(link,source);
25628 BinaryElementRelationLink.param2(link,target);
25629}
25630/**
25631 * Matcher for detecting tuples t where <>terminator reference FunctionalData(source,target)
25632 */
25633private pattern mayInRelationterminator_reference_FunctionalData(
25634 problem:LogicProblem, interpretation:PartialInterpretation,
25635 source: DefinedElement, target:DefinedElement)
25636{
25637 find interpretation(problem,interpretation);
25638 // The two endpoint of the link have to exist
25639 find mayExist(problem, interpretation, source);
25640 find mayExist(problem, interpretation, target);
25641 // Type consistency
25642 find mayInstanceOfFunctionalData_class(problem,interpretation,source);
25643 find mayInstanceOfFAMTerminator_class(problem,interpretation,target);
25644 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
25645 // the upper bound of the multiplicity should be considered.
25646 numberOfExistingReferences == count find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,_);
25647 check(numberOfExistingReferences < 1);
25648 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
25649 // the upper bound of the opposite reference multiplicity should be considered.
25650 numberOfExistingOppositeReferences == count find mustInRelationdata_reference_FAMTerminator(problem,interpretation,target,_);
25651 check(numberOfExistingOppositeReferences < 1);
25652 // The reference is containment, then a new reference cannot be create if:
25653 // 1. Multiple parents
25654 neg find mustContains4(problem,interpretation,_,target);
25655 // 2. Circle in the containment hierarchy
25656 neg find mustTransitiveContains(source,target);
25657} or {
25658 find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,target);
25659}
25660/**
25661 * Matcher for detecting tuples t where []interface reference FunctionalData(source,target)
25662 */
25663private pattern mustInRelationinterface_reference_FunctionalData(
25664 problem:LogicProblem, interpretation:PartialInterpretation,
25665 source: DefinedElement, target:DefinedElement)
25666{
25667 find interpretation(problem,interpretation);
25668 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
25669 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface reference FunctionalData");
25670 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
25671 BinaryElementRelationLink.param1(link,source);
25672 BinaryElementRelationLink.param2(link,target);
25673}
25674/**
25675 * Matcher for detecting tuples t where <>interface reference FunctionalData(source,target)
25676 */
25677private pattern mayInRelationinterface_reference_FunctionalData(
25678 problem:LogicProblem, interpretation:PartialInterpretation,
25679 source: DefinedElement, target:DefinedElement)
25680{
25681 find interpretation(problem,interpretation);
25682 // The two endpoint of the link have to exist
25683 find mayExist(problem, interpretation, source);
25684 find mayExist(problem, interpretation, target);
25685 // Type consistency
25686 find mayInstanceOfFunctionalData_class(problem,interpretation,source);
25687 find mayInstanceOfFunctionalInterface_class(problem,interpretation,target);
25688 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
25689 // the upper bound of the multiplicity should be considered.
25690 numberOfExistingReferences == count find mustInRelationinterface_reference_FunctionalData(problem,interpretation,source,_);
25691 check(numberOfExistingReferences < 1);
25692 // The eOpposite of the reference is containment, then a referene cannot be created if
25693 // 1. Multiple parents
25694 neg find mustContains4(problem,interpretation,source,_);
25695 // 2. Circle in the containment hierarchy
25696 neg find mustTransitiveContains(source,target);
25697} or {
25698 find mustInRelationinterface_reference_FunctionalData(problem,interpretation,source,target);
25699}
25700/**
25701 * Matcher for detecting tuples t where []type attribute Function(source,target)
25702 */
25703private pattern mustInRelationtype_attribute_Function(
25704 problem:LogicProblem, interpretation:PartialInterpretation,
25705 source: DefinedElement, target:DefinedElement)
25706{
25707 find interpretation(problem,interpretation);
25708 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
25709 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function");
25710 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
25711 BinaryElementRelationLink.param1(link,source);
25712 BinaryElementRelationLink.param2(link,target);
25713}
25714/**
25715 * Matcher for detecting tuples t where <>type attribute Function(source,target)
25716 */
25717private pattern mayInRelationtype_attribute_Function(
25718 problem:LogicProblem, interpretation:PartialInterpretation,
25719 source: DefinedElement, target:DefinedElement)
25720{
25721 find interpretation(problem,interpretation);
25722 // The two endpoint of the link have to exist
25723 find mayExist(problem, interpretation, source);
25724 find mayExist(problem, interpretation, target);
25725 // Type consistency
25726 find mayInstanceOfFunction_class(problem,interpretation,source);
25727 find mayInstanceOfFunctionType_enum(problem,interpretation,target);
25728 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
25729 // the upper bound of the multiplicity should be considered.
25730 numberOfExistingReferences == count find mustInRelationtype_attribute_Function(problem,interpretation,source,_);
25731 check(numberOfExistingReferences < 1);
25732} or {
25733 find mustInRelationtype_attribute_Function(problem,interpretation,source,target);
25734}
25735
25736//////////
25737// 1.3 Relation Definition Indexers
25738//////////
25739
25740//////////
25741// 1.4 Containment Indexer
25742//////////
25743private pattern mustContains2(source: DefinedElement, target: DefinedElement) {
25744 find mustContains4(_,_,source,target);
25745}
25746
25747private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation,
25748 source: DefinedElement, target: DefinedElement)
25749 { find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,target); }or
25750
25751 { find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,source,target); }or
25752
25753 { find mustInRelationsubElements_reference_Function(problem,interpretation,source,target); }or
25754
25755 { find mustInRelationdata_reference_FunctionalInterface(problem,interpretation,source,target); }or
25756
25757 { find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,source,target); }or
25758
25759 { find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,target); }
25760
25761private pattern mustTransitiveContains(source,target) {
25762 find mustContains2+(source,target);
25763}
25764
25765//////////
25766// 2. Invalidation Indexers
25767//////////
25768// 2.1 Invalidated by WF Queries
25769//////////
25770
25771//////////
25772// 3. Unfinishedness Indexers
25773//////////
25774// 3.1 Unfinishedness Measured by Multiplicity
25775//////////
25776pattern unfinishedLowerMultiplicity_model_reference_FunctionalElement(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) {
25777 find interpretation(problem,interpretation);
25778 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
25779 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement");
25780 find mustInstanceOfFunctionalElement_class(problem,interpretation,object);
25781 numberOfExistingReferences == count find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,object,_);
25782 check(numberOfExistingReferences < 1);
25783 missingMultiplicity == eval(1-numberOfExistingReferences);
25784}
25785pattern unfinishedLowerMultiplicity_to_reference_InformationLink(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) {
25786 find interpretation(problem,interpretation);
25787 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
25788 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"to reference InformationLink");
25789 find mustInstanceOfInformationLink_class(problem,interpretation,object);
25790 numberOfExistingReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,object,_);
25791 check(numberOfExistingReferences < 1);
25792 missingMultiplicity == eval(1-numberOfExistingReferences);
25793}
25794pattern unfinishedLowerMultiplicity_type_attribute_Function(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) {
25795 find interpretation(problem,interpretation);
25796 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
25797 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function");
25798 find mustInstanceOfFunction_class(problem,interpretation,object);
25799 numberOfExistingReferences == count find mustInRelationtype_attribute_Function(problem,interpretation,object,_);
25800 check(numberOfExistingReferences < 1);
25801 missingMultiplicity == eval(1-numberOfExistingReferences);
25802}
25803
25804//////////
25805// 3.2 Unfinishedness Measured by WF Queries
25806//////////
25807
25808//////////
25809// 4. Refinement Indexers
25810//////////
25811// 4.1 Object constructors
25812//////////
25813private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation)
25814{
25815 find interpretation(problem,interpretation);
25816 find mustInstanceOfFunctionalData_class(problem,interpretation,root);
25817 find mustExist(problem, interpretation, root);
25818}or{
25819 find interpretation(problem,interpretation);
25820 find mustInstanceOfFunction_class(problem,interpretation,root);
25821 find mustExist(problem, interpretation, root);
25822}or{
25823 find interpretation(problem,interpretation);
25824 find mustInstanceOfInformationLink_class(problem,interpretation,root);
25825 find mustExist(problem, interpretation, root);
25826}or{
25827 find interpretation(problem,interpretation);
25828 find mustInstanceOfFunctionalElement_class(problem,interpretation,root);
25829 find mustExist(problem, interpretation, root);
25830}or{
25831 find interpretation(problem,interpretation);
25832 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,root);
25833 find mustExist(problem, interpretation, root);
25834}or{
25835 find interpretation(problem,interpretation);
25836 find mustInstanceOfFunctionalInput_class(problem,interpretation,root);
25837 find mustExist(problem, interpretation, root);
25838}or{
25839 find interpretation(problem,interpretation);
25840 find mustInstanceOfFAMTerminator_class(problem,interpretation,root);
25841 find mustExist(problem, interpretation, root);
25842}or{
25843 find interpretation(problem,interpretation);
25844 find mustInstanceOfFunctionalInterface_class(problem,interpretation,root);
25845 find mustExist(problem, interpretation, root);
25846}or{
25847 find interpretation(problem,interpretation);
25848 find mustInstanceOfFunctionalOutput_class(problem,interpretation,root);
25849 find mustExist(problem, interpretation, root);
25850}or{
25851 find interpretation(problem,interpretation);
25852 find mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem,interpretation,root);
25853 find mustExist(problem, interpretation, root);
25854}or{
25855 find interpretation(problem,interpretation);
25856 find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,root);
25857 find mustExist(problem, interpretation, root);
25858}
25859pattern createObject_Function_class_by_rootElements_reference_FunctionalArchitectureModel(
25860 problem:LogicProblem, interpretation:PartialInterpretation,
25861 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
25862 container:DefinedElement)
25863{
25864 find interpretation(problem,interpretation);
25865 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
25866 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class");
25867 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
25868 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"rootElements reference FunctionalArchitectureModel");
25869 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,container);
25870 find mayInstanceOfFunction_class(problem,interpretation,newObject);
25871 find mayInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,container,newObject);
25872 find mustExist(problem, interpretation, container);
25873 neg find mustExist(problem, interpretation, newObject);
25874}
25875pattern createObject_Function_class_by_subElements_reference_Function_with_parent_reference_FunctionalElement(
25876 problem:LogicProblem, interpretation:PartialInterpretation,
25877 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
25878 container:DefinedElement)
25879{
25880 find interpretation(problem,interpretation);
25881 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
25882 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class");
25883 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
25884 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"subElements reference Function");
25885 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
25886 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FunctionalElement");
25887 find mustInstanceOfFunction_class(problem,interpretation,container);
25888 find mayInstanceOfFunction_class(problem,interpretation,newObject);
25889 find mayInRelationsubElements_reference_Function(problem,interpretation,container,newObject);
25890 find mustExist(problem, interpretation, container);
25891 neg find mustExist(problem, interpretation, newObject);
25892}
25893pattern createObject_Function_class(
25894 problem:LogicProblem, interpretation:PartialInterpretation,
25895 typeInterpretation:PartialComplexTypeInterpretation)
25896{
25897 find interpretation(problem,interpretation);
25898 neg find hasElementInContainment(problem,interpretation);
25899 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
25900 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class");
25901 find mayInstanceOfFunction_class(problem,interpretation,newObject);
25902 find mayExist(problem, interpretation, newObject);
25903 neg find mustExist(problem, interpretation, newObject);
25904}
25905pattern createObject_FAMTerminator_class_by_terminator_reference_FunctionalData_with_data_reference_FAMTerminator(
25906 problem:LogicProblem, interpretation:PartialInterpretation,
25907 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
25908 container:DefinedElement)
25909{
25910 find interpretation(problem,interpretation);
25911 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
25912 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class");
25913 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
25914 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"terminator reference FunctionalData");
25915 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
25916 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"data reference FAMTerminator");
25917 find mustInstanceOfFunctionalData_class(problem,interpretation,container);
25918 find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject);
25919 find mayInRelationterminator_reference_FunctionalData(problem,interpretation,container,newObject);
25920 find mustExist(problem, interpretation, container);
25921 neg find mustExist(problem, interpretation, newObject);
25922}
25923pattern createObject_FAMTerminator_class(
25924 problem:LogicProblem, interpretation:PartialInterpretation,
25925 typeInterpretation:PartialComplexTypeInterpretation)
25926{
25927 find interpretation(problem,interpretation);
25928 neg find hasElementInContainment(problem,interpretation);
25929 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
25930 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class");
25931 find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject);
25932 find mayExist(problem, interpretation, newObject);
25933 neg find mustExist(problem, interpretation, newObject);
25934}
25935pattern createObject_FunctionalOutput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData(
25936 problem:LogicProblem, interpretation:PartialInterpretation,
25937 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
25938 container:DefinedElement)
25939{
25940 find interpretation(problem,interpretation);
25941 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
25942 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class");
25943 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
25944 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface");
25945 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
25946 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData");
25947 find mustInstanceOfFunctionalInterface_class(problem,interpretation,container);
25948 find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject);
25949 find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject);
25950 find mustExist(problem, interpretation, container);
25951 neg find mustExist(problem, interpretation, newObject);
25952}
25953pattern createObject_FunctionalOutput_class(
25954 problem:LogicProblem, interpretation:PartialInterpretation,
25955 typeInterpretation:PartialComplexTypeInterpretation)
25956{
25957 find interpretation(problem,interpretation);
25958 neg find hasElementInContainment(problem,interpretation);
25959 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
25960 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class");
25961 find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject);
25962 find mayExist(problem, interpretation, newObject);
25963 neg find mustExist(problem, interpretation, newObject);
25964}
25965pattern createObject_FunctionalInterface_class_by_interface_reference_FunctionalElement_with_element_reference_FunctionalInterface(
25966 problem:LogicProblem, interpretation:PartialInterpretation,
25967 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
25968 container:DefinedElement)
25969{
25970 find interpretation(problem,interpretation);
25971 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
25972 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class");
25973 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
25974 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"interface reference FunctionalElement");
25975 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
25976 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"element reference FunctionalInterface");
25977 find mustInstanceOfFunctionalElement_class(problem,interpretation,container);
25978 find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject);
25979 find mayInRelationinterface_reference_FunctionalElement(problem,interpretation,container,newObject);
25980 find mustExist(problem, interpretation, container);
25981 neg find mustExist(problem, interpretation, newObject);
25982}
25983pattern createObject_FunctionalInterface_class(
25984 problem:LogicProblem, interpretation:PartialInterpretation,
25985 typeInterpretation:PartialComplexTypeInterpretation)
25986{
25987 find interpretation(problem,interpretation);
25988 neg find hasElementInContainment(problem,interpretation);
25989 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
25990 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class");
25991 find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject);
25992 find mayExist(problem, interpretation, newObject);
25993 neg find mustExist(problem, interpretation, newObject);
25994}
25995pattern createObject_FunctionalArchitectureModel_class_UndefinedPart(
25996 problem:LogicProblem, interpretation:PartialInterpretation,
25997 typeInterpretation:PartialComplexTypeInterpretation)
25998{
25999 find interpretation(problem,interpretation);
26000 neg find hasElementInContainment(problem,interpretation);
26001 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
26002 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalArchitectureModel class UndefinedPart");
26003 find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,newObject);
26004 find mayExist(problem, interpretation, newObject);
26005 neg find mustExist(problem, interpretation, newObject);
26006}
26007pattern createObject_FunctionalInput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData(
26008 problem:LogicProblem, interpretation:PartialInterpretation,
26009 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
26010 container:DefinedElement)
26011{
26012 find interpretation(problem,interpretation);
26013 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
26014 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class");
26015 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
26016 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface");
26017 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
26018 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData");
26019 find mustInstanceOfFunctionalInterface_class(problem,interpretation,container);
26020 find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject);
26021 find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject);
26022 find mustExist(problem, interpretation, container);
26023 neg find mustExist(problem, interpretation, newObject);
26024}
26025pattern createObject_FunctionalInput_class(
26026 problem:LogicProblem, interpretation:PartialInterpretation,
26027 typeInterpretation:PartialComplexTypeInterpretation)
26028{
26029 find interpretation(problem,interpretation);
26030 neg find hasElementInContainment(problem,interpretation);
26031 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
26032 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class");
26033 find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject);
26034 find mayExist(problem, interpretation, newObject);
26035 neg find mustExist(problem, interpretation, newObject);
26036}
26037pattern createObject_InformationLink_class_by_outgoingLinks_reference_FunctionalOutput_with_from_reference_InformationLink(
26038 problem:LogicProblem, interpretation:PartialInterpretation,
26039 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
26040 container:DefinedElement)
26041{
26042 find interpretation(problem,interpretation);
26043 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
26044 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class");
26045 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
26046 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingLinks reference FunctionalOutput");
26047 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
26048 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"from reference InformationLink");
26049 find mustInstanceOfFunctionalOutput_class(problem,interpretation,container);
26050 find mayInstanceOfInformationLink_class(problem,interpretation,newObject);
26051 find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,container,newObject);
26052 find mustExist(problem, interpretation, container);
26053 neg find mustExist(problem, interpretation, newObject);
26054}
26055pattern createObject_InformationLink_class(
26056 problem:LogicProblem, interpretation:PartialInterpretation,
26057 typeInterpretation:PartialComplexTypeInterpretation)
26058{
26059 find interpretation(problem,interpretation);
26060 neg find hasElementInContainment(problem,interpretation);
26061 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
26062 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class");
26063 find mayInstanceOfInformationLink_class(problem,interpretation,newObject);
26064 find mayExist(problem, interpretation, newObject);
26065 neg find mustExist(problem, interpretation, newObject);
26066}
26067
26068//////////
26069// 4.2 Type refinement
26070//////////
26071pattern refineTypeTo_Function_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
26072 find interpretation(problem,interpretation);
26073 PartialInterpretation.newElements(interpretation,element);
26074 find mayInstanceOfFunction_class(problem,interpretation,element);
26075 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
26076 neg find mustInstanceOfFunction_class(problem,interpretation,element);
26077 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
26078 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
26079 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
26080 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
26081}
26082pattern refineTypeTo_FAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
26083 find interpretation(problem,interpretation);
26084 PartialInterpretation.newElements(interpretation,element);
26085 find mayInstanceOfFAMTerminator_class(problem,interpretation,element);
26086 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
26087 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
26088 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
26089 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
26090 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
26091 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
26092}
26093pattern refineTypeTo_FunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
26094 find interpretation(problem,interpretation);
26095 PartialInterpretation.newElements(interpretation,element);
26096 find mayInstanceOfFunctionalOutput_class(problem,interpretation,element);
26097 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
26098 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
26099 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
26100 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
26101 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
26102 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
26103 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
26104}
26105pattern refineTypeTo_FunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
26106 find interpretation(problem,interpretation);
26107 PartialInterpretation.newElements(interpretation,element);
26108 find mayInstanceOfFunctionalInterface_class(problem,interpretation,element);
26109 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
26110 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
26111 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
26112 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
26113 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
26114 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
26115}
26116pattern refineTypeTo_FunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
26117 find interpretation(problem,interpretation);
26118 PartialInterpretation.newElements(interpretation,element);
26119 find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element);
26120 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
26121 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
26122 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
26123 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
26124 neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element);
26125 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
26126}
26127pattern refineTypeTo_FunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
26128 find interpretation(problem,interpretation);
26129 PartialInterpretation.newElements(interpretation,element);
26130 find mayInstanceOfFunctionalInput_class(problem,interpretation,element);
26131 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
26132 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
26133 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
26134 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
26135 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
26136 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
26137 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
26138}
26139pattern refineTypeTo_InformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
26140 find interpretation(problem,interpretation);
26141 PartialInterpretation.newElements(interpretation,element);
26142 find mayInstanceOfInformationLink_class(problem,interpretation,element);
26143 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
26144 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
26145 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
26146 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
26147 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
26148 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
26149}
26150
26151//////////
26152// 4.3 Relation refinement
26153//////////
26154pattern refineRelation_model_reference_FunctionalElement(
26155 problem:LogicProblem, interpretation:PartialInterpretation,
26156 relationIterpretation:PartialRelationInterpretation,
26157 from: DefinedElement, to: DefinedElement)
26158{
26159 find interpretation(problem,interpretation);
26160 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
26161 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement");
26162 find mustExist(problem, interpretation, from);
26163 find mustExist(problem, interpretation, to);
26164 find mustInstanceOfFunctionalElement_class(problem,interpretation,from);
26165 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,to);
26166 find mayInRelationmodel_reference_FunctionalElement(problem,interpretation,from,to);
26167 neg find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,from,to);
26168}
26169pattern refineRelation_IncomingLinks_reference_FunctionalInput_and_to_reference_InformationLink(
26170 problem:LogicProblem, interpretation:PartialInterpretation,
26171 relationIterpretation:PartialRelationInterpretation, oppositeInterpretation:PartialRelationInterpretation,
26172 from: DefinedElement, to: DefinedElement)
26173{
26174 find interpretation(problem,interpretation);
26175 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
26176 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"IncomingLinks reference FunctionalInput");
26177 PartialInterpretation.partialrelationinterpretation(interpretation,oppositeInterpretation);
26178 PartialRelationInterpretation.interpretationOf.name(oppositeInterpretation,"to reference InformationLink");
26179 find mustExist(problem, interpretation, from);
26180 find mustExist(problem, interpretation, to);
26181 find mustInstanceOfFunctionalInput_class(problem,interpretation,from);
26182 find mustInstanceOfInformationLink_class(problem,interpretation,to);
26183 find mayInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,from,to);
26184 neg find mustInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,from,to);
26185}
26186pattern refineRelation_type_attribute_Function(
26187 problem:LogicProblem, interpretation:PartialInterpretation,
26188 relationIterpretation:PartialRelationInterpretation,
26189 from: DefinedElement, to: DefinedElement)
26190{
26191 find interpretation(problem,interpretation);
26192 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
26193 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function");
26194 find mustExist(problem, interpretation, from);
26195 find mustExist(problem, interpretation, to);
26196 find mustInstanceOfFunction_class(problem,interpretation,from);
26197 find mustInstanceOfFunctionType_enum(problem,interpretation,to);
26198 find mayInRelationtype_attribute_Function(problem,interpretation,from,to);
26199 neg find mustInRelationtype_attribute_Function(problem,interpretation,from,to);
26200}
26201import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage"
26202import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem"
26203import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language"
26204
26205//////////
26206// 0. Util
26207//////////
26208private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) {
26209 PartialInterpretation.problem(interpretation,problem);
26210}
26211
26212/////////////////////////
26213// 0.1 Existence
26214/////////////////////////
26215private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
26216 find interpretation(problem,interpretation);
26217 LogicProblem.elements(problem,element);
26218} or {
26219 find interpretation(problem,interpretation);
26220 PartialInterpretation.newElements(interpretation,element);
26221}
26222
26223private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
26224 find mustExist(problem,interpretation,element);
26225} or {
26226 find interpretation(problem,interpretation);
26227 neg find elementCloseWorld(element);
26228 PartialInterpretation.openWorldElements(interpretation,element);
26229}
26230
26231private pattern elementCloseWorld(element:DefinedElement) {
26232 PartialInterpretation.openWorldElements(i,element);
26233 PartialInterpretation.maxNewElements(i,0);
26234} or {
26235 Scope.targetTypeInterpretation(scope,interpretation);
26236 PartialTypeInterpratation.elements(interpretation,element);
26237 Scope.maxNewElements(scope,0);
26238}
26239
26240////////////////////////
26241// 0.2 Equivalence
26242////////////////////////
26243pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) {
26244 find mayExist(problem,interpretation,a);
26245 find mayExist(problem,interpretation,b);
26246 a == b;
26247}
26248
26249////////////////////////
26250// 0.3 Required Patterns by TypeIndexer
26251////////////////////////
26252private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) {
26253 find interpretation(problem,interpretation);
26254 LogicProblem.types(problem,type);
26255 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
26256 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
26257}
26258
26259private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) {
26260 find interpretation(problem,interpretation);
26261 LogicProblem.types(problem,type);
26262 TypeDefinition.elements(type,element);
26263} or {
26264 find interpretation(problem,interpretation);
26265 find typeInterpretation(problem,interpretation,type,typeInterpretation);
26266 PartialComplexTypeInterpretation.elements(typeInterpretation,element);
26267}
26268
26269private pattern isPrimitive(element: PrimitiveElement) {
26270 PrimitiveElement(element);
26271}
26272
26273//////////
26274// 1. Problem-Specific Base Indexers
26275//////////
26276// 1.1 Type Indexers
26277//////////
26278// 1.1.1 primitive Type Indexers
26279//////////
26280
26281//////////
26282// 1.1.2 domain-specific Type Indexers
26283//////////
26284/**
26285 * An element must be an instance of type "EAttribute class".
26286 */
26287private pattern mustInstanceOfEAttribute_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
26288 Type.name(type,"EAttribute class");
26289 find directInstanceOf(problem,interpretation,element,type);
26290}
26291private pattern scopeDisallowsNewEAttribute_class(problem:LogicProblem, interpretation:PartialInterpretation) {
26292 find interpretation(problem,interpretation);
26293 PartialInterpretation.scopes(interpretation,scope);
26294 Scope.targetTypeInterpretation(scope,typeInterpretation);
26295 Scope.maxNewElements(scope,0);
26296 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
26297 Type.name(type,"EAttribute class");
26298}
26299
26300/**
26301 * An element may be an instance of type "EAttribute class".
26302 */
26303private pattern mayInstanceOfEAttribute_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
26304{
26305 find interpretation(problem,interpretation);
26306 PartialInterpretation.newElements(interpretation,element);
26307 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
26308 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
26309 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
26310 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
26311 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
26312 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
26313 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
26314 neg find mustInstanceOfEReference_class(problem,interpretation,element);
26315 neg find mustInstanceOfEObject_class(problem,interpretation,element);
26316 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
26317 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
26318 neg find scopeDisallowsNewEAttribute_class(problem, interpretation);
26319 neg find isPrimitive(element);
26320} or {
26321 find interpretation(problem,interpretation);
26322 PartialInterpretation.openWorldElements(interpretation,element);
26323 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
26324 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
26325 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
26326 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
26327 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
26328 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
26329 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
26330 neg find mustInstanceOfEReference_class(problem,interpretation,element);
26331 neg find mustInstanceOfEObject_class(problem,interpretation,element);
26332 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
26333 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
26334 neg find scopeDisallowsNewEAttribute_class(problem, interpretation);
26335 neg find isPrimitive(element);
26336} or
26337{ find mustInstanceOfEAttribute_class(problem,interpretation,element); }
26338/**
26339 * An element must be an instance of type "EAnnotation class".
26340 */
26341private pattern mustInstanceOfEAnnotation_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
26342 Type.name(type,"EAnnotation class");
26343 find directInstanceOf(problem,interpretation,element,type);
26344}
26345private pattern scopeDisallowsNewEAnnotation_class(problem:LogicProblem, interpretation:PartialInterpretation) {
26346 find interpretation(problem,interpretation);
26347 PartialInterpretation.scopes(interpretation,scope);
26348 Scope.targetTypeInterpretation(scope,typeInterpretation);
26349 Scope.maxNewElements(scope,0);
26350 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
26351 Type.name(type,"EAnnotation class");
26352}
26353
26354/**
26355 * An element may be an instance of type "EAnnotation class".
26356 */
26357private pattern mayInstanceOfEAnnotation_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
26358{
26359 find interpretation(problem,interpretation);
26360 PartialInterpretation.newElements(interpretation,element);
26361 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
26362 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
26363 neg find mustInstanceOfEObject_class(problem,interpretation,element);
26364 neg find mustInstanceOfENamedElement_class(problem,interpretation,element);
26365 neg find scopeDisallowsNewEAnnotation_class(problem, interpretation);
26366 neg find isPrimitive(element);
26367} or {
26368 find interpretation(problem,interpretation);
26369 PartialInterpretation.openWorldElements(interpretation,element);
26370 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
26371 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
26372 neg find mustInstanceOfEObject_class(problem,interpretation,element);
26373 neg find mustInstanceOfENamedElement_class(problem,interpretation,element);
26374 neg find scopeDisallowsNewEAnnotation_class(problem, interpretation);
26375 neg find isPrimitive(element);
26376} or
26377{ find mustInstanceOfEAnnotation_class(problem,interpretation,element); }
26378/**
26379 * An element must be an instance of type "EClass class".
26380 */
26381private pattern mustInstanceOfEClass_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
26382 Type.name(type,"EClass class");
26383 find directInstanceOf(problem,interpretation,element,type);
26384}
26385private pattern scopeDisallowsNewEClass_class(problem:LogicProblem, interpretation:PartialInterpretation) {
26386 find interpretation(problem,interpretation);
26387 PartialInterpretation.scopes(interpretation,scope);
26388 Scope.targetTypeInterpretation(scope,typeInterpretation);
26389 Scope.maxNewElements(scope,0);
26390 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
26391 Type.name(type,"EClass class");
26392}
26393
26394/**
26395 * An element may be an instance of type "EClass class".
26396 */
26397private pattern mayInstanceOfEClass_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
26398{
26399 find interpretation(problem,interpretation);
26400 PartialInterpretation.newElements(interpretation,element);
26401 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
26402 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
26403 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
26404 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
26405 neg find mustInstanceOfEDataType_class(problem,interpretation,element);
26406 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
26407 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
26408 neg find mustInstanceOfEObject_class(problem,interpretation,element);
26409 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
26410 neg find scopeDisallowsNewEClass_class(problem, interpretation);
26411 neg find isPrimitive(element);
26412} or {
26413 find interpretation(problem,interpretation);
26414 PartialInterpretation.openWorldElements(interpretation,element);
26415 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
26416 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
26417 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
26418 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
26419 neg find mustInstanceOfEDataType_class(problem,interpretation,element);
26420 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
26421 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
26422 neg find mustInstanceOfEObject_class(problem,interpretation,element);
26423 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
26424 neg find scopeDisallowsNewEClass_class(problem, interpretation);
26425 neg find isPrimitive(element);
26426} or
26427{ find mustInstanceOfEClass_class(problem,interpretation,element); }
26428/**
26429 * An element must be an instance of type "EClassifier class".
26430 */
26431private pattern mustInstanceOfEClassifier_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
26432 Type.name(type,"EClassifier class");
26433 find directInstanceOf(problem,interpretation,element,type);
26434}
26435private pattern scopeDisallowsNewEClassifier_class(problem:LogicProblem, interpretation:PartialInterpretation) {
26436 find interpretation(problem,interpretation);
26437 PartialInterpretation.scopes(interpretation,scope);
26438 Scope.targetTypeInterpretation(scope,typeInterpretation);
26439 Scope.maxNewElements(scope,0);
26440 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
26441 Type.name(type,"EClassifier class");
26442}
26443
26444/**
26445 * An element may be an instance of type "EClassifier class".
26446 */
26447private pattern mayInstanceOfEClassifier_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
26448{
26449 find interpretation(problem,interpretation);
26450 PartialInterpretation.newElements(interpretation,element);
26451 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
26452 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
26453 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
26454 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
26455 neg find mustInstanceOfEDataType_class(problem,interpretation,element);
26456 neg find mustInstanceOfEClass_class(problem,interpretation,element);
26457 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
26458 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
26459 neg find mustInstanceOfEObject_class(problem,interpretation,element);
26460 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
26461 neg find scopeDisallowsNewEClassifier_class(problem, interpretation);
26462 neg find isPrimitive(element);
26463} or {
26464 find interpretation(problem,interpretation);
26465 PartialInterpretation.openWorldElements(interpretation,element);
26466 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
26467 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
26468 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
26469 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
26470 neg find mustInstanceOfEDataType_class(problem,interpretation,element);
26471 neg find mustInstanceOfEClass_class(problem,interpretation,element);
26472 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
26473 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
26474 neg find mustInstanceOfEObject_class(problem,interpretation,element);
26475 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
26476 neg find scopeDisallowsNewEClassifier_class(problem, interpretation);
26477 neg find isPrimitive(element);
26478} or
26479{ find mustInstanceOfEClassifier_class(problem,interpretation,element); }
26480/**
26481 * An element must be an instance of type "EDataType class".
26482 */
26483private pattern mustInstanceOfEDataType_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
26484 Type.name(type,"EDataType class");
26485 find directInstanceOf(problem,interpretation,element,type);
26486}
26487private pattern scopeDisallowsNewEDataType_class(problem:LogicProblem, interpretation:PartialInterpretation) {
26488 find interpretation(problem,interpretation);
26489 PartialInterpretation.scopes(interpretation,scope);
26490 Scope.targetTypeInterpretation(scope,typeInterpretation);
26491 Scope.maxNewElements(scope,0);
26492 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
26493 Type.name(type,"EDataType class");
26494}
26495
26496/**
26497 * An element may be an instance of type "EDataType class".
26498 */
26499private pattern mayInstanceOfEDataType_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
26500{
26501 find interpretation(problem,interpretation);
26502 PartialInterpretation.newElements(interpretation,element);
26503 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
26504 neg find mustInstanceOfEEnum_class(problem,interpretation,element);
26505 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
26506 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
26507 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
26508 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
26509 neg find mustInstanceOfEClass_class(problem,interpretation,element);
26510 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
26511 neg find mustInstanceOfEObject_class(problem,interpretation,element);
26512 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
26513 neg find scopeDisallowsNewEDataType_class(problem, interpretation);
26514 neg find isPrimitive(element);
26515} or {
26516 find interpretation(problem,interpretation);
26517 PartialInterpretation.openWorldElements(interpretation,element);
26518 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
26519 neg find mustInstanceOfEEnum_class(problem,interpretation,element);
26520 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
26521 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
26522 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
26523 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
26524 neg find mustInstanceOfEClass_class(problem,interpretation,element);
26525 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
26526 neg find mustInstanceOfEObject_class(problem,interpretation,element);
26527 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
26528 neg find scopeDisallowsNewEDataType_class(problem, interpretation);
26529 neg find isPrimitive(element);
26530} or
26531{ find mustInstanceOfEDataType_class(problem,interpretation,element); }
26532/**
26533 * An element must be an instance of type "EEnum class".
26534 */
26535private pattern mustInstanceOfEEnum_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
26536 Type.name(type,"EEnum class");
26537 find directInstanceOf(problem,interpretation,element,type);
26538}
26539private pattern scopeDisallowsNewEEnum_class(problem:LogicProblem, interpretation:PartialInterpretation) {
26540 find interpretation(problem,interpretation);
26541 PartialInterpretation.scopes(interpretation,scope);
26542 Scope.targetTypeInterpretation(scope,typeInterpretation);
26543 Scope.maxNewElements(scope,0);
26544 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
26545 Type.name(type,"EEnum class");
26546}
26547
26548/**
26549 * An element may be an instance of type "EEnum class".
26550 */
26551private pattern mayInstanceOfEEnum_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
26552{
26553 find interpretation(problem,interpretation);
26554 PartialInterpretation.newElements(interpretation,element);
26555 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
26556 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
26557 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
26558 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
26559 neg find mustInstanceOfEClass_class(problem,interpretation,element);
26560 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
26561 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
26562 neg find mustInstanceOfEObject_class(problem,interpretation,element);
26563 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
26564 neg find scopeDisallowsNewEEnum_class(problem, interpretation);
26565 neg find isPrimitive(element);
26566} or {
26567 find interpretation(problem,interpretation);
26568 PartialInterpretation.openWorldElements(interpretation,element);
26569 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
26570 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
26571 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
26572 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
26573 neg find mustInstanceOfEClass_class(problem,interpretation,element);
26574 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
26575 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
26576 neg find mustInstanceOfEObject_class(problem,interpretation,element);
26577 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
26578 neg find scopeDisallowsNewEEnum_class(problem, interpretation);
26579 neg find isPrimitive(element);
26580} or
26581{ find mustInstanceOfEEnum_class(problem,interpretation,element); }
26582/**
26583 * An element must be an instance of type "EEnumLiteral class".
26584 */
26585private pattern mustInstanceOfEEnumLiteral_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
26586 Type.name(type,"EEnumLiteral class");
26587 find directInstanceOf(problem,interpretation,element,type);
26588}
26589private pattern scopeDisallowsNewEEnumLiteral_class(problem:LogicProblem, interpretation:PartialInterpretation) {
26590 find interpretation(problem,interpretation);
26591 PartialInterpretation.scopes(interpretation,scope);
26592 Scope.targetTypeInterpretation(scope,typeInterpretation);
26593 Scope.maxNewElements(scope,0);
26594 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
26595 Type.name(type,"EEnumLiteral class");
26596}
26597
26598/**
26599 * An element may be an instance of type "EEnumLiteral class".
26600 */
26601private pattern mayInstanceOfEEnumLiteral_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
26602{
26603 find interpretation(problem,interpretation);
26604 PartialInterpretation.newElements(interpretation,element);
26605 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
26606 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
26607 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
26608 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
26609 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
26610 neg find mustInstanceOfEObject_class(problem,interpretation,element);
26611 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
26612 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
26613 neg find scopeDisallowsNewEEnumLiteral_class(problem, interpretation);
26614 neg find isPrimitive(element);
26615} or {
26616 find interpretation(problem,interpretation);
26617 PartialInterpretation.openWorldElements(interpretation,element);
26618 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
26619 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
26620 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
26621 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
26622 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
26623 neg find mustInstanceOfEObject_class(problem,interpretation,element);
26624 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
26625 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
26626 neg find scopeDisallowsNewEEnumLiteral_class(problem, interpretation);
26627 neg find isPrimitive(element);
26628} or
26629{ find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); }
26630/**
26631 * An element must be an instance of type "EModelElement class".
26632 */
26633private pattern mustInstanceOfEModelElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
26634 Type.name(type,"EModelElement class");
26635 find directInstanceOf(problem,interpretation,element,type);
26636}
26637private pattern scopeDisallowsNewEModelElement_class(problem:LogicProblem, interpretation:PartialInterpretation) {
26638 find interpretation(problem,interpretation);
26639 PartialInterpretation.scopes(interpretation,scope);
26640 Scope.targetTypeInterpretation(scope,typeInterpretation);
26641 Scope.maxNewElements(scope,0);
26642 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
26643 Type.name(type,"EModelElement class");
26644}
26645
26646/**
26647 * An element may be an instance of type "EModelElement class".
26648 */
26649private pattern mayInstanceOfEModelElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
26650{
26651 find interpretation(problem,interpretation);
26652 PartialInterpretation.newElements(interpretation,element);
26653 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
26654 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
26655 neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element);
26656 neg find mustInstanceOfEObject_class(problem,interpretation,element);
26657 neg find mustInstanceOfENamedElement_class(problem,interpretation,element);
26658 neg find scopeDisallowsNewEModelElement_class(problem, interpretation);
26659 neg find isPrimitive(element);
26660} or {
26661 find interpretation(problem,interpretation);
26662 PartialInterpretation.openWorldElements(interpretation,element);
26663 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
26664 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
26665 neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element);
26666 neg find mustInstanceOfEObject_class(problem,interpretation,element);
26667 neg find mustInstanceOfENamedElement_class(problem,interpretation,element);
26668 neg find scopeDisallowsNewEModelElement_class(problem, interpretation);
26669 neg find isPrimitive(element);
26670} or
26671{ find mustInstanceOfEModelElement_class(problem,interpretation,element); }
26672/**
26673 * An element must be an instance of type "ENamedElement class".
26674 */
26675private pattern mustInstanceOfENamedElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
26676 Type.name(type,"ENamedElement class");
26677 find directInstanceOf(problem,interpretation,element,type);
26678}
26679private pattern scopeDisallowsNewENamedElement_class(problem:LogicProblem, interpretation:PartialInterpretation) {
26680 find interpretation(problem,interpretation);
26681 PartialInterpretation.scopes(interpretation,scope);
26682 Scope.targetTypeInterpretation(scope,typeInterpretation);
26683 Scope.maxNewElements(scope,0);
26684 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
26685 Type.name(type,"ENamedElement class");
26686}
26687
26688/**
26689 * An element may be an instance of type "ENamedElement class".
26690 */
26691private pattern mayInstanceOfENamedElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
26692{
26693 find interpretation(problem,interpretation);
26694 PartialInterpretation.newElements(interpretation,element);
26695 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
26696 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
26697 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
26698 neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element);
26699 neg find mustInstanceOfEObject_class(problem,interpretation,element);
26700 neg find scopeDisallowsNewENamedElement_class(problem, interpretation);
26701 neg find isPrimitive(element);
26702} or {
26703 find interpretation(problem,interpretation);
26704 PartialInterpretation.openWorldElements(interpretation,element);
26705 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
26706 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
26707 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
26708 neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element);
26709 neg find mustInstanceOfEObject_class(problem,interpretation,element);
26710 neg find scopeDisallowsNewENamedElement_class(problem, interpretation);
26711 neg find isPrimitive(element);
26712} or
26713{ find mustInstanceOfENamedElement_class(problem,interpretation,element); }
26714/**
26715 * An element must be an instance of type "EObject class".
26716 */
26717private pattern mustInstanceOfEObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
26718 Type.name(type,"EObject class");
26719 find directInstanceOf(problem,interpretation,element,type);
26720}
26721private pattern scopeDisallowsNewEObject_class(problem:LogicProblem, interpretation:PartialInterpretation) {
26722 find interpretation(problem,interpretation);
26723 PartialInterpretation.scopes(interpretation,scope);
26724 Scope.targetTypeInterpretation(scope,typeInterpretation);
26725 Scope.maxNewElements(scope,0);
26726 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
26727 Type.name(type,"EObject class");
26728}
26729
26730/**
26731 * An element may be an instance of type "EObject class".
26732 */
26733private pattern mayInstanceOfEObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
26734{
26735 find interpretation(problem,interpretation);
26736 PartialInterpretation.newElements(interpretation,element);
26737 neg find mustInstanceOfEModelElement_class(problem,interpretation,element);
26738 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
26739 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
26740 neg find scopeDisallowsNewEObject_class(problem, interpretation);
26741 neg find isPrimitive(element);
26742} or {
26743 find interpretation(problem,interpretation);
26744 PartialInterpretation.openWorldElements(interpretation,element);
26745 neg find mustInstanceOfEModelElement_class(problem,interpretation,element);
26746 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
26747 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
26748 neg find scopeDisallowsNewEObject_class(problem, interpretation);
26749 neg find isPrimitive(element);
26750} or
26751{ find mustInstanceOfEObject_class(problem,interpretation,element); }
26752/**
26753 * An element must be an instance of type "EOperation class".
26754 */
26755private pattern mustInstanceOfEOperation_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
26756 Type.name(type,"EOperation class");
26757 find directInstanceOf(problem,interpretation,element,type);
26758}
26759private pattern scopeDisallowsNewEOperation_class(problem:LogicProblem, interpretation:PartialInterpretation) {
26760 find interpretation(problem,interpretation);
26761 PartialInterpretation.scopes(interpretation,scope);
26762 Scope.targetTypeInterpretation(scope,typeInterpretation);
26763 Scope.maxNewElements(scope,0);
26764 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
26765 Type.name(type,"EOperation class");
26766}
26767
26768/**
26769 * An element may be an instance of type "EOperation class".
26770 */
26771private pattern mayInstanceOfEOperation_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
26772{
26773 find interpretation(problem,interpretation);
26774 PartialInterpretation.newElements(interpretation,element);
26775 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
26776 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
26777 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
26778 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
26779 neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element);
26780 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
26781 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
26782 neg find mustInstanceOfEObject_class(problem,interpretation,element);
26783 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
26784 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
26785 neg find scopeDisallowsNewEOperation_class(problem, interpretation);
26786 neg find isPrimitive(element);
26787} or {
26788 find interpretation(problem,interpretation);
26789 PartialInterpretation.openWorldElements(interpretation,element);
26790 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
26791 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
26792 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
26793 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
26794 neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element);
26795 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
26796 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
26797 neg find mustInstanceOfEObject_class(problem,interpretation,element);
26798 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
26799 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
26800 neg find scopeDisallowsNewEOperation_class(problem, interpretation);
26801 neg find isPrimitive(element);
26802} or
26803{ find mustInstanceOfEOperation_class(problem,interpretation,element); }
26804/**
26805 * An element must be an instance of type "EPackage class".
26806 */
26807private pattern mustInstanceOfEPackage_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
26808 Type.name(type,"EPackage class");
26809 find directInstanceOf(problem,interpretation,element,type);
26810}
26811private pattern scopeDisallowsNewEPackage_class(problem:LogicProblem, interpretation:PartialInterpretation) {
26812 find interpretation(problem,interpretation);
26813 PartialInterpretation.scopes(interpretation,scope);
26814 Scope.targetTypeInterpretation(scope,typeInterpretation);
26815 Scope.maxNewElements(scope,0);
26816 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
26817 Type.name(type,"EPackage class");
26818}
26819
26820/**
26821 * An element may be an instance of type "EPackage class".
26822 */
26823private pattern mayInstanceOfEPackage_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
26824{
26825 find interpretation(problem,interpretation);
26826 PartialInterpretation.newElements(interpretation,element);
26827 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
26828 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
26829 neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element);
26830 neg find mustInstanceOfEObject_class(problem,interpretation,element);
26831 neg find scopeDisallowsNewEPackage_class(problem, interpretation);
26832 neg find isPrimitive(element);
26833} or {
26834 find interpretation(problem,interpretation);
26835 PartialInterpretation.openWorldElements(interpretation,element);
26836 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
26837 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
26838 neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element);
26839 neg find mustInstanceOfEObject_class(problem,interpretation,element);
26840 neg find scopeDisallowsNewEPackage_class(problem, interpretation);
26841 neg find isPrimitive(element);
26842} or
26843{ find mustInstanceOfEPackage_class(problem,interpretation,element); }
26844/**
26845 * An element must be an instance of type "EParameter class".
26846 */
26847private pattern mustInstanceOfEParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
26848 Type.name(type,"EParameter class");
26849 find directInstanceOf(problem,interpretation,element,type);
26850}
26851private pattern scopeDisallowsNewEParameter_class(problem:LogicProblem, interpretation:PartialInterpretation) {
26852 find interpretation(problem,interpretation);
26853 PartialInterpretation.scopes(interpretation,scope);
26854 Scope.targetTypeInterpretation(scope,typeInterpretation);
26855 Scope.maxNewElements(scope,0);
26856 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
26857 Type.name(type,"EParameter class");
26858}
26859
26860/**
26861 * An element may be an instance of type "EParameter class".
26862 */
26863private pattern mayInstanceOfEParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
26864{
26865 find interpretation(problem,interpretation);
26866 PartialInterpretation.newElements(interpretation,element);
26867 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
26868 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
26869 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
26870 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
26871 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
26872 neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element);
26873 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
26874 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
26875 neg find mustInstanceOfEObject_class(problem,interpretation,element);
26876 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
26877 neg find scopeDisallowsNewEParameter_class(problem, interpretation);
26878 neg find isPrimitive(element);
26879} or {
26880 find interpretation(problem,interpretation);
26881 PartialInterpretation.openWorldElements(interpretation,element);
26882 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
26883 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
26884 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
26885 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
26886 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
26887 neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element);
26888 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
26889 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
26890 neg find mustInstanceOfEObject_class(problem,interpretation,element);
26891 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
26892 neg find scopeDisallowsNewEParameter_class(problem, interpretation);
26893 neg find isPrimitive(element);
26894} or
26895{ find mustInstanceOfEParameter_class(problem,interpretation,element); }
26896/**
26897 * An element must be an instance of type "EReference class".
26898 */
26899private pattern mustInstanceOfEReference_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
26900 Type.name(type,"EReference class");
26901 find directInstanceOf(problem,interpretation,element,type);
26902}
26903private pattern scopeDisallowsNewEReference_class(problem:LogicProblem, interpretation:PartialInterpretation) {
26904 find interpretation(problem,interpretation);
26905 PartialInterpretation.scopes(interpretation,scope);
26906 Scope.targetTypeInterpretation(scope,typeInterpretation);
26907 Scope.maxNewElements(scope,0);
26908 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
26909 Type.name(type,"EReference class");
26910}
26911
26912/**
26913 * An element may be an instance of type "EReference class".
26914 */
26915private pattern mayInstanceOfEReference_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
26916{
26917 find interpretation(problem,interpretation);
26918 PartialInterpretation.newElements(interpretation,element);
26919 neg find mustInstanceOfEAttribute_class(problem,interpretation,element);
26920 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
26921 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
26922 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
26923 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
26924 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
26925 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
26926 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
26927 neg find mustInstanceOfEObject_class(problem,interpretation,element);
26928 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
26929 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
26930 neg find scopeDisallowsNewEReference_class(problem, interpretation);
26931 neg find isPrimitive(element);
26932} or {
26933 find interpretation(problem,interpretation);
26934 PartialInterpretation.openWorldElements(interpretation,element);
26935 neg find mustInstanceOfEAttribute_class(problem,interpretation,element);
26936 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
26937 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
26938 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
26939 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
26940 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
26941 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
26942 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
26943 neg find mustInstanceOfEObject_class(problem,interpretation,element);
26944 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
26945 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
26946 neg find scopeDisallowsNewEReference_class(problem, interpretation);
26947 neg find isPrimitive(element);
26948} or
26949{ find mustInstanceOfEReference_class(problem,interpretation,element); }
26950/**
26951 * An element must be an instance of type "EStructuralFeature class".
26952 */
26953private pattern mustInstanceOfEStructuralFeature_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
26954 Type.name(type,"EStructuralFeature class");
26955 find directInstanceOf(problem,interpretation,element,type);
26956}
26957private pattern scopeDisallowsNewEStructuralFeature_class(problem:LogicProblem, interpretation:PartialInterpretation) {
26958 find interpretation(problem,interpretation);
26959 PartialInterpretation.scopes(interpretation,scope);
26960 Scope.targetTypeInterpretation(scope,typeInterpretation);
26961 Scope.maxNewElements(scope,0);
26962 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
26963 Type.name(type,"EStructuralFeature class");
26964}
26965
26966/**
26967 * An element may be an instance of type "EStructuralFeature class".
26968 */
26969private pattern mayInstanceOfEStructuralFeature_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
26970{
26971 find interpretation(problem,interpretation);
26972 PartialInterpretation.newElements(interpretation,element);
26973 neg find mustInstanceOfEAttribute_class(problem,interpretation,element);
26974 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
26975 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
26976 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
26977 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
26978 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
26979 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
26980 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
26981 neg find mustInstanceOfEReference_class(problem,interpretation,element);
26982 neg find mustInstanceOfEObject_class(problem,interpretation,element);
26983 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
26984 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
26985 neg find scopeDisallowsNewEStructuralFeature_class(problem, interpretation);
26986 neg find isPrimitive(element);
26987} or {
26988 find interpretation(problem,interpretation);
26989 PartialInterpretation.openWorldElements(interpretation,element);
26990 neg find mustInstanceOfEAttribute_class(problem,interpretation,element);
26991 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
26992 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
26993 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
26994 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
26995 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
26996 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
26997 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
26998 neg find mustInstanceOfEReference_class(problem,interpretation,element);
26999 neg find mustInstanceOfEObject_class(problem,interpretation,element);
27000 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
27001 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
27002 neg find scopeDisallowsNewEStructuralFeature_class(problem, interpretation);
27003 neg find isPrimitive(element);
27004} or
27005{ find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); }
27006/**
27007 * An element must be an instance of type "ETypedElement class".
27008 */
27009private pattern mustInstanceOfETypedElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
27010 Type.name(type,"ETypedElement class");
27011 find directInstanceOf(problem,interpretation,element,type);
27012}
27013private pattern scopeDisallowsNewETypedElement_class(problem:LogicProblem, interpretation:PartialInterpretation) {
27014 find interpretation(problem,interpretation);
27015 PartialInterpretation.scopes(interpretation,scope);
27016 Scope.targetTypeInterpretation(scope,typeInterpretation);
27017 Scope.maxNewElements(scope,0);
27018 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
27019 Type.name(type,"ETypedElement class");
27020}
27021
27022/**
27023 * An element may be an instance of type "ETypedElement class".
27024 */
27025private pattern mayInstanceOfETypedElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
27026{
27027 find interpretation(problem,interpretation);
27028 PartialInterpretation.newElements(interpretation,element);
27029 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
27030 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
27031 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
27032 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
27033 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
27034 neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element);
27035 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
27036 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
27037 neg find mustInstanceOfEObject_class(problem,interpretation,element);
27038 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
27039 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
27040 neg find scopeDisallowsNewETypedElement_class(problem, interpretation);
27041 neg find isPrimitive(element);
27042} or {
27043 find interpretation(problem,interpretation);
27044 PartialInterpretation.openWorldElements(interpretation,element);
27045 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
27046 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
27047 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
27048 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
27049 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
27050 neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element);
27051 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
27052 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
27053 neg find mustInstanceOfEObject_class(problem,interpretation,element);
27054 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
27055 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
27056 neg find scopeDisallowsNewETypedElement_class(problem, interpretation);
27057 neg find isPrimitive(element);
27058} or
27059{ find mustInstanceOfETypedElement_class(problem,interpretation,element); }
27060/**
27061 * An element must be an instance of type "EStringToStringMapEntry class".
27062 */
27063private pattern mustInstanceOfEStringToStringMapEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
27064 Type.name(type,"EStringToStringMapEntry class");
27065 find directInstanceOf(problem,interpretation,element,type);
27066}
27067private pattern scopeDisallowsNewEStringToStringMapEntry_class(problem:LogicProblem, interpretation:PartialInterpretation) {
27068 find interpretation(problem,interpretation);
27069 PartialInterpretation.scopes(interpretation,scope);
27070 Scope.targetTypeInterpretation(scope,typeInterpretation);
27071 Scope.maxNewElements(scope,0);
27072 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
27073 Type.name(type,"EStringToStringMapEntry class");
27074}
27075
27076/**
27077 * An element may be an instance of type "EStringToStringMapEntry class".
27078 */
27079private pattern mayInstanceOfEStringToStringMapEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
27080{
27081 find interpretation(problem,interpretation);
27082 PartialInterpretation.newElements(interpretation,element);
27083 neg find mustInstanceOfEModelElement_class(problem,interpretation,element);
27084 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
27085 neg find mustInstanceOfEObject_class(problem,interpretation,element);
27086 neg find scopeDisallowsNewEStringToStringMapEntry_class(problem, interpretation);
27087 neg find isPrimitive(element);
27088} or {
27089 find interpretation(problem,interpretation);
27090 PartialInterpretation.openWorldElements(interpretation,element);
27091 neg find mustInstanceOfEModelElement_class(problem,interpretation,element);
27092 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
27093 neg find mustInstanceOfEObject_class(problem,interpretation,element);
27094 neg find scopeDisallowsNewEStringToStringMapEntry_class(problem, interpretation);
27095 neg find isPrimitive(element);
27096} or
27097{ find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); }
27098/**
27099 * An element must be an instance of type "EGenericType class".
27100 */
27101private pattern mustInstanceOfEGenericType_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
27102 Type.name(type,"EGenericType class");
27103 find directInstanceOf(problem,interpretation,element,type);
27104}
27105private pattern scopeDisallowsNewEGenericType_class(problem:LogicProblem, interpretation:PartialInterpretation) {
27106 find interpretation(problem,interpretation);
27107 PartialInterpretation.scopes(interpretation,scope);
27108 Scope.targetTypeInterpretation(scope,typeInterpretation);
27109 Scope.maxNewElements(scope,0);
27110 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
27111 Type.name(type,"EGenericType class");
27112}
27113
27114/**
27115 * An element may be an instance of type "EGenericType class".
27116 */
27117private pattern mayInstanceOfEGenericType_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
27118{
27119 find interpretation(problem,interpretation);
27120 PartialInterpretation.newElements(interpretation,element);
27121 neg find mustInstanceOfEModelElement_class(problem,interpretation,element);
27122 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
27123 neg find mustInstanceOfEObject_class(problem,interpretation,element);
27124 neg find scopeDisallowsNewEGenericType_class(problem, interpretation);
27125 neg find isPrimitive(element);
27126} or {
27127 find interpretation(problem,interpretation);
27128 PartialInterpretation.openWorldElements(interpretation,element);
27129 neg find mustInstanceOfEModelElement_class(problem,interpretation,element);
27130 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
27131 neg find mustInstanceOfEObject_class(problem,interpretation,element);
27132 neg find scopeDisallowsNewEGenericType_class(problem, interpretation);
27133 neg find isPrimitive(element);
27134} or
27135{ find mustInstanceOfEGenericType_class(problem,interpretation,element); }
27136/**
27137 * An element must be an instance of type "ETypeParameter class".
27138 */
27139private pattern mustInstanceOfETypeParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
27140 Type.name(type,"ETypeParameter class");
27141 find directInstanceOf(problem,interpretation,element,type);
27142}
27143private pattern scopeDisallowsNewETypeParameter_class(problem:LogicProblem, interpretation:PartialInterpretation) {
27144 find interpretation(problem,interpretation);
27145 PartialInterpretation.scopes(interpretation,scope);
27146 Scope.targetTypeInterpretation(scope,typeInterpretation);
27147 Scope.maxNewElements(scope,0);
27148 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
27149 Type.name(type,"ETypeParameter class");
27150}
27151
27152/**
27153 * An element may be an instance of type "ETypeParameter class".
27154 */
27155private pattern mayInstanceOfETypeParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
27156{
27157 find interpretation(problem,interpretation);
27158 PartialInterpretation.newElements(interpretation,element);
27159 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
27160 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
27161 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
27162 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
27163 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
27164 neg find mustInstanceOfEObject_class(problem,interpretation,element);
27165 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
27166 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
27167 neg find scopeDisallowsNewETypeParameter_class(problem, interpretation);
27168 neg find isPrimitive(element);
27169} or {
27170 find interpretation(problem,interpretation);
27171 PartialInterpretation.openWorldElements(interpretation,element);
27172 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
27173 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
27174 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
27175 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
27176 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
27177 neg find mustInstanceOfEObject_class(problem,interpretation,element);
27178 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
27179 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
27180 neg find scopeDisallowsNewETypeParameter_class(problem, interpretation);
27181 neg find isPrimitive(element);
27182} or
27183{ find mustInstanceOfETypeParameter_class(problem,interpretation,element); }
27184/**
27185 * An element must be an instance of type "EModelElement class DefinedPart".
27186 */
27187private pattern mustInstanceOfEModelElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
27188 Type.name(type,"EModelElement class DefinedPart");
27189 find directInstanceOf(problem,interpretation,element,type);
27190}
27191private pattern scopeDisallowsNewEModelElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
27192 find interpretation(problem,interpretation);
27193 PartialInterpretation.scopes(interpretation,scope);
27194 Scope.targetTypeInterpretation(scope,typeInterpretation);
27195 Scope.maxNewElements(scope,0);
27196 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
27197 Type.name(type,"EModelElement class DefinedPart");
27198}
27199
27200/**
27201 * An element may be an instance of type "EModelElement class DefinedPart".
27202 */
27203private pattern mayInstanceOfEModelElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
27204{ find mustInstanceOfEModelElement_class_DefinedPart(problem,interpretation,element); }
27205/**
27206 * An element must be an instance of type "EModelElement class UndefinedPart".
27207 */
27208private pattern mustInstanceOfEModelElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
27209 Type.name(type,"EModelElement class UndefinedPart");
27210 find directInstanceOf(problem,interpretation,element,type);
27211}
27212private pattern scopeDisallowsNewEModelElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
27213 find interpretation(problem,interpretation);
27214 PartialInterpretation.scopes(interpretation,scope);
27215 Scope.targetTypeInterpretation(scope,typeInterpretation);
27216 Scope.maxNewElements(scope,0);
27217 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
27218 Type.name(type,"EModelElement class UndefinedPart");
27219}
27220
27221/**
27222 * An element may be an instance of type "EModelElement class UndefinedPart".
27223 */
27224private pattern mayInstanceOfEModelElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
27225{
27226 find interpretation(problem,interpretation);
27227 PartialInterpretation.newElements(interpretation,element);
27228 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
27229 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
27230 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
27231 neg find mustInstanceOfEObject_class(problem,interpretation,element);
27232 neg find mustInstanceOfENamedElement_class(problem,interpretation,element);
27233 neg find scopeDisallowsNewEModelElement_class_UndefinedPart(problem, interpretation);
27234 neg find isPrimitive(element);
27235} or {
27236 find interpretation(problem,interpretation);
27237 PartialInterpretation.openWorldElements(interpretation,element);
27238 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
27239 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
27240 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
27241 neg find mustInstanceOfEObject_class(problem,interpretation,element);
27242 neg find mustInstanceOfENamedElement_class(problem,interpretation,element);
27243 neg find scopeDisallowsNewEModelElement_class_UndefinedPart(problem, interpretation);
27244 neg find isPrimitive(element);
27245} or
27246{ find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); }
27247/**
27248 * An element must be an instance of type "ENamedElement class DefinedPart".
27249 */
27250private pattern mustInstanceOfENamedElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
27251 Type.name(type,"ENamedElement class DefinedPart");
27252 find directInstanceOf(problem,interpretation,element,type);
27253}
27254private pattern scopeDisallowsNewENamedElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
27255 find interpretation(problem,interpretation);
27256 PartialInterpretation.scopes(interpretation,scope);
27257 Scope.targetTypeInterpretation(scope,typeInterpretation);
27258 Scope.maxNewElements(scope,0);
27259 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
27260 Type.name(type,"ENamedElement class DefinedPart");
27261}
27262
27263/**
27264 * An element may be an instance of type "ENamedElement class DefinedPart".
27265 */
27266private pattern mayInstanceOfENamedElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
27267{ find mustInstanceOfENamedElement_class_DefinedPart(problem,interpretation,element); }
27268/**
27269 * An element must be an instance of type "ENamedElement class UndefinedPart".
27270 */
27271private pattern mustInstanceOfENamedElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
27272 Type.name(type,"ENamedElement class UndefinedPart");
27273 find directInstanceOf(problem,interpretation,element,type);
27274}
27275private pattern scopeDisallowsNewENamedElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
27276 find interpretation(problem,interpretation);
27277 PartialInterpretation.scopes(interpretation,scope);
27278 Scope.targetTypeInterpretation(scope,typeInterpretation);
27279 Scope.maxNewElements(scope,0);
27280 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
27281 Type.name(type,"ENamedElement class UndefinedPart");
27282}
27283
27284/**
27285 * An element may be an instance of type "ENamedElement class UndefinedPart".
27286 */
27287private pattern mayInstanceOfENamedElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
27288{
27289 find interpretation(problem,interpretation);
27290 PartialInterpretation.newElements(interpretation,element);
27291 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
27292 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
27293 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
27294 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
27295 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
27296 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
27297 neg find mustInstanceOfEObject_class(problem,interpretation,element);
27298 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
27299 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
27300 neg find scopeDisallowsNewENamedElement_class_UndefinedPart(problem, interpretation);
27301 neg find isPrimitive(element);
27302} or {
27303 find interpretation(problem,interpretation);
27304 PartialInterpretation.openWorldElements(interpretation,element);
27305 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
27306 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
27307 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
27308 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
27309 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
27310 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
27311 neg find mustInstanceOfEObject_class(problem,interpretation,element);
27312 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
27313 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
27314 neg find scopeDisallowsNewENamedElement_class_UndefinedPart(problem, interpretation);
27315 neg find isPrimitive(element);
27316} or
27317{ find mustInstanceOfENamedElement_class_UndefinedPart(problem,interpretation,element); }
27318/**
27319 * An element must be an instance of type "EPackage class DefinedPart".
27320 */
27321private pattern mustInstanceOfEPackage_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
27322 Type.name(type,"EPackage class DefinedPart");
27323 find directInstanceOf(problem,interpretation,element,type);
27324}
27325private pattern scopeDisallowsNewEPackage_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
27326 find interpretation(problem,interpretation);
27327 PartialInterpretation.scopes(interpretation,scope);
27328 Scope.targetTypeInterpretation(scope,typeInterpretation);
27329 Scope.maxNewElements(scope,0);
27330 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
27331 Type.name(type,"EPackage class DefinedPart");
27332}
27333
27334/**
27335 * An element may be an instance of type "EPackage class DefinedPart".
27336 */
27337private pattern mayInstanceOfEPackage_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
27338{ find mustInstanceOfEPackage_class_DefinedPart(problem,interpretation,element); }
27339/**
27340 * An element must be an instance of type "EPackage class UndefinedPart".
27341 */
27342private pattern mustInstanceOfEPackage_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
27343 Type.name(type,"EPackage class UndefinedPart");
27344 find directInstanceOf(problem,interpretation,element,type);
27345}
27346private pattern scopeDisallowsNewEPackage_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
27347 find interpretation(problem,interpretation);
27348 PartialInterpretation.scopes(interpretation,scope);
27349 Scope.targetTypeInterpretation(scope,typeInterpretation);
27350 Scope.maxNewElements(scope,0);
27351 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
27352 Type.name(type,"EPackage class UndefinedPart");
27353}
27354
27355/**
27356 * An element may be an instance of type "EPackage class UndefinedPart".
27357 */
27358private pattern mayInstanceOfEPackage_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
27359{
27360 find interpretation(problem,interpretation);
27361 PartialInterpretation.newElements(interpretation,element);
27362 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
27363 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
27364 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
27365 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
27366 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
27367 neg find mustInstanceOfEObject_class(problem,interpretation,element);
27368 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
27369 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
27370 neg find scopeDisallowsNewEPackage_class_UndefinedPart(problem, interpretation);
27371 neg find isPrimitive(element);
27372} or {
27373 find interpretation(problem,interpretation);
27374 PartialInterpretation.openWorldElements(interpretation,element);
27375 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
27376 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
27377 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
27378 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
27379 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
27380 neg find mustInstanceOfEObject_class(problem,interpretation,element);
27381 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
27382 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
27383 neg find scopeDisallowsNewEPackage_class_UndefinedPart(problem, interpretation);
27384 neg find isPrimitive(element);
27385} or
27386{ find mustInstanceOfEPackage_class_UndefinedPart(problem,interpretation,element); }
27387
27388//////////
27389// 1.2 Relation Declaration Indexers
27390//////////
27391/**
27392 * Matcher for detecting tuples t where []eAttributeType reference EAttribute(source,target)
27393 */
27394private pattern mustInRelationeAttributeType_reference_EAttribute(
27395 problem:LogicProblem, interpretation:PartialInterpretation,
27396 source: DefinedElement, target:DefinedElement)
27397{
27398 find interpretation(problem,interpretation);
27399 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
27400 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributeType reference EAttribute");
27401 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
27402 BinaryElementRelationLink.param1(link,source);
27403 BinaryElementRelationLink.param2(link,target);
27404}
27405/**
27406 * Matcher for detecting tuples t where <>eAttributeType reference EAttribute(source,target)
27407 */
27408private pattern mayInRelationeAttributeType_reference_EAttribute(
27409 problem:LogicProblem, interpretation:PartialInterpretation,
27410 source: DefinedElement, target:DefinedElement)
27411{
27412 find interpretation(problem,interpretation);
27413 // The two endpoint of the link have to exist
27414 find mayExist(problem, interpretation, source);
27415 find mayExist(problem, interpretation, target);
27416 // Type consistency
27417 find mayInstanceOfEAttribute_class(problem,interpretation,source);
27418 find mayInstanceOfEDataType_class(problem,interpretation,target);
27419 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
27420 // the upper bound of the multiplicity should be considered.
27421 numberOfExistingReferences == count find mustInRelationeAttributeType_reference_EAttribute(problem,interpretation,source,_);
27422 check(numberOfExistingReferences < 1);
27423} or {
27424 find mustInRelationeAttributeType_reference_EAttribute(problem,interpretation,source,target);
27425}
27426/**
27427 * Matcher for detecting tuples t where []details reference EAnnotation(source,target)
27428 */
27429private pattern mustInRelationdetails_reference_EAnnotation(
27430 problem:LogicProblem, interpretation:PartialInterpretation,
27431 source: DefinedElement, target:DefinedElement)
27432{
27433 find interpretation(problem,interpretation);
27434 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
27435 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"details reference EAnnotation");
27436 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
27437 BinaryElementRelationLink.param1(link,source);
27438 BinaryElementRelationLink.param2(link,target);
27439}
27440/**
27441 * Matcher for detecting tuples t where <>details reference EAnnotation(source,target)
27442 */
27443private pattern mayInRelationdetails_reference_EAnnotation(
27444 problem:LogicProblem, interpretation:PartialInterpretation,
27445 source: DefinedElement, target:DefinedElement)
27446{
27447 find interpretation(problem,interpretation);
27448 // The two endpoint of the link have to exist
27449 find mayExist(problem, interpretation, source);
27450 find mayExist(problem, interpretation, target);
27451 // Type consistency
27452 find mayInstanceOfEAnnotation_class(problem,interpretation,source);
27453 find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,target);
27454 // The reference is containment, then a new reference cannot be create if:
27455 // 1. Multiple parents
27456 neg find mustContains4(problem,interpretation,_,target);
27457 // 2. Circle in the containment hierarchy
27458 neg find mustTransitiveContains(source,target);
27459} or {
27460 find mustInRelationdetails_reference_EAnnotation(problem,interpretation,source,target);
27461}
27462/**
27463 * Matcher for detecting tuples t where []eModelElement reference EAnnotation(source,target)
27464 */
27465private pattern mustInRelationeModelElement_reference_EAnnotation(
27466 problem:LogicProblem, interpretation:PartialInterpretation,
27467 source: DefinedElement, target:DefinedElement)
27468{
27469 find interpretation(problem,interpretation);
27470 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
27471 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eModelElement reference EAnnotation");
27472 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
27473 BinaryElementRelationLink.param1(link,source);
27474 BinaryElementRelationLink.param2(link,target);
27475}
27476/**
27477 * Matcher for detecting tuples t where <>eModelElement reference EAnnotation(source,target)
27478 */
27479private pattern mayInRelationeModelElement_reference_EAnnotation(
27480 problem:LogicProblem, interpretation:PartialInterpretation,
27481 source: DefinedElement, target:DefinedElement)
27482{
27483 find interpretation(problem,interpretation);
27484 // The two endpoint of the link have to exist
27485 find mayExist(problem, interpretation, source);
27486 find mayExist(problem, interpretation, target);
27487 // Type consistency
27488 find mayInstanceOfEAnnotation_class(problem,interpretation,source);
27489 find mayInstanceOfEModelElement_class(problem,interpretation,target);
27490 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
27491 // the upper bound of the multiplicity should be considered.
27492 numberOfExistingReferences == count find mustInRelationeModelElement_reference_EAnnotation(problem,interpretation,source,_);
27493 check(numberOfExistingReferences < 1);
27494 // The eOpposite of the reference is containment, then a referene cannot be created if
27495 // 1. Multiple parents
27496 neg find mustContains4(problem,interpretation,source,_);
27497 // 2. Circle in the containment hierarchy
27498 neg find mustTransitiveContains(source,target);
27499} or {
27500 find mustInRelationeModelElement_reference_EAnnotation(problem,interpretation,source,target);
27501}
27502/**
27503 * Matcher for detecting tuples t where []contents reference EAnnotation(source,target)
27504 */
27505private pattern mustInRelationcontents_reference_EAnnotation(
27506 problem:LogicProblem, interpretation:PartialInterpretation,
27507 source: DefinedElement, target:DefinedElement)
27508{
27509 find interpretation(problem,interpretation);
27510 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
27511 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"contents reference EAnnotation");
27512 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
27513 BinaryElementRelationLink.param1(link,source);
27514 BinaryElementRelationLink.param2(link,target);
27515}
27516/**
27517 * Matcher for detecting tuples t where <>contents reference EAnnotation(source,target)
27518 */
27519private pattern mayInRelationcontents_reference_EAnnotation(
27520 problem:LogicProblem, interpretation:PartialInterpretation,
27521 source: DefinedElement, target:DefinedElement)
27522{
27523 find interpretation(problem,interpretation);
27524 // The two endpoint of the link have to exist
27525 find mayExist(problem, interpretation, source);
27526 find mayExist(problem, interpretation, target);
27527 // Type consistency
27528 find mayInstanceOfEAnnotation_class(problem,interpretation,source);
27529 find mayInstanceOfEObject_class(problem,interpretation,target);
27530 // The reference is containment, then a new reference cannot be create if:
27531 // 1. Multiple parents
27532 neg find mustContains4(problem,interpretation,_,target);
27533 // 2. Circle in the containment hierarchy
27534 neg find mustTransitiveContains(source,target);
27535} or {
27536 find mustInRelationcontents_reference_EAnnotation(problem,interpretation,source,target);
27537}
27538/**
27539 * Matcher for detecting tuples t where []references reference EAnnotation(source,target)
27540 */
27541private pattern mustInRelationreferences_reference_EAnnotation(
27542 problem:LogicProblem, interpretation:PartialInterpretation,
27543 source: DefinedElement, target:DefinedElement)
27544{
27545 find interpretation(problem,interpretation);
27546 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
27547 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"references reference EAnnotation");
27548 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
27549 BinaryElementRelationLink.param1(link,source);
27550 BinaryElementRelationLink.param2(link,target);
27551}
27552/**
27553 * Matcher for detecting tuples t where <>references reference EAnnotation(source,target)
27554 */
27555private pattern mayInRelationreferences_reference_EAnnotation(
27556 problem:LogicProblem, interpretation:PartialInterpretation,
27557 source: DefinedElement, target:DefinedElement)
27558{
27559 find interpretation(problem,interpretation);
27560 // The two endpoint of the link have to exist
27561 find mayExist(problem, interpretation, source);
27562 find mayExist(problem, interpretation, target);
27563 // Type consistency
27564 find mayInstanceOfEAnnotation_class(problem,interpretation,source);
27565 find mayInstanceOfEObject_class(problem,interpretation,target);
27566} or {
27567 find mustInRelationreferences_reference_EAnnotation(problem,interpretation,source,target);
27568}
27569/**
27570 * Matcher for detecting tuples t where []eSuperTypes reference EClass(source,target)
27571 */
27572private pattern mustInRelationeSuperTypes_reference_EClass(
27573 problem:LogicProblem, interpretation:PartialInterpretation,
27574 source: DefinedElement, target:DefinedElement)
27575{
27576 find interpretation(problem,interpretation);
27577 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
27578 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eSuperTypes reference EClass");
27579 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
27580 BinaryElementRelationLink.param1(link,source);
27581 BinaryElementRelationLink.param2(link,target);
27582}
27583/**
27584 * Matcher for detecting tuples t where <>eSuperTypes reference EClass(source,target)
27585 */
27586private pattern mayInRelationeSuperTypes_reference_EClass(
27587 problem:LogicProblem, interpretation:PartialInterpretation,
27588 source: DefinedElement, target:DefinedElement)
27589{
27590 find interpretation(problem,interpretation);
27591 // The two endpoint of the link have to exist
27592 find mayExist(problem, interpretation, source);
27593 find mayExist(problem, interpretation, target);
27594 // Type consistency
27595 find mayInstanceOfEClass_class(problem,interpretation,source);
27596 find mayInstanceOfEClass_class(problem,interpretation,target);
27597} or {
27598 find mustInRelationeSuperTypes_reference_EClass(problem,interpretation,source,target);
27599}
27600/**
27601 * Matcher for detecting tuples t where []eOperations reference EClass(source,target)
27602 */
27603private pattern mustInRelationeOperations_reference_EClass(
27604 problem:LogicProblem, interpretation:PartialInterpretation,
27605 source: DefinedElement, target:DefinedElement)
27606{
27607 find interpretation(problem,interpretation);
27608 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
27609 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eOperations reference EClass");
27610 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
27611 BinaryElementRelationLink.param1(link,source);
27612 BinaryElementRelationLink.param2(link,target);
27613}
27614/**
27615 * Matcher for detecting tuples t where <>eOperations reference EClass(source,target)
27616 */
27617private pattern mayInRelationeOperations_reference_EClass(
27618 problem:LogicProblem, interpretation:PartialInterpretation,
27619 source: DefinedElement, target:DefinedElement)
27620{
27621 find interpretation(problem,interpretation);
27622 // The two endpoint of the link have to exist
27623 find mayExist(problem, interpretation, source);
27624 find mayExist(problem, interpretation, target);
27625 // Type consistency
27626 find mayInstanceOfEClass_class(problem,interpretation,source);
27627 find mayInstanceOfEOperation_class(problem,interpretation,target);
27628 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
27629 // the upper bound of the opposite reference multiplicity should be considered.
27630 numberOfExistingOppositeReferences == count find mustInRelationeContainingClass_reference_EOperation(problem,interpretation,target,_);
27631 check(numberOfExistingOppositeReferences < 1);
27632 // The reference is containment, then a new reference cannot be create if:
27633 // 1. Multiple parents
27634 neg find mustContains4(problem,interpretation,_,target);
27635 // 2. Circle in the containment hierarchy
27636 neg find mustTransitiveContains(source,target);
27637} or {
27638 find mustInRelationeOperations_reference_EClass(problem,interpretation,source,target);
27639}
27640/**
27641 * Matcher for detecting tuples t where []eAllAttributes reference EClass(source,target)
27642 */
27643private pattern mustInRelationeAllAttributes_reference_EClass(
27644 problem:LogicProblem, interpretation:PartialInterpretation,
27645 source: DefinedElement, target:DefinedElement)
27646{
27647 find interpretation(problem,interpretation);
27648 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
27649 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllAttributes reference EClass");
27650 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
27651 BinaryElementRelationLink.param1(link,source);
27652 BinaryElementRelationLink.param2(link,target);
27653}
27654/**
27655 * Matcher for detecting tuples t where <>eAllAttributes reference EClass(source,target)
27656 */
27657private pattern mayInRelationeAllAttributes_reference_EClass(
27658 problem:LogicProblem, interpretation:PartialInterpretation,
27659 source: DefinedElement, target:DefinedElement)
27660{
27661 find interpretation(problem,interpretation);
27662 // The two endpoint of the link have to exist
27663 find mayExist(problem, interpretation, source);
27664 find mayExist(problem, interpretation, target);
27665 // Type consistency
27666 find mayInstanceOfEClass_class(problem,interpretation,source);
27667 find mayInstanceOfEAttribute_class(problem,interpretation,target);
27668} or {
27669 find mustInRelationeAllAttributes_reference_EClass(problem,interpretation,source,target);
27670}
27671/**
27672 * Matcher for detecting tuples t where []eAllReferences reference EClass(source,target)
27673 */
27674private pattern mustInRelationeAllReferences_reference_EClass(
27675 problem:LogicProblem, interpretation:PartialInterpretation,
27676 source: DefinedElement, target:DefinedElement)
27677{
27678 find interpretation(problem,interpretation);
27679 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
27680 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllReferences reference EClass");
27681 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
27682 BinaryElementRelationLink.param1(link,source);
27683 BinaryElementRelationLink.param2(link,target);
27684}
27685/**
27686 * Matcher for detecting tuples t where <>eAllReferences reference EClass(source,target)
27687 */
27688private pattern mayInRelationeAllReferences_reference_EClass(
27689 problem:LogicProblem, interpretation:PartialInterpretation,
27690 source: DefinedElement, target:DefinedElement)
27691{
27692 find interpretation(problem,interpretation);
27693 // The two endpoint of the link have to exist
27694 find mayExist(problem, interpretation, source);
27695 find mayExist(problem, interpretation, target);
27696 // Type consistency
27697 find mayInstanceOfEClass_class(problem,interpretation,source);
27698 find mayInstanceOfEReference_class(problem,interpretation,target);
27699} or {
27700 find mustInRelationeAllReferences_reference_EClass(problem,interpretation,source,target);
27701}
27702/**
27703 * Matcher for detecting tuples t where []eReferences reference EClass(source,target)
27704 */
27705private pattern mustInRelationeReferences_reference_EClass(
27706 problem:LogicProblem, interpretation:PartialInterpretation,
27707 source: DefinedElement, target:DefinedElement)
27708{
27709 find interpretation(problem,interpretation);
27710 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
27711 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferences reference EClass");
27712 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
27713 BinaryElementRelationLink.param1(link,source);
27714 BinaryElementRelationLink.param2(link,target);
27715}
27716/**
27717 * Matcher for detecting tuples t where <>eReferences reference EClass(source,target)
27718 */
27719private pattern mayInRelationeReferences_reference_EClass(
27720 problem:LogicProblem, interpretation:PartialInterpretation,
27721 source: DefinedElement, target:DefinedElement)
27722{
27723 find interpretation(problem,interpretation);
27724 // The two endpoint of the link have to exist
27725 find mayExist(problem, interpretation, source);
27726 find mayExist(problem, interpretation, target);
27727 // Type consistency
27728 find mayInstanceOfEClass_class(problem,interpretation,source);
27729 find mayInstanceOfEReference_class(problem,interpretation,target);
27730} or {
27731 find mustInRelationeReferences_reference_EClass(problem,interpretation,source,target);
27732}
27733/**
27734 * Matcher for detecting tuples t where []eAttributes reference EClass(source,target)
27735 */
27736private pattern mustInRelationeAttributes_reference_EClass(
27737 problem:LogicProblem, interpretation:PartialInterpretation,
27738 source: DefinedElement, target:DefinedElement)
27739{
27740 find interpretation(problem,interpretation);
27741 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
27742 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributes reference EClass");
27743 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
27744 BinaryElementRelationLink.param1(link,source);
27745 BinaryElementRelationLink.param2(link,target);
27746}
27747/**
27748 * Matcher for detecting tuples t where <>eAttributes reference EClass(source,target)
27749 */
27750private pattern mayInRelationeAttributes_reference_EClass(
27751 problem:LogicProblem, interpretation:PartialInterpretation,
27752 source: DefinedElement, target:DefinedElement)
27753{
27754 find interpretation(problem,interpretation);
27755 // The two endpoint of the link have to exist
27756 find mayExist(problem, interpretation, source);
27757 find mayExist(problem, interpretation, target);
27758 // Type consistency
27759 find mayInstanceOfEClass_class(problem,interpretation,source);
27760 find mayInstanceOfEAttribute_class(problem,interpretation,target);
27761} or {
27762 find mustInRelationeAttributes_reference_EClass(problem,interpretation,source,target);
27763}
27764/**
27765 * Matcher for detecting tuples t where []eAllContainments reference EClass(source,target)
27766 */
27767private pattern mustInRelationeAllContainments_reference_EClass(
27768 problem:LogicProblem, interpretation:PartialInterpretation,
27769 source: DefinedElement, target:DefinedElement)
27770{
27771 find interpretation(problem,interpretation);
27772 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
27773 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllContainments reference EClass");
27774 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
27775 BinaryElementRelationLink.param1(link,source);
27776 BinaryElementRelationLink.param2(link,target);
27777}
27778/**
27779 * Matcher for detecting tuples t where <>eAllContainments reference EClass(source,target)
27780 */
27781private pattern mayInRelationeAllContainments_reference_EClass(
27782 problem:LogicProblem, interpretation:PartialInterpretation,
27783 source: DefinedElement, target:DefinedElement)
27784{
27785 find interpretation(problem,interpretation);
27786 // The two endpoint of the link have to exist
27787 find mayExist(problem, interpretation, source);
27788 find mayExist(problem, interpretation, target);
27789 // Type consistency
27790 find mayInstanceOfEClass_class(problem,interpretation,source);
27791 find mayInstanceOfEReference_class(problem,interpretation,target);
27792} or {
27793 find mustInRelationeAllContainments_reference_EClass(problem,interpretation,source,target);
27794}
27795/**
27796 * Matcher for detecting tuples t where []eAllOperations reference EClass(source,target)
27797 */
27798private pattern mustInRelationeAllOperations_reference_EClass(
27799 problem:LogicProblem, interpretation:PartialInterpretation,
27800 source: DefinedElement, target:DefinedElement)
27801{
27802 find interpretation(problem,interpretation);
27803 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
27804 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllOperations reference EClass");
27805 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
27806 BinaryElementRelationLink.param1(link,source);
27807 BinaryElementRelationLink.param2(link,target);
27808}
27809/**
27810 * Matcher for detecting tuples t where <>eAllOperations reference EClass(source,target)
27811 */
27812private pattern mayInRelationeAllOperations_reference_EClass(
27813 problem:LogicProblem, interpretation:PartialInterpretation,
27814 source: DefinedElement, target:DefinedElement)
27815{
27816 find interpretation(problem,interpretation);
27817 // The two endpoint of the link have to exist
27818 find mayExist(problem, interpretation, source);
27819 find mayExist(problem, interpretation, target);
27820 // Type consistency
27821 find mayInstanceOfEClass_class(problem,interpretation,source);
27822 find mayInstanceOfEOperation_class(problem,interpretation,target);
27823} or {
27824 find mustInRelationeAllOperations_reference_EClass(problem,interpretation,source,target);
27825}
27826/**
27827 * Matcher for detecting tuples t where []eAllStructuralFeatures reference EClass(source,target)
27828 */
27829private pattern mustInRelationeAllStructuralFeatures_reference_EClass(
27830 problem:LogicProblem, interpretation:PartialInterpretation,
27831 source: DefinedElement, target:DefinedElement)
27832{
27833 find interpretation(problem,interpretation);
27834 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
27835 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllStructuralFeatures reference EClass");
27836 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
27837 BinaryElementRelationLink.param1(link,source);
27838 BinaryElementRelationLink.param2(link,target);
27839}
27840/**
27841 * Matcher for detecting tuples t where <>eAllStructuralFeatures reference EClass(source,target)
27842 */
27843private pattern mayInRelationeAllStructuralFeatures_reference_EClass(
27844 problem:LogicProblem, interpretation:PartialInterpretation,
27845 source: DefinedElement, target:DefinedElement)
27846{
27847 find interpretation(problem,interpretation);
27848 // The two endpoint of the link have to exist
27849 find mayExist(problem, interpretation, source);
27850 find mayExist(problem, interpretation, target);
27851 // Type consistency
27852 find mayInstanceOfEClass_class(problem,interpretation,source);
27853 find mayInstanceOfEStructuralFeature_class(problem,interpretation,target);
27854} or {
27855 find mustInRelationeAllStructuralFeatures_reference_EClass(problem,interpretation,source,target);
27856}
27857/**
27858 * Matcher for detecting tuples t where []eAllSuperTypes reference EClass(source,target)
27859 */
27860private pattern mustInRelationeAllSuperTypes_reference_EClass(
27861 problem:LogicProblem, interpretation:PartialInterpretation,
27862 source: DefinedElement, target:DefinedElement)
27863{
27864 find interpretation(problem,interpretation);
27865 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
27866 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllSuperTypes reference EClass");
27867 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
27868 BinaryElementRelationLink.param1(link,source);
27869 BinaryElementRelationLink.param2(link,target);
27870}
27871/**
27872 * Matcher for detecting tuples t where <>eAllSuperTypes reference EClass(source,target)
27873 */
27874private pattern mayInRelationeAllSuperTypes_reference_EClass(
27875 problem:LogicProblem, interpretation:PartialInterpretation,
27876 source: DefinedElement, target:DefinedElement)
27877{
27878 find interpretation(problem,interpretation);
27879 // The two endpoint of the link have to exist
27880 find mayExist(problem, interpretation, source);
27881 find mayExist(problem, interpretation, target);
27882 // Type consistency
27883 find mayInstanceOfEClass_class(problem,interpretation,source);
27884 find mayInstanceOfEClass_class(problem,interpretation,target);
27885} or {
27886 find mustInRelationeAllSuperTypes_reference_EClass(problem,interpretation,source,target);
27887}
27888/**
27889 * Matcher for detecting tuples t where []eIDAttribute reference EClass(source,target)
27890 */
27891private pattern mustInRelationeIDAttribute_reference_EClass(
27892 problem:LogicProblem, interpretation:PartialInterpretation,
27893 source: DefinedElement, target:DefinedElement)
27894{
27895 find interpretation(problem,interpretation);
27896 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
27897 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eIDAttribute reference EClass");
27898 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
27899 BinaryElementRelationLink.param1(link,source);
27900 BinaryElementRelationLink.param2(link,target);
27901}
27902/**
27903 * Matcher for detecting tuples t where <>eIDAttribute reference EClass(source,target)
27904 */
27905private pattern mayInRelationeIDAttribute_reference_EClass(
27906 problem:LogicProblem, interpretation:PartialInterpretation,
27907 source: DefinedElement, target:DefinedElement)
27908{
27909 find interpretation(problem,interpretation);
27910 // The two endpoint of the link have to exist
27911 find mayExist(problem, interpretation, source);
27912 find mayExist(problem, interpretation, target);
27913 // Type consistency
27914 find mayInstanceOfEClass_class(problem,interpretation,source);
27915 find mayInstanceOfEAttribute_class(problem,interpretation,target);
27916 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
27917 // the upper bound of the multiplicity should be considered.
27918 numberOfExistingReferences == count find mustInRelationeIDAttribute_reference_EClass(problem,interpretation,source,_);
27919 check(numberOfExistingReferences < 1);
27920} or {
27921 find mustInRelationeIDAttribute_reference_EClass(problem,interpretation,source,target);
27922}
27923/**
27924 * Matcher for detecting tuples t where []eStructuralFeatures reference EClass(source,target)
27925 */
27926private pattern mustInRelationeStructuralFeatures_reference_EClass(
27927 problem:LogicProblem, interpretation:PartialInterpretation,
27928 source: DefinedElement, target:DefinedElement)
27929{
27930 find interpretation(problem,interpretation);
27931 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
27932 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eStructuralFeatures reference EClass");
27933 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
27934 BinaryElementRelationLink.param1(link,source);
27935 BinaryElementRelationLink.param2(link,target);
27936}
27937/**
27938 * Matcher for detecting tuples t where <>eStructuralFeatures reference EClass(source,target)
27939 */
27940private pattern mayInRelationeStructuralFeatures_reference_EClass(
27941 problem:LogicProblem, interpretation:PartialInterpretation,
27942 source: DefinedElement, target:DefinedElement)
27943{
27944 find interpretation(problem,interpretation);
27945 // The two endpoint of the link have to exist
27946 find mayExist(problem, interpretation, source);
27947 find mayExist(problem, interpretation, target);
27948 // Type consistency
27949 find mayInstanceOfEClass_class(problem,interpretation,source);
27950 find mayInstanceOfEStructuralFeature_class(problem,interpretation,target);
27951 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
27952 // the upper bound of the opposite reference multiplicity should be considered.
27953 numberOfExistingOppositeReferences == count find mustInRelationeContainingClass_reference_EStructuralFeature(problem,interpretation,target,_);
27954 check(numberOfExistingOppositeReferences < 1);
27955 // The reference is containment, then a new reference cannot be create if:
27956 // 1. Multiple parents
27957 neg find mustContains4(problem,interpretation,_,target);
27958 // 2. Circle in the containment hierarchy
27959 neg find mustTransitiveContains(source,target);
27960} or {
27961 find mustInRelationeStructuralFeatures_reference_EClass(problem,interpretation,source,target);
27962}
27963/**
27964 * Matcher for detecting tuples t where []eGenericSuperTypes reference EClass(source,target)
27965 */
27966private pattern mustInRelationeGenericSuperTypes_reference_EClass(
27967 problem:LogicProblem, interpretation:PartialInterpretation,
27968 source: DefinedElement, target:DefinedElement)
27969{
27970 find interpretation(problem,interpretation);
27971 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
27972 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eGenericSuperTypes reference EClass");
27973 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
27974 BinaryElementRelationLink.param1(link,source);
27975 BinaryElementRelationLink.param2(link,target);
27976}
27977/**
27978 * Matcher for detecting tuples t where <>eGenericSuperTypes reference EClass(source,target)
27979 */
27980private pattern mayInRelationeGenericSuperTypes_reference_EClass(
27981 problem:LogicProblem, interpretation:PartialInterpretation,
27982 source: DefinedElement, target:DefinedElement)
27983{
27984 find interpretation(problem,interpretation);
27985 // The two endpoint of the link have to exist
27986 find mayExist(problem, interpretation, source);
27987 find mayExist(problem, interpretation, target);
27988 // Type consistency
27989 find mayInstanceOfEClass_class(problem,interpretation,source);
27990 find mayInstanceOfEGenericType_class(problem,interpretation,target);
27991 // The reference is containment, then a new reference cannot be create if:
27992 // 1. Multiple parents
27993 neg find mustContains4(problem,interpretation,_,target);
27994 // 2. Circle in the containment hierarchy
27995 neg find mustTransitiveContains(source,target);
27996} or {
27997 find mustInRelationeGenericSuperTypes_reference_EClass(problem,interpretation,source,target);
27998}
27999/**
28000 * Matcher for detecting tuples t where []eAllGenericSuperTypes reference EClass(source,target)
28001 */
28002private pattern mustInRelationeAllGenericSuperTypes_reference_EClass(
28003 problem:LogicProblem, interpretation:PartialInterpretation,
28004 source: DefinedElement, target:DefinedElement)
28005{
28006 find interpretation(problem,interpretation);
28007 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
28008 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllGenericSuperTypes reference EClass");
28009 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
28010 BinaryElementRelationLink.param1(link,source);
28011 BinaryElementRelationLink.param2(link,target);
28012}
28013/**
28014 * Matcher for detecting tuples t where <>eAllGenericSuperTypes reference EClass(source,target)
28015 */
28016private pattern mayInRelationeAllGenericSuperTypes_reference_EClass(
28017 problem:LogicProblem, interpretation:PartialInterpretation,
28018 source: DefinedElement, target:DefinedElement)
28019{
28020 find interpretation(problem,interpretation);
28021 // The two endpoint of the link have to exist
28022 find mayExist(problem, interpretation, source);
28023 find mayExist(problem, interpretation, target);
28024 // Type consistency
28025 find mayInstanceOfEClass_class(problem,interpretation,source);
28026 find mayInstanceOfEGenericType_class(problem,interpretation,target);
28027} or {
28028 find mustInRelationeAllGenericSuperTypes_reference_EClass(problem,interpretation,source,target);
28029}
28030/**
28031 * Matcher for detecting tuples t where []ePackage reference EClassifier(source,target)
28032 */
28033private pattern mustInRelationePackage_reference_EClassifier(
28034 problem:LogicProblem, interpretation:PartialInterpretation,
28035 source: DefinedElement, target:DefinedElement)
28036{
28037 find interpretation(problem,interpretation);
28038 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
28039 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"ePackage reference EClassifier");
28040 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
28041 BinaryElementRelationLink.param1(link,source);
28042 BinaryElementRelationLink.param2(link,target);
28043}
28044/**
28045 * Matcher for detecting tuples t where <>ePackage reference EClassifier(source,target)
28046 */
28047private pattern mayInRelationePackage_reference_EClassifier(
28048 problem:LogicProblem, interpretation:PartialInterpretation,
28049 source: DefinedElement, target:DefinedElement)
28050{
28051 find interpretation(problem,interpretation);
28052 // The two endpoint of the link have to exist
28053 find mayExist(problem, interpretation, source);
28054 find mayExist(problem, interpretation, target);
28055 // Type consistency
28056 find mayInstanceOfEClassifier_class(problem,interpretation,source);
28057 find mayInstanceOfEPackage_class(problem,interpretation,target);
28058 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
28059 // the upper bound of the multiplicity should be considered.
28060 numberOfExistingReferences == count find mustInRelationePackage_reference_EClassifier(problem,interpretation,source,_);
28061 check(numberOfExistingReferences < 1);
28062 // The eOpposite of the reference is containment, then a referene cannot be created if
28063 // 1. Multiple parents
28064 neg find mustContains4(problem,interpretation,source,_);
28065 // 2. Circle in the containment hierarchy
28066 neg find mustTransitiveContains(source,target);
28067} or {
28068 find mustInRelationePackage_reference_EClassifier(problem,interpretation,source,target);
28069}
28070/**
28071 * Matcher for detecting tuples t where []eTypeParameters reference EClassifier(source,target)
28072 */
28073private pattern mustInRelationeTypeParameters_reference_EClassifier(
28074 problem:LogicProblem, interpretation:PartialInterpretation,
28075 source: DefinedElement, target:DefinedElement)
28076{
28077 find interpretation(problem,interpretation);
28078 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
28079 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeParameters reference EClassifier");
28080 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
28081 BinaryElementRelationLink.param1(link,source);
28082 BinaryElementRelationLink.param2(link,target);
28083}
28084/**
28085 * Matcher for detecting tuples t where <>eTypeParameters reference EClassifier(source,target)
28086 */
28087private pattern mayInRelationeTypeParameters_reference_EClassifier(
28088 problem:LogicProblem, interpretation:PartialInterpretation,
28089 source: DefinedElement, target:DefinedElement)
28090{
28091 find interpretation(problem,interpretation);
28092 // The two endpoint of the link have to exist
28093 find mayExist(problem, interpretation, source);
28094 find mayExist(problem, interpretation, target);
28095 // Type consistency
28096 find mayInstanceOfEClassifier_class(problem,interpretation,source);
28097 find mayInstanceOfETypeParameter_class(problem,interpretation,target);
28098 // The reference is containment, then a new reference cannot be create if:
28099 // 1. Multiple parents
28100 neg find mustContains4(problem,interpretation,_,target);
28101 // 2. Circle in the containment hierarchy
28102 neg find mustTransitiveContains(source,target);
28103} or {
28104 find mustInRelationeTypeParameters_reference_EClassifier(problem,interpretation,source,target);
28105}
28106/**
28107 * Matcher for detecting tuples t where []eLiterals reference EEnum(source,target)
28108 */
28109private pattern mustInRelationeLiterals_reference_EEnum(
28110 problem:LogicProblem, interpretation:PartialInterpretation,
28111 source: DefinedElement, target:DefinedElement)
28112{
28113 find interpretation(problem,interpretation);
28114 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
28115 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eLiterals reference EEnum");
28116 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
28117 BinaryElementRelationLink.param1(link,source);
28118 BinaryElementRelationLink.param2(link,target);
28119}
28120/**
28121 * Matcher for detecting tuples t where <>eLiterals reference EEnum(source,target)
28122 */
28123private pattern mayInRelationeLiterals_reference_EEnum(
28124 problem:LogicProblem, interpretation:PartialInterpretation,
28125 source: DefinedElement, target:DefinedElement)
28126{
28127 find interpretation(problem,interpretation);
28128 // The two endpoint of the link have to exist
28129 find mayExist(problem, interpretation, source);
28130 find mayExist(problem, interpretation, target);
28131 // Type consistency
28132 find mayInstanceOfEEnum_class(problem,interpretation,source);
28133 find mayInstanceOfEEnumLiteral_class(problem,interpretation,target);
28134 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
28135 // the upper bound of the opposite reference multiplicity should be considered.
28136 numberOfExistingOppositeReferences == count find mustInRelationeEnum_reference_EEnumLiteral(problem,interpretation,target,_);
28137 check(numberOfExistingOppositeReferences < 1);
28138 // The reference is containment, then a new reference cannot be create if:
28139 // 1. Multiple parents
28140 neg find mustContains4(problem,interpretation,_,target);
28141 // 2. Circle in the containment hierarchy
28142 neg find mustTransitiveContains(source,target);
28143} or {
28144 find mustInRelationeLiterals_reference_EEnum(problem,interpretation,source,target);
28145}
28146/**
28147 * Matcher for detecting tuples t where []eEnum reference EEnumLiteral(source,target)
28148 */
28149private pattern mustInRelationeEnum_reference_EEnumLiteral(
28150 problem:LogicProblem, interpretation:PartialInterpretation,
28151 source: DefinedElement, target:DefinedElement)
28152{
28153 find interpretation(problem,interpretation);
28154 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
28155 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eEnum reference EEnumLiteral");
28156 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
28157 BinaryElementRelationLink.param1(link,source);
28158 BinaryElementRelationLink.param2(link,target);
28159}
28160/**
28161 * Matcher for detecting tuples t where <>eEnum reference EEnumLiteral(source,target)
28162 */
28163private pattern mayInRelationeEnum_reference_EEnumLiteral(
28164 problem:LogicProblem, interpretation:PartialInterpretation,
28165 source: DefinedElement, target:DefinedElement)
28166{
28167 find interpretation(problem,interpretation);
28168 // The two endpoint of the link have to exist
28169 find mayExist(problem, interpretation, source);
28170 find mayExist(problem, interpretation, target);
28171 // Type consistency
28172 find mayInstanceOfEEnumLiteral_class(problem,interpretation,source);
28173 find mayInstanceOfEEnum_class(problem,interpretation,target);
28174 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
28175 // the upper bound of the multiplicity should be considered.
28176 numberOfExistingReferences == count find mustInRelationeEnum_reference_EEnumLiteral(problem,interpretation,source,_);
28177 check(numberOfExistingReferences < 1);
28178 // The eOpposite of the reference is containment, then a referene cannot be created if
28179 // 1. Multiple parents
28180 neg find mustContains4(problem,interpretation,source,_);
28181 // 2. Circle in the containment hierarchy
28182 neg find mustTransitiveContains(source,target);
28183} or {
28184 find mustInRelationeEnum_reference_EEnumLiteral(problem,interpretation,source,target);
28185}
28186/**
28187 * Matcher for detecting tuples t where []eAnnotations reference EModelElement(source,target)
28188 */
28189private pattern mustInRelationeAnnotations_reference_EModelElement(
28190 problem:LogicProblem, interpretation:PartialInterpretation,
28191 source: DefinedElement, target:DefinedElement)
28192{
28193 find interpretation(problem,interpretation);
28194 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
28195 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAnnotations reference EModelElement");
28196 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
28197 BinaryElementRelationLink.param1(link,source);
28198 BinaryElementRelationLink.param2(link,target);
28199}
28200/**
28201 * Matcher for detecting tuples t where <>eAnnotations reference EModelElement(source,target)
28202 */
28203private pattern mayInRelationeAnnotations_reference_EModelElement(
28204 problem:LogicProblem, interpretation:PartialInterpretation,
28205 source: DefinedElement, target:DefinedElement)
28206{
28207 find interpretation(problem,interpretation);
28208 // The two endpoint of the link have to exist
28209 find mayExist(problem, interpretation, source);
28210 find mayExist(problem, interpretation, target);
28211 // Type consistency
28212 find mayInstanceOfEModelElement_class(problem,interpretation,source);
28213 find mayInstanceOfEAnnotation_class(problem,interpretation,target);
28214 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
28215 // the upper bound of the opposite reference multiplicity should be considered.
28216 numberOfExistingOppositeReferences == count find mustInRelationeModelElement_reference_EAnnotation(problem,interpretation,target,_);
28217 check(numberOfExistingOppositeReferences < 1);
28218 // The reference is containment, then a new reference cannot be create if:
28219 // 1. Multiple parents
28220 neg find mustContains4(problem,interpretation,_,target);
28221 // 2. Circle in the containment hierarchy
28222 neg find mustTransitiveContains(source,target);
28223} or {
28224 find mustInRelationeAnnotations_reference_EModelElement(problem,interpretation,source,target);
28225}
28226/**
28227 * Matcher for detecting tuples t where []eContainingClass reference EOperation(source,target)
28228 */
28229private pattern mustInRelationeContainingClass_reference_EOperation(
28230 problem:LogicProblem, interpretation:PartialInterpretation,
28231 source: DefinedElement, target:DefinedElement)
28232{
28233 find interpretation(problem,interpretation);
28234 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
28235 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eContainingClass reference EOperation");
28236 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
28237 BinaryElementRelationLink.param1(link,source);
28238 BinaryElementRelationLink.param2(link,target);
28239}
28240/**
28241 * Matcher for detecting tuples t where <>eContainingClass reference EOperation(source,target)
28242 */
28243private pattern mayInRelationeContainingClass_reference_EOperation(
28244 problem:LogicProblem, interpretation:PartialInterpretation,
28245 source: DefinedElement, target:DefinedElement)
28246{
28247 find interpretation(problem,interpretation);
28248 // The two endpoint of the link have to exist
28249 find mayExist(problem, interpretation, source);
28250 find mayExist(problem, interpretation, target);
28251 // Type consistency
28252 find mayInstanceOfEOperation_class(problem,interpretation,source);
28253 find mayInstanceOfEClass_class(problem,interpretation,target);
28254 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
28255 // the upper bound of the multiplicity should be considered.
28256 numberOfExistingReferences == count find mustInRelationeContainingClass_reference_EOperation(problem,interpretation,source,_);
28257 check(numberOfExistingReferences < 1);
28258 // The eOpposite of the reference is containment, then a referene cannot be created if
28259 // 1. Multiple parents
28260 neg find mustContains4(problem,interpretation,source,_);
28261 // 2. Circle in the containment hierarchy
28262 neg find mustTransitiveContains(source,target);
28263} or {
28264 find mustInRelationeContainingClass_reference_EOperation(problem,interpretation,source,target);
28265}
28266/**
28267 * Matcher for detecting tuples t where []eTypeParameters reference EOperation(source,target)
28268 */
28269private pattern mustInRelationeTypeParameters_reference_EOperation(
28270 problem:LogicProblem, interpretation:PartialInterpretation,
28271 source: DefinedElement, target:DefinedElement)
28272{
28273 find interpretation(problem,interpretation);
28274 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
28275 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeParameters reference EOperation");
28276 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
28277 BinaryElementRelationLink.param1(link,source);
28278 BinaryElementRelationLink.param2(link,target);
28279}
28280/**
28281 * Matcher for detecting tuples t where <>eTypeParameters reference EOperation(source,target)
28282 */
28283private pattern mayInRelationeTypeParameters_reference_EOperation(
28284 problem:LogicProblem, interpretation:PartialInterpretation,
28285 source: DefinedElement, target:DefinedElement)
28286{
28287 find interpretation(problem,interpretation);
28288 // The two endpoint of the link have to exist
28289 find mayExist(problem, interpretation, source);
28290 find mayExist(problem, interpretation, target);
28291 // Type consistency
28292 find mayInstanceOfEOperation_class(problem,interpretation,source);
28293 find mayInstanceOfETypeParameter_class(problem,interpretation,target);
28294 // The reference is containment, then a new reference cannot be create if:
28295 // 1. Multiple parents
28296 neg find mustContains4(problem,interpretation,_,target);
28297 // 2. Circle in the containment hierarchy
28298 neg find mustTransitiveContains(source,target);
28299} or {
28300 find mustInRelationeTypeParameters_reference_EOperation(problem,interpretation,source,target);
28301}
28302/**
28303 * Matcher for detecting tuples t where []eParameters reference EOperation(source,target)
28304 */
28305private pattern mustInRelationeParameters_reference_EOperation(
28306 problem:LogicProblem, interpretation:PartialInterpretation,
28307 source: DefinedElement, target:DefinedElement)
28308{
28309 find interpretation(problem,interpretation);
28310 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
28311 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eParameters reference EOperation");
28312 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
28313 BinaryElementRelationLink.param1(link,source);
28314 BinaryElementRelationLink.param2(link,target);
28315}
28316/**
28317 * Matcher for detecting tuples t where <>eParameters reference EOperation(source,target)
28318 */
28319private pattern mayInRelationeParameters_reference_EOperation(
28320 problem:LogicProblem, interpretation:PartialInterpretation,
28321 source: DefinedElement, target:DefinedElement)
28322{
28323 find interpretation(problem,interpretation);
28324 // The two endpoint of the link have to exist
28325 find mayExist(problem, interpretation, source);
28326 find mayExist(problem, interpretation, target);
28327 // Type consistency
28328 find mayInstanceOfEOperation_class(problem,interpretation,source);
28329 find mayInstanceOfEParameter_class(problem,interpretation,target);
28330 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
28331 // the upper bound of the opposite reference multiplicity should be considered.
28332 numberOfExistingOppositeReferences == count find mustInRelationeOperation_reference_EParameter(problem,interpretation,target,_);
28333 check(numberOfExistingOppositeReferences < 1);
28334 // The reference is containment, then a new reference cannot be create if:
28335 // 1. Multiple parents
28336 neg find mustContains4(problem,interpretation,_,target);
28337 // 2. Circle in the containment hierarchy
28338 neg find mustTransitiveContains(source,target);
28339} or {
28340 find mustInRelationeParameters_reference_EOperation(problem,interpretation,source,target);
28341}
28342/**
28343 * Matcher for detecting tuples t where []eExceptions reference EOperation(source,target)
28344 */
28345private pattern mustInRelationeExceptions_reference_EOperation(
28346 problem:LogicProblem, interpretation:PartialInterpretation,
28347 source: DefinedElement, target:DefinedElement)
28348{
28349 find interpretation(problem,interpretation);
28350 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
28351 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eExceptions reference EOperation");
28352 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
28353 BinaryElementRelationLink.param1(link,source);
28354 BinaryElementRelationLink.param2(link,target);
28355}
28356/**
28357 * Matcher for detecting tuples t where <>eExceptions reference EOperation(source,target)
28358 */
28359private pattern mayInRelationeExceptions_reference_EOperation(
28360 problem:LogicProblem, interpretation:PartialInterpretation,
28361 source: DefinedElement, target:DefinedElement)
28362{
28363 find interpretation(problem,interpretation);
28364 // The two endpoint of the link have to exist
28365 find mayExist(problem, interpretation, source);
28366 find mayExist(problem, interpretation, target);
28367 // Type consistency
28368 find mayInstanceOfEOperation_class(problem,interpretation,source);
28369 find mayInstanceOfEClassifier_class(problem,interpretation,target);
28370} or {
28371 find mustInRelationeExceptions_reference_EOperation(problem,interpretation,source,target);
28372}
28373/**
28374 * Matcher for detecting tuples t where []eGenericExceptions reference EOperation(source,target)
28375 */
28376private pattern mustInRelationeGenericExceptions_reference_EOperation(
28377 problem:LogicProblem, interpretation:PartialInterpretation,
28378 source: DefinedElement, target:DefinedElement)
28379{
28380 find interpretation(problem,interpretation);
28381 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
28382 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eGenericExceptions reference EOperation");
28383 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
28384 BinaryElementRelationLink.param1(link,source);
28385 BinaryElementRelationLink.param2(link,target);
28386}
28387/**
28388 * Matcher for detecting tuples t where <>eGenericExceptions reference EOperation(source,target)
28389 */
28390private pattern mayInRelationeGenericExceptions_reference_EOperation(
28391 problem:LogicProblem, interpretation:PartialInterpretation,
28392 source: DefinedElement, target:DefinedElement)
28393{
28394 find interpretation(problem,interpretation);
28395 // The two endpoint of the link have to exist
28396 find mayExist(problem, interpretation, source);
28397 find mayExist(problem, interpretation, target);
28398 // Type consistency
28399 find mayInstanceOfEOperation_class(problem,interpretation,source);
28400 find mayInstanceOfEGenericType_class(problem,interpretation,target);
28401 // The reference is containment, then a new reference cannot be create if:
28402 // 1. Multiple parents
28403 neg find mustContains4(problem,interpretation,_,target);
28404 // 2. Circle in the containment hierarchy
28405 neg find mustTransitiveContains(source,target);
28406} or {
28407 find mustInRelationeGenericExceptions_reference_EOperation(problem,interpretation,source,target);
28408}
28409/**
28410 * Matcher for detecting tuples t where []eClassifiers reference EPackage(source,target)
28411 */
28412private pattern mustInRelationeClassifiers_reference_EPackage(
28413 problem:LogicProblem, interpretation:PartialInterpretation,
28414 source: DefinedElement, target:DefinedElement)
28415{
28416 find interpretation(problem,interpretation);
28417 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
28418 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eClassifiers reference EPackage");
28419 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
28420 BinaryElementRelationLink.param1(link,source);
28421 BinaryElementRelationLink.param2(link,target);
28422}
28423/**
28424 * Matcher for detecting tuples t where <>eClassifiers reference EPackage(source,target)
28425 */
28426private pattern mayInRelationeClassifiers_reference_EPackage(
28427 problem:LogicProblem, interpretation:PartialInterpretation,
28428 source: DefinedElement, target:DefinedElement)
28429{
28430 find interpretation(problem,interpretation);
28431 // The two endpoint of the link have to exist
28432 find mayExist(problem, interpretation, source);
28433 find mayExist(problem, interpretation, target);
28434 // Type consistency
28435 find mayInstanceOfEPackage_class(problem,interpretation,source);
28436 find mayInstanceOfEClassifier_class(problem,interpretation,target);
28437 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
28438 // the upper bound of the opposite reference multiplicity should be considered.
28439 numberOfExistingOppositeReferences == count find mustInRelationePackage_reference_EClassifier(problem,interpretation,target,_);
28440 check(numberOfExistingOppositeReferences < 1);
28441 // The reference is containment, then a new reference cannot be create if:
28442 // 1. Multiple parents
28443 neg find mustContains4(problem,interpretation,_,target);
28444 // 2. Circle in the containment hierarchy
28445 neg find mustTransitiveContains(source,target);
28446} or {
28447 find mustInRelationeClassifiers_reference_EPackage(problem,interpretation,source,target);
28448}
28449/**
28450 * Matcher for detecting tuples t where []eSubpackages reference EPackage(source,target)
28451 */
28452private pattern mustInRelationeSubpackages_reference_EPackage(
28453 problem:LogicProblem, interpretation:PartialInterpretation,
28454 source: DefinedElement, target:DefinedElement)
28455{
28456 find interpretation(problem,interpretation);
28457 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
28458 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eSubpackages reference EPackage");
28459 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
28460 BinaryElementRelationLink.param1(link,source);
28461 BinaryElementRelationLink.param2(link,target);
28462}
28463/**
28464 * Matcher for detecting tuples t where <>eSubpackages reference EPackage(source,target)
28465 */
28466private pattern mayInRelationeSubpackages_reference_EPackage(
28467 problem:LogicProblem, interpretation:PartialInterpretation,
28468 source: DefinedElement, target:DefinedElement)
28469{
28470 find interpretation(problem,interpretation);
28471 // The two endpoint of the link have to exist
28472 find mayExist(problem, interpretation, source);
28473 find mayExist(problem, interpretation, target);
28474 // Type consistency
28475 find mayInstanceOfEPackage_class(problem,interpretation,source);
28476 find mayInstanceOfEPackage_class(problem,interpretation,target);
28477 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
28478 // the upper bound of the opposite reference multiplicity should be considered.
28479 numberOfExistingOppositeReferences == count find mustInRelationeSuperPackage_reference_EPackage(problem,interpretation,target,_);
28480 check(numberOfExistingOppositeReferences < 1);
28481 // The reference is containment, then a new reference cannot be create if:
28482 // 1. Multiple parents
28483 neg find mustContains4(problem,interpretation,_,target);
28484 // 2. Circle in the containment hierarchy
28485 neg find mustTransitiveContains(source,target);
28486} or {
28487 find mustInRelationeSubpackages_reference_EPackage(problem,interpretation,source,target);
28488}
28489/**
28490 * Matcher for detecting tuples t where []eSuperPackage reference EPackage(source,target)
28491 */
28492private pattern mustInRelationeSuperPackage_reference_EPackage(
28493 problem:LogicProblem, interpretation:PartialInterpretation,
28494 source: DefinedElement, target:DefinedElement)
28495{
28496 find interpretation(problem,interpretation);
28497 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
28498 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eSuperPackage reference EPackage");
28499 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
28500 BinaryElementRelationLink.param1(link,source);
28501 BinaryElementRelationLink.param2(link,target);
28502}
28503/**
28504 * Matcher for detecting tuples t where <>eSuperPackage reference EPackage(source,target)
28505 */
28506private pattern mayInRelationeSuperPackage_reference_EPackage(
28507 problem:LogicProblem, interpretation:PartialInterpretation,
28508 source: DefinedElement, target:DefinedElement)
28509{
28510 find interpretation(problem,interpretation);
28511 // The two endpoint of the link have to exist
28512 find mayExist(problem, interpretation, source);
28513 find mayExist(problem, interpretation, target);
28514 // Type consistency
28515 find mayInstanceOfEPackage_class(problem,interpretation,source);
28516 find mayInstanceOfEPackage_class(problem,interpretation,target);
28517 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
28518 // the upper bound of the multiplicity should be considered.
28519 numberOfExistingReferences == count find mustInRelationeSuperPackage_reference_EPackage(problem,interpretation,source,_);
28520 check(numberOfExistingReferences < 1);
28521 // The eOpposite of the reference is containment, then a referene cannot be created if
28522 // 1. Multiple parents
28523 neg find mustContains4(problem,interpretation,source,_);
28524 // 2. Circle in the containment hierarchy
28525 neg find mustTransitiveContains(source,target);
28526} or {
28527 find mustInRelationeSuperPackage_reference_EPackage(problem,interpretation,source,target);
28528}
28529/**
28530 * Matcher for detecting tuples t where []eOperation reference EParameter(source,target)
28531 */
28532private pattern mustInRelationeOperation_reference_EParameter(
28533 problem:LogicProblem, interpretation:PartialInterpretation,
28534 source: DefinedElement, target:DefinedElement)
28535{
28536 find interpretation(problem,interpretation);
28537 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
28538 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eOperation reference EParameter");
28539 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
28540 BinaryElementRelationLink.param1(link,source);
28541 BinaryElementRelationLink.param2(link,target);
28542}
28543/**
28544 * Matcher for detecting tuples t where <>eOperation reference EParameter(source,target)
28545 */
28546private pattern mayInRelationeOperation_reference_EParameter(
28547 problem:LogicProblem, interpretation:PartialInterpretation,
28548 source: DefinedElement, target:DefinedElement)
28549{
28550 find interpretation(problem,interpretation);
28551 // The two endpoint of the link have to exist
28552 find mayExist(problem, interpretation, source);
28553 find mayExist(problem, interpretation, target);
28554 // Type consistency
28555 find mayInstanceOfEParameter_class(problem,interpretation,source);
28556 find mayInstanceOfEOperation_class(problem,interpretation,target);
28557 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
28558 // the upper bound of the multiplicity should be considered.
28559 numberOfExistingReferences == count find mustInRelationeOperation_reference_EParameter(problem,interpretation,source,_);
28560 check(numberOfExistingReferences < 1);
28561 // The eOpposite of the reference is containment, then a referene cannot be created if
28562 // 1. Multiple parents
28563 neg find mustContains4(problem,interpretation,source,_);
28564 // 2. Circle in the containment hierarchy
28565 neg find mustTransitiveContains(source,target);
28566} or {
28567 find mustInRelationeOperation_reference_EParameter(problem,interpretation,source,target);
28568}
28569/**
28570 * Matcher for detecting tuples t where []eOpposite reference EReference(source,target)
28571 */
28572private pattern mustInRelationeOpposite_reference_EReference(
28573 problem:LogicProblem, interpretation:PartialInterpretation,
28574 source: DefinedElement, target:DefinedElement)
28575{
28576 find interpretation(problem,interpretation);
28577 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
28578 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eOpposite reference EReference");
28579 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
28580 BinaryElementRelationLink.param1(link,source);
28581 BinaryElementRelationLink.param2(link,target);
28582}
28583/**
28584 * Matcher for detecting tuples t where <>eOpposite reference EReference(source,target)
28585 */
28586private pattern mayInRelationeOpposite_reference_EReference(
28587 problem:LogicProblem, interpretation:PartialInterpretation,
28588 source: DefinedElement, target:DefinedElement)
28589{
28590 find interpretation(problem,interpretation);
28591 // The two endpoint of the link have to exist
28592 find mayExist(problem, interpretation, source);
28593 find mayExist(problem, interpretation, target);
28594 // Type consistency
28595 find mayInstanceOfEReference_class(problem,interpretation,source);
28596 find mayInstanceOfEReference_class(problem,interpretation,target);
28597 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
28598 // the upper bound of the multiplicity should be considered.
28599 numberOfExistingReferences == count find mustInRelationeOpposite_reference_EReference(problem,interpretation,source,_);
28600 check(numberOfExistingReferences < 1);
28601} or {
28602 find mustInRelationeOpposite_reference_EReference(problem,interpretation,source,target);
28603}
28604/**
28605 * Matcher for detecting tuples t where []eReferenceType reference EReference(source,target)
28606 */
28607private pattern mustInRelationeReferenceType_reference_EReference(
28608 problem:LogicProblem, interpretation:PartialInterpretation,
28609 source: DefinedElement, target:DefinedElement)
28610{
28611 find interpretation(problem,interpretation);
28612 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
28613 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferenceType reference EReference");
28614 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
28615 BinaryElementRelationLink.param1(link,source);
28616 BinaryElementRelationLink.param2(link,target);
28617}
28618/**
28619 * Matcher for detecting tuples t where <>eReferenceType reference EReference(source,target)
28620 */
28621private pattern mayInRelationeReferenceType_reference_EReference(
28622 problem:LogicProblem, interpretation:PartialInterpretation,
28623 source: DefinedElement, target:DefinedElement)
28624{
28625 find interpretation(problem,interpretation);
28626 // The two endpoint of the link have to exist
28627 find mayExist(problem, interpretation, source);
28628 find mayExist(problem, interpretation, target);
28629 // Type consistency
28630 find mayInstanceOfEReference_class(problem,interpretation,source);
28631 find mayInstanceOfEClass_class(problem,interpretation,target);
28632 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
28633 // the upper bound of the multiplicity should be considered.
28634 numberOfExistingReferences == count find mustInRelationeReferenceType_reference_EReference(problem,interpretation,source,_);
28635 check(numberOfExistingReferences < 1);
28636} or {
28637 find mustInRelationeReferenceType_reference_EReference(problem,interpretation,source,target);
28638}
28639/**
28640 * Matcher for detecting tuples t where []eKeys reference EReference(source,target)
28641 */
28642private pattern mustInRelationeKeys_reference_EReference(
28643 problem:LogicProblem, interpretation:PartialInterpretation,
28644 source: DefinedElement, target:DefinedElement)
28645{
28646 find interpretation(problem,interpretation);
28647 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
28648 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eKeys reference EReference");
28649 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
28650 BinaryElementRelationLink.param1(link,source);
28651 BinaryElementRelationLink.param2(link,target);
28652}
28653/**
28654 * Matcher for detecting tuples t where <>eKeys reference EReference(source,target)
28655 */
28656private pattern mayInRelationeKeys_reference_EReference(
28657 problem:LogicProblem, interpretation:PartialInterpretation,
28658 source: DefinedElement, target:DefinedElement)
28659{
28660 find interpretation(problem,interpretation);
28661 // The two endpoint of the link have to exist
28662 find mayExist(problem, interpretation, source);
28663 find mayExist(problem, interpretation, target);
28664 // Type consistency
28665 find mayInstanceOfEReference_class(problem,interpretation,source);
28666 find mayInstanceOfEAttribute_class(problem,interpretation,target);
28667} or {
28668 find mustInRelationeKeys_reference_EReference(problem,interpretation,source,target);
28669}
28670/**
28671 * Matcher for detecting tuples t where []eContainingClass reference EStructuralFeature(source,target)
28672 */
28673private pattern mustInRelationeContainingClass_reference_EStructuralFeature(
28674 problem:LogicProblem, interpretation:PartialInterpretation,
28675 source: DefinedElement, target:DefinedElement)
28676{
28677 find interpretation(problem,interpretation);
28678 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
28679 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eContainingClass reference EStructuralFeature");
28680 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
28681 BinaryElementRelationLink.param1(link,source);
28682 BinaryElementRelationLink.param2(link,target);
28683}
28684/**
28685 * Matcher for detecting tuples t where <>eContainingClass reference EStructuralFeature(source,target)
28686 */
28687private pattern mayInRelationeContainingClass_reference_EStructuralFeature(
28688 problem:LogicProblem, interpretation:PartialInterpretation,
28689 source: DefinedElement, target:DefinedElement)
28690{
28691 find interpretation(problem,interpretation);
28692 // The two endpoint of the link have to exist
28693 find mayExist(problem, interpretation, source);
28694 find mayExist(problem, interpretation, target);
28695 // Type consistency
28696 find mayInstanceOfEStructuralFeature_class(problem,interpretation,source);
28697 find mayInstanceOfEClass_class(problem,interpretation,target);
28698 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
28699 // the upper bound of the multiplicity should be considered.
28700 numberOfExistingReferences == count find mustInRelationeContainingClass_reference_EStructuralFeature(problem,interpretation,source,_);
28701 check(numberOfExistingReferences < 1);
28702 // The eOpposite of the reference is containment, then a referene cannot be created if
28703 // 1. Multiple parents
28704 neg find mustContains4(problem,interpretation,source,_);
28705 // 2. Circle in the containment hierarchy
28706 neg find mustTransitiveContains(source,target);
28707} or {
28708 find mustInRelationeContainingClass_reference_EStructuralFeature(problem,interpretation,source,target);
28709}
28710/**
28711 * Matcher for detecting tuples t where []eType reference ETypedElement(source,target)
28712 */
28713private pattern mustInRelationeType_reference_ETypedElement(
28714 problem:LogicProblem, interpretation:PartialInterpretation,
28715 source: DefinedElement, target:DefinedElement)
28716{
28717 find interpretation(problem,interpretation);
28718 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
28719 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eType reference ETypedElement");
28720 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
28721 BinaryElementRelationLink.param1(link,source);
28722 BinaryElementRelationLink.param2(link,target);
28723}
28724/**
28725 * Matcher for detecting tuples t where <>eType reference ETypedElement(source,target)
28726 */
28727private pattern mayInRelationeType_reference_ETypedElement(
28728 problem:LogicProblem, interpretation:PartialInterpretation,
28729 source: DefinedElement, target:DefinedElement)
28730{
28731 find interpretation(problem,interpretation);
28732 // The two endpoint of the link have to exist
28733 find mayExist(problem, interpretation, source);
28734 find mayExist(problem, interpretation, target);
28735 // Type consistency
28736 find mayInstanceOfETypedElement_class(problem,interpretation,source);
28737 find mayInstanceOfEClassifier_class(problem,interpretation,target);
28738 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
28739 // the upper bound of the multiplicity should be considered.
28740 numberOfExistingReferences == count find mustInRelationeType_reference_ETypedElement(problem,interpretation,source,_);
28741 check(numberOfExistingReferences < 1);
28742} or {
28743 find mustInRelationeType_reference_ETypedElement(problem,interpretation,source,target);
28744}
28745/**
28746 * Matcher for detecting tuples t where []eGenericType reference ETypedElement(source,target)
28747 */
28748private pattern mustInRelationeGenericType_reference_ETypedElement(
28749 problem:LogicProblem, interpretation:PartialInterpretation,
28750 source: DefinedElement, target:DefinedElement)
28751{
28752 find interpretation(problem,interpretation);
28753 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
28754 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eGenericType reference ETypedElement");
28755 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
28756 BinaryElementRelationLink.param1(link,source);
28757 BinaryElementRelationLink.param2(link,target);
28758}
28759/**
28760 * Matcher for detecting tuples t where <>eGenericType reference ETypedElement(source,target)
28761 */
28762private pattern mayInRelationeGenericType_reference_ETypedElement(
28763 problem:LogicProblem, interpretation:PartialInterpretation,
28764 source: DefinedElement, target:DefinedElement)
28765{
28766 find interpretation(problem,interpretation);
28767 // The two endpoint of the link have to exist
28768 find mayExist(problem, interpretation, source);
28769 find mayExist(problem, interpretation, target);
28770 // Type consistency
28771 find mayInstanceOfETypedElement_class(problem,interpretation,source);
28772 find mayInstanceOfEGenericType_class(problem,interpretation,target);
28773 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
28774 // the upper bound of the multiplicity should be considered.
28775 numberOfExistingReferences == count find mustInRelationeGenericType_reference_ETypedElement(problem,interpretation,source,_);
28776 check(numberOfExistingReferences < 1);
28777 // The reference is containment, then a new reference cannot be create if:
28778 // 1. Multiple parents
28779 neg find mustContains4(problem,interpretation,_,target);
28780 // 2. Circle in the containment hierarchy
28781 neg find mustTransitiveContains(source,target);
28782} or {
28783 find mustInRelationeGenericType_reference_ETypedElement(problem,interpretation,source,target);
28784}
28785/**
28786 * Matcher for detecting tuples t where []eUpperBound reference EGenericType(source,target)
28787 */
28788private pattern mustInRelationeUpperBound_reference_EGenericType(
28789 problem:LogicProblem, interpretation:PartialInterpretation,
28790 source: DefinedElement, target:DefinedElement)
28791{
28792 find interpretation(problem,interpretation);
28793 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
28794 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eUpperBound reference EGenericType");
28795 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
28796 BinaryElementRelationLink.param1(link,source);
28797 BinaryElementRelationLink.param2(link,target);
28798}
28799/**
28800 * Matcher for detecting tuples t where <>eUpperBound reference EGenericType(source,target)
28801 */
28802private pattern mayInRelationeUpperBound_reference_EGenericType(
28803 problem:LogicProblem, interpretation:PartialInterpretation,
28804 source: DefinedElement, target:DefinedElement)
28805{
28806 find interpretation(problem,interpretation);
28807 // The two endpoint of the link have to exist
28808 find mayExist(problem, interpretation, source);
28809 find mayExist(problem, interpretation, target);
28810 // Type consistency
28811 find mayInstanceOfEGenericType_class(problem,interpretation,source);
28812 find mayInstanceOfEGenericType_class(problem,interpretation,target);
28813 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
28814 // the upper bound of the multiplicity should be considered.
28815 numberOfExistingReferences == count find mustInRelationeUpperBound_reference_EGenericType(problem,interpretation,source,_);
28816 check(numberOfExistingReferences < 1);
28817 // The reference is containment, then a new reference cannot be create if:
28818 // 1. Multiple parents
28819 neg find mustContains4(problem,interpretation,_,target);
28820 // 2. Circle in the containment hierarchy
28821 neg find mustTransitiveContains(source,target);
28822} or {
28823 find mustInRelationeUpperBound_reference_EGenericType(problem,interpretation,source,target);
28824}
28825/**
28826 * Matcher for detecting tuples t where []eTypeArguments reference EGenericType(source,target)
28827 */
28828private pattern mustInRelationeTypeArguments_reference_EGenericType(
28829 problem:LogicProblem, interpretation:PartialInterpretation,
28830 source: DefinedElement, target:DefinedElement)
28831{
28832 find interpretation(problem,interpretation);
28833 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
28834 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeArguments reference EGenericType");
28835 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
28836 BinaryElementRelationLink.param1(link,source);
28837 BinaryElementRelationLink.param2(link,target);
28838}
28839/**
28840 * Matcher for detecting tuples t where <>eTypeArguments reference EGenericType(source,target)
28841 */
28842private pattern mayInRelationeTypeArguments_reference_EGenericType(
28843 problem:LogicProblem, interpretation:PartialInterpretation,
28844 source: DefinedElement, target:DefinedElement)
28845{
28846 find interpretation(problem,interpretation);
28847 // The two endpoint of the link have to exist
28848 find mayExist(problem, interpretation, source);
28849 find mayExist(problem, interpretation, target);
28850 // Type consistency
28851 find mayInstanceOfEGenericType_class(problem,interpretation,source);
28852 find mayInstanceOfEGenericType_class(problem,interpretation,target);
28853 // The reference is containment, then a new reference cannot be create if:
28854 // 1. Multiple parents
28855 neg find mustContains4(problem,interpretation,_,target);
28856 // 2. Circle in the containment hierarchy
28857 neg find mustTransitiveContains(source,target);
28858} or {
28859 find mustInRelationeTypeArguments_reference_EGenericType(problem,interpretation,source,target);
28860}
28861/**
28862 * Matcher for detecting tuples t where []eRawType reference EGenericType(source,target)
28863 */
28864private pattern mustInRelationeRawType_reference_EGenericType(
28865 problem:LogicProblem, interpretation:PartialInterpretation,
28866 source: DefinedElement, target:DefinedElement)
28867{
28868 find interpretation(problem,interpretation);
28869 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
28870 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eRawType reference EGenericType");
28871 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
28872 BinaryElementRelationLink.param1(link,source);
28873 BinaryElementRelationLink.param2(link,target);
28874}
28875/**
28876 * Matcher for detecting tuples t where <>eRawType reference EGenericType(source,target)
28877 */
28878private pattern mayInRelationeRawType_reference_EGenericType(
28879 problem:LogicProblem, interpretation:PartialInterpretation,
28880 source: DefinedElement, target:DefinedElement)
28881{
28882 find interpretation(problem,interpretation);
28883 // The two endpoint of the link have to exist
28884 find mayExist(problem, interpretation, source);
28885 find mayExist(problem, interpretation, target);
28886 // Type consistency
28887 find mayInstanceOfEGenericType_class(problem,interpretation,source);
28888 find mayInstanceOfEClassifier_class(problem,interpretation,target);
28889 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
28890 // the upper bound of the multiplicity should be considered.
28891 numberOfExistingReferences == count find mustInRelationeRawType_reference_EGenericType(problem,interpretation,source,_);
28892 check(numberOfExistingReferences < 1);
28893} or {
28894 find mustInRelationeRawType_reference_EGenericType(problem,interpretation,source,target);
28895}
28896/**
28897 * Matcher for detecting tuples t where []eLowerBound reference EGenericType(source,target)
28898 */
28899private pattern mustInRelationeLowerBound_reference_EGenericType(
28900 problem:LogicProblem, interpretation:PartialInterpretation,
28901 source: DefinedElement, target:DefinedElement)
28902{
28903 find interpretation(problem,interpretation);
28904 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
28905 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eLowerBound reference EGenericType");
28906 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
28907 BinaryElementRelationLink.param1(link,source);
28908 BinaryElementRelationLink.param2(link,target);
28909}
28910/**
28911 * Matcher for detecting tuples t where <>eLowerBound reference EGenericType(source,target)
28912 */
28913private pattern mayInRelationeLowerBound_reference_EGenericType(
28914 problem:LogicProblem, interpretation:PartialInterpretation,
28915 source: DefinedElement, target:DefinedElement)
28916{
28917 find interpretation(problem,interpretation);
28918 // The two endpoint of the link have to exist
28919 find mayExist(problem, interpretation, source);
28920 find mayExist(problem, interpretation, target);
28921 // Type consistency
28922 find mayInstanceOfEGenericType_class(problem,interpretation,source);
28923 find mayInstanceOfEGenericType_class(problem,interpretation,target);
28924 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
28925 // the upper bound of the multiplicity should be considered.
28926 numberOfExistingReferences == count find mustInRelationeLowerBound_reference_EGenericType(problem,interpretation,source,_);
28927 check(numberOfExistingReferences < 1);
28928 // The reference is containment, then a new reference cannot be create if:
28929 // 1. Multiple parents
28930 neg find mustContains4(problem,interpretation,_,target);
28931 // 2. Circle in the containment hierarchy
28932 neg find mustTransitiveContains(source,target);
28933} or {
28934 find mustInRelationeLowerBound_reference_EGenericType(problem,interpretation,source,target);
28935}
28936/**
28937 * Matcher for detecting tuples t where []eTypeParameter reference EGenericType(source,target)
28938 */
28939private pattern mustInRelationeTypeParameter_reference_EGenericType(
28940 problem:LogicProblem, interpretation:PartialInterpretation,
28941 source: DefinedElement, target:DefinedElement)
28942{
28943 find interpretation(problem,interpretation);
28944 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
28945 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeParameter reference EGenericType");
28946 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
28947 BinaryElementRelationLink.param1(link,source);
28948 BinaryElementRelationLink.param2(link,target);
28949}
28950/**
28951 * Matcher for detecting tuples t where <>eTypeParameter reference EGenericType(source,target)
28952 */
28953private pattern mayInRelationeTypeParameter_reference_EGenericType(
28954 problem:LogicProblem, interpretation:PartialInterpretation,
28955 source: DefinedElement, target:DefinedElement)
28956{
28957 find interpretation(problem,interpretation);
28958 // The two endpoint of the link have to exist
28959 find mayExist(problem, interpretation, source);
28960 find mayExist(problem, interpretation, target);
28961 // Type consistency
28962 find mayInstanceOfEGenericType_class(problem,interpretation,source);
28963 find mayInstanceOfETypeParameter_class(problem,interpretation,target);
28964 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
28965 // the upper bound of the multiplicity should be considered.
28966 numberOfExistingReferences == count find mustInRelationeTypeParameter_reference_EGenericType(problem,interpretation,source,_);
28967 check(numberOfExistingReferences < 1);
28968} or {
28969 find mustInRelationeTypeParameter_reference_EGenericType(problem,interpretation,source,target);
28970}
28971/**
28972 * Matcher for detecting tuples t where []eClassifier reference EGenericType(source,target)
28973 */
28974private pattern mustInRelationeClassifier_reference_EGenericType(
28975 problem:LogicProblem, interpretation:PartialInterpretation,
28976 source: DefinedElement, target:DefinedElement)
28977{
28978 find interpretation(problem,interpretation);
28979 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
28980 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eClassifier reference EGenericType");
28981 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
28982 BinaryElementRelationLink.param1(link,source);
28983 BinaryElementRelationLink.param2(link,target);
28984}
28985/**
28986 * Matcher for detecting tuples t where <>eClassifier reference EGenericType(source,target)
28987 */
28988private pattern mayInRelationeClassifier_reference_EGenericType(
28989 problem:LogicProblem, interpretation:PartialInterpretation,
28990 source: DefinedElement, target:DefinedElement)
28991{
28992 find interpretation(problem,interpretation);
28993 // The two endpoint of the link have to exist
28994 find mayExist(problem, interpretation, source);
28995 find mayExist(problem, interpretation, target);
28996 // Type consistency
28997 find mayInstanceOfEGenericType_class(problem,interpretation,source);
28998 find mayInstanceOfEClassifier_class(problem,interpretation,target);
28999 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
29000 // the upper bound of the multiplicity should be considered.
29001 numberOfExistingReferences == count find mustInRelationeClassifier_reference_EGenericType(problem,interpretation,source,_);
29002 check(numberOfExistingReferences < 1);
29003} or {
29004 find mustInRelationeClassifier_reference_EGenericType(problem,interpretation,source,target);
29005}
29006/**
29007 * Matcher for detecting tuples t where []eBounds reference ETypeParameter(source,target)
29008 */
29009private pattern mustInRelationeBounds_reference_ETypeParameter(
29010 problem:LogicProblem, interpretation:PartialInterpretation,
29011 source: DefinedElement, target:DefinedElement)
29012{
29013 find interpretation(problem,interpretation);
29014 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
29015 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eBounds reference ETypeParameter");
29016 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
29017 BinaryElementRelationLink.param1(link,source);
29018 BinaryElementRelationLink.param2(link,target);
29019}
29020/**
29021 * Matcher for detecting tuples t where <>eBounds reference ETypeParameter(source,target)
29022 */
29023private pattern mayInRelationeBounds_reference_ETypeParameter(
29024 problem:LogicProblem, interpretation:PartialInterpretation,
29025 source: DefinedElement, target:DefinedElement)
29026{
29027 find interpretation(problem,interpretation);
29028 // The two endpoint of the link have to exist
29029 find mayExist(problem, interpretation, source);
29030 find mayExist(problem, interpretation, target);
29031 // Type consistency
29032 find mayInstanceOfETypeParameter_class(problem,interpretation,source);
29033 find mayInstanceOfEGenericType_class(problem,interpretation,target);
29034 // The reference is containment, then a new reference cannot be create if:
29035 // 1. Multiple parents
29036 neg find mustContains4(problem,interpretation,_,target);
29037 // 2. Circle in the containment hierarchy
29038 neg find mustTransitiveContains(source,target);
29039} or {
29040 find mustInRelationeBounds_reference_ETypeParameter(problem,interpretation,source,target);
29041}
29042/**
29043 * Matcher for detecting tuples t where []iD attribute EAttribute(source,target)
29044 */
29045private pattern mustInRelationiD_attribute_EAttribute(
29046 problem:LogicProblem, interpretation:PartialInterpretation,
29047 source: DefinedElement, target:DefinedElement)
29048{
29049 find interpretation(problem,interpretation);
29050 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
29051 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"iD attribute EAttribute");
29052 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
29053 BinaryElementRelationLink.param1(link,source);
29054 BinaryElementRelationLink.param2(link,target);
29055}
29056/**
29057 * Matcher for detecting tuples t where <>iD attribute EAttribute(source,target)
29058 */
29059private pattern mayInRelationiD_attribute_EAttribute(
29060 problem:LogicProblem, interpretation:PartialInterpretation,
29061 source: DefinedElement, target:DefinedElement)
29062{
29063 find interpretation(problem,interpretation);
29064 // The two endpoint of the link have to exist
29065 find mayExist(problem, interpretation, source);
29066 find mayExist(problem, interpretation, target);
29067 // Type consistency
29068 find mayInstanceOfEAttribute_class(problem,interpretation,source);
29069 BooleanElement(target);
29070 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
29071 // the upper bound of the multiplicity should be considered.
29072 numberOfExistingReferences == count find mustInRelationiD_attribute_EAttribute(problem,interpretation,source,_);
29073 check(numberOfExistingReferences < 1);
29074} or {
29075 find mustInRelationiD_attribute_EAttribute(problem,interpretation,source,target);
29076}
29077/**
29078 * Matcher for detecting tuples t where []source attribute EAnnotation(source,target)
29079 */
29080private pattern mustInRelationsource_attribute_EAnnotation(
29081 problem:LogicProblem, interpretation:PartialInterpretation,
29082 source: DefinedElement, target:DefinedElement)
29083{
29084 find interpretation(problem,interpretation);
29085 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
29086 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"source attribute EAnnotation");
29087 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
29088 BinaryElementRelationLink.param1(link,source);
29089 BinaryElementRelationLink.param2(link,target);
29090}
29091/**
29092 * Matcher for detecting tuples t where <>source attribute EAnnotation(source,target)
29093 */
29094private pattern mayInRelationsource_attribute_EAnnotation(
29095 problem:LogicProblem, interpretation:PartialInterpretation,
29096 source: DefinedElement, target:DefinedElement)
29097{
29098 find interpretation(problem,interpretation);
29099 // The two endpoint of the link have to exist
29100 find mayExist(problem, interpretation, source);
29101 find mayExist(problem, interpretation, target);
29102 // Type consistency
29103 find mayInstanceOfEAnnotation_class(problem,interpretation,source);
29104 StringElement(target);
29105 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
29106 // the upper bound of the multiplicity should be considered.
29107 numberOfExistingReferences == count find mustInRelationsource_attribute_EAnnotation(problem,interpretation,source,_);
29108 check(numberOfExistingReferences < 1);
29109} or {
29110 find mustInRelationsource_attribute_EAnnotation(problem,interpretation,source,target);
29111}
29112/**
29113 * Matcher for detecting tuples t where []abstract attribute EClass(source,target)
29114 */
29115private pattern mustInRelationabstract_attribute_EClass(
29116 problem:LogicProblem, interpretation:PartialInterpretation,
29117 source: DefinedElement, target:DefinedElement)
29118{
29119 find interpretation(problem,interpretation);
29120 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
29121 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"abstract attribute EClass");
29122 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
29123 BinaryElementRelationLink.param1(link,source);
29124 BinaryElementRelationLink.param2(link,target);
29125}
29126/**
29127 * Matcher for detecting tuples t where <>abstract attribute EClass(source,target)
29128 */
29129private pattern mayInRelationabstract_attribute_EClass(
29130 problem:LogicProblem, interpretation:PartialInterpretation,
29131 source: DefinedElement, target:DefinedElement)
29132{
29133 find interpretation(problem,interpretation);
29134 // The two endpoint of the link have to exist
29135 find mayExist(problem, interpretation, source);
29136 find mayExist(problem, interpretation, target);
29137 // Type consistency
29138 find mayInstanceOfEClass_class(problem,interpretation,source);
29139 BooleanElement(target);
29140 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
29141 // the upper bound of the multiplicity should be considered.
29142 numberOfExistingReferences == count find mustInRelationabstract_attribute_EClass(problem,interpretation,source,_);
29143 check(numberOfExistingReferences < 1);
29144} or {
29145 find mustInRelationabstract_attribute_EClass(problem,interpretation,source,target);
29146}
29147/**
29148 * Matcher for detecting tuples t where []interface attribute EClass(source,target)
29149 */
29150private pattern mustInRelationinterface_attribute_EClass(
29151 problem:LogicProblem, interpretation:PartialInterpretation,
29152 source: DefinedElement, target:DefinedElement)
29153{
29154 find interpretation(problem,interpretation);
29155 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
29156 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface attribute EClass");
29157 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
29158 BinaryElementRelationLink.param1(link,source);
29159 BinaryElementRelationLink.param2(link,target);
29160}
29161/**
29162 * Matcher for detecting tuples t where <>interface attribute EClass(source,target)
29163 */
29164private pattern mayInRelationinterface_attribute_EClass(
29165 problem:LogicProblem, interpretation:PartialInterpretation,
29166 source: DefinedElement, target:DefinedElement)
29167{
29168 find interpretation(problem,interpretation);
29169 // The two endpoint of the link have to exist
29170 find mayExist(problem, interpretation, source);
29171 find mayExist(problem, interpretation, target);
29172 // Type consistency
29173 find mayInstanceOfEClass_class(problem,interpretation,source);
29174 BooleanElement(target);
29175 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
29176 // the upper bound of the multiplicity should be considered.
29177 numberOfExistingReferences == count find mustInRelationinterface_attribute_EClass(problem,interpretation,source,_);
29178 check(numberOfExistingReferences < 1);
29179} or {
29180 find mustInRelationinterface_attribute_EClass(problem,interpretation,source,target);
29181}
29182/**
29183 * Matcher for detecting tuples t where []instanceClassName attribute EClassifier(source,target)
29184 */
29185private pattern mustInRelationinstanceClassName_attribute_EClassifier(
29186 problem:LogicProblem, interpretation:PartialInterpretation,
29187 source: DefinedElement, target:DefinedElement)
29188{
29189 find interpretation(problem,interpretation);
29190 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
29191 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"instanceClassName attribute EClassifier");
29192 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
29193 BinaryElementRelationLink.param1(link,source);
29194 BinaryElementRelationLink.param2(link,target);
29195}
29196/**
29197 * Matcher for detecting tuples t where <>instanceClassName attribute EClassifier(source,target)
29198 */
29199private pattern mayInRelationinstanceClassName_attribute_EClassifier(
29200 problem:LogicProblem, interpretation:PartialInterpretation,
29201 source: DefinedElement, target:DefinedElement)
29202{
29203 find interpretation(problem,interpretation);
29204 // The two endpoint of the link have to exist
29205 find mayExist(problem, interpretation, source);
29206 find mayExist(problem, interpretation, target);
29207 // Type consistency
29208 find mayInstanceOfEClassifier_class(problem,interpretation,source);
29209 StringElement(target);
29210 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
29211 // the upper bound of the multiplicity should be considered.
29212 numberOfExistingReferences == count find mustInRelationinstanceClassName_attribute_EClassifier(problem,interpretation,source,_);
29213 check(numberOfExistingReferences < 1);
29214} or {
29215 find mustInRelationinstanceClassName_attribute_EClassifier(problem,interpretation,source,target);
29216}
29217/**
29218 * Matcher for detecting tuples t where []instanceTypeName attribute EClassifier(source,target)
29219 */
29220private pattern mustInRelationinstanceTypeName_attribute_EClassifier(
29221 problem:LogicProblem, interpretation:PartialInterpretation,
29222 source: DefinedElement, target:DefinedElement)
29223{
29224 find interpretation(problem,interpretation);
29225 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
29226 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"instanceTypeName attribute EClassifier");
29227 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
29228 BinaryElementRelationLink.param1(link,source);
29229 BinaryElementRelationLink.param2(link,target);
29230}
29231/**
29232 * Matcher for detecting tuples t where <>instanceTypeName attribute EClassifier(source,target)
29233 */
29234private pattern mayInRelationinstanceTypeName_attribute_EClassifier(
29235 problem:LogicProblem, interpretation:PartialInterpretation,
29236 source: DefinedElement, target:DefinedElement)
29237{
29238 find interpretation(problem,interpretation);
29239 // The two endpoint of the link have to exist
29240 find mayExist(problem, interpretation, source);
29241 find mayExist(problem, interpretation, target);
29242 // Type consistency
29243 find mayInstanceOfEClassifier_class(problem,interpretation,source);
29244 StringElement(target);
29245 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
29246 // the upper bound of the multiplicity should be considered.
29247 numberOfExistingReferences == count find mustInRelationinstanceTypeName_attribute_EClassifier(problem,interpretation,source,_);
29248 check(numberOfExistingReferences < 1);
29249} or {
29250 find mustInRelationinstanceTypeName_attribute_EClassifier(problem,interpretation,source,target);
29251}
29252/**
29253 * Matcher for detecting tuples t where []serializable attribute EDataType(source,target)
29254 */
29255private pattern mustInRelationserializable_attribute_EDataType(
29256 problem:LogicProblem, interpretation:PartialInterpretation,
29257 source: DefinedElement, target:DefinedElement)
29258{
29259 find interpretation(problem,interpretation);
29260 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
29261 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"serializable attribute EDataType");
29262 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
29263 BinaryElementRelationLink.param1(link,source);
29264 BinaryElementRelationLink.param2(link,target);
29265}
29266/**
29267 * Matcher for detecting tuples t where <>serializable attribute EDataType(source,target)
29268 */
29269private pattern mayInRelationserializable_attribute_EDataType(
29270 problem:LogicProblem, interpretation:PartialInterpretation,
29271 source: DefinedElement, target:DefinedElement)
29272{
29273 find interpretation(problem,interpretation);
29274 // The two endpoint of the link have to exist
29275 find mayExist(problem, interpretation, source);
29276 find mayExist(problem, interpretation, target);
29277 // Type consistency
29278 find mayInstanceOfEDataType_class(problem,interpretation,source);
29279 BooleanElement(target);
29280 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
29281 // the upper bound of the multiplicity should be considered.
29282 numberOfExistingReferences == count find mustInRelationserializable_attribute_EDataType(problem,interpretation,source,_);
29283 check(numberOfExistingReferences < 1);
29284} or {
29285 find mustInRelationserializable_attribute_EDataType(problem,interpretation,source,target);
29286}
29287/**
29288 * Matcher for detecting tuples t where []value attribute EEnumLiteral(source,target)
29289 */
29290private pattern mustInRelationvalue_attribute_EEnumLiteral(
29291 problem:LogicProblem, interpretation:PartialInterpretation,
29292 source: DefinedElement, target:DefinedElement)
29293{
29294 find interpretation(problem,interpretation);
29295 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
29296 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"value attribute EEnumLiteral");
29297 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
29298 BinaryElementRelationLink.param1(link,source);
29299 BinaryElementRelationLink.param2(link,target);
29300}
29301/**
29302 * Matcher for detecting tuples t where <>value attribute EEnumLiteral(source,target)
29303 */
29304private pattern mayInRelationvalue_attribute_EEnumLiteral(
29305 problem:LogicProblem, interpretation:PartialInterpretation,
29306 source: DefinedElement, target:DefinedElement)
29307{
29308 find interpretation(problem,interpretation);
29309 // The two endpoint of the link have to exist
29310 find mayExist(problem, interpretation, source);
29311 find mayExist(problem, interpretation, target);
29312 // Type consistency
29313 find mayInstanceOfEEnumLiteral_class(problem,interpretation,source);
29314 IntegerElement(target);
29315 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
29316 // the upper bound of the multiplicity should be considered.
29317 numberOfExistingReferences == count find mustInRelationvalue_attribute_EEnumLiteral(problem,interpretation,source,_);
29318 check(numberOfExistingReferences < 1);
29319} or {
29320 find mustInRelationvalue_attribute_EEnumLiteral(problem,interpretation,source,target);
29321}
29322/**
29323 * Matcher for detecting tuples t where []literal attribute EEnumLiteral(source,target)
29324 */
29325private pattern mustInRelationliteral_attribute_EEnumLiteral(
29326 problem:LogicProblem, interpretation:PartialInterpretation,
29327 source: DefinedElement, target:DefinedElement)
29328{
29329 find interpretation(problem,interpretation);
29330 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
29331 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"literal attribute EEnumLiteral");
29332 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
29333 BinaryElementRelationLink.param1(link,source);
29334 BinaryElementRelationLink.param2(link,target);
29335}
29336/**
29337 * Matcher for detecting tuples t where <>literal attribute EEnumLiteral(source,target)
29338 */
29339private pattern mayInRelationliteral_attribute_EEnumLiteral(
29340 problem:LogicProblem, interpretation:PartialInterpretation,
29341 source: DefinedElement, target:DefinedElement)
29342{
29343 find interpretation(problem,interpretation);
29344 // The two endpoint of the link have to exist
29345 find mayExist(problem, interpretation, source);
29346 find mayExist(problem, interpretation, target);
29347 // Type consistency
29348 find mayInstanceOfEEnumLiteral_class(problem,interpretation,source);
29349 StringElement(target);
29350 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
29351 // the upper bound of the multiplicity should be considered.
29352 numberOfExistingReferences == count find mustInRelationliteral_attribute_EEnumLiteral(problem,interpretation,source,_);
29353 check(numberOfExistingReferences < 1);
29354} or {
29355 find mustInRelationliteral_attribute_EEnumLiteral(problem,interpretation,source,target);
29356}
29357/**
29358 * Matcher for detecting tuples t where []name attribute ENamedElement(source,target)
29359 */
29360private pattern mustInRelationname_attribute_ENamedElement(
29361 problem:LogicProblem, interpretation:PartialInterpretation,
29362 source: DefinedElement, target:DefinedElement)
29363{
29364 find interpretation(problem,interpretation);
29365 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
29366 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"name attribute ENamedElement");
29367 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
29368 BinaryElementRelationLink.param1(link,source);
29369 BinaryElementRelationLink.param2(link,target);
29370}
29371/**
29372 * Matcher for detecting tuples t where <>name attribute ENamedElement(source,target)
29373 */
29374private pattern mayInRelationname_attribute_ENamedElement(
29375 problem:LogicProblem, interpretation:PartialInterpretation,
29376 source: DefinedElement, target:DefinedElement)
29377{
29378 find interpretation(problem,interpretation);
29379 // The two endpoint of the link have to exist
29380 find mayExist(problem, interpretation, source);
29381 find mayExist(problem, interpretation, target);
29382 // Type consistency
29383 find mayInstanceOfENamedElement_class(problem,interpretation,source);
29384 StringElement(target);
29385 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
29386 // the upper bound of the multiplicity should be considered.
29387 numberOfExistingReferences == count find mustInRelationname_attribute_ENamedElement(problem,interpretation,source,_);
29388 check(numberOfExistingReferences < 1);
29389} or {
29390 find mustInRelationname_attribute_ENamedElement(problem,interpretation,source,target);
29391}
29392/**
29393 * Matcher for detecting tuples t where []nsURI attribute EPackage(source,target)
29394 */
29395private pattern mustInRelationnsURI_attribute_EPackage(
29396 problem:LogicProblem, interpretation:PartialInterpretation,
29397 source: DefinedElement, target:DefinedElement)
29398{
29399 find interpretation(problem,interpretation);
29400 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
29401 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"nsURI attribute EPackage");
29402 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
29403 BinaryElementRelationLink.param1(link,source);
29404 BinaryElementRelationLink.param2(link,target);
29405}
29406/**
29407 * Matcher for detecting tuples t where <>nsURI attribute EPackage(source,target)
29408 */
29409private pattern mayInRelationnsURI_attribute_EPackage(
29410 problem:LogicProblem, interpretation:PartialInterpretation,
29411 source: DefinedElement, target:DefinedElement)
29412{
29413 find interpretation(problem,interpretation);
29414 // The two endpoint of the link have to exist
29415 find mayExist(problem, interpretation, source);
29416 find mayExist(problem, interpretation, target);
29417 // Type consistency
29418 find mayInstanceOfEPackage_class(problem,interpretation,source);
29419 StringElement(target);
29420 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
29421 // the upper bound of the multiplicity should be considered.
29422 numberOfExistingReferences == count find mustInRelationnsURI_attribute_EPackage(problem,interpretation,source,_);
29423 check(numberOfExistingReferences < 1);
29424} or {
29425 find mustInRelationnsURI_attribute_EPackage(problem,interpretation,source,target);
29426}
29427/**
29428 * Matcher for detecting tuples t where []nsPrefix attribute EPackage(source,target)
29429 */
29430private pattern mustInRelationnsPrefix_attribute_EPackage(
29431 problem:LogicProblem, interpretation:PartialInterpretation,
29432 source: DefinedElement, target:DefinedElement)
29433{
29434 find interpretation(problem,interpretation);
29435 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
29436 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"nsPrefix attribute EPackage");
29437 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
29438 BinaryElementRelationLink.param1(link,source);
29439 BinaryElementRelationLink.param2(link,target);
29440}
29441/**
29442 * Matcher for detecting tuples t where <>nsPrefix attribute EPackage(source,target)
29443 */
29444private pattern mayInRelationnsPrefix_attribute_EPackage(
29445 problem:LogicProblem, interpretation:PartialInterpretation,
29446 source: DefinedElement, target:DefinedElement)
29447{
29448 find interpretation(problem,interpretation);
29449 // The two endpoint of the link have to exist
29450 find mayExist(problem, interpretation, source);
29451 find mayExist(problem, interpretation, target);
29452 // Type consistency
29453 find mayInstanceOfEPackage_class(problem,interpretation,source);
29454 StringElement(target);
29455 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
29456 // the upper bound of the multiplicity should be considered.
29457 numberOfExistingReferences == count find mustInRelationnsPrefix_attribute_EPackage(problem,interpretation,source,_);
29458 check(numberOfExistingReferences < 1);
29459} or {
29460 find mustInRelationnsPrefix_attribute_EPackage(problem,interpretation,source,target);
29461}
29462/**
29463 * Matcher for detecting tuples t where []containment attribute EReference(source,target)
29464 */
29465private pattern mustInRelationcontainment_attribute_EReference(
29466 problem:LogicProblem, interpretation:PartialInterpretation,
29467 source: DefinedElement, target:DefinedElement)
29468{
29469 find interpretation(problem,interpretation);
29470 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
29471 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"containment attribute EReference");
29472 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
29473 BinaryElementRelationLink.param1(link,source);
29474 BinaryElementRelationLink.param2(link,target);
29475}
29476/**
29477 * Matcher for detecting tuples t where <>containment attribute EReference(source,target)
29478 */
29479private pattern mayInRelationcontainment_attribute_EReference(
29480 problem:LogicProblem, interpretation:PartialInterpretation,
29481 source: DefinedElement, target:DefinedElement)
29482{
29483 find interpretation(problem,interpretation);
29484 // The two endpoint of the link have to exist
29485 find mayExist(problem, interpretation, source);
29486 find mayExist(problem, interpretation, target);
29487 // Type consistency
29488 find mayInstanceOfEReference_class(problem,interpretation,source);
29489 BooleanElement(target);
29490 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
29491 // the upper bound of the multiplicity should be considered.
29492 numberOfExistingReferences == count find mustInRelationcontainment_attribute_EReference(problem,interpretation,source,_);
29493 check(numberOfExistingReferences < 1);
29494} or {
29495 find mustInRelationcontainment_attribute_EReference(problem,interpretation,source,target);
29496}
29497/**
29498 * Matcher for detecting tuples t where []container attribute EReference(source,target)
29499 */
29500private pattern mustInRelationcontainer_attribute_EReference(
29501 problem:LogicProblem, interpretation:PartialInterpretation,
29502 source: DefinedElement, target:DefinedElement)
29503{
29504 find interpretation(problem,interpretation);
29505 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
29506 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"container attribute EReference");
29507 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
29508 BinaryElementRelationLink.param1(link,source);
29509 BinaryElementRelationLink.param2(link,target);
29510}
29511/**
29512 * Matcher for detecting tuples t where <>container attribute EReference(source,target)
29513 */
29514private pattern mayInRelationcontainer_attribute_EReference(
29515 problem:LogicProblem, interpretation:PartialInterpretation,
29516 source: DefinedElement, target:DefinedElement)
29517{
29518 find interpretation(problem,interpretation);
29519 // The two endpoint of the link have to exist
29520 find mayExist(problem, interpretation, source);
29521 find mayExist(problem, interpretation, target);
29522 // Type consistency
29523 find mayInstanceOfEReference_class(problem,interpretation,source);
29524 BooleanElement(target);
29525 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
29526 // the upper bound of the multiplicity should be considered.
29527 numberOfExistingReferences == count find mustInRelationcontainer_attribute_EReference(problem,interpretation,source,_);
29528 check(numberOfExistingReferences < 1);
29529} or {
29530 find mustInRelationcontainer_attribute_EReference(problem,interpretation,source,target);
29531}
29532/**
29533 * Matcher for detecting tuples t where []resolveProxies attribute EReference(source,target)
29534 */
29535private pattern mustInRelationresolveProxies_attribute_EReference(
29536 problem:LogicProblem, interpretation:PartialInterpretation,
29537 source: DefinedElement, target:DefinedElement)
29538{
29539 find interpretation(problem,interpretation);
29540 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
29541 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"resolveProxies attribute EReference");
29542 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
29543 BinaryElementRelationLink.param1(link,source);
29544 BinaryElementRelationLink.param2(link,target);
29545}
29546/**
29547 * Matcher for detecting tuples t where <>resolveProxies attribute EReference(source,target)
29548 */
29549private pattern mayInRelationresolveProxies_attribute_EReference(
29550 problem:LogicProblem, interpretation:PartialInterpretation,
29551 source: DefinedElement, target:DefinedElement)
29552{
29553 find interpretation(problem,interpretation);
29554 // The two endpoint of the link have to exist
29555 find mayExist(problem, interpretation, source);
29556 find mayExist(problem, interpretation, target);
29557 // Type consistency
29558 find mayInstanceOfEReference_class(problem,interpretation,source);
29559 BooleanElement(target);
29560 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
29561 // the upper bound of the multiplicity should be considered.
29562 numberOfExistingReferences == count find mustInRelationresolveProxies_attribute_EReference(problem,interpretation,source,_);
29563 check(numberOfExistingReferences < 1);
29564} or {
29565 find mustInRelationresolveProxies_attribute_EReference(problem,interpretation,source,target);
29566}
29567/**
29568 * Matcher for detecting tuples t where []changeable attribute EStructuralFeature(source,target)
29569 */
29570private pattern mustInRelationchangeable_attribute_EStructuralFeature(
29571 problem:LogicProblem, interpretation:PartialInterpretation,
29572 source: DefinedElement, target:DefinedElement)
29573{
29574 find interpretation(problem,interpretation);
29575 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
29576 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"changeable attribute EStructuralFeature");
29577 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
29578 BinaryElementRelationLink.param1(link,source);
29579 BinaryElementRelationLink.param2(link,target);
29580}
29581/**
29582 * Matcher for detecting tuples t where <>changeable attribute EStructuralFeature(source,target)
29583 */
29584private pattern mayInRelationchangeable_attribute_EStructuralFeature(
29585 problem:LogicProblem, interpretation:PartialInterpretation,
29586 source: DefinedElement, target:DefinedElement)
29587{
29588 find interpretation(problem,interpretation);
29589 // The two endpoint of the link have to exist
29590 find mayExist(problem, interpretation, source);
29591 find mayExist(problem, interpretation, target);
29592 // Type consistency
29593 find mayInstanceOfEStructuralFeature_class(problem,interpretation,source);
29594 BooleanElement(target);
29595 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
29596 // the upper bound of the multiplicity should be considered.
29597 numberOfExistingReferences == count find mustInRelationchangeable_attribute_EStructuralFeature(problem,interpretation,source,_);
29598 check(numberOfExistingReferences < 1);
29599} or {
29600 find mustInRelationchangeable_attribute_EStructuralFeature(problem,interpretation,source,target);
29601}
29602/**
29603 * Matcher for detecting tuples t where []volatile attribute EStructuralFeature(source,target)
29604 */
29605private pattern mustInRelationvolatile_attribute_EStructuralFeature(
29606 problem:LogicProblem, interpretation:PartialInterpretation,
29607 source: DefinedElement, target:DefinedElement)
29608{
29609 find interpretation(problem,interpretation);
29610 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
29611 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"volatile attribute EStructuralFeature");
29612 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
29613 BinaryElementRelationLink.param1(link,source);
29614 BinaryElementRelationLink.param2(link,target);
29615}
29616/**
29617 * Matcher for detecting tuples t where <>volatile attribute EStructuralFeature(source,target)
29618 */
29619private pattern mayInRelationvolatile_attribute_EStructuralFeature(
29620 problem:LogicProblem, interpretation:PartialInterpretation,
29621 source: DefinedElement, target:DefinedElement)
29622{
29623 find interpretation(problem,interpretation);
29624 // The two endpoint of the link have to exist
29625 find mayExist(problem, interpretation, source);
29626 find mayExist(problem, interpretation, target);
29627 // Type consistency
29628 find mayInstanceOfEStructuralFeature_class(problem,interpretation,source);
29629 BooleanElement(target);
29630 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
29631 // the upper bound of the multiplicity should be considered.
29632 numberOfExistingReferences == count find mustInRelationvolatile_attribute_EStructuralFeature(problem,interpretation,source,_);
29633 check(numberOfExistingReferences < 1);
29634} or {
29635 find mustInRelationvolatile_attribute_EStructuralFeature(problem,interpretation,source,target);
29636}
29637/**
29638 * Matcher for detecting tuples t where []transient attribute EStructuralFeature(source,target)
29639 */
29640private pattern mustInRelationtransient_attribute_EStructuralFeature(
29641 problem:LogicProblem, interpretation:PartialInterpretation,
29642 source: DefinedElement, target:DefinedElement)
29643{
29644 find interpretation(problem,interpretation);
29645 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
29646 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"transient attribute EStructuralFeature");
29647 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
29648 BinaryElementRelationLink.param1(link,source);
29649 BinaryElementRelationLink.param2(link,target);
29650}
29651/**
29652 * Matcher for detecting tuples t where <>transient attribute EStructuralFeature(source,target)
29653 */
29654private pattern mayInRelationtransient_attribute_EStructuralFeature(
29655 problem:LogicProblem, interpretation:PartialInterpretation,
29656 source: DefinedElement, target:DefinedElement)
29657{
29658 find interpretation(problem,interpretation);
29659 // The two endpoint of the link have to exist
29660 find mayExist(problem, interpretation, source);
29661 find mayExist(problem, interpretation, target);
29662 // Type consistency
29663 find mayInstanceOfEStructuralFeature_class(problem,interpretation,source);
29664 BooleanElement(target);
29665 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
29666 // the upper bound of the multiplicity should be considered.
29667 numberOfExistingReferences == count find mustInRelationtransient_attribute_EStructuralFeature(problem,interpretation,source,_);
29668 check(numberOfExistingReferences < 1);
29669} or {
29670 find mustInRelationtransient_attribute_EStructuralFeature(problem,interpretation,source,target);
29671}
29672/**
29673 * Matcher for detecting tuples t where []defaultValueLiteral attribute EStructuralFeature(source,target)
29674 */
29675private pattern mustInRelationdefaultValueLiteral_attribute_EStructuralFeature(
29676 problem:LogicProblem, interpretation:PartialInterpretation,
29677 source: DefinedElement, target:DefinedElement)
29678{
29679 find interpretation(problem,interpretation);
29680 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
29681 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"defaultValueLiteral attribute EStructuralFeature");
29682 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
29683 BinaryElementRelationLink.param1(link,source);
29684 BinaryElementRelationLink.param2(link,target);
29685}
29686/**
29687 * Matcher for detecting tuples t where <>defaultValueLiteral attribute EStructuralFeature(source,target)
29688 */
29689private pattern mayInRelationdefaultValueLiteral_attribute_EStructuralFeature(
29690 problem:LogicProblem, interpretation:PartialInterpretation,
29691 source: DefinedElement, target:DefinedElement)
29692{
29693 find interpretation(problem,interpretation);
29694 // The two endpoint of the link have to exist
29695 find mayExist(problem, interpretation, source);
29696 find mayExist(problem, interpretation, target);
29697 // Type consistency
29698 find mayInstanceOfEStructuralFeature_class(problem,interpretation,source);
29699 StringElement(target);
29700 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
29701 // the upper bound of the multiplicity should be considered.
29702 numberOfExistingReferences == count find mustInRelationdefaultValueLiteral_attribute_EStructuralFeature(problem,interpretation,source,_);
29703 check(numberOfExistingReferences < 1);
29704} or {
29705 find mustInRelationdefaultValueLiteral_attribute_EStructuralFeature(problem,interpretation,source,target);
29706}
29707/**
29708 * Matcher for detecting tuples t where []unsettable attribute EStructuralFeature(source,target)
29709 */
29710private pattern mustInRelationunsettable_attribute_EStructuralFeature(
29711 problem:LogicProblem, interpretation:PartialInterpretation,
29712 source: DefinedElement, target:DefinedElement)
29713{
29714 find interpretation(problem,interpretation);
29715 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
29716 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"unsettable attribute EStructuralFeature");
29717 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
29718 BinaryElementRelationLink.param1(link,source);
29719 BinaryElementRelationLink.param2(link,target);
29720}
29721/**
29722 * Matcher for detecting tuples t where <>unsettable attribute EStructuralFeature(source,target)
29723 */
29724private pattern mayInRelationunsettable_attribute_EStructuralFeature(
29725 problem:LogicProblem, interpretation:PartialInterpretation,
29726 source: DefinedElement, target:DefinedElement)
29727{
29728 find interpretation(problem,interpretation);
29729 // The two endpoint of the link have to exist
29730 find mayExist(problem, interpretation, source);
29731 find mayExist(problem, interpretation, target);
29732 // Type consistency
29733 find mayInstanceOfEStructuralFeature_class(problem,interpretation,source);
29734 BooleanElement(target);
29735 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
29736 // the upper bound of the multiplicity should be considered.
29737 numberOfExistingReferences == count find mustInRelationunsettable_attribute_EStructuralFeature(problem,interpretation,source,_);
29738 check(numberOfExistingReferences < 1);
29739} or {
29740 find mustInRelationunsettable_attribute_EStructuralFeature(problem,interpretation,source,target);
29741}
29742/**
29743 * Matcher for detecting tuples t where []derived attribute EStructuralFeature(source,target)
29744 */
29745private pattern mustInRelationderived_attribute_EStructuralFeature(
29746 problem:LogicProblem, interpretation:PartialInterpretation,
29747 source: DefinedElement, target:DefinedElement)
29748{
29749 find interpretation(problem,interpretation);
29750 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
29751 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"derived attribute EStructuralFeature");
29752 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
29753 BinaryElementRelationLink.param1(link,source);
29754 BinaryElementRelationLink.param2(link,target);
29755}
29756/**
29757 * Matcher for detecting tuples t where <>derived attribute EStructuralFeature(source,target)
29758 */
29759private pattern mayInRelationderived_attribute_EStructuralFeature(
29760 problem:LogicProblem, interpretation:PartialInterpretation,
29761 source: DefinedElement, target:DefinedElement)
29762{
29763 find interpretation(problem,interpretation);
29764 // The two endpoint of the link have to exist
29765 find mayExist(problem, interpretation, source);
29766 find mayExist(problem, interpretation, target);
29767 // Type consistency
29768 find mayInstanceOfEStructuralFeature_class(problem,interpretation,source);
29769 BooleanElement(target);
29770 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
29771 // the upper bound of the multiplicity should be considered.
29772 numberOfExistingReferences == count find mustInRelationderived_attribute_EStructuralFeature(problem,interpretation,source,_);
29773 check(numberOfExistingReferences < 1);
29774} or {
29775 find mustInRelationderived_attribute_EStructuralFeature(problem,interpretation,source,target);
29776}
29777/**
29778 * Matcher for detecting tuples t where []ordered attribute ETypedElement(source,target)
29779 */
29780private pattern mustInRelationordered_attribute_ETypedElement(
29781 problem:LogicProblem, interpretation:PartialInterpretation,
29782 source: DefinedElement, target:DefinedElement)
29783{
29784 find interpretation(problem,interpretation);
29785 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
29786 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"ordered attribute ETypedElement");
29787 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
29788 BinaryElementRelationLink.param1(link,source);
29789 BinaryElementRelationLink.param2(link,target);
29790}
29791/**
29792 * Matcher for detecting tuples t where <>ordered attribute ETypedElement(source,target)
29793 */
29794private pattern mayInRelationordered_attribute_ETypedElement(
29795 problem:LogicProblem, interpretation:PartialInterpretation,
29796 source: DefinedElement, target:DefinedElement)
29797{
29798 find interpretation(problem,interpretation);
29799 // The two endpoint of the link have to exist
29800 find mayExist(problem, interpretation, source);
29801 find mayExist(problem, interpretation, target);
29802 // Type consistency
29803 find mayInstanceOfETypedElement_class(problem,interpretation,source);
29804 BooleanElement(target);
29805 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
29806 // the upper bound of the multiplicity should be considered.
29807 numberOfExistingReferences == count find mustInRelationordered_attribute_ETypedElement(problem,interpretation,source,_);
29808 check(numberOfExistingReferences < 1);
29809} or {
29810 find mustInRelationordered_attribute_ETypedElement(problem,interpretation,source,target);
29811}
29812/**
29813 * Matcher for detecting tuples t where []unique attribute ETypedElement(source,target)
29814 */
29815private pattern mustInRelationunique_attribute_ETypedElement(
29816 problem:LogicProblem, interpretation:PartialInterpretation,
29817 source: DefinedElement, target:DefinedElement)
29818{
29819 find interpretation(problem,interpretation);
29820 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
29821 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"unique attribute ETypedElement");
29822 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
29823 BinaryElementRelationLink.param1(link,source);
29824 BinaryElementRelationLink.param2(link,target);
29825}
29826/**
29827 * Matcher for detecting tuples t where <>unique attribute ETypedElement(source,target)
29828 */
29829private pattern mayInRelationunique_attribute_ETypedElement(
29830 problem:LogicProblem, interpretation:PartialInterpretation,
29831 source: DefinedElement, target:DefinedElement)
29832{
29833 find interpretation(problem,interpretation);
29834 // The two endpoint of the link have to exist
29835 find mayExist(problem, interpretation, source);
29836 find mayExist(problem, interpretation, target);
29837 // Type consistency
29838 find mayInstanceOfETypedElement_class(problem,interpretation,source);
29839 BooleanElement(target);
29840 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
29841 // the upper bound of the multiplicity should be considered.
29842 numberOfExistingReferences == count find mustInRelationunique_attribute_ETypedElement(problem,interpretation,source,_);
29843 check(numberOfExistingReferences < 1);
29844} or {
29845 find mustInRelationunique_attribute_ETypedElement(problem,interpretation,source,target);
29846}
29847/**
29848 * Matcher for detecting tuples t where []lowerBound attribute ETypedElement(source,target)
29849 */
29850private pattern mustInRelationlowerBound_attribute_ETypedElement(
29851 problem:LogicProblem, interpretation:PartialInterpretation,
29852 source: DefinedElement, target:DefinedElement)
29853{
29854 find interpretation(problem,interpretation);
29855 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
29856 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"lowerBound attribute ETypedElement");
29857 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
29858 BinaryElementRelationLink.param1(link,source);
29859 BinaryElementRelationLink.param2(link,target);
29860}
29861/**
29862 * Matcher for detecting tuples t where <>lowerBound attribute ETypedElement(source,target)
29863 */
29864private pattern mayInRelationlowerBound_attribute_ETypedElement(
29865 problem:LogicProblem, interpretation:PartialInterpretation,
29866 source: DefinedElement, target:DefinedElement)
29867{
29868 find interpretation(problem,interpretation);
29869 // The two endpoint of the link have to exist
29870 find mayExist(problem, interpretation, source);
29871 find mayExist(problem, interpretation, target);
29872 // Type consistency
29873 find mayInstanceOfETypedElement_class(problem,interpretation,source);
29874 IntegerElement(target);
29875 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
29876 // the upper bound of the multiplicity should be considered.
29877 numberOfExistingReferences == count find mustInRelationlowerBound_attribute_ETypedElement(problem,interpretation,source,_);
29878 check(numberOfExistingReferences < 1);
29879} or {
29880 find mustInRelationlowerBound_attribute_ETypedElement(problem,interpretation,source,target);
29881}
29882/**
29883 * Matcher for detecting tuples t where []upperBound attribute ETypedElement(source,target)
29884 */
29885private pattern mustInRelationupperBound_attribute_ETypedElement(
29886 problem:LogicProblem, interpretation:PartialInterpretation,
29887 source: DefinedElement, target:DefinedElement)
29888{
29889 find interpretation(problem,interpretation);
29890 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
29891 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"upperBound attribute ETypedElement");
29892 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
29893 BinaryElementRelationLink.param1(link,source);
29894 BinaryElementRelationLink.param2(link,target);
29895}
29896/**
29897 * Matcher for detecting tuples t where <>upperBound attribute ETypedElement(source,target)
29898 */
29899private pattern mayInRelationupperBound_attribute_ETypedElement(
29900 problem:LogicProblem, interpretation:PartialInterpretation,
29901 source: DefinedElement, target:DefinedElement)
29902{
29903 find interpretation(problem,interpretation);
29904 // The two endpoint of the link have to exist
29905 find mayExist(problem, interpretation, source);
29906 find mayExist(problem, interpretation, target);
29907 // Type consistency
29908 find mayInstanceOfETypedElement_class(problem,interpretation,source);
29909 IntegerElement(target);
29910 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
29911 // the upper bound of the multiplicity should be considered.
29912 numberOfExistingReferences == count find mustInRelationupperBound_attribute_ETypedElement(problem,interpretation,source,_);
29913 check(numberOfExistingReferences < 1);
29914} or {
29915 find mustInRelationupperBound_attribute_ETypedElement(problem,interpretation,source,target);
29916}
29917/**
29918 * Matcher for detecting tuples t where []many attribute ETypedElement(source,target)
29919 */
29920private pattern mustInRelationmany_attribute_ETypedElement(
29921 problem:LogicProblem, interpretation:PartialInterpretation,
29922 source: DefinedElement, target:DefinedElement)
29923{
29924 find interpretation(problem,interpretation);
29925 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
29926 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"many attribute ETypedElement");
29927 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
29928 BinaryElementRelationLink.param1(link,source);
29929 BinaryElementRelationLink.param2(link,target);
29930}
29931/**
29932 * Matcher for detecting tuples t where <>many attribute ETypedElement(source,target)
29933 */
29934private pattern mayInRelationmany_attribute_ETypedElement(
29935 problem:LogicProblem, interpretation:PartialInterpretation,
29936 source: DefinedElement, target:DefinedElement)
29937{
29938 find interpretation(problem,interpretation);
29939 // The two endpoint of the link have to exist
29940 find mayExist(problem, interpretation, source);
29941 find mayExist(problem, interpretation, target);
29942 // Type consistency
29943 find mayInstanceOfETypedElement_class(problem,interpretation,source);
29944 BooleanElement(target);
29945 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
29946 // the upper bound of the multiplicity should be considered.
29947 numberOfExistingReferences == count find mustInRelationmany_attribute_ETypedElement(problem,interpretation,source,_);
29948 check(numberOfExistingReferences < 1);
29949} or {
29950 find mustInRelationmany_attribute_ETypedElement(problem,interpretation,source,target);
29951}
29952/**
29953 * Matcher for detecting tuples t where []required attribute ETypedElement(source,target)
29954 */
29955private pattern mustInRelationrequired_attribute_ETypedElement(
29956 problem:LogicProblem, interpretation:PartialInterpretation,
29957 source: DefinedElement, target:DefinedElement)
29958{
29959 find interpretation(problem,interpretation);
29960 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
29961 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"required attribute ETypedElement");
29962 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
29963 BinaryElementRelationLink.param1(link,source);
29964 BinaryElementRelationLink.param2(link,target);
29965}
29966/**
29967 * Matcher for detecting tuples t where <>required attribute ETypedElement(source,target)
29968 */
29969private pattern mayInRelationrequired_attribute_ETypedElement(
29970 problem:LogicProblem, interpretation:PartialInterpretation,
29971 source: DefinedElement, target:DefinedElement)
29972{
29973 find interpretation(problem,interpretation);
29974 // The two endpoint of the link have to exist
29975 find mayExist(problem, interpretation, source);
29976 find mayExist(problem, interpretation, target);
29977 // Type consistency
29978 find mayInstanceOfETypedElement_class(problem,interpretation,source);
29979 BooleanElement(target);
29980 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
29981 // the upper bound of the multiplicity should be considered.
29982 numberOfExistingReferences == count find mustInRelationrequired_attribute_ETypedElement(problem,interpretation,source,_);
29983 check(numberOfExistingReferences < 1);
29984} or {
29985 find mustInRelationrequired_attribute_ETypedElement(problem,interpretation,source,target);
29986}
29987/**
29988 * Matcher for detecting tuples t where []key attribute EStringToStringMapEntry(source,target)
29989 */
29990private pattern mustInRelationkey_attribute_EStringToStringMapEntry(
29991 problem:LogicProblem, interpretation:PartialInterpretation,
29992 source: DefinedElement, target:DefinedElement)
29993{
29994 find interpretation(problem,interpretation);
29995 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
29996 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"key attribute EStringToStringMapEntry");
29997 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
29998 BinaryElementRelationLink.param1(link,source);
29999 BinaryElementRelationLink.param2(link,target);
30000}
30001/**
30002 * Matcher for detecting tuples t where <>key attribute EStringToStringMapEntry(source,target)
30003 */
30004private pattern mayInRelationkey_attribute_EStringToStringMapEntry(
30005 problem:LogicProblem, interpretation:PartialInterpretation,
30006 source: DefinedElement, target:DefinedElement)
30007{
30008 find interpretation(problem,interpretation);
30009 // The two endpoint of the link have to exist
30010 find mayExist(problem, interpretation, source);
30011 find mayExist(problem, interpretation, target);
30012 // Type consistency
30013 find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,source);
30014 StringElement(target);
30015 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
30016 // the upper bound of the multiplicity should be considered.
30017 numberOfExistingReferences == count find mustInRelationkey_attribute_EStringToStringMapEntry(problem,interpretation,source,_);
30018 check(numberOfExistingReferences < 1);
30019} or {
30020 find mustInRelationkey_attribute_EStringToStringMapEntry(problem,interpretation,source,target);
30021}
30022/**
30023 * Matcher for detecting tuples t where []value attribute EStringToStringMapEntry(source,target)
30024 */
30025private pattern mustInRelationvalue_attribute_EStringToStringMapEntry(
30026 problem:LogicProblem, interpretation:PartialInterpretation,
30027 source: DefinedElement, target:DefinedElement)
30028{
30029 find interpretation(problem,interpretation);
30030 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
30031 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"value attribute EStringToStringMapEntry");
30032 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
30033 BinaryElementRelationLink.param1(link,source);
30034 BinaryElementRelationLink.param2(link,target);
30035}
30036/**
30037 * Matcher for detecting tuples t where <>value attribute EStringToStringMapEntry(source,target)
30038 */
30039private pattern mayInRelationvalue_attribute_EStringToStringMapEntry(
30040 problem:LogicProblem, interpretation:PartialInterpretation,
30041 source: DefinedElement, target:DefinedElement)
30042{
30043 find interpretation(problem,interpretation);
30044 // The two endpoint of the link have to exist
30045 find mayExist(problem, interpretation, source);
30046 find mayExist(problem, interpretation, target);
30047 // Type consistency
30048 find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,source);
30049 StringElement(target);
30050 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
30051 // the upper bound of the multiplicity should be considered.
30052 numberOfExistingReferences == count find mustInRelationvalue_attribute_EStringToStringMapEntry(problem,interpretation,source,_);
30053 check(numberOfExistingReferences < 1);
30054} or {
30055 find mustInRelationvalue_attribute_EStringToStringMapEntry(problem,interpretation,source,target);
30056}
30057
30058//////////
30059// 1.3 Relation Definition Indexers
30060//////////
30061
30062//////////
30063// 1.4 Containment Indexer
30064//////////
30065private pattern mustContains2(source: DefinedElement, target: DefinedElement) {
30066 find mustContains4(_,_,source,target);
30067}
30068
30069private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation,
30070 source: DefinedElement, target: DefinedElement)
30071 { find mustInRelationdetails_reference_EAnnotation(problem,interpretation,source,target); }or
30072
30073 { find mustInRelationcontents_reference_EAnnotation(problem,interpretation,source,target); }or
30074
30075 { find mustInRelationeOperations_reference_EClass(problem,interpretation,source,target); }or
30076
30077 { find mustInRelationeStructuralFeatures_reference_EClass(problem,interpretation,source,target); }or
30078
30079 { find mustInRelationeGenericSuperTypes_reference_EClass(problem,interpretation,source,target); }or
30080
30081 { find mustInRelationeTypeParameters_reference_EClassifier(problem,interpretation,source,target); }or
30082
30083 { find mustInRelationeLiterals_reference_EEnum(problem,interpretation,source,target); }or
30084
30085 { find mustInRelationeAnnotations_reference_EModelElement(problem,interpretation,source,target); }or
30086
30087 { find mustInRelationeTypeParameters_reference_EOperation(problem,interpretation,source,target); }or
30088
30089 { find mustInRelationeParameters_reference_EOperation(problem,interpretation,source,target); }or
30090
30091 { find mustInRelationeGenericExceptions_reference_EOperation(problem,interpretation,source,target); }or
30092
30093 { find mustInRelationeClassifiers_reference_EPackage(problem,interpretation,source,target); }or
30094
30095 { find mustInRelationeSubpackages_reference_EPackage(problem,interpretation,source,target); }or
30096
30097 { find mustInRelationeGenericType_reference_ETypedElement(problem,interpretation,source,target); }or
30098
30099 { find mustInRelationeUpperBound_reference_EGenericType(problem,interpretation,source,target); }or
30100
30101 { find mustInRelationeTypeArguments_reference_EGenericType(problem,interpretation,source,target); }or
30102
30103 { find mustInRelationeLowerBound_reference_EGenericType(problem,interpretation,source,target); }or
30104
30105 { find mustInRelationeBounds_reference_ETypeParameter(problem,interpretation,source,target); }
30106
30107private pattern mustTransitiveContains(source,target) {
30108 find mustContains2+(source,target);
30109}
30110
30111//////////
30112// 2. Invalidation Indexers
30113//////////
30114// 2.1 Invalidated by WF Queries
30115//////////
30116
30117//////////
30118// 3. Unfinishedness Indexers
30119//////////
30120// 3.1 Unfinishedness Measured by Multiplicity
30121//////////
30122pattern unfinishedLowerMultiplicity_eAttributeType_reference_EAttribute(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) {
30123 find interpretation(problem,interpretation);
30124 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
30125 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributeType reference EAttribute");
30126 find mustInstanceOfEAttribute_class(problem,interpretation,object);
30127 numberOfExistingReferences == count find mustInRelationeAttributeType_reference_EAttribute(problem,interpretation,object,_);
30128 check(numberOfExistingReferences < 1);
30129 missingMultiplicity == eval(1-numberOfExistingReferences);
30130}
30131pattern unfinishedLowerMultiplicity_eReferenceType_reference_EReference(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) {
30132 find interpretation(problem,interpretation);
30133 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
30134 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferenceType reference EReference");
30135 find mustInstanceOfEReference_class(problem,interpretation,object);
30136 numberOfExistingReferences == count find mustInRelationeReferenceType_reference_EReference(problem,interpretation,object,_);
30137 check(numberOfExistingReferences < 1);
30138 missingMultiplicity == eval(1-numberOfExistingReferences);
30139}
30140pattern unfinishedLowerMultiplicity_eRawType_reference_EGenericType(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) {
30141 find interpretation(problem,interpretation);
30142 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
30143 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eRawType reference EGenericType");
30144 find mustInstanceOfEGenericType_class(problem,interpretation,object);
30145 numberOfExistingReferences == count find mustInRelationeRawType_reference_EGenericType(problem,interpretation,object,_);
30146 check(numberOfExistingReferences < 1);
30147 missingMultiplicity == eval(1-numberOfExistingReferences);
30148}
30149
30150//////////
30151// 3.2 Unfinishedness Measured by WF Queries
30152//////////
30153
30154//////////
30155// 4. Refinement Indexers
30156//////////
30157// 4.1 Object constructors
30158//////////
30159private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation)
30160{
30161 find interpretation(problem,interpretation);
30162 find mustInstanceOfEModelElement_class(problem,interpretation,root);
30163 find mustExist(problem, interpretation, root);
30164}or{
30165 find interpretation(problem,interpretation);
30166 find mustInstanceOfEEnum_class(problem,interpretation,root);
30167 find mustExist(problem, interpretation, root);
30168}or{
30169 find interpretation(problem,interpretation);
30170 find mustInstanceOfEAttribute_class(problem,interpretation,root);
30171 find mustExist(problem, interpretation, root);
30172}or{
30173 find interpretation(problem,interpretation);
30174 find mustInstanceOfEObject_class(problem,interpretation,root);
30175 find mustExist(problem, interpretation, root);
30176}or{
30177 find interpretation(problem,interpretation);
30178 find mustInstanceOfEClass_class(problem,interpretation,root);
30179 find mustExist(problem, interpretation, root);
30180}or{
30181 find interpretation(problem,interpretation);
30182 find mustInstanceOfEClassifier_class(problem,interpretation,root);
30183 find mustExist(problem, interpretation, root);
30184}or{
30185 find interpretation(problem,interpretation);
30186 find mustInstanceOfEEnumLiteral_class(problem,interpretation,root);
30187 find mustExist(problem, interpretation, root);
30188}or{
30189 find interpretation(problem,interpretation);
30190 find mustInstanceOfEPackage_class(problem,interpretation,root);
30191 find mustExist(problem, interpretation, root);
30192}or{
30193 find interpretation(problem,interpretation);
30194 find mustInstanceOfEOperation_class(problem,interpretation,root);
30195 find mustExist(problem, interpretation, root);
30196}or{
30197 find interpretation(problem,interpretation);
30198 find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,root);
30199 find mustExist(problem, interpretation, root);
30200}or{
30201 find interpretation(problem,interpretation);
30202 find mustInstanceOfEReference_class(problem,interpretation,root);
30203 find mustExist(problem, interpretation, root);
30204}or{
30205 find interpretation(problem,interpretation);
30206 find mustInstanceOfEAnnotation_class(problem,interpretation,root);
30207 find mustExist(problem, interpretation, root);
30208}or{
30209 find interpretation(problem,interpretation);
30210 find mustInstanceOfETypedElement_class(problem,interpretation,root);
30211 find mustExist(problem, interpretation, root);
30212}or{
30213 find interpretation(problem,interpretation);
30214 find mustInstanceOfEStructuralFeature_class(problem,interpretation,root);
30215 find mustExist(problem, interpretation, root);
30216}or{
30217 find interpretation(problem,interpretation);
30218 find mustInstanceOfEDataType_class(problem,interpretation,root);
30219 find mustExist(problem, interpretation, root);
30220}or{
30221 find interpretation(problem,interpretation);
30222 find mustInstanceOfEParameter_class(problem,interpretation,root);
30223 find mustExist(problem, interpretation, root);
30224}or{
30225 find interpretation(problem,interpretation);
30226 find mustInstanceOfENamedElement_class(problem,interpretation,root);
30227 find mustExist(problem, interpretation, root);
30228}or{
30229 find interpretation(problem,interpretation);
30230 find mustInstanceOfEGenericType_class(problem,interpretation,root);
30231 find mustExist(problem, interpretation, root);
30232}or{
30233 find interpretation(problem,interpretation);
30234 find mustInstanceOfETypeParameter_class(problem,interpretation,root);
30235 find mustExist(problem, interpretation, root);
30236}or{
30237 find interpretation(problem,interpretation);
30238 find mustInstanceOfEModelElement_class_DefinedPart(problem,interpretation,root);
30239 find mustExist(problem, interpretation, root);
30240}or{
30241 find interpretation(problem,interpretation);
30242 find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,root);
30243 find mustExist(problem, interpretation, root);
30244}or{
30245 find interpretation(problem,interpretation);
30246 find mustInstanceOfENamedElement_class_DefinedPart(problem,interpretation,root);
30247 find mustExist(problem, interpretation, root);
30248}or{
30249 find interpretation(problem,interpretation);
30250 find mustInstanceOfENamedElement_class_UndefinedPart(problem,interpretation,root);
30251 find mustExist(problem, interpretation, root);
30252}or{
30253 find interpretation(problem,interpretation);
30254 find mustInstanceOfEPackage_class_DefinedPart(problem,interpretation,root);
30255 find mustExist(problem, interpretation, root);
30256}or{
30257 find interpretation(problem,interpretation);
30258 find mustInstanceOfEPackage_class_UndefinedPart(problem,interpretation,root);
30259 find mustExist(problem, interpretation, root);
30260}
30261pattern createObject_EAttribute_class_by_eStructuralFeatures_reference_EClass_with_eContainingClass_reference_EStructuralFeature(
30262 problem:LogicProblem, interpretation:PartialInterpretation,
30263 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
30264 container:DefinedElement)
30265{
30266 find interpretation(problem,interpretation);
30267 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
30268 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EAttribute class");
30269 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
30270 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eStructuralFeatures reference EClass");
30271 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
30272 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eContainingClass reference EStructuralFeature");
30273 find mustInstanceOfEClass_class(problem,interpretation,container);
30274 find mayInstanceOfEAttribute_class(problem,interpretation,newObject);
30275 find mayInRelationeStructuralFeatures_reference_EClass(problem,interpretation,container,newObject);
30276 find mustExist(problem, interpretation, container);
30277 neg find mustExist(problem, interpretation, newObject);
30278}
30279pattern createObject_EAttribute_class(
30280 problem:LogicProblem, interpretation:PartialInterpretation,
30281 typeInterpretation:PartialComplexTypeInterpretation)
30282{
30283 find interpretation(problem,interpretation);
30284 neg find hasElementInContainment(problem,interpretation);
30285 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
30286 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EAttribute class");
30287 find mayInstanceOfEAttribute_class(problem,interpretation,newObject);
30288 find mayExist(problem, interpretation, newObject);
30289 neg find mustExist(problem, interpretation, newObject);
30290}
30291pattern createObject_EAnnotation_class_by_eAnnotations_reference_EModelElement_with_eModelElement_reference_EAnnotation(
30292 problem:LogicProblem, interpretation:PartialInterpretation,
30293 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
30294 container:DefinedElement)
30295{
30296 find interpretation(problem,interpretation);
30297 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
30298 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EAnnotation class");
30299 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
30300 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eAnnotations reference EModelElement");
30301 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
30302 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eModelElement reference EAnnotation");
30303 find mustInstanceOfEModelElement_class(problem,interpretation,container);
30304 find mayInstanceOfEAnnotation_class(problem,interpretation,newObject);
30305 find mayInRelationeAnnotations_reference_EModelElement(problem,interpretation,container,newObject);
30306 find mustExist(problem, interpretation, container);
30307 neg find mustExist(problem, interpretation, newObject);
30308}
30309pattern createObject_EAnnotation_class(
30310 problem:LogicProblem, interpretation:PartialInterpretation,
30311 typeInterpretation:PartialComplexTypeInterpretation)
30312{
30313 find interpretation(problem,interpretation);
30314 neg find hasElementInContainment(problem,interpretation);
30315 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
30316 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EAnnotation class");
30317 find mayInstanceOfEAnnotation_class(problem,interpretation,newObject);
30318 find mayExist(problem, interpretation, newObject);
30319 neg find mustExist(problem, interpretation, newObject);
30320}
30321pattern createObject_EReference_class_by_eStructuralFeatures_reference_EClass_with_eContainingClass_reference_EStructuralFeature(
30322 problem:LogicProblem, interpretation:PartialInterpretation,
30323 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
30324 container:DefinedElement)
30325{
30326 find interpretation(problem,interpretation);
30327 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
30328 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EReference class");
30329 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
30330 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eStructuralFeatures reference EClass");
30331 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
30332 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eContainingClass reference EStructuralFeature");
30333 find mustInstanceOfEClass_class(problem,interpretation,container);
30334 find mayInstanceOfEReference_class(problem,interpretation,newObject);
30335 find mayInRelationeStructuralFeatures_reference_EClass(problem,interpretation,container,newObject);
30336 find mustExist(problem, interpretation, container);
30337 neg find mustExist(problem, interpretation, newObject);
30338}
30339pattern createObject_EReference_class(
30340 problem:LogicProblem, interpretation:PartialInterpretation,
30341 typeInterpretation:PartialComplexTypeInterpretation)
30342{
30343 find interpretation(problem,interpretation);
30344 neg find hasElementInContainment(problem,interpretation);
30345 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
30346 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EReference class");
30347 find mayInstanceOfEReference_class(problem,interpretation,newObject);
30348 find mayExist(problem, interpretation, newObject);
30349 neg find mustExist(problem, interpretation, newObject);
30350}
30351pattern createObject_EObject_class_by_contents_reference_EAnnotation(
30352 problem:LogicProblem, interpretation:PartialInterpretation,
30353 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
30354 container:DefinedElement)
30355{
30356 find interpretation(problem,interpretation);
30357 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
30358 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EObject class");
30359 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
30360 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"contents reference EAnnotation");
30361 find mustInstanceOfEAnnotation_class(problem,interpretation,container);
30362 find mayInstanceOfEObject_class(problem,interpretation,newObject);
30363 find mayInRelationcontents_reference_EAnnotation(problem,interpretation,container,newObject);
30364 find mustExist(problem, interpretation, container);
30365 neg find mustExist(problem, interpretation, newObject);
30366}
30367pattern createObject_EObject_class(
30368 problem:LogicProblem, interpretation:PartialInterpretation,
30369 typeInterpretation:PartialComplexTypeInterpretation)
30370{
30371 find interpretation(problem,interpretation);
30372 neg find hasElementInContainment(problem,interpretation);
30373 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
30374 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EObject class");
30375 find mayInstanceOfEObject_class(problem,interpretation,newObject);
30376 find mayExist(problem, interpretation, newObject);
30377 neg find mustExist(problem, interpretation, newObject);
30378}
30379pattern createObject_EParameter_class_by_eParameters_reference_EOperation_with_eOperation_reference_EParameter(
30380 problem:LogicProblem, interpretation:PartialInterpretation,
30381 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
30382 container:DefinedElement)
30383{
30384 find interpretation(problem,interpretation);
30385 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
30386 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EParameter class");
30387 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
30388 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eParameters reference EOperation");
30389 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
30390 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eOperation reference EParameter");
30391 find mustInstanceOfEOperation_class(problem,interpretation,container);
30392 find mayInstanceOfEParameter_class(problem,interpretation,newObject);
30393 find mayInRelationeParameters_reference_EOperation(problem,interpretation,container,newObject);
30394 find mustExist(problem, interpretation, container);
30395 neg find mustExist(problem, interpretation, newObject);
30396}
30397pattern createObject_EParameter_class(
30398 problem:LogicProblem, interpretation:PartialInterpretation,
30399 typeInterpretation:PartialComplexTypeInterpretation)
30400{
30401 find interpretation(problem,interpretation);
30402 neg find hasElementInContainment(problem,interpretation);
30403 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
30404 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EParameter class");
30405 find mayInstanceOfEParameter_class(problem,interpretation,newObject);
30406 find mayExist(problem, interpretation, newObject);
30407 neg find mustExist(problem, interpretation, newObject);
30408}
30409pattern createObject_EPackage_class_UndefinedPart_by_eSubpackages_reference_EPackage_with_eSuperPackage_reference_EPackage(
30410 problem:LogicProblem, interpretation:PartialInterpretation,
30411 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
30412 container:DefinedElement)
30413{
30414 find interpretation(problem,interpretation);
30415 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
30416 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EPackage class UndefinedPart");
30417 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
30418 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eSubpackages reference EPackage");
30419 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
30420 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eSuperPackage reference EPackage");
30421 find mustInstanceOfEPackage_class(problem,interpretation,container);
30422 find mayInstanceOfEPackage_class_UndefinedPart(problem,interpretation,newObject);
30423 find mayInRelationeSubpackages_reference_EPackage(problem,interpretation,container,newObject);
30424 find mustExist(problem, interpretation, container);
30425 neg find mustExist(problem, interpretation, newObject);
30426}
30427pattern createObject_EPackage_class_UndefinedPart(
30428 problem:LogicProblem, interpretation:PartialInterpretation,
30429 typeInterpretation:PartialComplexTypeInterpretation)
30430{
30431 find interpretation(problem,interpretation);
30432 neg find hasElementInContainment(problem,interpretation);
30433 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
30434 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EPackage class UndefinedPart");
30435 find mayInstanceOfEPackage_class_UndefinedPart(problem,interpretation,newObject);
30436 find mayExist(problem, interpretation, newObject);
30437 neg find mustExist(problem, interpretation, newObject);
30438}
30439pattern createObject_EStringToStringMapEntry_class_by_details_reference_EAnnotation(
30440 problem:LogicProblem, interpretation:PartialInterpretation,
30441 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
30442 container:DefinedElement)
30443{
30444 find interpretation(problem,interpretation);
30445 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
30446 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EStringToStringMapEntry class");
30447 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
30448 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"details reference EAnnotation");
30449 find mustInstanceOfEAnnotation_class(problem,interpretation,container);
30450 find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,newObject);
30451 find mayInRelationdetails_reference_EAnnotation(problem,interpretation,container,newObject);
30452 find mustExist(problem, interpretation, container);
30453 neg find mustExist(problem, interpretation, newObject);
30454}
30455pattern createObject_EStringToStringMapEntry_class(
30456 problem:LogicProblem, interpretation:PartialInterpretation,
30457 typeInterpretation:PartialComplexTypeInterpretation)
30458{
30459 find interpretation(problem,interpretation);
30460 neg find hasElementInContainment(problem,interpretation);
30461 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
30462 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EStringToStringMapEntry class");
30463 find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,newObject);
30464 find mayExist(problem, interpretation, newObject);
30465 neg find mustExist(problem, interpretation, newObject);
30466}
30467pattern createObject_EEnum_class_by_eClassifiers_reference_EPackage_with_ePackage_reference_EClassifier(
30468 problem:LogicProblem, interpretation:PartialInterpretation,
30469 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
30470 container:DefinedElement)
30471{
30472 find interpretation(problem,interpretation);
30473 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
30474 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EEnum class");
30475 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
30476 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eClassifiers reference EPackage");
30477 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
30478 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"ePackage reference EClassifier");
30479 find mustInstanceOfEPackage_class(problem,interpretation,container);
30480 find mayInstanceOfEEnum_class(problem,interpretation,newObject);
30481 find mayInRelationeClassifiers_reference_EPackage(problem,interpretation,container,newObject);
30482 find mustExist(problem, interpretation, container);
30483 neg find mustExist(problem, interpretation, newObject);
30484}
30485pattern createObject_EEnum_class(
30486 problem:LogicProblem, interpretation:PartialInterpretation,
30487 typeInterpretation:PartialComplexTypeInterpretation)
30488{
30489 find interpretation(problem,interpretation);
30490 neg find hasElementInContainment(problem,interpretation);
30491 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
30492 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EEnum class");
30493 find mayInstanceOfEEnum_class(problem,interpretation,newObject);
30494 find mayExist(problem, interpretation, newObject);
30495 neg find mustExist(problem, interpretation, newObject);
30496}
30497pattern createObject_EEnumLiteral_class_by_eLiterals_reference_EEnum_with_eEnum_reference_EEnumLiteral(
30498 problem:LogicProblem, interpretation:PartialInterpretation,
30499 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
30500 container:DefinedElement)
30501{
30502 find interpretation(problem,interpretation);
30503 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
30504 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EEnumLiteral class");
30505 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
30506 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eLiterals reference EEnum");
30507 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
30508 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eEnum reference EEnumLiteral");
30509 find mustInstanceOfEEnum_class(problem,interpretation,container);
30510 find mayInstanceOfEEnumLiteral_class(problem,interpretation,newObject);
30511 find mayInRelationeLiterals_reference_EEnum(problem,interpretation,container,newObject);
30512 find mustExist(problem, interpretation, container);
30513 neg find mustExist(problem, interpretation, newObject);
30514}
30515pattern createObject_EEnumLiteral_class(
30516 problem:LogicProblem, interpretation:PartialInterpretation,
30517 typeInterpretation:PartialComplexTypeInterpretation)
30518{
30519 find interpretation(problem,interpretation);
30520 neg find hasElementInContainment(problem,interpretation);
30521 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
30522 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EEnumLiteral class");
30523 find mayInstanceOfEEnumLiteral_class(problem,interpretation,newObject);
30524 find mayExist(problem, interpretation, newObject);
30525 neg find mustExist(problem, interpretation, newObject);
30526}
30527pattern createObject_EGenericType_class_by_eGenericSuperTypes_reference_EClass(
30528 problem:LogicProblem, interpretation:PartialInterpretation,
30529 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
30530 container:DefinedElement)
30531{
30532 find interpretation(problem,interpretation);
30533 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
30534 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class");
30535 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
30536 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eGenericSuperTypes reference EClass");
30537 find mustInstanceOfEClass_class(problem,interpretation,container);
30538 find mayInstanceOfEGenericType_class(problem,interpretation,newObject);
30539 find mayInRelationeGenericSuperTypes_reference_EClass(problem,interpretation,container,newObject);
30540 find mustExist(problem, interpretation, container);
30541 neg find mustExist(problem, interpretation, newObject);
30542}
30543pattern createObject_EGenericType_class_by_eGenericExceptions_reference_EOperation(
30544 problem:LogicProblem, interpretation:PartialInterpretation,
30545 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
30546 container:DefinedElement)
30547{
30548 find interpretation(problem,interpretation);
30549 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
30550 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class");
30551 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
30552 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eGenericExceptions reference EOperation");
30553 find mustInstanceOfEOperation_class(problem,interpretation,container);
30554 find mayInstanceOfEGenericType_class(problem,interpretation,newObject);
30555 find mayInRelationeGenericExceptions_reference_EOperation(problem,interpretation,container,newObject);
30556 find mustExist(problem, interpretation, container);
30557 neg find mustExist(problem, interpretation, newObject);
30558}
30559pattern createObject_EGenericType_class_by_eGenericType_reference_ETypedElement(
30560 problem:LogicProblem, interpretation:PartialInterpretation,
30561 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
30562 container:DefinedElement)
30563{
30564 find interpretation(problem,interpretation);
30565 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
30566 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class");
30567 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
30568 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eGenericType reference ETypedElement");
30569 find mustInstanceOfETypedElement_class(problem,interpretation,container);
30570 find mayInstanceOfEGenericType_class(problem,interpretation,newObject);
30571 find mayInRelationeGenericType_reference_ETypedElement(problem,interpretation,container,newObject);
30572 find mustExist(problem, interpretation, container);
30573 neg find mustExist(problem, interpretation, newObject);
30574}
30575pattern createObject_EGenericType_class_by_eUpperBound_reference_EGenericType(
30576 problem:LogicProblem, interpretation:PartialInterpretation,
30577 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
30578 container:DefinedElement)
30579{
30580 find interpretation(problem,interpretation);
30581 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
30582 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class");
30583 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
30584 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eUpperBound reference EGenericType");
30585 find mustInstanceOfEGenericType_class(problem,interpretation,container);
30586 find mayInstanceOfEGenericType_class(problem,interpretation,newObject);
30587 find mayInRelationeUpperBound_reference_EGenericType(problem,interpretation,container,newObject);
30588 find mustExist(problem, interpretation, container);
30589 neg find mustExist(problem, interpretation, newObject);
30590}
30591pattern createObject_EGenericType_class_by_eTypeArguments_reference_EGenericType(
30592 problem:LogicProblem, interpretation:PartialInterpretation,
30593 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
30594 container:DefinedElement)
30595{
30596 find interpretation(problem,interpretation);
30597 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
30598 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class");
30599 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
30600 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eTypeArguments reference EGenericType");
30601 find mustInstanceOfEGenericType_class(problem,interpretation,container);
30602 find mayInstanceOfEGenericType_class(problem,interpretation,newObject);
30603 find mayInRelationeTypeArguments_reference_EGenericType(problem,interpretation,container,newObject);
30604 find mustExist(problem, interpretation, container);
30605 neg find mustExist(problem, interpretation, newObject);
30606}
30607pattern createObject_EGenericType_class_by_eLowerBound_reference_EGenericType(
30608 problem:LogicProblem, interpretation:PartialInterpretation,
30609 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
30610 container:DefinedElement)
30611{
30612 find interpretation(problem,interpretation);
30613 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
30614 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class");
30615 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
30616 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eLowerBound reference EGenericType");
30617 find mustInstanceOfEGenericType_class(problem,interpretation,container);
30618 find mayInstanceOfEGenericType_class(problem,interpretation,newObject);
30619 find mayInRelationeLowerBound_reference_EGenericType(problem,interpretation,container,newObject);
30620 find mustExist(problem, interpretation, container);
30621 neg find mustExist(problem, interpretation, newObject);
30622}
30623pattern createObject_EGenericType_class_by_eBounds_reference_ETypeParameter(
30624 problem:LogicProblem, interpretation:PartialInterpretation,
30625 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
30626 container:DefinedElement)
30627{
30628 find interpretation(problem,interpretation);
30629 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
30630 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class");
30631 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
30632 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eBounds reference ETypeParameter");
30633 find mustInstanceOfETypeParameter_class(problem,interpretation,container);
30634 find mayInstanceOfEGenericType_class(problem,interpretation,newObject);
30635 find mayInRelationeBounds_reference_ETypeParameter(problem,interpretation,container,newObject);
30636 find mustExist(problem, interpretation, container);
30637 neg find mustExist(problem, interpretation, newObject);
30638}
30639pattern createObject_EGenericType_class(
30640 problem:LogicProblem, interpretation:PartialInterpretation,
30641 typeInterpretation:PartialComplexTypeInterpretation)
30642{
30643 find interpretation(problem,interpretation);
30644 neg find hasElementInContainment(problem,interpretation);
30645 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
30646 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class");
30647 find mayInstanceOfEGenericType_class(problem,interpretation,newObject);
30648 find mayExist(problem, interpretation, newObject);
30649 neg find mustExist(problem, interpretation, newObject);
30650}
30651pattern createObject_EOperation_class_by_eOperations_reference_EClass_with_eContainingClass_reference_EOperation(
30652 problem:LogicProblem, interpretation:PartialInterpretation,
30653 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
30654 container:DefinedElement)
30655{
30656 find interpretation(problem,interpretation);
30657 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
30658 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EOperation class");
30659 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
30660 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eOperations reference EClass");
30661 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
30662 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eContainingClass reference EOperation");
30663 find mustInstanceOfEClass_class(problem,interpretation,container);
30664 find mayInstanceOfEOperation_class(problem,interpretation,newObject);
30665 find mayInRelationeOperations_reference_EClass(problem,interpretation,container,newObject);
30666 find mustExist(problem, interpretation, container);
30667 neg find mustExist(problem, interpretation, newObject);
30668}
30669pattern createObject_EOperation_class(
30670 problem:LogicProblem, interpretation:PartialInterpretation,
30671 typeInterpretation:PartialComplexTypeInterpretation)
30672{
30673 find interpretation(problem,interpretation);
30674 neg find hasElementInContainment(problem,interpretation);
30675 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
30676 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EOperation class");
30677 find mayInstanceOfEOperation_class(problem,interpretation,newObject);
30678 find mayExist(problem, interpretation, newObject);
30679 neg find mustExist(problem, interpretation, newObject);
30680}
30681pattern createObject_EDataType_class_by_eClassifiers_reference_EPackage_with_ePackage_reference_EClassifier(
30682 problem:LogicProblem, interpretation:PartialInterpretation,
30683 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
30684 container:DefinedElement)
30685{
30686 find interpretation(problem,interpretation);
30687 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
30688 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EDataType class");
30689 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
30690 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eClassifiers reference EPackage");
30691 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
30692 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"ePackage reference EClassifier");
30693 find mustInstanceOfEPackage_class(problem,interpretation,container);
30694 find mayInstanceOfEDataType_class(problem,interpretation,newObject);
30695 find mayInRelationeClassifiers_reference_EPackage(problem,interpretation,container,newObject);
30696 find mustExist(problem, interpretation, container);
30697 neg find mustExist(problem, interpretation, newObject);
30698}
30699pattern createObject_EDataType_class(
30700 problem:LogicProblem, interpretation:PartialInterpretation,
30701 typeInterpretation:PartialComplexTypeInterpretation)
30702{
30703 find interpretation(problem,interpretation);
30704 neg find hasElementInContainment(problem,interpretation);
30705 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
30706 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EDataType class");
30707 find mayInstanceOfEDataType_class(problem,interpretation,newObject);
30708 find mayExist(problem, interpretation, newObject);
30709 neg find mustExist(problem, interpretation, newObject);
30710}
30711pattern createObject_EClass_class_by_eClassifiers_reference_EPackage_with_ePackage_reference_EClassifier(
30712 problem:LogicProblem, interpretation:PartialInterpretation,
30713 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
30714 container:DefinedElement)
30715{
30716 find interpretation(problem,interpretation);
30717 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
30718 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EClass class");
30719 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
30720 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eClassifiers reference EPackage");
30721 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
30722 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"ePackage reference EClassifier");
30723 find mustInstanceOfEPackage_class(problem,interpretation,container);
30724 find mayInstanceOfEClass_class(problem,interpretation,newObject);
30725 find mayInRelationeClassifiers_reference_EPackage(problem,interpretation,container,newObject);
30726 find mustExist(problem, interpretation, container);
30727 neg find mustExist(problem, interpretation, newObject);
30728}
30729pattern createObject_EClass_class(
30730 problem:LogicProblem, interpretation:PartialInterpretation,
30731 typeInterpretation:PartialComplexTypeInterpretation)
30732{
30733 find interpretation(problem,interpretation);
30734 neg find hasElementInContainment(problem,interpretation);
30735 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
30736 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EClass class");
30737 find mayInstanceOfEClass_class(problem,interpretation,newObject);
30738 find mayExist(problem, interpretation, newObject);
30739 neg find mustExist(problem, interpretation, newObject);
30740}
30741pattern createObject_ETypeParameter_class_by_eTypeParameters_reference_EClassifier(
30742 problem:LogicProblem, interpretation:PartialInterpretation,
30743 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
30744 container:DefinedElement)
30745{
30746 find interpretation(problem,interpretation);
30747 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
30748 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"ETypeParameter class");
30749 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
30750 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eTypeParameters reference EClassifier");
30751 find mustInstanceOfEClassifier_class(problem,interpretation,container);
30752 find mayInstanceOfETypeParameter_class(problem,interpretation,newObject);
30753 find mayInRelationeTypeParameters_reference_EClassifier(problem,interpretation,container,newObject);
30754 find mustExist(problem, interpretation, container);
30755 neg find mustExist(problem, interpretation, newObject);
30756}
30757pattern createObject_ETypeParameter_class_by_eTypeParameters_reference_EOperation(
30758 problem:LogicProblem, interpretation:PartialInterpretation,
30759 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
30760 container:DefinedElement)
30761{
30762 find interpretation(problem,interpretation);
30763 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
30764 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"ETypeParameter class");
30765 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
30766 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eTypeParameters reference EOperation");
30767 find mustInstanceOfEOperation_class(problem,interpretation,container);
30768 find mayInstanceOfETypeParameter_class(problem,interpretation,newObject);
30769 find mayInRelationeTypeParameters_reference_EOperation(problem,interpretation,container,newObject);
30770 find mustExist(problem, interpretation, container);
30771 neg find mustExist(problem, interpretation, newObject);
30772}
30773pattern createObject_ETypeParameter_class(
30774 problem:LogicProblem, interpretation:PartialInterpretation,
30775 typeInterpretation:PartialComplexTypeInterpretation)
30776{
30777 find interpretation(problem,interpretation);
30778 neg find hasElementInContainment(problem,interpretation);
30779 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
30780 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"ETypeParameter class");
30781 find mayInstanceOfETypeParameter_class(problem,interpretation,newObject);
30782 find mayExist(problem, interpretation, newObject);
30783 neg find mustExist(problem, interpretation, newObject);
30784}
30785
30786//////////
30787// 4.2 Type refinement
30788//////////
30789pattern refineTypeTo_EAttribute_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
30790 find interpretation(problem,interpretation);
30791 PartialInterpretation.newElements(interpretation,element);
30792 find mayInstanceOfEAttribute_class(problem,interpretation,element);
30793 neg find mustInstanceOfEAttribute_class(problem,interpretation,element);
30794 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
30795 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
30796 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
30797 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
30798 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
30799 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
30800 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
30801 neg find mustInstanceOfEReference_class(problem,interpretation,element);
30802 neg find mustInstanceOfEObject_class(problem,interpretation,element);
30803 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
30804 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
30805}
30806pattern refineTypeTo_EAnnotation_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
30807 find interpretation(problem,interpretation);
30808 PartialInterpretation.newElements(interpretation,element);
30809 find mayInstanceOfEAnnotation_class(problem,interpretation,element);
30810 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
30811 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
30812 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
30813 neg find mustInstanceOfEObject_class(problem,interpretation,element);
30814 neg find mustInstanceOfENamedElement_class(problem,interpretation,element);
30815}
30816pattern refineTypeTo_EReference_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
30817 find interpretation(problem,interpretation);
30818 PartialInterpretation.newElements(interpretation,element);
30819 find mayInstanceOfEReference_class(problem,interpretation,element);
30820 neg find mustInstanceOfEAttribute_class(problem,interpretation,element);
30821 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
30822 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
30823 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
30824 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
30825 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
30826 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
30827 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
30828 neg find mustInstanceOfEReference_class(problem,interpretation,element);
30829 neg find mustInstanceOfEObject_class(problem,interpretation,element);
30830 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
30831 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
30832}
30833pattern refineTypeTo_EObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
30834 find interpretation(problem,interpretation);
30835 PartialInterpretation.newElements(interpretation,element);
30836 find mayInstanceOfEObject_class(problem,interpretation,element);
30837 neg find mustInstanceOfEModelElement_class(problem,interpretation,element);
30838 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
30839 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
30840 neg find mustInstanceOfEObject_class(problem,interpretation,element);
30841}
30842pattern refineTypeTo_EParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
30843 find interpretation(problem,interpretation);
30844 PartialInterpretation.newElements(interpretation,element);
30845 find mayInstanceOfEParameter_class(problem,interpretation,element);
30846 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
30847 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
30848 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
30849 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
30850 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
30851 neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element);
30852 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
30853 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
30854 neg find mustInstanceOfEObject_class(problem,interpretation,element);
30855 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
30856 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
30857}
30858pattern refineTypeTo_EPackage_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
30859 find interpretation(problem,interpretation);
30860 PartialInterpretation.newElements(interpretation,element);
30861 find mayInstanceOfEPackage_class_UndefinedPart(problem,interpretation,element);
30862 neg find mustInstanceOfEPackage_class_UndefinedPart(problem,interpretation,element);
30863 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
30864 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
30865 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
30866 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
30867 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
30868 neg find mustInstanceOfEObject_class(problem,interpretation,element);
30869 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
30870 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
30871}
30872pattern refineTypeTo_EStringToStringMapEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
30873 find interpretation(problem,interpretation);
30874 PartialInterpretation.newElements(interpretation,element);
30875 find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
30876 neg find mustInstanceOfEModelElement_class(problem,interpretation,element);
30877 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
30878 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
30879 neg find mustInstanceOfEObject_class(problem,interpretation,element);
30880}
30881pattern refineTypeTo_EEnum_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
30882 find interpretation(problem,interpretation);
30883 PartialInterpretation.newElements(interpretation,element);
30884 find mayInstanceOfEEnum_class(problem,interpretation,element);
30885 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
30886 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
30887 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
30888 neg find mustInstanceOfEEnum_class(problem,interpretation,element);
30889 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
30890 neg find mustInstanceOfEClass_class(problem,interpretation,element);
30891 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
30892 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
30893 neg find mustInstanceOfEObject_class(problem,interpretation,element);
30894 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
30895}
30896pattern refineTypeTo_EEnumLiteral_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
30897 find interpretation(problem,interpretation);
30898 PartialInterpretation.newElements(interpretation,element);
30899 find mayInstanceOfEEnumLiteral_class(problem,interpretation,element);
30900 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
30901 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
30902 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
30903 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
30904 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
30905 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
30906 neg find mustInstanceOfEObject_class(problem,interpretation,element);
30907 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
30908 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
30909}
30910pattern refineTypeTo_EGenericType_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
30911 find interpretation(problem,interpretation);
30912 PartialInterpretation.newElements(interpretation,element);
30913 find mayInstanceOfEGenericType_class(problem,interpretation,element);
30914 neg find mustInstanceOfEModelElement_class(problem,interpretation,element);
30915 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
30916 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
30917 neg find mustInstanceOfEObject_class(problem,interpretation,element);
30918}
30919pattern refineTypeTo_EOperation_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
30920 find interpretation(problem,interpretation);
30921 PartialInterpretation.newElements(interpretation,element);
30922 find mayInstanceOfEOperation_class(problem,interpretation,element);
30923 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
30924 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
30925 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
30926 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
30927 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
30928 neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element);
30929 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
30930 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
30931 neg find mustInstanceOfEObject_class(problem,interpretation,element);
30932 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
30933 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
30934}
30935pattern refineTypeTo_EDataType_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
30936 find interpretation(problem,interpretation);
30937 PartialInterpretation.newElements(interpretation,element);
30938 find mayInstanceOfEDataType_class(problem,interpretation,element);
30939 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
30940 neg find mustInstanceOfEEnum_class(problem,interpretation,element);
30941 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
30942 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
30943 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
30944 neg find mustInstanceOfEDataType_class(problem,interpretation,element);
30945 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
30946 neg find mustInstanceOfEClass_class(problem,interpretation,element);
30947 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
30948 neg find mustInstanceOfEObject_class(problem,interpretation,element);
30949 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
30950}
30951pattern refineTypeTo_EClass_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
30952 find interpretation(problem,interpretation);
30953 PartialInterpretation.newElements(interpretation,element);
30954 find mayInstanceOfEClass_class(problem,interpretation,element);
30955 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
30956 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
30957 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
30958 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
30959 neg find mustInstanceOfEDataType_class(problem,interpretation,element);
30960 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
30961 neg find mustInstanceOfEClass_class(problem,interpretation,element);
30962 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
30963 neg find mustInstanceOfEObject_class(problem,interpretation,element);
30964 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
30965}
30966pattern refineTypeTo_ETypeParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
30967 find interpretation(problem,interpretation);
30968 PartialInterpretation.newElements(interpretation,element);
30969 find mayInstanceOfETypeParameter_class(problem,interpretation,element);
30970 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
30971 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
30972 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
30973 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
30974 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
30975 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
30976 neg find mustInstanceOfEObject_class(problem,interpretation,element);
30977 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
30978 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
30979}
30980
30981//////////
30982// 4.3 Relation refinement
30983//////////
30984pattern refineRelation_eAttributeType_reference_EAttribute(
30985 problem:LogicProblem, interpretation:PartialInterpretation,
30986 relationIterpretation:PartialRelationInterpretation,
30987 from: DefinedElement, to: DefinedElement)
30988{
30989 find interpretation(problem,interpretation);
30990 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
30991 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributeType reference EAttribute");
30992 find mustExist(problem, interpretation, from);
30993 find mustExist(problem, interpretation, to);
30994 find mustInstanceOfEAttribute_class(problem,interpretation,from);
30995 find mustInstanceOfEDataType_class(problem,interpretation,to);
30996 find mayInRelationeAttributeType_reference_EAttribute(problem,interpretation,from,to);
30997 neg find mustInRelationeAttributeType_reference_EAttribute(problem,interpretation,from,to);
30998}
30999pattern refineRelation_references_reference_EAnnotation(
31000 problem:LogicProblem, interpretation:PartialInterpretation,
31001 relationIterpretation:PartialRelationInterpretation,
31002 from: DefinedElement, to: DefinedElement)
31003{
31004 find interpretation(problem,interpretation);
31005 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
31006 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"references reference EAnnotation");
31007 find mustExist(problem, interpretation, from);
31008 find mustExist(problem, interpretation, to);
31009 find mustInstanceOfEAnnotation_class(problem,interpretation,from);
31010 find mustInstanceOfEObject_class(problem,interpretation,to);
31011 find mayInRelationreferences_reference_EAnnotation(problem,interpretation,from,to);
31012 neg find mustInRelationreferences_reference_EAnnotation(problem,interpretation,from,to);
31013}
31014pattern refineRelation_eSuperTypes_reference_EClass(
31015 problem:LogicProblem, interpretation:PartialInterpretation,
31016 relationIterpretation:PartialRelationInterpretation,
31017 from: DefinedElement, to: DefinedElement)
31018{
31019 find interpretation(problem,interpretation);
31020 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
31021 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eSuperTypes reference EClass");
31022 find mustExist(problem, interpretation, from);
31023 find mustExist(problem, interpretation, to);
31024 find mustInstanceOfEClass_class(problem,interpretation,from);
31025 find mustInstanceOfEClass_class(problem,interpretation,to);
31026 find mayInRelationeSuperTypes_reference_EClass(problem,interpretation,from,to);
31027 neg find mustInRelationeSuperTypes_reference_EClass(problem,interpretation,from,to);
31028}
31029pattern refineRelation_eAllAttributes_reference_EClass(
31030 problem:LogicProblem, interpretation:PartialInterpretation,
31031 relationIterpretation:PartialRelationInterpretation,
31032 from: DefinedElement, to: DefinedElement)
31033{
31034 find interpretation(problem,interpretation);
31035 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
31036 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllAttributes reference EClass");
31037 find mustExist(problem, interpretation, from);
31038 find mustExist(problem, interpretation, to);
31039 find mustInstanceOfEClass_class(problem,interpretation,from);
31040 find mustInstanceOfEAttribute_class(problem,interpretation,to);
31041 find mayInRelationeAllAttributes_reference_EClass(problem,interpretation,from,to);
31042 neg find mustInRelationeAllAttributes_reference_EClass(problem,interpretation,from,to);
31043}
31044pattern refineRelation_eAllReferences_reference_EClass(
31045 problem:LogicProblem, interpretation:PartialInterpretation,
31046 relationIterpretation:PartialRelationInterpretation,
31047 from: DefinedElement, to: DefinedElement)
31048{
31049 find interpretation(problem,interpretation);
31050 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
31051 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllReferences reference EClass");
31052 find mustExist(problem, interpretation, from);
31053 find mustExist(problem, interpretation, to);
31054 find mustInstanceOfEClass_class(problem,interpretation,from);
31055 find mustInstanceOfEReference_class(problem,interpretation,to);
31056 find mayInRelationeAllReferences_reference_EClass(problem,interpretation,from,to);
31057 neg find mustInRelationeAllReferences_reference_EClass(problem,interpretation,from,to);
31058}
31059pattern refineRelation_eReferences_reference_EClass(
31060 problem:LogicProblem, interpretation:PartialInterpretation,
31061 relationIterpretation:PartialRelationInterpretation,
31062 from: DefinedElement, to: DefinedElement)
31063{
31064 find interpretation(problem,interpretation);
31065 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
31066 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferences reference EClass");
31067 find mustExist(problem, interpretation, from);
31068 find mustExist(problem, interpretation, to);
31069 find mustInstanceOfEClass_class(problem,interpretation,from);
31070 find mustInstanceOfEReference_class(problem,interpretation,to);
31071 find mayInRelationeReferences_reference_EClass(problem,interpretation,from,to);
31072 neg find mustInRelationeReferences_reference_EClass(problem,interpretation,from,to);
31073}
31074pattern refineRelation_eAttributes_reference_EClass(
31075 problem:LogicProblem, interpretation:PartialInterpretation,
31076 relationIterpretation:PartialRelationInterpretation,
31077 from: DefinedElement, to: DefinedElement)
31078{
31079 find interpretation(problem,interpretation);
31080 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
31081 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributes reference EClass");
31082 find mustExist(problem, interpretation, from);
31083 find mustExist(problem, interpretation, to);
31084 find mustInstanceOfEClass_class(problem,interpretation,from);
31085 find mustInstanceOfEAttribute_class(problem,interpretation,to);
31086 find mayInRelationeAttributes_reference_EClass(problem,interpretation,from,to);
31087 neg find mustInRelationeAttributes_reference_EClass(problem,interpretation,from,to);
31088}
31089pattern refineRelation_eAllContainments_reference_EClass(
31090 problem:LogicProblem, interpretation:PartialInterpretation,
31091 relationIterpretation:PartialRelationInterpretation,
31092 from: DefinedElement, to: DefinedElement)
31093{
31094 find interpretation(problem,interpretation);
31095 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
31096 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllContainments reference EClass");
31097 find mustExist(problem, interpretation, from);
31098 find mustExist(problem, interpretation, to);
31099 find mustInstanceOfEClass_class(problem,interpretation,from);
31100 find mustInstanceOfEReference_class(problem,interpretation,to);
31101 find mayInRelationeAllContainments_reference_EClass(problem,interpretation,from,to);
31102 neg find mustInRelationeAllContainments_reference_EClass(problem,interpretation,from,to);
31103}
31104pattern refineRelation_eAllOperations_reference_EClass(
31105 problem:LogicProblem, interpretation:PartialInterpretation,
31106 relationIterpretation:PartialRelationInterpretation,
31107 from: DefinedElement, to: DefinedElement)
31108{
31109 find interpretation(problem,interpretation);
31110 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
31111 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllOperations reference EClass");
31112 find mustExist(problem, interpretation, from);
31113 find mustExist(problem, interpretation, to);
31114 find mustInstanceOfEClass_class(problem,interpretation,from);
31115 find mustInstanceOfEOperation_class(problem,interpretation,to);
31116 find mayInRelationeAllOperations_reference_EClass(problem,interpretation,from,to);
31117 neg find mustInRelationeAllOperations_reference_EClass(problem,interpretation,from,to);
31118}
31119pattern refineRelation_eAllStructuralFeatures_reference_EClass(
31120 problem:LogicProblem, interpretation:PartialInterpretation,
31121 relationIterpretation:PartialRelationInterpretation,
31122 from: DefinedElement, to: DefinedElement)
31123{
31124 find interpretation(problem,interpretation);
31125 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
31126 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllStructuralFeatures reference EClass");
31127 find mustExist(problem, interpretation, from);
31128 find mustExist(problem, interpretation, to);
31129 find mustInstanceOfEClass_class(problem,interpretation,from);
31130 find mustInstanceOfEStructuralFeature_class(problem,interpretation,to);
31131 find mayInRelationeAllStructuralFeatures_reference_EClass(problem,interpretation,from,to);
31132 neg find mustInRelationeAllStructuralFeatures_reference_EClass(problem,interpretation,from,to);
31133}
31134pattern refineRelation_eAllSuperTypes_reference_EClass(
31135 problem:LogicProblem, interpretation:PartialInterpretation,
31136 relationIterpretation:PartialRelationInterpretation,
31137 from: DefinedElement, to: DefinedElement)
31138{
31139 find interpretation(problem,interpretation);
31140 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
31141 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllSuperTypes reference EClass");
31142 find mustExist(problem, interpretation, from);
31143 find mustExist(problem, interpretation, to);
31144 find mustInstanceOfEClass_class(problem,interpretation,from);
31145 find mustInstanceOfEClass_class(problem,interpretation,to);
31146 find mayInRelationeAllSuperTypes_reference_EClass(problem,interpretation,from,to);
31147 neg find mustInRelationeAllSuperTypes_reference_EClass(problem,interpretation,from,to);
31148}
31149pattern refineRelation_eIDAttribute_reference_EClass(
31150 problem:LogicProblem, interpretation:PartialInterpretation,
31151 relationIterpretation:PartialRelationInterpretation,
31152 from: DefinedElement, to: DefinedElement)
31153{
31154 find interpretation(problem,interpretation);
31155 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
31156 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eIDAttribute reference EClass");
31157 find mustExist(problem, interpretation, from);
31158 find mustExist(problem, interpretation, to);
31159 find mustInstanceOfEClass_class(problem,interpretation,from);
31160 find mustInstanceOfEAttribute_class(problem,interpretation,to);
31161 find mayInRelationeIDAttribute_reference_EClass(problem,interpretation,from,to);
31162 neg find mustInRelationeIDAttribute_reference_EClass(problem,interpretation,from,to);
31163}
31164pattern refineRelation_eAllGenericSuperTypes_reference_EClass(
31165 problem:LogicProblem, interpretation:PartialInterpretation,
31166 relationIterpretation:PartialRelationInterpretation,
31167 from: DefinedElement, to: DefinedElement)
31168{
31169 find interpretation(problem,interpretation);
31170 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
31171 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllGenericSuperTypes reference EClass");
31172 find mustExist(problem, interpretation, from);
31173 find mustExist(problem, interpretation, to);
31174 find mustInstanceOfEClass_class(problem,interpretation,from);
31175 find mustInstanceOfEGenericType_class(problem,interpretation,to);
31176 find mayInRelationeAllGenericSuperTypes_reference_EClass(problem,interpretation,from,to);
31177 neg find mustInRelationeAllGenericSuperTypes_reference_EClass(problem,interpretation,from,to);
31178}
31179pattern refineRelation_eExceptions_reference_EOperation(
31180 problem:LogicProblem, interpretation:PartialInterpretation,
31181 relationIterpretation:PartialRelationInterpretation,
31182 from: DefinedElement, to: DefinedElement)
31183{
31184 find interpretation(problem,interpretation);
31185 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
31186 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eExceptions reference EOperation");
31187 find mustExist(problem, interpretation, from);
31188 find mustExist(problem, interpretation, to);
31189 find mustInstanceOfEOperation_class(problem,interpretation,from);
31190 find mustInstanceOfEClassifier_class(problem,interpretation,to);
31191 find mayInRelationeExceptions_reference_EOperation(problem,interpretation,from,to);
31192 neg find mustInRelationeExceptions_reference_EOperation(problem,interpretation,from,to);
31193}
31194pattern refineRelation_eOpposite_reference_EReference(
31195 problem:LogicProblem, interpretation:PartialInterpretation,
31196 relationIterpretation:PartialRelationInterpretation,
31197 from: DefinedElement, to: DefinedElement)
31198{
31199 find interpretation(problem,interpretation);
31200 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
31201 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eOpposite reference EReference");
31202 find mustExist(problem, interpretation, from);
31203 find mustExist(problem, interpretation, to);
31204 find mustInstanceOfEReference_class(problem,interpretation,from);
31205 find mustInstanceOfEReference_class(problem,interpretation,to);
31206 find mayInRelationeOpposite_reference_EReference(problem,interpretation,from,to);
31207 neg find mustInRelationeOpposite_reference_EReference(problem,interpretation,from,to);
31208}
31209pattern refineRelation_eReferenceType_reference_EReference(
31210 problem:LogicProblem, interpretation:PartialInterpretation,
31211 relationIterpretation:PartialRelationInterpretation,
31212 from: DefinedElement, to: DefinedElement)
31213{
31214 find interpretation(problem,interpretation);
31215 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
31216 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferenceType reference EReference");
31217 find mustExist(problem, interpretation, from);
31218 find mustExist(problem, interpretation, to);
31219 find mustInstanceOfEReference_class(problem,interpretation,from);
31220 find mustInstanceOfEClass_class(problem,interpretation,to);
31221 find mayInRelationeReferenceType_reference_EReference(problem,interpretation,from,to);
31222 neg find mustInRelationeReferenceType_reference_EReference(problem,interpretation,from,to);
31223}
31224pattern refineRelation_eKeys_reference_EReference(
31225 problem:LogicProblem, interpretation:PartialInterpretation,
31226 relationIterpretation:PartialRelationInterpretation,
31227 from: DefinedElement, to: DefinedElement)
31228{
31229 find interpretation(problem,interpretation);
31230 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
31231 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eKeys reference EReference");
31232 find mustExist(problem, interpretation, from);
31233 find mustExist(problem, interpretation, to);
31234 find mustInstanceOfEReference_class(problem,interpretation,from);
31235 find mustInstanceOfEAttribute_class(problem,interpretation,to);
31236 find mayInRelationeKeys_reference_EReference(problem,interpretation,from,to);
31237 neg find mustInRelationeKeys_reference_EReference(problem,interpretation,from,to);
31238}
31239pattern refineRelation_eType_reference_ETypedElement(
31240 problem:LogicProblem, interpretation:PartialInterpretation,
31241 relationIterpretation:PartialRelationInterpretation,
31242 from: DefinedElement, to: DefinedElement)
31243{
31244 find interpretation(problem,interpretation);
31245 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
31246 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eType reference ETypedElement");
31247 find mustExist(problem, interpretation, from);
31248 find mustExist(problem, interpretation, to);
31249 find mustInstanceOfETypedElement_class(problem,interpretation,from);
31250 find mustInstanceOfEClassifier_class(problem,interpretation,to);
31251 find mayInRelationeType_reference_ETypedElement(problem,interpretation,from,to);
31252 neg find mustInRelationeType_reference_ETypedElement(problem,interpretation,from,to);
31253}
31254pattern refineRelation_eRawType_reference_EGenericType(
31255 problem:LogicProblem, interpretation:PartialInterpretation,
31256 relationIterpretation:PartialRelationInterpretation,
31257 from: DefinedElement, to: DefinedElement)
31258{
31259 find interpretation(problem,interpretation);
31260 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
31261 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eRawType reference EGenericType");
31262 find mustExist(problem, interpretation, from);
31263 find mustExist(problem, interpretation, to);
31264 find mustInstanceOfEGenericType_class(problem,interpretation,from);
31265 find mustInstanceOfEClassifier_class(problem,interpretation,to);
31266 find mayInRelationeRawType_reference_EGenericType(problem,interpretation,from,to);
31267 neg find mustInRelationeRawType_reference_EGenericType(problem,interpretation,from,to);
31268}
31269pattern refineRelation_eTypeParameter_reference_EGenericType(
31270 problem:LogicProblem, interpretation:PartialInterpretation,
31271 relationIterpretation:PartialRelationInterpretation,
31272 from: DefinedElement, to: DefinedElement)
31273{
31274 find interpretation(problem,interpretation);
31275 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
31276 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeParameter reference EGenericType");
31277 find mustExist(problem, interpretation, from);
31278 find mustExist(problem, interpretation, to);
31279 find mustInstanceOfEGenericType_class(problem,interpretation,from);
31280 find mustInstanceOfETypeParameter_class(problem,interpretation,to);
31281 find mayInRelationeTypeParameter_reference_EGenericType(problem,interpretation,from,to);
31282 neg find mustInRelationeTypeParameter_reference_EGenericType(problem,interpretation,from,to);
31283}
31284pattern refineRelation_eClassifier_reference_EGenericType(
31285 problem:LogicProblem, interpretation:PartialInterpretation,
31286 relationIterpretation:PartialRelationInterpretation,
31287 from: DefinedElement, to: DefinedElement)
31288{
31289 find interpretation(problem,interpretation);
31290 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
31291 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eClassifier reference EGenericType");
31292 find mustExist(problem, interpretation, from);
31293 find mustExist(problem, interpretation, to);
31294 find mustInstanceOfEGenericType_class(problem,interpretation,from);
31295 find mustInstanceOfEClassifier_class(problem,interpretation,to);
31296 find mayInRelationeClassifier_reference_EGenericType(problem,interpretation,from,to);
31297 neg find mustInRelationeClassifier_reference_EGenericType(problem,interpretation,from,to);
31298}
31299pattern refineRelation_iD_attribute_EAttribute(
31300 problem:LogicProblem, interpretation:PartialInterpretation,
31301 relationIterpretation:PartialRelationInterpretation,
31302 from: DefinedElement, to: DefinedElement)
31303{
31304 find interpretation(problem,interpretation);
31305 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
31306 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"iD attribute EAttribute");
31307 find mustExist(problem, interpretation, from);
31308 find mustExist(problem, interpretation, to);
31309 find mustInstanceOfEAttribute_class(problem,interpretation,from);
31310 BooleanElement(to);
31311 find mayInRelationiD_attribute_EAttribute(problem,interpretation,from,to);
31312 neg find mustInRelationiD_attribute_EAttribute(problem,interpretation,from,to);
31313}
31314pattern refineRelation_source_attribute_EAnnotation(
31315 problem:LogicProblem, interpretation:PartialInterpretation,
31316 relationIterpretation:PartialRelationInterpretation,
31317 from: DefinedElement, to: DefinedElement)
31318{
31319 find interpretation(problem,interpretation);
31320 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
31321 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"source attribute EAnnotation");
31322 find mustExist(problem, interpretation, from);
31323 find mustExist(problem, interpretation, to);
31324 find mustInstanceOfEAnnotation_class(problem,interpretation,from);
31325 StringElement(to);
31326 find mayInRelationsource_attribute_EAnnotation(problem,interpretation,from,to);
31327 neg find mustInRelationsource_attribute_EAnnotation(problem,interpretation,from,to);
31328}
31329pattern refineRelation_abstract_attribute_EClass(
31330 problem:LogicProblem, interpretation:PartialInterpretation,
31331 relationIterpretation:PartialRelationInterpretation,
31332 from: DefinedElement, to: DefinedElement)
31333{
31334 find interpretation(problem,interpretation);
31335 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
31336 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"abstract attribute EClass");
31337 find mustExist(problem, interpretation, from);
31338 find mustExist(problem, interpretation, to);
31339 find mustInstanceOfEClass_class(problem,interpretation,from);
31340 BooleanElement(to);
31341 find mayInRelationabstract_attribute_EClass(problem,interpretation,from,to);
31342 neg find mustInRelationabstract_attribute_EClass(problem,interpretation,from,to);
31343}
31344pattern refineRelation_interface_attribute_EClass(
31345 problem:LogicProblem, interpretation:PartialInterpretation,
31346 relationIterpretation:PartialRelationInterpretation,
31347 from: DefinedElement, to: DefinedElement)
31348{
31349 find interpretation(problem,interpretation);
31350 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
31351 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface attribute EClass");
31352 find mustExist(problem, interpretation, from);
31353 find mustExist(problem, interpretation, to);
31354 find mustInstanceOfEClass_class(problem,interpretation,from);
31355 BooleanElement(to);
31356 find mayInRelationinterface_attribute_EClass(problem,interpretation,from,to);
31357 neg find mustInRelationinterface_attribute_EClass(problem,interpretation,from,to);
31358}
31359pattern refineRelation_instanceClassName_attribute_EClassifier(
31360 problem:LogicProblem, interpretation:PartialInterpretation,
31361 relationIterpretation:PartialRelationInterpretation,
31362 from: DefinedElement, to: DefinedElement)
31363{
31364 find interpretation(problem,interpretation);
31365 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
31366 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"instanceClassName attribute EClassifier");
31367 find mustExist(problem, interpretation, from);
31368 find mustExist(problem, interpretation, to);
31369 find mustInstanceOfEClassifier_class(problem,interpretation,from);
31370 StringElement(to);
31371 find mayInRelationinstanceClassName_attribute_EClassifier(problem,interpretation,from,to);
31372 neg find mustInRelationinstanceClassName_attribute_EClassifier(problem,interpretation,from,to);
31373}
31374pattern refineRelation_instanceTypeName_attribute_EClassifier(
31375 problem:LogicProblem, interpretation:PartialInterpretation,
31376 relationIterpretation:PartialRelationInterpretation,
31377 from: DefinedElement, to: DefinedElement)
31378{
31379 find interpretation(problem,interpretation);
31380 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
31381 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"instanceTypeName attribute EClassifier");
31382 find mustExist(problem, interpretation, from);
31383 find mustExist(problem, interpretation, to);
31384 find mustInstanceOfEClassifier_class(problem,interpretation,from);
31385 StringElement(to);
31386 find mayInRelationinstanceTypeName_attribute_EClassifier(problem,interpretation,from,to);
31387 neg find mustInRelationinstanceTypeName_attribute_EClassifier(problem,interpretation,from,to);
31388}
31389pattern refineRelation_serializable_attribute_EDataType(
31390 problem:LogicProblem, interpretation:PartialInterpretation,
31391 relationIterpretation:PartialRelationInterpretation,
31392 from: DefinedElement, to: DefinedElement)
31393{
31394 find interpretation(problem,interpretation);
31395 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
31396 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"serializable attribute EDataType");
31397 find mustExist(problem, interpretation, from);
31398 find mustExist(problem, interpretation, to);
31399 find mustInstanceOfEDataType_class(problem,interpretation,from);
31400 BooleanElement(to);
31401 find mayInRelationserializable_attribute_EDataType(problem,interpretation,from,to);
31402 neg find mustInRelationserializable_attribute_EDataType(problem,interpretation,from,to);
31403}
31404pattern refineRelation_value_attribute_EEnumLiteral(
31405 problem:LogicProblem, interpretation:PartialInterpretation,
31406 relationIterpretation:PartialRelationInterpretation,
31407 from: DefinedElement, to: DefinedElement)
31408{
31409 find interpretation(problem,interpretation);
31410 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
31411 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"value attribute EEnumLiteral");
31412 find mustExist(problem, interpretation, from);
31413 find mustExist(problem, interpretation, to);
31414 find mustInstanceOfEEnumLiteral_class(problem,interpretation,from);
31415 IntegerElement(to);
31416 find mayInRelationvalue_attribute_EEnumLiteral(problem,interpretation,from,to);
31417 neg find mustInRelationvalue_attribute_EEnumLiteral(problem,interpretation,from,to);
31418}
31419pattern refineRelation_literal_attribute_EEnumLiteral(
31420 problem:LogicProblem, interpretation:PartialInterpretation,
31421 relationIterpretation:PartialRelationInterpretation,
31422 from: DefinedElement, to: DefinedElement)
31423{
31424 find interpretation(problem,interpretation);
31425 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
31426 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"literal attribute EEnumLiteral");
31427 find mustExist(problem, interpretation, from);
31428 find mustExist(problem, interpretation, to);
31429 find mustInstanceOfEEnumLiteral_class(problem,interpretation,from);
31430 StringElement(to);
31431 find mayInRelationliteral_attribute_EEnumLiteral(problem,interpretation,from,to);
31432 neg find mustInRelationliteral_attribute_EEnumLiteral(problem,interpretation,from,to);
31433}
31434pattern refineRelation_name_attribute_ENamedElement(
31435 problem:LogicProblem, interpretation:PartialInterpretation,
31436 relationIterpretation:PartialRelationInterpretation,
31437 from: DefinedElement, to: DefinedElement)
31438{
31439 find interpretation(problem,interpretation);
31440 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
31441 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"name attribute ENamedElement");
31442 find mustExist(problem, interpretation, from);
31443 find mustExist(problem, interpretation, to);
31444 find mustInstanceOfENamedElement_class(problem,interpretation,from);
31445 StringElement(to);
31446 find mayInRelationname_attribute_ENamedElement(problem,interpretation,from,to);
31447 neg find mustInRelationname_attribute_ENamedElement(problem,interpretation,from,to);
31448}
31449pattern refineRelation_nsURI_attribute_EPackage(
31450 problem:LogicProblem, interpretation:PartialInterpretation,
31451 relationIterpretation:PartialRelationInterpretation,
31452 from: DefinedElement, to: DefinedElement)
31453{
31454 find interpretation(problem,interpretation);
31455 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
31456 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"nsURI attribute EPackage");
31457 find mustExist(problem, interpretation, from);
31458 find mustExist(problem, interpretation, to);
31459 find mustInstanceOfEPackage_class(problem,interpretation,from);
31460 StringElement(to);
31461 find mayInRelationnsURI_attribute_EPackage(problem,interpretation,from,to);
31462 neg find mustInRelationnsURI_attribute_EPackage(problem,interpretation,from,to);
31463}
31464pattern refineRelation_nsPrefix_attribute_EPackage(
31465 problem:LogicProblem, interpretation:PartialInterpretation,
31466 relationIterpretation:PartialRelationInterpretation,
31467 from: DefinedElement, to: DefinedElement)
31468{
31469 find interpretation(problem,interpretation);
31470 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
31471 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"nsPrefix attribute EPackage");
31472 find mustExist(problem, interpretation, from);
31473 find mustExist(problem, interpretation, to);
31474 find mustInstanceOfEPackage_class(problem,interpretation,from);
31475 StringElement(to);
31476 find mayInRelationnsPrefix_attribute_EPackage(problem,interpretation,from,to);
31477 neg find mustInRelationnsPrefix_attribute_EPackage(problem,interpretation,from,to);
31478}
31479pattern refineRelation_containment_attribute_EReference(
31480 problem:LogicProblem, interpretation:PartialInterpretation,
31481 relationIterpretation:PartialRelationInterpretation,
31482 from: DefinedElement, to: DefinedElement)
31483{
31484 find interpretation(problem,interpretation);
31485 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
31486 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"containment attribute EReference");
31487 find mustExist(problem, interpretation, from);
31488 find mustExist(problem, interpretation, to);
31489 find mustInstanceOfEReference_class(problem,interpretation,from);
31490 BooleanElement(to);
31491 find mayInRelationcontainment_attribute_EReference(problem,interpretation,from,to);
31492 neg find mustInRelationcontainment_attribute_EReference(problem,interpretation,from,to);
31493}
31494pattern refineRelation_container_attribute_EReference(
31495 problem:LogicProblem, interpretation:PartialInterpretation,
31496 relationIterpretation:PartialRelationInterpretation,
31497 from: DefinedElement, to: DefinedElement)
31498{
31499 find interpretation(problem,interpretation);
31500 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
31501 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"container attribute EReference");
31502 find mustExist(problem, interpretation, from);
31503 find mustExist(problem, interpretation, to);
31504 find mustInstanceOfEReference_class(problem,interpretation,from);
31505 BooleanElement(to);
31506 find mayInRelationcontainer_attribute_EReference(problem,interpretation,from,to);
31507 neg find mustInRelationcontainer_attribute_EReference(problem,interpretation,from,to);
31508}
31509pattern refineRelation_resolveProxies_attribute_EReference(
31510 problem:LogicProblem, interpretation:PartialInterpretation,
31511 relationIterpretation:PartialRelationInterpretation,
31512 from: DefinedElement, to: DefinedElement)
31513{
31514 find interpretation(problem,interpretation);
31515 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
31516 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"resolveProxies attribute EReference");
31517 find mustExist(problem, interpretation, from);
31518 find mustExist(problem, interpretation, to);
31519 find mustInstanceOfEReference_class(problem,interpretation,from);
31520 BooleanElement(to);
31521 find mayInRelationresolveProxies_attribute_EReference(problem,interpretation,from,to);
31522 neg find mustInRelationresolveProxies_attribute_EReference(problem,interpretation,from,to);
31523}
31524pattern refineRelation_changeable_attribute_EStructuralFeature(
31525 problem:LogicProblem, interpretation:PartialInterpretation,
31526 relationIterpretation:PartialRelationInterpretation,
31527 from: DefinedElement, to: DefinedElement)
31528{
31529 find interpretation(problem,interpretation);
31530 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
31531 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"changeable attribute EStructuralFeature");
31532 find mustExist(problem, interpretation, from);
31533 find mustExist(problem, interpretation, to);
31534 find mustInstanceOfEStructuralFeature_class(problem,interpretation,from);
31535 BooleanElement(to);
31536 find mayInRelationchangeable_attribute_EStructuralFeature(problem,interpretation,from,to);
31537 neg find mustInRelationchangeable_attribute_EStructuralFeature(problem,interpretation,from,to);
31538}
31539pattern refineRelation_volatile_attribute_EStructuralFeature(
31540 problem:LogicProblem, interpretation:PartialInterpretation,
31541 relationIterpretation:PartialRelationInterpretation,
31542 from: DefinedElement, to: DefinedElement)
31543{
31544 find interpretation(problem,interpretation);
31545 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
31546 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"volatile attribute EStructuralFeature");
31547 find mustExist(problem, interpretation, from);
31548 find mustExist(problem, interpretation, to);
31549 find mustInstanceOfEStructuralFeature_class(problem,interpretation,from);
31550 BooleanElement(to);
31551 find mayInRelationvolatile_attribute_EStructuralFeature(problem,interpretation,from,to);
31552 neg find mustInRelationvolatile_attribute_EStructuralFeature(problem,interpretation,from,to);
31553}
31554pattern refineRelation_transient_attribute_EStructuralFeature(
31555 problem:LogicProblem, interpretation:PartialInterpretation,
31556 relationIterpretation:PartialRelationInterpretation,
31557 from: DefinedElement, to: DefinedElement)
31558{
31559 find interpretation(problem,interpretation);
31560 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
31561 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"transient attribute EStructuralFeature");
31562 find mustExist(problem, interpretation, from);
31563 find mustExist(problem, interpretation, to);
31564 find mustInstanceOfEStructuralFeature_class(problem,interpretation,from);
31565 BooleanElement(to);
31566 find mayInRelationtransient_attribute_EStructuralFeature(problem,interpretation,from,to);
31567 neg find mustInRelationtransient_attribute_EStructuralFeature(problem,interpretation,from,to);
31568}
31569pattern refineRelation_defaultValueLiteral_attribute_EStructuralFeature(
31570 problem:LogicProblem, interpretation:PartialInterpretation,
31571 relationIterpretation:PartialRelationInterpretation,
31572 from: DefinedElement, to: DefinedElement)
31573{
31574 find interpretation(problem,interpretation);
31575 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
31576 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"defaultValueLiteral attribute EStructuralFeature");
31577 find mustExist(problem, interpretation, from);
31578 find mustExist(problem, interpretation, to);
31579 find mustInstanceOfEStructuralFeature_class(problem,interpretation,from);
31580 StringElement(to);
31581 find mayInRelationdefaultValueLiteral_attribute_EStructuralFeature(problem,interpretation,from,to);
31582 neg find mustInRelationdefaultValueLiteral_attribute_EStructuralFeature(problem,interpretation,from,to);
31583}
31584pattern refineRelation_unsettable_attribute_EStructuralFeature(
31585 problem:LogicProblem, interpretation:PartialInterpretation,
31586 relationIterpretation:PartialRelationInterpretation,
31587 from: DefinedElement, to: DefinedElement)
31588{
31589 find interpretation(problem,interpretation);
31590 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
31591 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"unsettable attribute EStructuralFeature");
31592 find mustExist(problem, interpretation, from);
31593 find mustExist(problem, interpretation, to);
31594 find mustInstanceOfEStructuralFeature_class(problem,interpretation,from);
31595 BooleanElement(to);
31596 find mayInRelationunsettable_attribute_EStructuralFeature(problem,interpretation,from,to);
31597 neg find mustInRelationunsettable_attribute_EStructuralFeature(problem,interpretation,from,to);
31598}
31599pattern refineRelation_derived_attribute_EStructuralFeature(
31600 problem:LogicProblem, interpretation:PartialInterpretation,
31601 relationIterpretation:PartialRelationInterpretation,
31602 from: DefinedElement, to: DefinedElement)
31603{
31604 find interpretation(problem,interpretation);
31605 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
31606 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"derived attribute EStructuralFeature");
31607 find mustExist(problem, interpretation, from);
31608 find mustExist(problem, interpretation, to);
31609 find mustInstanceOfEStructuralFeature_class(problem,interpretation,from);
31610 BooleanElement(to);
31611 find mayInRelationderived_attribute_EStructuralFeature(problem,interpretation,from,to);
31612 neg find mustInRelationderived_attribute_EStructuralFeature(problem,interpretation,from,to);
31613}
31614pattern refineRelation_ordered_attribute_ETypedElement(
31615 problem:LogicProblem, interpretation:PartialInterpretation,
31616 relationIterpretation:PartialRelationInterpretation,
31617 from: DefinedElement, to: DefinedElement)
31618{
31619 find interpretation(problem,interpretation);
31620 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
31621 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"ordered attribute ETypedElement");
31622 find mustExist(problem, interpretation, from);
31623 find mustExist(problem, interpretation, to);
31624 find mustInstanceOfETypedElement_class(problem,interpretation,from);
31625 BooleanElement(to);
31626 find mayInRelationordered_attribute_ETypedElement(problem,interpretation,from,to);
31627 neg find mustInRelationordered_attribute_ETypedElement(problem,interpretation,from,to);
31628}
31629pattern refineRelation_unique_attribute_ETypedElement(
31630 problem:LogicProblem, interpretation:PartialInterpretation,
31631 relationIterpretation:PartialRelationInterpretation,
31632 from: DefinedElement, to: DefinedElement)
31633{
31634 find interpretation(problem,interpretation);
31635 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
31636 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"unique attribute ETypedElement");
31637 find mustExist(problem, interpretation, from);
31638 find mustExist(problem, interpretation, to);
31639 find mustInstanceOfETypedElement_class(problem,interpretation,from);
31640 BooleanElement(to);
31641 find mayInRelationunique_attribute_ETypedElement(problem,interpretation,from,to);
31642 neg find mustInRelationunique_attribute_ETypedElement(problem,interpretation,from,to);
31643}
31644pattern refineRelation_lowerBound_attribute_ETypedElement(
31645 problem:LogicProblem, interpretation:PartialInterpretation,
31646 relationIterpretation:PartialRelationInterpretation,
31647 from: DefinedElement, to: DefinedElement)
31648{
31649 find interpretation(problem,interpretation);
31650 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
31651 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"lowerBound attribute ETypedElement");
31652 find mustExist(problem, interpretation, from);
31653 find mustExist(problem, interpretation, to);
31654 find mustInstanceOfETypedElement_class(problem,interpretation,from);
31655 IntegerElement(to);
31656 find mayInRelationlowerBound_attribute_ETypedElement(problem,interpretation,from,to);
31657 neg find mustInRelationlowerBound_attribute_ETypedElement(problem,interpretation,from,to);
31658}
31659pattern refineRelation_upperBound_attribute_ETypedElement(
31660 problem:LogicProblem, interpretation:PartialInterpretation,
31661 relationIterpretation:PartialRelationInterpretation,
31662 from: DefinedElement, to: DefinedElement)
31663{
31664 find interpretation(problem,interpretation);
31665 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
31666 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"upperBound attribute ETypedElement");
31667 find mustExist(problem, interpretation, from);
31668 find mustExist(problem, interpretation, to);
31669 find mustInstanceOfETypedElement_class(problem,interpretation,from);
31670 IntegerElement(to);
31671 find mayInRelationupperBound_attribute_ETypedElement(problem,interpretation,from,to);
31672 neg find mustInRelationupperBound_attribute_ETypedElement(problem,interpretation,from,to);
31673}
31674pattern refineRelation_many_attribute_ETypedElement(
31675 problem:LogicProblem, interpretation:PartialInterpretation,
31676 relationIterpretation:PartialRelationInterpretation,
31677 from: DefinedElement, to: DefinedElement)
31678{
31679 find interpretation(problem,interpretation);
31680 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
31681 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"many attribute ETypedElement");
31682 find mustExist(problem, interpretation, from);
31683 find mustExist(problem, interpretation, to);
31684 find mustInstanceOfETypedElement_class(problem,interpretation,from);
31685 BooleanElement(to);
31686 find mayInRelationmany_attribute_ETypedElement(problem,interpretation,from,to);
31687 neg find mustInRelationmany_attribute_ETypedElement(problem,interpretation,from,to);
31688}
31689pattern refineRelation_required_attribute_ETypedElement(
31690 problem:LogicProblem, interpretation:PartialInterpretation,
31691 relationIterpretation:PartialRelationInterpretation,
31692 from: DefinedElement, to: DefinedElement)
31693{
31694 find interpretation(problem,interpretation);
31695 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
31696 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"required attribute ETypedElement");
31697 find mustExist(problem, interpretation, from);
31698 find mustExist(problem, interpretation, to);
31699 find mustInstanceOfETypedElement_class(problem,interpretation,from);
31700 BooleanElement(to);
31701 find mayInRelationrequired_attribute_ETypedElement(problem,interpretation,from,to);
31702 neg find mustInRelationrequired_attribute_ETypedElement(problem,interpretation,from,to);
31703}
31704pattern refineRelation_key_attribute_EStringToStringMapEntry(
31705 problem:LogicProblem, interpretation:PartialInterpretation,
31706 relationIterpretation:PartialRelationInterpretation,
31707 from: DefinedElement, to: DefinedElement)
31708{
31709 find interpretation(problem,interpretation);
31710 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
31711 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"key attribute EStringToStringMapEntry");
31712 find mustExist(problem, interpretation, from);
31713 find mustExist(problem, interpretation, to);
31714 find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,from);
31715 StringElement(to);
31716 find mayInRelationkey_attribute_EStringToStringMapEntry(problem,interpretation,from,to);
31717 neg find mustInRelationkey_attribute_EStringToStringMapEntry(problem,interpretation,from,to);
31718}
31719pattern refineRelation_value_attribute_EStringToStringMapEntry(
31720 problem:LogicProblem, interpretation:PartialInterpretation,
31721 relationIterpretation:PartialRelationInterpretation,
31722 from: DefinedElement, to: DefinedElement)
31723{
31724 find interpretation(problem,interpretation);
31725 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
31726 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"value attribute EStringToStringMapEntry");
31727 find mustExist(problem, interpretation, from);
31728 find mustExist(problem, interpretation, to);
31729 find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,from);
31730 StringElement(to);
31731 find mayInRelationvalue_attribute_EStringToStringMapEntry(problem,interpretation,from,to);
31732 neg find mustInRelationvalue_attribute_EStringToStringMapEntry(problem,interpretation,from,to);
31733}
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/debug/generation.logicproblem b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/debug/generation.logicproblem
new file mode 100644
index 00000000..ab657f0b
--- /dev/null
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/debug/generation.logicproblem
@@ -0,0 +1,2059 @@
1<?xml version="1.0" encoding="ASCII"?>
2<language:LogicProblem xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ecore2logicannotations="http://www.bme.hu/mit/inf/dslreasoner/logic/model/language/ecore2logicannotation" xmlns:language="http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem" xmlns:language_1="http://www.bme.hu/mit/inf/dslreasoner/logic/model/language" xmlns:partial2logicannotations="http://www.bme.hu/mit/inf/dslreasoner/logic/model/language/partial2logicannotation">
3 <types xsi:type="language_1:TypeDeclaration" name="EAttribute class" supertypes="//@types.14"/>
4 <types xsi:type="language_1:TypeDeclaration" name="EAnnotation class" supertypes="//@types.7 //@types.20"/>
5 <types xsi:type="language_1:TypeDeclaration" name="EClass class" supertypes="//@types.3"/>
6 <types xsi:type="language_1:TypeDeclaration" name="EClassifier class" subtypes="//@types.2 //@types.4" supertypes="//@types.8 //@types.22" isAbstract="true"/>
7 <types xsi:type="language_1:TypeDeclaration" name="EDataType class" subtypes="//@types.5" supertypes="//@types.3"/>
8 <types xsi:type="language_1:TypeDeclaration" name="EEnum class" supertypes="//@types.4"/>
9 <types xsi:type="language_1:TypeDeclaration" name="EEnumLiteral class" supertypes="//@types.8 //@types.22"/>
10 <types xsi:type="language_1:TypeDeclaration" name="EModelElement class" subtypes="//@types.1 //@types.8 //@types.19 //@types.20" isAbstract="true"/>
11 <types xsi:type="language_1:TypeDeclaration" name="ENamedElement class" subtypes="//@types.3 //@types.6 //@types.11 //@types.15 //@types.18 //@types.21 //@types.22" supertypes="//@types.7" isAbstract="true"/>
12 <types xsi:type="language_1:TypeDeclaration" name="EObject class"/>
13 <types xsi:type="language_1:TypeDeclaration" name="EOperation class" supertypes="//@types.15"/>
14 <types xsi:type="language_1:TypeDeclaration" name="EPackage class" subtypes="//@types.23 //@types.24" supertypes="//@types.8" isAbstract="true"/>
15 <types xsi:type="language_1:TypeDeclaration" name="EParameter class" supertypes="//@types.15"/>
16 <types xsi:type="language_1:TypeDeclaration" name="EReference class" supertypes="//@types.14"/>
17 <types xsi:type="language_1:TypeDeclaration" name="EStructuralFeature class" subtypes="//@types.0 //@types.13" supertypes="//@types.15" isAbstract="true"/>
18 <types xsi:type="language_1:TypeDeclaration" name="ETypedElement class" subtypes="//@types.10 //@types.12 //@types.14" supertypes="//@types.8 //@types.22" isAbstract="true"/>
19 <types xsi:type="language_1:TypeDeclaration" name="EStringToStringMapEntry class"/>
20 <types xsi:type="language_1:TypeDeclaration" name="EGenericType class"/>
21 <types xsi:type="language_1:TypeDeclaration" name="ETypeParameter class" supertypes="//@types.8 //@types.22"/>
22 <types xsi:type="language_1:TypeDefinition" name="EModelElement class DefinedPart" subtypes="//@types.21" supertypes="//@types.7" isAbstract="true" elements="//@elements.0"/>
23 <types xsi:type="language_1:TypeDeclaration" name="EModelElement class UndefinedPart" subtypes="//@types.1 //@types.22" supertypes="//@types.7" isAbstract="true"/>
24 <types xsi:type="language_1:TypeDefinition" name="ENamedElement class DefinedPart" subtypes="//@types.23" supertypes="//@types.8 //@types.19" isAbstract="true" elements="//@elements.0"/>
25 <types xsi:type="language_1:TypeDeclaration" name="ENamedElement class UndefinedPart" subtypes="//@types.3 //@types.6 //@types.24 //@types.15 //@types.18" supertypes="//@types.8 //@types.20" isAbstract="true"/>
26 <types xsi:type="language_1:TypeDefinition" name="EPackage class DefinedPart" supertypes="//@types.11 //@types.21" elements="//@elements.0"/>
27 <types xsi:type="language_1:TypeDeclaration" name="EPackage class UndefinedPart" supertypes="//@types.11 //@types.22"/>
28 <assertions name="lowerMultiplicity eAttributeType EAttribute" annotations="//@annotations.0">
29 <value xsi:type="language_1:Forall">
30 <quantifiedVariables name="src">
31 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.0"/>
32 </quantifiedVariables>
33 <expression xsi:type="language_1:Exists">
34 <quantifiedVariables name="trg 1">
35 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.4"/>
36 </quantifiedVariables>
37 <expression xsi:type="language_1:And">
38 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.0">
39 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.0/@value/@quantifiedVariables.0"/>
40 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.0/@value/@expression/@quantifiedVariables.0"/>
41 </operands>
42 </expression>
43 </expression>
44 </value>
45 </assertions>
46 <assertions name="upperMultiplicity eAttributeType EAttribute" annotations="//@annotations.1">
47 <value xsi:type="language_1:Forall">
48 <quantifiedVariables name="src">
49 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.0"/>
50 </quantifiedVariables>
51 <quantifiedVariables name="trg 1">
52 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.4"/>
53 </quantifiedVariables>
54 <quantifiedVariables name="trg 2">
55 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.4"/>
56 </quantifiedVariables>
57 <expression xsi:type="language_1:Impl">
58 <leftOperand xsi:type="language_1:And">
59 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.0">
60 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.1/@value/@quantifiedVariables.0"/>
61 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.1/@value/@quantifiedVariables.1"/>
62 </operands>
63 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.0">
64 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.1/@value/@quantifiedVariables.0"/>
65 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.1/@value/@quantifiedVariables.2"/>
66 </operands>
67 </leftOperand>
68 <rightOperand xsi:type="language_1:Not">
69 <operand xsi:type="language_1:Distinct">
70 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.1/@value/@quantifiedVariables.1"/>
71 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.1/@value/@quantifiedVariables.2"/>
72 </operand>
73 </rightOperand>
74 </expression>
75 </value>
76 </assertions>
77 <assertions name="upperMultiplicity eModelElement EAnnotation" annotations="//@annotations.2">
78 <value xsi:type="language_1:Forall">
79 <quantifiedVariables name="src">
80 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.1"/>
81 </quantifiedVariables>
82 <quantifiedVariables name="trg 1">
83 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.7"/>
84 </quantifiedVariables>
85 <quantifiedVariables name="trg 2">
86 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.7"/>
87 </quantifiedVariables>
88 <expression xsi:type="language_1:Impl">
89 <leftOperand xsi:type="language_1:And">
90 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.2">
91 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.2/@value/@quantifiedVariables.0"/>
92 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.2/@value/@quantifiedVariables.1"/>
93 </operands>
94 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.2">
95 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.2/@value/@quantifiedVariables.0"/>
96 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.2/@value/@quantifiedVariables.2"/>
97 </operands>
98 </leftOperand>
99 <rightOperand xsi:type="language_1:Not">
100 <operand xsi:type="language_1:Distinct">
101 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.2/@value/@quantifiedVariables.1"/>
102 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.2/@value/@quantifiedVariables.2"/>
103 </operand>
104 </rightOperand>
105 </expression>
106 </value>
107 </assertions>
108 <assertions name="upperMultiplicity eIDAttribute EClass" annotations="//@annotations.3">
109 <value xsi:type="language_1:Forall">
110 <quantifiedVariables name="src">
111 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.2"/>
112 </quantifiedVariables>
113 <quantifiedVariables name="trg 1">
114 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.0"/>
115 </quantifiedVariables>
116 <quantifiedVariables name="trg 2">
117 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.0"/>
118 </quantifiedVariables>
119 <expression xsi:type="language_1:Impl">
120 <leftOperand xsi:type="language_1:And">
121 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.15">
122 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.3/@value/@quantifiedVariables.0"/>
123 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.3/@value/@quantifiedVariables.1"/>
124 </operands>
125 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.15">
126 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.3/@value/@quantifiedVariables.0"/>
127 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.3/@value/@quantifiedVariables.2"/>
128 </operands>
129 </leftOperand>
130 <rightOperand xsi:type="language_1:Not">
131 <operand xsi:type="language_1:Distinct">
132 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.3/@value/@quantifiedVariables.1"/>
133 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.3/@value/@quantifiedVariables.2"/>
134 </operand>
135 </rightOperand>
136 </expression>
137 </value>
138 </assertions>
139 <assertions name="upperMultiplicity ePackage EClassifier" annotations="//@annotations.4">
140 <value xsi:type="language_1:Forall">
141 <quantifiedVariables name="src">
142 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.3"/>
143 </quantifiedVariables>
144 <quantifiedVariables name="trg 1">
145 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.11"/>
146 </quantifiedVariables>
147 <quantifiedVariables name="trg 2">
148 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.11"/>
149 </quantifiedVariables>
150 <expression xsi:type="language_1:Impl">
151 <leftOperand xsi:type="language_1:And">
152 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.19">
153 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.4/@value/@quantifiedVariables.0"/>
154 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.4/@value/@quantifiedVariables.1"/>
155 </operands>
156 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.19">
157 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.4/@value/@quantifiedVariables.0"/>
158 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.4/@value/@quantifiedVariables.2"/>
159 </operands>
160 </leftOperand>
161 <rightOperand xsi:type="language_1:Not">
162 <operand xsi:type="language_1:Distinct">
163 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.4/@value/@quantifiedVariables.1"/>
164 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.4/@value/@quantifiedVariables.2"/>
165 </operand>
166 </rightOperand>
167 </expression>
168 </value>
169 </assertions>
170 <assertions name="upperMultiplicity eEnum EEnumLiteral" annotations="//@annotations.5">
171 <value xsi:type="language_1:Forall">
172 <quantifiedVariables name="src">
173 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.6"/>
174 </quantifiedVariables>
175 <quantifiedVariables name="trg 1">
176 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.5"/>
177 </quantifiedVariables>
178 <quantifiedVariables name="trg 2">
179 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.5"/>
180 </quantifiedVariables>
181 <expression xsi:type="language_1:Impl">
182 <leftOperand xsi:type="language_1:And">
183 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.22">
184 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.5/@value/@quantifiedVariables.0"/>
185 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.5/@value/@quantifiedVariables.1"/>
186 </operands>
187 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.22">
188 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.5/@value/@quantifiedVariables.0"/>
189 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.5/@value/@quantifiedVariables.2"/>
190 </operands>
191 </leftOperand>
192 <rightOperand xsi:type="language_1:Not">
193 <operand xsi:type="language_1:Distinct">
194 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.5/@value/@quantifiedVariables.1"/>
195 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.5/@value/@quantifiedVariables.2"/>
196 </operand>
197 </rightOperand>
198 </expression>
199 </value>
200 </assertions>
201 <assertions name="upperMultiplicity eContainingClass EOperation" annotations="//@annotations.6">
202 <value xsi:type="language_1:Forall">
203 <quantifiedVariables name="src">
204 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.10"/>
205 </quantifiedVariables>
206 <quantifiedVariables name="trg 1">
207 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.2"/>
208 </quantifiedVariables>
209 <quantifiedVariables name="trg 2">
210 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.2"/>
211 </quantifiedVariables>
212 <expression xsi:type="language_1:Impl">
213 <leftOperand xsi:type="language_1:And">
214 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.24">
215 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.6/@value/@quantifiedVariables.0"/>
216 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.6/@value/@quantifiedVariables.1"/>
217 </operands>
218 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.24">
219 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.6/@value/@quantifiedVariables.0"/>
220 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.6/@value/@quantifiedVariables.2"/>
221 </operands>
222 </leftOperand>
223 <rightOperand xsi:type="language_1:Not">
224 <operand xsi:type="language_1:Distinct">
225 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.6/@value/@quantifiedVariables.1"/>
226 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.6/@value/@quantifiedVariables.2"/>
227 </operand>
228 </rightOperand>
229 </expression>
230 </value>
231 </assertions>
232 <assertions name="upperMultiplicity eSuperPackage EPackage" annotations="//@annotations.7">
233 <value xsi:type="language_1:Forall">
234 <quantifiedVariables name="src">
235 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.11"/>
236 </quantifiedVariables>
237 <quantifiedVariables name="trg 1">
238 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.11"/>
239 </quantifiedVariables>
240 <quantifiedVariables name="trg 2">
241 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.11"/>
242 </quantifiedVariables>
243 <expression xsi:type="language_1:Impl">
244 <leftOperand xsi:type="language_1:And">
245 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.31">
246 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.7/@value/@quantifiedVariables.0"/>
247 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.7/@value/@quantifiedVariables.1"/>
248 </operands>
249 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.31">
250 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.7/@value/@quantifiedVariables.0"/>
251 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.7/@value/@quantifiedVariables.2"/>
252 </operands>
253 </leftOperand>
254 <rightOperand xsi:type="language_1:Not">
255 <operand xsi:type="language_1:Distinct">
256 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.7/@value/@quantifiedVariables.1"/>
257 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.7/@value/@quantifiedVariables.2"/>
258 </operand>
259 </rightOperand>
260 </expression>
261 </value>
262 </assertions>
263 <assertions name="upperMultiplicity eOperation EParameter" annotations="//@annotations.8">
264 <value xsi:type="language_1:Forall">
265 <quantifiedVariables name="src">
266 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.12"/>
267 </quantifiedVariables>
268 <quantifiedVariables name="trg 1">
269 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.10"/>
270 </quantifiedVariables>
271 <quantifiedVariables name="trg 2">
272 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.10"/>
273 </quantifiedVariables>
274 <expression xsi:type="language_1:Impl">
275 <leftOperand xsi:type="language_1:And">
276 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.32">
277 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.8/@value/@quantifiedVariables.0"/>
278 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.8/@value/@quantifiedVariables.1"/>
279 </operands>
280 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.32">
281 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.8/@value/@quantifiedVariables.0"/>
282 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.8/@value/@quantifiedVariables.2"/>
283 </operands>
284 </leftOperand>
285 <rightOperand xsi:type="language_1:Not">
286 <operand xsi:type="language_1:Distinct">
287 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.8/@value/@quantifiedVariables.1"/>
288 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.8/@value/@quantifiedVariables.2"/>
289 </operand>
290 </rightOperand>
291 </expression>
292 </value>
293 </assertions>
294 <assertions name="upperMultiplicity eOpposite EReference" annotations="//@annotations.9">
295 <value xsi:type="language_1:Forall">
296 <quantifiedVariables name="src">
297 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.13"/>
298 </quantifiedVariables>
299 <quantifiedVariables name="trg 1">
300 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.13"/>
301 </quantifiedVariables>
302 <quantifiedVariables name="trg 2">
303 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.13"/>
304 </quantifiedVariables>
305 <expression xsi:type="language_1:Impl">
306 <leftOperand xsi:type="language_1:And">
307 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.33">
308 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.9/@value/@quantifiedVariables.0"/>
309 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.9/@value/@quantifiedVariables.1"/>
310 </operands>
311 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.33">
312 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.9/@value/@quantifiedVariables.0"/>
313 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.9/@value/@quantifiedVariables.2"/>
314 </operands>
315 </leftOperand>
316 <rightOperand xsi:type="language_1:Not">
317 <operand xsi:type="language_1:Distinct">
318 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.9/@value/@quantifiedVariables.1"/>
319 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.9/@value/@quantifiedVariables.2"/>
320 </operand>
321 </rightOperand>
322 </expression>
323 </value>
324 </assertions>
325 <assertions name="lowerMultiplicity eReferenceType EReference" annotations="//@annotations.10">
326 <value xsi:type="language_1:Forall">
327 <quantifiedVariables name="src">
328 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.13"/>
329 </quantifiedVariables>
330 <expression xsi:type="language_1:Exists">
331 <quantifiedVariables name="trg 1">
332 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.2"/>
333 </quantifiedVariables>
334 <expression xsi:type="language_1:And">
335 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.34">
336 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.10/@value/@quantifiedVariables.0"/>
337 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.10/@value/@expression/@quantifiedVariables.0"/>
338 </operands>
339 </expression>
340 </expression>
341 </value>
342 </assertions>
343 <assertions name="upperMultiplicity eReferenceType EReference" annotations="//@annotations.11">
344 <value xsi:type="language_1:Forall">
345 <quantifiedVariables name="src">
346 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.13"/>
347 </quantifiedVariables>
348 <quantifiedVariables name="trg 1">
349 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.2"/>
350 </quantifiedVariables>
351 <quantifiedVariables name="trg 2">
352 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.2"/>
353 </quantifiedVariables>
354 <expression xsi:type="language_1:Impl">
355 <leftOperand xsi:type="language_1:And">
356 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.34">
357 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.11/@value/@quantifiedVariables.0"/>
358 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.11/@value/@quantifiedVariables.1"/>
359 </operands>
360 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.34">
361 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.11/@value/@quantifiedVariables.0"/>
362 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.11/@value/@quantifiedVariables.2"/>
363 </operands>
364 </leftOperand>
365 <rightOperand xsi:type="language_1:Not">
366 <operand xsi:type="language_1:Distinct">
367 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.11/@value/@quantifiedVariables.1"/>
368 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.11/@value/@quantifiedVariables.2"/>
369 </operand>
370 </rightOperand>
371 </expression>
372 </value>
373 </assertions>
374 <assertions name="upperMultiplicity eContainingClass EStructuralFeature" annotations="//@annotations.12">
375 <value xsi:type="language_1:Forall">
376 <quantifiedVariables name="src">
377 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.14"/>
378 </quantifiedVariables>
379 <quantifiedVariables name="trg 1">
380 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.2"/>
381 </quantifiedVariables>
382 <quantifiedVariables name="trg 2">
383 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.2"/>
384 </quantifiedVariables>
385 <expression xsi:type="language_1:Impl">
386 <leftOperand xsi:type="language_1:And">
387 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.36">
388 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.12/@value/@quantifiedVariables.0"/>
389 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.12/@value/@quantifiedVariables.1"/>
390 </operands>
391 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.36">
392 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.12/@value/@quantifiedVariables.0"/>
393 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.12/@value/@quantifiedVariables.2"/>
394 </operands>
395 </leftOperand>
396 <rightOperand xsi:type="language_1:Not">
397 <operand xsi:type="language_1:Distinct">
398 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.12/@value/@quantifiedVariables.1"/>
399 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.12/@value/@quantifiedVariables.2"/>
400 </operand>
401 </rightOperand>
402 </expression>
403 </value>
404 </assertions>
405 <assertions name="upperMultiplicity eType ETypedElement" annotations="//@annotations.13">
406 <value xsi:type="language_1:Forall">
407 <quantifiedVariables name="src">
408 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.15"/>
409 </quantifiedVariables>
410 <quantifiedVariables name="trg 1">
411 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.3"/>
412 </quantifiedVariables>
413 <quantifiedVariables name="trg 2">
414 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.3"/>
415 </quantifiedVariables>
416 <expression xsi:type="language_1:Impl">
417 <leftOperand xsi:type="language_1:And">
418 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.37">
419 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.13/@value/@quantifiedVariables.0"/>
420 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.13/@value/@quantifiedVariables.1"/>
421 </operands>
422 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.37">
423 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.13/@value/@quantifiedVariables.0"/>
424 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.13/@value/@quantifiedVariables.2"/>
425 </operands>
426 </leftOperand>
427 <rightOperand xsi:type="language_1:Not">
428 <operand xsi:type="language_1:Distinct">
429 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.13/@value/@quantifiedVariables.1"/>
430 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.13/@value/@quantifiedVariables.2"/>
431 </operand>
432 </rightOperand>
433 </expression>
434 </value>
435 </assertions>
436 <assertions name="upperMultiplicity eGenericType ETypedElement" annotations="//@annotations.14">
437 <value xsi:type="language_1:Forall">
438 <quantifiedVariables name="src">
439 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.15"/>
440 </quantifiedVariables>
441 <quantifiedVariables name="trg 1">
442 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.17"/>
443 </quantifiedVariables>
444 <quantifiedVariables name="trg 2">
445 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.17"/>
446 </quantifiedVariables>
447 <expression xsi:type="language_1:Impl">
448 <leftOperand xsi:type="language_1:And">
449 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.38">
450 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.14/@value/@quantifiedVariables.0"/>
451 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.14/@value/@quantifiedVariables.1"/>
452 </operands>
453 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.38">
454 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.14/@value/@quantifiedVariables.0"/>
455 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.14/@value/@quantifiedVariables.2"/>
456 </operands>
457 </leftOperand>
458 <rightOperand xsi:type="language_1:Not">
459 <operand xsi:type="language_1:Distinct">
460 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.14/@value/@quantifiedVariables.1"/>
461 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.14/@value/@quantifiedVariables.2"/>
462 </operand>
463 </rightOperand>
464 </expression>
465 </value>
466 </assertions>
467 <assertions name="upperMultiplicity eUpperBound EGenericType" annotations="//@annotations.15">
468 <value xsi:type="language_1:Forall">
469 <quantifiedVariables name="src">
470 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.17"/>
471 </quantifiedVariables>
472 <quantifiedVariables name="trg 1">
473 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.17"/>
474 </quantifiedVariables>
475 <quantifiedVariables name="trg 2">
476 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.17"/>
477 </quantifiedVariables>
478 <expression xsi:type="language_1:Impl">
479 <leftOperand xsi:type="language_1:And">
480 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.39">
481 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.15/@value/@quantifiedVariables.0"/>
482 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.15/@value/@quantifiedVariables.1"/>
483 </operands>
484 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.39">
485 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.15/@value/@quantifiedVariables.0"/>
486 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.15/@value/@quantifiedVariables.2"/>
487 </operands>
488 </leftOperand>
489 <rightOperand xsi:type="language_1:Not">
490 <operand xsi:type="language_1:Distinct">
491 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.15/@value/@quantifiedVariables.1"/>
492 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.15/@value/@quantifiedVariables.2"/>
493 </operand>
494 </rightOperand>
495 </expression>
496 </value>
497 </assertions>
498 <assertions name="lowerMultiplicity eRawType EGenericType" annotations="//@annotations.16">
499 <value xsi:type="language_1:Forall">
500 <quantifiedVariables name="src">
501 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.17"/>
502 </quantifiedVariables>
503 <expression xsi:type="language_1:Exists">
504 <quantifiedVariables name="trg 1">
505 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.3"/>
506 </quantifiedVariables>
507 <expression xsi:type="language_1:And">
508 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.41">
509 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.16/@value/@quantifiedVariables.0"/>
510 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.16/@value/@expression/@quantifiedVariables.0"/>
511 </operands>
512 </expression>
513 </expression>
514 </value>
515 </assertions>
516 <assertions name="upperMultiplicity eRawType EGenericType" annotations="//@annotations.17">
517 <value xsi:type="language_1:Forall">
518 <quantifiedVariables name="src">
519 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.17"/>
520 </quantifiedVariables>
521 <quantifiedVariables name="trg 1">
522 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.3"/>
523 </quantifiedVariables>
524 <quantifiedVariables name="trg 2">
525 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.3"/>
526 </quantifiedVariables>
527 <expression xsi:type="language_1:Impl">
528 <leftOperand xsi:type="language_1:And">
529 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.41">
530 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.17/@value/@quantifiedVariables.0"/>
531 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.17/@value/@quantifiedVariables.1"/>
532 </operands>
533 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.41">
534 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.17/@value/@quantifiedVariables.0"/>
535 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.17/@value/@quantifiedVariables.2"/>
536 </operands>
537 </leftOperand>
538 <rightOperand xsi:type="language_1:Not">
539 <operand xsi:type="language_1:Distinct">
540 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.17/@value/@quantifiedVariables.1"/>
541 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.17/@value/@quantifiedVariables.2"/>
542 </operand>
543 </rightOperand>
544 </expression>
545 </value>
546 </assertions>
547 <assertions name="upperMultiplicity eLowerBound EGenericType" annotations="//@annotations.18">
548 <value xsi:type="language_1:Forall">
549 <quantifiedVariables name="src">
550 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.17"/>
551 </quantifiedVariables>
552 <quantifiedVariables name="trg 1">
553 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.17"/>
554 </quantifiedVariables>
555 <quantifiedVariables name="trg 2">
556 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.17"/>
557 </quantifiedVariables>
558 <expression xsi:type="language_1:Impl">
559 <leftOperand xsi:type="language_1:And">
560 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.42">
561 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.18/@value/@quantifiedVariables.0"/>
562 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.18/@value/@quantifiedVariables.1"/>
563 </operands>
564 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.42">
565 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.18/@value/@quantifiedVariables.0"/>
566 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.18/@value/@quantifiedVariables.2"/>
567 </operands>
568 </leftOperand>
569 <rightOperand xsi:type="language_1:Not">
570 <operand xsi:type="language_1:Distinct">
571 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.18/@value/@quantifiedVariables.1"/>
572 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.18/@value/@quantifiedVariables.2"/>
573 </operand>
574 </rightOperand>
575 </expression>
576 </value>
577 </assertions>
578 <assertions name="upperMultiplicity eTypeParameter EGenericType" annotations="//@annotations.19">
579 <value xsi:type="language_1:Forall">
580 <quantifiedVariables name="src">
581 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.17"/>
582 </quantifiedVariables>
583 <quantifiedVariables name="trg 1">
584 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.18"/>
585 </quantifiedVariables>
586 <quantifiedVariables name="trg 2">
587 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.18"/>
588 </quantifiedVariables>
589 <expression xsi:type="language_1:Impl">
590 <leftOperand xsi:type="language_1:And">
591 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.43">
592 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.19/@value/@quantifiedVariables.0"/>
593 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.19/@value/@quantifiedVariables.1"/>
594 </operands>
595 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.43">
596 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.19/@value/@quantifiedVariables.0"/>
597 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.19/@value/@quantifiedVariables.2"/>
598 </operands>
599 </leftOperand>
600 <rightOperand xsi:type="language_1:Not">
601 <operand xsi:type="language_1:Distinct">
602 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.19/@value/@quantifiedVariables.1"/>
603 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.19/@value/@quantifiedVariables.2"/>
604 </operand>
605 </rightOperand>
606 </expression>
607 </value>
608 </assertions>
609 <assertions name="upperMultiplicity eClassifier EGenericType" annotations="//@annotations.20">
610 <value xsi:type="language_1:Forall">
611 <quantifiedVariables name="src">
612 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.17"/>
613 </quantifiedVariables>
614 <quantifiedVariables name="trg 1">
615 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.3"/>
616 </quantifiedVariables>
617 <quantifiedVariables name="trg 2">
618 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.3"/>
619 </quantifiedVariables>
620 <expression xsi:type="language_1:Impl">
621 <leftOperand xsi:type="language_1:And">
622 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.44">
623 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.20/@value/@quantifiedVariables.0"/>
624 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.20/@value/@quantifiedVariables.1"/>
625 </operands>
626 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.44">
627 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.20/@value/@quantifiedVariables.0"/>
628 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.20/@value/@quantifiedVariables.2"/>
629 </operands>
630 </leftOperand>
631 <rightOperand xsi:type="language_1:Not">
632 <operand xsi:type="language_1:Distinct">
633 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.20/@value/@quantifiedVariables.1"/>
634 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.20/@value/@quantifiedVariables.2"/>
635 </operand>
636 </rightOperand>
637 </expression>
638 </value>
639 </assertions>
640 <assertions name="oppositeReference eModelElement EAnnotation" annotations="//@annotations.21">
641 <value xsi:type="language_1:Forall">
642 <quantifiedVariables name="src">
643 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.1"/>
644 </quantifiedVariables>
645 <quantifiedVariables name="trg">
646 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.7"/>
647 </quantifiedVariables>
648 <expression xsi:type="language_1:Iff">
649 <leftOperand xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.2">
650 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.21/@value/@quantifiedVariables.0"/>
651 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.21/@value/@quantifiedVariables.1"/>
652 </leftOperand>
653 <rightOperand xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.23">
654 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.21/@value/@quantifiedVariables.1"/>
655 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.21/@value/@quantifiedVariables.0"/>
656 </rightOperand>
657 </expression>
658 </value>
659 </assertions>
660 <assertions name="oppositeReference eOperations EClass" annotations="//@annotations.22">
661 <value xsi:type="language_1:Forall">
662 <quantifiedVariables name="src">
663 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.2"/>
664 </quantifiedVariables>
665 <quantifiedVariables name="trg">
666 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.10"/>
667 </quantifiedVariables>
668 <expression xsi:type="language_1:Iff">
669 <leftOperand xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.6">
670 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.22/@value/@quantifiedVariables.0"/>
671 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.22/@value/@quantifiedVariables.1"/>
672 </leftOperand>
673 <rightOperand xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.24">
674 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.22/@value/@quantifiedVariables.1"/>
675 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.22/@value/@quantifiedVariables.0"/>
676 </rightOperand>
677 </expression>
678 </value>
679 </assertions>
680 <assertions name="oppositeReference eStructuralFeatures EClass" annotations="//@annotations.23">
681 <value xsi:type="language_1:Forall">
682 <quantifiedVariables name="src">
683 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.2"/>
684 </quantifiedVariables>
685 <quantifiedVariables name="trg">
686 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.14"/>
687 </quantifiedVariables>
688 <expression xsi:type="language_1:Iff">
689 <leftOperand xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.16">
690 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.23/@value/@quantifiedVariables.0"/>
691 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.23/@value/@quantifiedVariables.1"/>
692 </leftOperand>
693 <rightOperand xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.36">
694 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.23/@value/@quantifiedVariables.1"/>
695 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.23/@value/@quantifiedVariables.0"/>
696 </rightOperand>
697 </expression>
698 </value>
699 </assertions>
700 <assertions name="oppositeReference ePackage EClassifier" annotations="//@annotations.24">
701 <value xsi:type="language_1:Forall">
702 <quantifiedVariables name="src">
703 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.3"/>
704 </quantifiedVariables>
705 <quantifiedVariables name="trg">
706 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.11"/>
707 </quantifiedVariables>
708 <expression xsi:type="language_1:Iff">
709 <leftOperand xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.19">
710 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.24/@value/@quantifiedVariables.0"/>
711 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.24/@value/@quantifiedVariables.1"/>
712 </leftOperand>
713 <rightOperand xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.29">
714 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.24/@value/@quantifiedVariables.1"/>
715 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.24/@value/@quantifiedVariables.0"/>
716 </rightOperand>
717 </expression>
718 </value>
719 </assertions>
720 <assertions name="oppositeReference eLiterals EEnum" annotations="//@annotations.25">
721 <value xsi:type="language_1:Forall">
722 <quantifiedVariables name="src">
723 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.5"/>
724 </quantifiedVariables>
725 <quantifiedVariables name="trg">
726 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.6"/>
727 </quantifiedVariables>
728 <expression xsi:type="language_1:Iff">
729 <leftOperand xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.21">
730 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.25/@value/@quantifiedVariables.0"/>
731 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.25/@value/@quantifiedVariables.1"/>
732 </leftOperand>
733 <rightOperand xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.22">
734 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.25/@value/@quantifiedVariables.1"/>
735 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.25/@value/@quantifiedVariables.0"/>
736 </rightOperand>
737 </expression>
738 </value>
739 </assertions>
740 <assertions name="oppositeReference eParameters EOperation" annotations="//@annotations.26">
741 <value xsi:type="language_1:Forall">
742 <quantifiedVariables name="src">
743 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.10"/>
744 </quantifiedVariables>
745 <quantifiedVariables name="trg">
746 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.12"/>
747 </quantifiedVariables>
748 <expression xsi:type="language_1:Iff">
749 <leftOperand xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.26">
750 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.26/@value/@quantifiedVariables.0"/>
751 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.26/@value/@quantifiedVariables.1"/>
752 </leftOperand>
753 <rightOperand xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.32">
754 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.26/@value/@quantifiedVariables.1"/>
755 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.26/@value/@quantifiedVariables.0"/>
756 </rightOperand>
757 </expression>
758 </value>
759 </assertions>
760 <assertions name="oppositeReference eSubpackages EPackage" annotations="//@annotations.27">
761 <value xsi:type="language_1:Forall">
762 <quantifiedVariables name="src">
763 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.11"/>
764 </quantifiedVariables>
765 <quantifiedVariables name="trg">
766 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.11"/>
767 </quantifiedVariables>
768 <expression xsi:type="language_1:Iff">
769 <leftOperand xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.30">
770 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.27/@value/@quantifiedVariables.0"/>
771 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.27/@value/@quantifiedVariables.1"/>
772 </leftOperand>
773 <rightOperand xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.31">
774 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.27/@value/@quantifiedVariables.1"/>
775 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.27/@value/@quantifiedVariables.0"/>
776 </rightOperand>
777 </expression>
778 </value>
779 </assertions>
780 <assertions name="upperMultiplicity iD EAttribute" annotations="//@annotations.28">
781 <value xsi:type="language_1:Forall">
782 <quantifiedVariables name="src">
783 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.0"/>
784 </quantifiedVariables>
785 <quantifiedVariables name="trg 1">
786 <range xsi:type="language_1:BoolTypeReference"/>
787 </quantifiedVariables>
788 <quantifiedVariables name="trg 2">
789 <range xsi:type="language_1:BoolTypeReference"/>
790 </quantifiedVariables>
791 <expression xsi:type="language_1:Impl">
792 <leftOperand xsi:type="language_1:And">
793 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.46">
794 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.28/@value/@quantifiedVariables.0"/>
795 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.28/@value/@quantifiedVariables.1"/>
796 </operands>
797 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.46">
798 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.28/@value/@quantifiedVariables.0"/>
799 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.28/@value/@quantifiedVariables.2"/>
800 </operands>
801 </leftOperand>
802 <rightOperand xsi:type="language_1:Not">
803 <operand xsi:type="language_1:Distinct">
804 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.28/@value/@quantifiedVariables.1"/>
805 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.28/@value/@quantifiedVariables.2"/>
806 </operand>
807 </rightOperand>
808 </expression>
809 </value>
810 </assertions>
811 <assertions name="upperMultiplicity source EAnnotation" annotations="//@annotations.29">
812 <value xsi:type="language_1:Forall">
813 <quantifiedVariables name="src">
814 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.1"/>
815 </quantifiedVariables>
816 <quantifiedVariables name="trg 1">
817 <range xsi:type="language_1:StringTypeReference"/>
818 </quantifiedVariables>
819 <quantifiedVariables name="trg 2">
820 <range xsi:type="language_1:StringTypeReference"/>
821 </quantifiedVariables>
822 <expression xsi:type="language_1:Impl">
823 <leftOperand xsi:type="language_1:And">
824 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.47">
825 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.29/@value/@quantifiedVariables.0"/>
826 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.29/@value/@quantifiedVariables.1"/>
827 </operands>
828 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.47">
829 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.29/@value/@quantifiedVariables.0"/>
830 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.29/@value/@quantifiedVariables.2"/>
831 </operands>
832 </leftOperand>
833 <rightOperand xsi:type="language_1:Not">
834 <operand xsi:type="language_1:Distinct">
835 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.29/@value/@quantifiedVariables.1"/>
836 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.29/@value/@quantifiedVariables.2"/>
837 </operand>
838 </rightOperand>
839 </expression>
840 </value>
841 </assertions>
842 <assertions name="upperMultiplicity abstract EClass" annotations="//@annotations.30">
843 <value xsi:type="language_1:Forall">
844 <quantifiedVariables name="src">
845 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.2"/>
846 </quantifiedVariables>
847 <quantifiedVariables name="trg 1">
848 <range xsi:type="language_1:BoolTypeReference"/>
849 </quantifiedVariables>
850 <quantifiedVariables name="trg 2">
851 <range xsi:type="language_1:BoolTypeReference"/>
852 </quantifiedVariables>
853 <expression xsi:type="language_1:Impl">
854 <leftOperand xsi:type="language_1:And">
855 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.48">
856 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.30/@value/@quantifiedVariables.0"/>
857 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.30/@value/@quantifiedVariables.1"/>
858 </operands>
859 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.48">
860 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.30/@value/@quantifiedVariables.0"/>
861 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.30/@value/@quantifiedVariables.2"/>
862 </operands>
863 </leftOperand>
864 <rightOperand xsi:type="language_1:Not">
865 <operand xsi:type="language_1:Distinct">
866 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.30/@value/@quantifiedVariables.1"/>
867 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.30/@value/@quantifiedVariables.2"/>
868 </operand>
869 </rightOperand>
870 </expression>
871 </value>
872 </assertions>
873 <assertions name="upperMultiplicity interface EClass" annotations="//@annotations.31">
874 <value xsi:type="language_1:Forall">
875 <quantifiedVariables name="src">
876 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.2"/>
877 </quantifiedVariables>
878 <quantifiedVariables name="trg 1">
879 <range xsi:type="language_1:BoolTypeReference"/>
880 </quantifiedVariables>
881 <quantifiedVariables name="trg 2">
882 <range xsi:type="language_1:BoolTypeReference"/>
883 </quantifiedVariables>
884 <expression xsi:type="language_1:Impl">
885 <leftOperand xsi:type="language_1:And">
886 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.49">
887 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.31/@value/@quantifiedVariables.0"/>
888 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.31/@value/@quantifiedVariables.1"/>
889 </operands>
890 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.49">
891 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.31/@value/@quantifiedVariables.0"/>
892 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.31/@value/@quantifiedVariables.2"/>
893 </operands>
894 </leftOperand>
895 <rightOperand xsi:type="language_1:Not">
896 <operand xsi:type="language_1:Distinct">
897 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.31/@value/@quantifiedVariables.1"/>
898 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.31/@value/@quantifiedVariables.2"/>
899 </operand>
900 </rightOperand>
901 </expression>
902 </value>
903 </assertions>
904 <assertions name="upperMultiplicity instanceClassName EClassifier" annotations="//@annotations.32">
905 <value xsi:type="language_1:Forall">
906 <quantifiedVariables name="src">
907 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.3"/>
908 </quantifiedVariables>
909 <quantifiedVariables name="trg 1">
910 <range xsi:type="language_1:StringTypeReference"/>
911 </quantifiedVariables>
912 <quantifiedVariables name="trg 2">
913 <range xsi:type="language_1:StringTypeReference"/>
914 </quantifiedVariables>
915 <expression xsi:type="language_1:Impl">
916 <leftOperand xsi:type="language_1:And">
917 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.50">
918 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.32/@value/@quantifiedVariables.0"/>
919 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.32/@value/@quantifiedVariables.1"/>
920 </operands>
921 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.50">
922 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.32/@value/@quantifiedVariables.0"/>
923 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.32/@value/@quantifiedVariables.2"/>
924 </operands>
925 </leftOperand>
926 <rightOperand xsi:type="language_1:Not">
927 <operand xsi:type="language_1:Distinct">
928 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.32/@value/@quantifiedVariables.1"/>
929 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.32/@value/@quantifiedVariables.2"/>
930 </operand>
931 </rightOperand>
932 </expression>
933 </value>
934 </assertions>
935 <assertions name="upperMultiplicity instanceTypeName EClassifier" annotations="//@annotations.33">
936 <value xsi:type="language_1:Forall">
937 <quantifiedVariables name="src">
938 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.3"/>
939 </quantifiedVariables>
940 <quantifiedVariables name="trg 1">
941 <range xsi:type="language_1:StringTypeReference"/>
942 </quantifiedVariables>
943 <quantifiedVariables name="trg 2">
944 <range xsi:type="language_1:StringTypeReference"/>
945 </quantifiedVariables>
946 <expression xsi:type="language_1:Impl">
947 <leftOperand xsi:type="language_1:And">
948 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.51">
949 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.33/@value/@quantifiedVariables.0"/>
950 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.33/@value/@quantifiedVariables.1"/>
951 </operands>
952 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.51">
953 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.33/@value/@quantifiedVariables.0"/>
954 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.33/@value/@quantifiedVariables.2"/>
955 </operands>
956 </leftOperand>
957 <rightOperand xsi:type="language_1:Not">
958 <operand xsi:type="language_1:Distinct">
959 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.33/@value/@quantifiedVariables.1"/>
960 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.33/@value/@quantifiedVariables.2"/>
961 </operand>
962 </rightOperand>
963 </expression>
964 </value>
965 </assertions>
966 <assertions name="upperMultiplicity serializable EDataType" annotations="//@annotations.34">
967 <value xsi:type="language_1:Forall">
968 <quantifiedVariables name="src">
969 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.4"/>
970 </quantifiedVariables>
971 <quantifiedVariables name="trg 1">
972 <range xsi:type="language_1:BoolTypeReference"/>
973 </quantifiedVariables>
974 <quantifiedVariables name="trg 2">
975 <range xsi:type="language_1:BoolTypeReference"/>
976 </quantifiedVariables>
977 <expression xsi:type="language_1:Impl">
978 <leftOperand xsi:type="language_1:And">
979 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.52">
980 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.34/@value/@quantifiedVariables.0"/>
981 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.34/@value/@quantifiedVariables.1"/>
982 </operands>
983 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.52">
984 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.34/@value/@quantifiedVariables.0"/>
985 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.34/@value/@quantifiedVariables.2"/>
986 </operands>
987 </leftOperand>
988 <rightOperand xsi:type="language_1:Not">
989 <operand xsi:type="language_1:Distinct">
990 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.34/@value/@quantifiedVariables.1"/>
991 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.34/@value/@quantifiedVariables.2"/>
992 </operand>
993 </rightOperand>
994 </expression>
995 </value>
996 </assertions>
997 <assertions name="upperMultiplicity value EEnumLiteral" annotations="//@annotations.35">
998 <value xsi:type="language_1:Forall">
999 <quantifiedVariables name="src">
1000 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.6"/>
1001 </quantifiedVariables>
1002 <quantifiedVariables name="trg 1">
1003 <range xsi:type="language_1:IntTypeReference"/>
1004 </quantifiedVariables>
1005 <quantifiedVariables name="trg 2">
1006 <range xsi:type="language_1:IntTypeReference"/>
1007 </quantifiedVariables>
1008 <expression xsi:type="language_1:Impl">
1009 <leftOperand xsi:type="language_1:And">
1010 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.53">
1011 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.35/@value/@quantifiedVariables.0"/>
1012 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.35/@value/@quantifiedVariables.1"/>
1013 </operands>
1014 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.53">
1015 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.35/@value/@quantifiedVariables.0"/>
1016 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.35/@value/@quantifiedVariables.2"/>
1017 </operands>
1018 </leftOperand>
1019 <rightOperand xsi:type="language_1:Not">
1020 <operand xsi:type="language_1:Distinct">
1021 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.35/@value/@quantifiedVariables.1"/>
1022 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.35/@value/@quantifiedVariables.2"/>
1023 </operand>
1024 </rightOperand>
1025 </expression>
1026 </value>
1027 </assertions>
1028 <assertions name="upperMultiplicity literal EEnumLiteral" annotations="//@annotations.36">
1029 <value xsi:type="language_1:Forall">
1030 <quantifiedVariables name="src">
1031 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.6"/>
1032 </quantifiedVariables>
1033 <quantifiedVariables name="trg 1">
1034 <range xsi:type="language_1:StringTypeReference"/>
1035 </quantifiedVariables>
1036 <quantifiedVariables name="trg 2">
1037 <range xsi:type="language_1:StringTypeReference"/>
1038 </quantifiedVariables>
1039 <expression xsi:type="language_1:Impl">
1040 <leftOperand xsi:type="language_1:And">
1041 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.54">
1042 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.36/@value/@quantifiedVariables.0"/>
1043 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.36/@value/@quantifiedVariables.1"/>
1044 </operands>
1045 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.54">
1046 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.36/@value/@quantifiedVariables.0"/>
1047 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.36/@value/@quantifiedVariables.2"/>
1048 </operands>
1049 </leftOperand>
1050 <rightOperand xsi:type="language_1:Not">
1051 <operand xsi:type="language_1:Distinct">
1052 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.36/@value/@quantifiedVariables.1"/>
1053 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.36/@value/@quantifiedVariables.2"/>
1054 </operand>
1055 </rightOperand>
1056 </expression>
1057 </value>
1058 </assertions>
1059 <assertions name="upperMultiplicity name ENamedElement" annotations="//@annotations.37">
1060 <value xsi:type="language_1:Forall">
1061 <quantifiedVariables name="src">
1062 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.8"/>
1063 </quantifiedVariables>
1064 <quantifiedVariables name="trg 1">
1065 <range xsi:type="language_1:StringTypeReference"/>
1066 </quantifiedVariables>
1067 <quantifiedVariables name="trg 2">
1068 <range xsi:type="language_1:StringTypeReference"/>
1069 </quantifiedVariables>
1070 <expression xsi:type="language_1:Impl">
1071 <leftOperand xsi:type="language_1:And">
1072 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.55">
1073 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.37/@value/@quantifiedVariables.0"/>
1074 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.37/@value/@quantifiedVariables.1"/>
1075 </operands>
1076 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.55">
1077 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.37/@value/@quantifiedVariables.0"/>
1078 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.37/@value/@quantifiedVariables.2"/>
1079 </operands>
1080 </leftOperand>
1081 <rightOperand xsi:type="language_1:Not">
1082 <operand xsi:type="language_1:Distinct">
1083 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.37/@value/@quantifiedVariables.1"/>
1084 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.37/@value/@quantifiedVariables.2"/>
1085 </operand>
1086 </rightOperand>
1087 </expression>
1088 </value>
1089 </assertions>
1090 <assertions name="upperMultiplicity nsURI EPackage" annotations="//@annotations.38">
1091 <value xsi:type="language_1:Forall">
1092 <quantifiedVariables name="src">
1093 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.11"/>
1094 </quantifiedVariables>
1095 <quantifiedVariables name="trg 1">
1096 <range xsi:type="language_1:StringTypeReference"/>
1097 </quantifiedVariables>
1098 <quantifiedVariables name="trg 2">
1099 <range xsi:type="language_1:StringTypeReference"/>
1100 </quantifiedVariables>
1101 <expression xsi:type="language_1:Impl">
1102 <leftOperand xsi:type="language_1:And">
1103 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.56">
1104 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.38/@value/@quantifiedVariables.0"/>
1105 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.38/@value/@quantifiedVariables.1"/>
1106 </operands>
1107 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.56">
1108 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.38/@value/@quantifiedVariables.0"/>
1109 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.38/@value/@quantifiedVariables.2"/>
1110 </operands>
1111 </leftOperand>
1112 <rightOperand xsi:type="language_1:Not">
1113 <operand xsi:type="language_1:Distinct">
1114 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.38/@value/@quantifiedVariables.1"/>
1115 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.38/@value/@quantifiedVariables.2"/>
1116 </operand>
1117 </rightOperand>
1118 </expression>
1119 </value>
1120 </assertions>
1121 <assertions name="upperMultiplicity nsPrefix EPackage" annotations="//@annotations.39">
1122 <value xsi:type="language_1:Forall">
1123 <quantifiedVariables name="src">
1124 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.11"/>
1125 </quantifiedVariables>
1126 <quantifiedVariables name="trg 1">
1127 <range xsi:type="language_1:StringTypeReference"/>
1128 </quantifiedVariables>
1129 <quantifiedVariables name="trg 2">
1130 <range xsi:type="language_1:StringTypeReference"/>
1131 </quantifiedVariables>
1132 <expression xsi:type="language_1:Impl">
1133 <leftOperand xsi:type="language_1:And">
1134 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.57">
1135 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.39/@value/@quantifiedVariables.0"/>
1136 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.39/@value/@quantifiedVariables.1"/>
1137 </operands>
1138 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.57">
1139 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.39/@value/@quantifiedVariables.0"/>
1140 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.39/@value/@quantifiedVariables.2"/>
1141 </operands>
1142 </leftOperand>
1143 <rightOperand xsi:type="language_1:Not">
1144 <operand xsi:type="language_1:Distinct">
1145 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.39/@value/@quantifiedVariables.1"/>
1146 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.39/@value/@quantifiedVariables.2"/>
1147 </operand>
1148 </rightOperand>
1149 </expression>
1150 </value>
1151 </assertions>
1152 <assertions name="upperMultiplicity containment EReference" annotations="//@annotations.40">
1153 <value xsi:type="language_1:Forall">
1154 <quantifiedVariables name="src">
1155 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.13"/>
1156 </quantifiedVariables>
1157 <quantifiedVariables name="trg 1">
1158 <range xsi:type="language_1:BoolTypeReference"/>
1159 </quantifiedVariables>
1160 <quantifiedVariables name="trg 2">
1161 <range xsi:type="language_1:BoolTypeReference"/>
1162 </quantifiedVariables>
1163 <expression xsi:type="language_1:Impl">
1164 <leftOperand xsi:type="language_1:And">
1165 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.58">
1166 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.40/@value/@quantifiedVariables.0"/>
1167 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.40/@value/@quantifiedVariables.1"/>
1168 </operands>
1169 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.58">
1170 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.40/@value/@quantifiedVariables.0"/>
1171 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.40/@value/@quantifiedVariables.2"/>
1172 </operands>
1173 </leftOperand>
1174 <rightOperand xsi:type="language_1:Not">
1175 <operand xsi:type="language_1:Distinct">
1176 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.40/@value/@quantifiedVariables.1"/>
1177 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.40/@value/@quantifiedVariables.2"/>
1178 </operand>
1179 </rightOperand>
1180 </expression>
1181 </value>
1182 </assertions>
1183 <assertions name="upperMultiplicity container EReference" annotations="//@annotations.41">
1184 <value xsi:type="language_1:Forall">
1185 <quantifiedVariables name="src">
1186 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.13"/>
1187 </quantifiedVariables>
1188 <quantifiedVariables name="trg 1">
1189 <range xsi:type="language_1:BoolTypeReference"/>
1190 </quantifiedVariables>
1191 <quantifiedVariables name="trg 2">
1192 <range xsi:type="language_1:BoolTypeReference"/>
1193 </quantifiedVariables>
1194 <expression xsi:type="language_1:Impl">
1195 <leftOperand xsi:type="language_1:And">
1196 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.59">
1197 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.41/@value/@quantifiedVariables.0"/>
1198 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.41/@value/@quantifiedVariables.1"/>
1199 </operands>
1200 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.59">
1201 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.41/@value/@quantifiedVariables.0"/>
1202 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.41/@value/@quantifiedVariables.2"/>
1203 </operands>
1204 </leftOperand>
1205 <rightOperand xsi:type="language_1:Not">
1206 <operand xsi:type="language_1:Distinct">
1207 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.41/@value/@quantifiedVariables.1"/>
1208 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.41/@value/@quantifiedVariables.2"/>
1209 </operand>
1210 </rightOperand>
1211 </expression>
1212 </value>
1213 </assertions>
1214 <assertions name="upperMultiplicity resolveProxies EReference" annotations="//@annotations.42">
1215 <value xsi:type="language_1:Forall">
1216 <quantifiedVariables name="src">
1217 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.13"/>
1218 </quantifiedVariables>
1219 <quantifiedVariables name="trg 1">
1220 <range xsi:type="language_1:BoolTypeReference"/>
1221 </quantifiedVariables>
1222 <quantifiedVariables name="trg 2">
1223 <range xsi:type="language_1:BoolTypeReference"/>
1224 </quantifiedVariables>
1225 <expression xsi:type="language_1:Impl">
1226 <leftOperand xsi:type="language_1:And">
1227 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.60">
1228 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.42/@value/@quantifiedVariables.0"/>
1229 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.42/@value/@quantifiedVariables.1"/>
1230 </operands>
1231 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.60">
1232 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.42/@value/@quantifiedVariables.0"/>
1233 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.42/@value/@quantifiedVariables.2"/>
1234 </operands>
1235 </leftOperand>
1236 <rightOperand xsi:type="language_1:Not">
1237 <operand xsi:type="language_1:Distinct">
1238 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.42/@value/@quantifiedVariables.1"/>
1239 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.42/@value/@quantifiedVariables.2"/>
1240 </operand>
1241 </rightOperand>
1242 </expression>
1243 </value>
1244 </assertions>
1245 <assertions name="upperMultiplicity changeable EStructuralFeature" annotations="//@annotations.43">
1246 <value xsi:type="language_1:Forall">
1247 <quantifiedVariables name="src">
1248 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.14"/>
1249 </quantifiedVariables>
1250 <quantifiedVariables name="trg 1">
1251 <range xsi:type="language_1:BoolTypeReference"/>
1252 </quantifiedVariables>
1253 <quantifiedVariables name="trg 2">
1254 <range xsi:type="language_1:BoolTypeReference"/>
1255 </quantifiedVariables>
1256 <expression xsi:type="language_1:Impl">
1257 <leftOperand xsi:type="language_1:And">
1258 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.61">
1259 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.43/@value/@quantifiedVariables.0"/>
1260 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.43/@value/@quantifiedVariables.1"/>
1261 </operands>
1262 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.61">
1263 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.43/@value/@quantifiedVariables.0"/>
1264 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.43/@value/@quantifiedVariables.2"/>
1265 </operands>
1266 </leftOperand>
1267 <rightOperand xsi:type="language_1:Not">
1268 <operand xsi:type="language_1:Distinct">
1269 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.43/@value/@quantifiedVariables.1"/>
1270 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.43/@value/@quantifiedVariables.2"/>
1271 </operand>
1272 </rightOperand>
1273 </expression>
1274 </value>
1275 </assertions>
1276 <assertions name="upperMultiplicity volatile EStructuralFeature" annotations="//@annotations.44">
1277 <value xsi:type="language_1:Forall">
1278 <quantifiedVariables name="src">
1279 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.14"/>
1280 </quantifiedVariables>
1281 <quantifiedVariables name="trg 1">
1282 <range xsi:type="language_1:BoolTypeReference"/>
1283 </quantifiedVariables>
1284 <quantifiedVariables name="trg 2">
1285 <range xsi:type="language_1:BoolTypeReference"/>
1286 </quantifiedVariables>
1287 <expression xsi:type="language_1:Impl">
1288 <leftOperand xsi:type="language_1:And">
1289 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.62">
1290 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.44/@value/@quantifiedVariables.0"/>
1291 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.44/@value/@quantifiedVariables.1"/>
1292 </operands>
1293 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.62">
1294 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.44/@value/@quantifiedVariables.0"/>
1295 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.44/@value/@quantifiedVariables.2"/>
1296 </operands>
1297 </leftOperand>
1298 <rightOperand xsi:type="language_1:Not">
1299 <operand xsi:type="language_1:Distinct">
1300 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.44/@value/@quantifiedVariables.1"/>
1301 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.44/@value/@quantifiedVariables.2"/>
1302 </operand>
1303 </rightOperand>
1304 </expression>
1305 </value>
1306 </assertions>
1307 <assertions name="upperMultiplicity transient EStructuralFeature" annotations="//@annotations.45">
1308 <value xsi:type="language_1:Forall">
1309 <quantifiedVariables name="src">
1310 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.14"/>
1311 </quantifiedVariables>
1312 <quantifiedVariables name="trg 1">
1313 <range xsi:type="language_1:BoolTypeReference"/>
1314 </quantifiedVariables>
1315 <quantifiedVariables name="trg 2">
1316 <range xsi:type="language_1:BoolTypeReference"/>
1317 </quantifiedVariables>
1318 <expression xsi:type="language_1:Impl">
1319 <leftOperand xsi:type="language_1:And">
1320 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.63">
1321 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.45/@value/@quantifiedVariables.0"/>
1322 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.45/@value/@quantifiedVariables.1"/>
1323 </operands>
1324 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.63">
1325 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.45/@value/@quantifiedVariables.0"/>
1326 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.45/@value/@quantifiedVariables.2"/>
1327 </operands>
1328 </leftOperand>
1329 <rightOperand xsi:type="language_1:Not">
1330 <operand xsi:type="language_1:Distinct">
1331 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.45/@value/@quantifiedVariables.1"/>
1332 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.45/@value/@quantifiedVariables.2"/>
1333 </operand>
1334 </rightOperand>
1335 </expression>
1336 </value>
1337 </assertions>
1338 <assertions name="upperMultiplicity defaultValueLiteral EStructuralFeature" annotations="//@annotations.46">
1339 <value xsi:type="language_1:Forall">
1340 <quantifiedVariables name="src">
1341 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.14"/>
1342 </quantifiedVariables>
1343 <quantifiedVariables name="trg 1">
1344 <range xsi:type="language_1:StringTypeReference"/>
1345 </quantifiedVariables>
1346 <quantifiedVariables name="trg 2">
1347 <range xsi:type="language_1:StringTypeReference"/>
1348 </quantifiedVariables>
1349 <expression xsi:type="language_1:Impl">
1350 <leftOperand xsi:type="language_1:And">
1351 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.64">
1352 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.46/@value/@quantifiedVariables.0"/>
1353 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.46/@value/@quantifiedVariables.1"/>
1354 </operands>
1355 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.64">
1356 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.46/@value/@quantifiedVariables.0"/>
1357 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.46/@value/@quantifiedVariables.2"/>
1358 </operands>
1359 </leftOperand>
1360 <rightOperand xsi:type="language_1:Not">
1361 <operand xsi:type="language_1:Distinct">
1362 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.46/@value/@quantifiedVariables.1"/>
1363 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.46/@value/@quantifiedVariables.2"/>
1364 </operand>
1365 </rightOperand>
1366 </expression>
1367 </value>
1368 </assertions>
1369 <assertions name="upperMultiplicity unsettable EStructuralFeature" annotations="//@annotations.47">
1370 <value xsi:type="language_1:Forall">
1371 <quantifiedVariables name="src">
1372 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.14"/>
1373 </quantifiedVariables>
1374 <quantifiedVariables name="trg 1">
1375 <range xsi:type="language_1:BoolTypeReference"/>
1376 </quantifiedVariables>
1377 <quantifiedVariables name="trg 2">
1378 <range xsi:type="language_1:BoolTypeReference"/>
1379 </quantifiedVariables>
1380 <expression xsi:type="language_1:Impl">
1381 <leftOperand xsi:type="language_1:And">
1382 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.65">
1383 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.47/@value/@quantifiedVariables.0"/>
1384 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.47/@value/@quantifiedVariables.1"/>
1385 </operands>
1386 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.65">
1387 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.47/@value/@quantifiedVariables.0"/>
1388 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.47/@value/@quantifiedVariables.2"/>
1389 </operands>
1390 </leftOperand>
1391 <rightOperand xsi:type="language_1:Not">
1392 <operand xsi:type="language_1:Distinct">
1393 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.47/@value/@quantifiedVariables.1"/>
1394 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.47/@value/@quantifiedVariables.2"/>
1395 </operand>
1396 </rightOperand>
1397 </expression>
1398 </value>
1399 </assertions>
1400 <assertions name="upperMultiplicity derived EStructuralFeature" annotations="//@annotations.48">
1401 <value xsi:type="language_1:Forall">
1402 <quantifiedVariables name="src">
1403 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.14"/>
1404 </quantifiedVariables>
1405 <quantifiedVariables name="trg 1">
1406 <range xsi:type="language_1:BoolTypeReference"/>
1407 </quantifiedVariables>
1408 <quantifiedVariables name="trg 2">
1409 <range xsi:type="language_1:BoolTypeReference"/>
1410 </quantifiedVariables>
1411 <expression xsi:type="language_1:Impl">
1412 <leftOperand xsi:type="language_1:And">
1413 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.66">
1414 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.48/@value/@quantifiedVariables.0"/>
1415 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.48/@value/@quantifiedVariables.1"/>
1416 </operands>
1417 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.66">
1418 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.48/@value/@quantifiedVariables.0"/>
1419 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.48/@value/@quantifiedVariables.2"/>
1420 </operands>
1421 </leftOperand>
1422 <rightOperand xsi:type="language_1:Not">
1423 <operand xsi:type="language_1:Distinct">
1424 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.48/@value/@quantifiedVariables.1"/>
1425 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.48/@value/@quantifiedVariables.2"/>
1426 </operand>
1427 </rightOperand>
1428 </expression>
1429 </value>
1430 </assertions>
1431 <assertions name="upperMultiplicity ordered ETypedElement" annotations="//@annotations.49">
1432 <value xsi:type="language_1:Forall">
1433 <quantifiedVariables name="src">
1434 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.15"/>
1435 </quantifiedVariables>
1436 <quantifiedVariables name="trg 1">
1437 <range xsi:type="language_1:BoolTypeReference"/>
1438 </quantifiedVariables>
1439 <quantifiedVariables name="trg 2">
1440 <range xsi:type="language_1:BoolTypeReference"/>
1441 </quantifiedVariables>
1442 <expression xsi:type="language_1:Impl">
1443 <leftOperand xsi:type="language_1:And">
1444 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.67">
1445 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.49/@value/@quantifiedVariables.0"/>
1446 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.49/@value/@quantifiedVariables.1"/>
1447 </operands>
1448 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.67">
1449 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.49/@value/@quantifiedVariables.0"/>
1450 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.49/@value/@quantifiedVariables.2"/>
1451 </operands>
1452 </leftOperand>
1453 <rightOperand xsi:type="language_1:Not">
1454 <operand xsi:type="language_1:Distinct">
1455 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.49/@value/@quantifiedVariables.1"/>
1456 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.49/@value/@quantifiedVariables.2"/>
1457 </operand>
1458 </rightOperand>
1459 </expression>
1460 </value>
1461 </assertions>
1462 <assertions name="upperMultiplicity unique ETypedElement" annotations="//@annotations.50">
1463 <value xsi:type="language_1:Forall">
1464 <quantifiedVariables name="src">
1465 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.15"/>
1466 </quantifiedVariables>
1467 <quantifiedVariables name="trg 1">
1468 <range xsi:type="language_1:BoolTypeReference"/>
1469 </quantifiedVariables>
1470 <quantifiedVariables name="trg 2">
1471 <range xsi:type="language_1:BoolTypeReference"/>
1472 </quantifiedVariables>
1473 <expression xsi:type="language_1:Impl">
1474 <leftOperand xsi:type="language_1:And">
1475 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.68">
1476 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.50/@value/@quantifiedVariables.0"/>
1477 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.50/@value/@quantifiedVariables.1"/>
1478 </operands>
1479 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.68">
1480 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.50/@value/@quantifiedVariables.0"/>
1481 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.50/@value/@quantifiedVariables.2"/>
1482 </operands>
1483 </leftOperand>
1484 <rightOperand xsi:type="language_1:Not">
1485 <operand xsi:type="language_1:Distinct">
1486 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.50/@value/@quantifiedVariables.1"/>
1487 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.50/@value/@quantifiedVariables.2"/>
1488 </operand>
1489 </rightOperand>
1490 </expression>
1491 </value>
1492 </assertions>
1493 <assertions name="upperMultiplicity lowerBound ETypedElement" annotations="//@annotations.51">
1494 <value xsi:type="language_1:Forall">
1495 <quantifiedVariables name="src">
1496 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.15"/>
1497 </quantifiedVariables>
1498 <quantifiedVariables name="trg 1">
1499 <range xsi:type="language_1:IntTypeReference"/>
1500 </quantifiedVariables>
1501 <quantifiedVariables name="trg 2">
1502 <range xsi:type="language_1:IntTypeReference"/>
1503 </quantifiedVariables>
1504 <expression xsi:type="language_1:Impl">
1505 <leftOperand xsi:type="language_1:And">
1506 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.69">
1507 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.51/@value/@quantifiedVariables.0"/>
1508 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.51/@value/@quantifiedVariables.1"/>
1509 </operands>
1510 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.69">
1511 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.51/@value/@quantifiedVariables.0"/>
1512 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.51/@value/@quantifiedVariables.2"/>
1513 </operands>
1514 </leftOperand>
1515 <rightOperand xsi:type="language_1:Not">
1516 <operand xsi:type="language_1:Distinct">
1517 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.51/@value/@quantifiedVariables.1"/>
1518 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.51/@value/@quantifiedVariables.2"/>
1519 </operand>
1520 </rightOperand>
1521 </expression>
1522 </value>
1523 </assertions>
1524 <assertions name="upperMultiplicity upperBound ETypedElement" annotations="//@annotations.52">
1525 <value xsi:type="language_1:Forall">
1526 <quantifiedVariables name="src">
1527 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.15"/>
1528 </quantifiedVariables>
1529 <quantifiedVariables name="trg 1">
1530 <range xsi:type="language_1:IntTypeReference"/>
1531 </quantifiedVariables>
1532 <quantifiedVariables name="trg 2">
1533 <range xsi:type="language_1:IntTypeReference"/>
1534 </quantifiedVariables>
1535 <expression xsi:type="language_1:Impl">
1536 <leftOperand xsi:type="language_1:And">
1537 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.70">
1538 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.52/@value/@quantifiedVariables.0"/>
1539 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.52/@value/@quantifiedVariables.1"/>
1540 </operands>
1541 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.70">
1542 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.52/@value/@quantifiedVariables.0"/>
1543 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.52/@value/@quantifiedVariables.2"/>
1544 </operands>
1545 </leftOperand>
1546 <rightOperand xsi:type="language_1:Not">
1547 <operand xsi:type="language_1:Distinct">
1548 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.52/@value/@quantifiedVariables.1"/>
1549 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.52/@value/@quantifiedVariables.2"/>
1550 </operand>
1551 </rightOperand>
1552 </expression>
1553 </value>
1554 </assertions>
1555 <assertions name="upperMultiplicity many ETypedElement" annotations="//@annotations.53">
1556 <value xsi:type="language_1:Forall">
1557 <quantifiedVariables name="src">
1558 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.15"/>
1559 </quantifiedVariables>
1560 <quantifiedVariables name="trg 1">
1561 <range xsi:type="language_1:BoolTypeReference"/>
1562 </quantifiedVariables>
1563 <quantifiedVariables name="trg 2">
1564 <range xsi:type="language_1:BoolTypeReference"/>
1565 </quantifiedVariables>
1566 <expression xsi:type="language_1:Impl">
1567 <leftOperand xsi:type="language_1:And">
1568 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.71">
1569 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.53/@value/@quantifiedVariables.0"/>
1570 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.53/@value/@quantifiedVariables.1"/>
1571 </operands>
1572 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.71">
1573 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.53/@value/@quantifiedVariables.0"/>
1574 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.53/@value/@quantifiedVariables.2"/>
1575 </operands>
1576 </leftOperand>
1577 <rightOperand xsi:type="language_1:Not">
1578 <operand xsi:type="language_1:Distinct">
1579 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.53/@value/@quantifiedVariables.1"/>
1580 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.53/@value/@quantifiedVariables.2"/>
1581 </operand>
1582 </rightOperand>
1583 </expression>
1584 </value>
1585 </assertions>
1586 <assertions name="upperMultiplicity required ETypedElement" annotations="//@annotations.54">
1587 <value xsi:type="language_1:Forall">
1588 <quantifiedVariables name="src">
1589 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.15"/>
1590 </quantifiedVariables>
1591 <quantifiedVariables name="trg 1">
1592 <range xsi:type="language_1:BoolTypeReference"/>
1593 </quantifiedVariables>
1594 <quantifiedVariables name="trg 2">
1595 <range xsi:type="language_1:BoolTypeReference"/>
1596 </quantifiedVariables>
1597 <expression xsi:type="language_1:Impl">
1598 <leftOperand xsi:type="language_1:And">
1599 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.72">
1600 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.54/@value/@quantifiedVariables.0"/>
1601 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.54/@value/@quantifiedVariables.1"/>
1602 </operands>
1603 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.72">
1604 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.54/@value/@quantifiedVariables.0"/>
1605 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.54/@value/@quantifiedVariables.2"/>
1606 </operands>
1607 </leftOperand>
1608 <rightOperand xsi:type="language_1:Not">
1609 <operand xsi:type="language_1:Distinct">
1610 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.54/@value/@quantifiedVariables.1"/>
1611 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.54/@value/@quantifiedVariables.2"/>
1612 </operand>
1613 </rightOperand>
1614 </expression>
1615 </value>
1616 </assertions>
1617 <assertions name="upperMultiplicity key EStringToStringMapEntry" annotations="//@annotations.55">
1618 <value xsi:type="language_1:Forall">
1619 <quantifiedVariables name="src">
1620 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.16"/>
1621 </quantifiedVariables>
1622 <quantifiedVariables name="trg 1">
1623 <range xsi:type="language_1:StringTypeReference"/>
1624 </quantifiedVariables>
1625 <quantifiedVariables name="trg 2">
1626 <range xsi:type="language_1:StringTypeReference"/>
1627 </quantifiedVariables>
1628 <expression xsi:type="language_1:Impl">
1629 <leftOperand xsi:type="language_1:And">
1630 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.73">
1631 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.55/@value/@quantifiedVariables.0"/>
1632 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.55/@value/@quantifiedVariables.1"/>
1633 </operands>
1634 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.73">
1635 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.55/@value/@quantifiedVariables.0"/>
1636 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.55/@value/@quantifiedVariables.2"/>
1637 </operands>
1638 </leftOperand>
1639 <rightOperand xsi:type="language_1:Not">
1640 <operand xsi:type="language_1:Distinct">
1641 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.55/@value/@quantifiedVariables.1"/>
1642 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.55/@value/@quantifiedVariables.2"/>
1643 </operand>
1644 </rightOperand>
1645 </expression>
1646 </value>
1647 </assertions>
1648 <assertions name="upperMultiplicity value EStringToStringMapEntry" annotations="//@annotations.56">
1649 <value xsi:type="language_1:Forall">
1650 <quantifiedVariables name="src">
1651 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.16"/>
1652 </quantifiedVariables>
1653 <quantifiedVariables name="trg 1">
1654 <range xsi:type="language_1:StringTypeReference"/>
1655 </quantifiedVariables>
1656 <quantifiedVariables name="trg 2">
1657 <range xsi:type="language_1:StringTypeReference"/>
1658 </quantifiedVariables>
1659 <expression xsi:type="language_1:Impl">
1660 <leftOperand xsi:type="language_1:And">
1661 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.74">
1662 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.56/@value/@quantifiedVariables.0"/>
1663 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.56/@value/@quantifiedVariables.1"/>
1664 </operands>
1665 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.74">
1666 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.56/@value/@quantifiedVariables.0"/>
1667 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.56/@value/@quantifiedVariables.2"/>
1668 </operands>
1669 </leftOperand>
1670 <rightOperand xsi:type="language_1:Not">
1671 <operand xsi:type="language_1:Distinct">
1672 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.56/@value/@quantifiedVariables.1"/>
1673 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.56/@value/@quantifiedVariables.2"/>
1674 </operand>
1675 </rightOperand>
1676 </expression>
1677 </value>
1678 </assertions>
1679 <assertions name="PartialInterpretation name attribute ENamedElement" annotations="//@annotations.57">
1680 <value xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.55">
1681 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@elements.0"/>
1682 <parameterSubstitutions xsi:type="language_1:StringLiteral" value="packageName"/>
1683 </value>
1684 </assertions>
1685 <assertions name="PartialInterpretation nsURI attribute EPackage" annotations="//@annotations.58">
1686 <value xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.56">
1687 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@elements.0"/>
1688 <parameterSubstitutions xsi:type="language_1:StringLiteral" value="nsUri"/>
1689 </value>
1690 </assertions>
1691 <assertions name="PartialInterpretation nsPrefix attribute EPackage" annotations="//@annotations.59">
1692 <value xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.57">
1693 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@elements.0"/>
1694 <parameterSubstitutions xsi:type="language_1:StringLiteral" value="nsPrefix"/>
1695 </value>
1696 </assertions>
1697 <relations xsi:type="language_1:RelationDeclaration" name="eAttributeType reference EAttribute">
1698 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.0"/>
1699 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.4"/>
1700 </relations>
1701 <relations xsi:type="language_1:RelationDeclaration" name="details reference EAnnotation">
1702 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.1"/>
1703 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.16"/>
1704 </relations>
1705 <relations xsi:type="language_1:RelationDeclaration" name="eModelElement reference EAnnotation">
1706 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.1"/>
1707 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.7"/>
1708 </relations>
1709 <relations xsi:type="language_1:RelationDeclaration" name="contents reference EAnnotation">
1710 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.1"/>
1711 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.9"/>
1712 </relations>
1713 <relations xsi:type="language_1:RelationDeclaration" name="references reference EAnnotation">
1714 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.1"/>
1715 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.9"/>
1716 </relations>
1717 <relations xsi:type="language_1:RelationDeclaration" name="eSuperTypes reference EClass">
1718 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.2"/>
1719 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.2"/>
1720 </relations>
1721 <relations xsi:type="language_1:RelationDeclaration" name="eOperations reference EClass">
1722 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.2"/>
1723 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.10"/>
1724 </relations>
1725 <relations xsi:type="language_1:RelationDeclaration" name="eAllAttributes reference EClass">
1726 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.2"/>
1727 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.0"/>
1728 </relations>
1729 <relations xsi:type="language_1:RelationDeclaration" name="eAllReferences reference EClass">
1730 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.2"/>
1731 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.13"/>
1732 </relations>
1733 <relations xsi:type="language_1:RelationDeclaration" name="eReferences reference EClass">
1734 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.2"/>
1735 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.13"/>
1736 </relations>
1737 <relations xsi:type="language_1:RelationDeclaration" name="eAttributes reference EClass">
1738 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.2"/>
1739 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.0"/>
1740 </relations>
1741 <relations xsi:type="language_1:RelationDeclaration" name="eAllContainments reference EClass">
1742 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.2"/>
1743 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.13"/>
1744 </relations>
1745 <relations xsi:type="language_1:RelationDeclaration" name="eAllOperations reference EClass">
1746 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.2"/>
1747 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.10"/>
1748 </relations>
1749 <relations xsi:type="language_1:RelationDeclaration" name="eAllStructuralFeatures reference EClass">
1750 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.2"/>
1751 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.14"/>
1752 </relations>
1753 <relations xsi:type="language_1:RelationDeclaration" name="eAllSuperTypes reference EClass">
1754 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.2"/>
1755 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.2"/>
1756 </relations>
1757 <relations xsi:type="language_1:RelationDeclaration" name="eIDAttribute reference EClass">
1758 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.2"/>
1759 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.0"/>
1760 </relations>
1761 <relations xsi:type="language_1:RelationDeclaration" name="eStructuralFeatures reference EClass">
1762 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.2"/>
1763 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.14"/>
1764 </relations>
1765 <relations xsi:type="language_1:RelationDeclaration" name="eGenericSuperTypes reference EClass">
1766 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.2"/>
1767 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.17"/>
1768 </relations>
1769 <relations xsi:type="language_1:RelationDeclaration" name="eAllGenericSuperTypes reference EClass">
1770 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.2"/>
1771 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.17"/>
1772 </relations>
1773 <relations xsi:type="language_1:RelationDeclaration" name="ePackage reference EClassifier">
1774 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.3"/>
1775 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.11"/>
1776 </relations>
1777 <relations xsi:type="language_1:RelationDeclaration" name="eTypeParameters reference EClassifier">
1778 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.3"/>
1779 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.18"/>
1780 </relations>
1781 <relations xsi:type="language_1:RelationDeclaration" name="eLiterals reference EEnum">
1782 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.5"/>
1783 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.6"/>
1784 </relations>
1785 <relations xsi:type="language_1:RelationDeclaration" name="eEnum reference EEnumLiteral">
1786 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.6"/>
1787 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.5"/>
1788 </relations>
1789 <relations xsi:type="language_1:RelationDeclaration" name="eAnnotations reference EModelElement">
1790 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.7"/>
1791 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.1"/>
1792 </relations>
1793 <relations xsi:type="language_1:RelationDeclaration" name="eContainingClass reference EOperation">
1794 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.10"/>
1795 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.2"/>
1796 </relations>
1797 <relations xsi:type="language_1:RelationDeclaration" name="eTypeParameters reference EOperation">
1798 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.10"/>
1799 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.18"/>
1800 </relations>
1801 <relations xsi:type="language_1:RelationDeclaration" name="eParameters reference EOperation">
1802 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.10"/>
1803 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.12"/>
1804 </relations>
1805 <relations xsi:type="language_1:RelationDeclaration" name="eExceptions reference EOperation">
1806 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.10"/>
1807 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.3"/>
1808 </relations>
1809 <relations xsi:type="language_1:RelationDeclaration" name="eGenericExceptions reference EOperation">
1810 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.10"/>
1811 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.17"/>
1812 </relations>
1813 <relations xsi:type="language_1:RelationDeclaration" name="eClassifiers reference EPackage">
1814 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.11"/>
1815 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.3"/>
1816 </relations>
1817 <relations xsi:type="language_1:RelationDeclaration" name="eSubpackages reference EPackage">
1818 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.11"/>
1819 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.11"/>
1820 </relations>
1821 <relations xsi:type="language_1:RelationDeclaration" name="eSuperPackage reference EPackage">
1822 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.11"/>
1823 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.11"/>
1824 </relations>
1825 <relations xsi:type="language_1:RelationDeclaration" name="eOperation reference EParameter">
1826 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.12"/>
1827 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.10"/>
1828 </relations>
1829 <relations xsi:type="language_1:RelationDeclaration" name="eOpposite reference EReference">
1830 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.13"/>
1831 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.13"/>
1832 </relations>
1833 <relations xsi:type="language_1:RelationDeclaration" name="eReferenceType reference EReference">
1834 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.13"/>
1835 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.2"/>
1836 </relations>
1837 <relations xsi:type="language_1:RelationDeclaration" name="eKeys reference EReference">
1838 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.13"/>
1839 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.0"/>
1840 </relations>
1841 <relations xsi:type="language_1:RelationDeclaration" name="eContainingClass reference EStructuralFeature">
1842 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.14"/>
1843 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.2"/>
1844 </relations>
1845 <relations xsi:type="language_1:RelationDeclaration" name="eType reference ETypedElement">
1846 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.15"/>
1847 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.3"/>
1848 </relations>
1849 <relations xsi:type="language_1:RelationDeclaration" name="eGenericType reference ETypedElement">
1850 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.15"/>
1851 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.17"/>
1852 </relations>
1853 <relations xsi:type="language_1:RelationDeclaration" name="eUpperBound reference EGenericType">
1854 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.17"/>
1855 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.17"/>
1856 </relations>
1857 <relations xsi:type="language_1:RelationDeclaration" name="eTypeArguments reference EGenericType">
1858 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.17"/>
1859 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.17"/>
1860 </relations>
1861 <relations xsi:type="language_1:RelationDeclaration" name="eRawType reference EGenericType">
1862 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.17"/>
1863 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.3"/>
1864 </relations>
1865 <relations xsi:type="language_1:RelationDeclaration" name="eLowerBound reference EGenericType">
1866 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.17"/>
1867 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.17"/>
1868 </relations>
1869 <relations xsi:type="language_1:RelationDeclaration" name="eTypeParameter reference EGenericType">
1870 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.17"/>
1871 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.18"/>
1872 </relations>
1873 <relations xsi:type="language_1:RelationDeclaration" name="eClassifier reference EGenericType">
1874 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.17"/>
1875 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.3"/>
1876 </relations>
1877 <relations xsi:type="language_1:RelationDeclaration" name="eBounds reference ETypeParameter">
1878 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.18"/>
1879 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.17"/>
1880 </relations>
1881 <relations xsi:type="language_1:RelationDeclaration" name="iD attribute EAttribute">
1882 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.0"/>
1883 <parameters xsi:type="language_1:BoolTypeReference"/>
1884 </relations>
1885 <relations xsi:type="language_1:RelationDeclaration" name="source attribute EAnnotation">
1886 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.1"/>
1887 <parameters xsi:type="language_1:StringTypeReference"/>
1888 </relations>
1889 <relations xsi:type="language_1:RelationDeclaration" name="abstract attribute EClass">
1890 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.2"/>
1891 <parameters xsi:type="language_1:BoolTypeReference"/>
1892 </relations>
1893 <relations xsi:type="language_1:RelationDeclaration" name="interface attribute EClass">
1894 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.2"/>
1895 <parameters xsi:type="language_1:BoolTypeReference"/>
1896 </relations>
1897 <relations xsi:type="language_1:RelationDeclaration" name="instanceClassName attribute EClassifier">
1898 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.3"/>
1899 <parameters xsi:type="language_1:StringTypeReference"/>
1900 </relations>
1901 <relations xsi:type="language_1:RelationDeclaration" name="instanceTypeName attribute EClassifier">
1902 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.3"/>
1903 <parameters xsi:type="language_1:StringTypeReference"/>
1904 </relations>
1905 <relations xsi:type="language_1:RelationDeclaration" name="serializable attribute EDataType">
1906 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.4"/>
1907 <parameters xsi:type="language_1:BoolTypeReference"/>
1908 </relations>
1909 <relations xsi:type="language_1:RelationDeclaration" name="value attribute EEnumLiteral">
1910 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.6"/>
1911 <parameters xsi:type="language_1:IntTypeReference"/>
1912 </relations>
1913 <relations xsi:type="language_1:RelationDeclaration" name="literal attribute EEnumLiteral">
1914 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.6"/>
1915 <parameters xsi:type="language_1:StringTypeReference"/>
1916 </relations>
1917 <relations xsi:type="language_1:RelationDeclaration" name="name attribute ENamedElement">
1918 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.8"/>
1919 <parameters xsi:type="language_1:StringTypeReference"/>
1920 </relations>
1921 <relations xsi:type="language_1:RelationDeclaration" name="nsURI attribute EPackage">
1922 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.11"/>
1923 <parameters xsi:type="language_1:StringTypeReference"/>
1924 </relations>
1925 <relations xsi:type="language_1:RelationDeclaration" name="nsPrefix attribute EPackage">
1926 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.11"/>
1927 <parameters xsi:type="language_1:StringTypeReference"/>
1928 </relations>
1929 <relations xsi:type="language_1:RelationDeclaration" name="containment attribute EReference">
1930 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.13"/>
1931 <parameters xsi:type="language_1:BoolTypeReference"/>
1932 </relations>
1933 <relations xsi:type="language_1:RelationDeclaration" name="container attribute EReference">
1934 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.13"/>
1935 <parameters xsi:type="language_1:BoolTypeReference"/>
1936 </relations>
1937 <relations xsi:type="language_1:RelationDeclaration" name="resolveProxies attribute EReference">
1938 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.13"/>
1939 <parameters xsi:type="language_1:BoolTypeReference"/>
1940 </relations>
1941 <relations xsi:type="language_1:RelationDeclaration" name="changeable attribute EStructuralFeature">
1942 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.14"/>
1943 <parameters xsi:type="language_1:BoolTypeReference"/>
1944 </relations>
1945 <relations xsi:type="language_1:RelationDeclaration" name="volatile attribute EStructuralFeature">
1946 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.14"/>
1947 <parameters xsi:type="language_1:BoolTypeReference"/>
1948 </relations>
1949 <relations xsi:type="language_1:RelationDeclaration" name="transient attribute EStructuralFeature">
1950 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.14"/>
1951 <parameters xsi:type="language_1:BoolTypeReference"/>
1952 </relations>
1953 <relations xsi:type="language_1:RelationDeclaration" name="defaultValueLiteral attribute EStructuralFeature">
1954 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.14"/>
1955 <parameters xsi:type="language_1:StringTypeReference"/>
1956 </relations>
1957 <relations xsi:type="language_1:RelationDeclaration" name="unsettable attribute EStructuralFeature">
1958 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.14"/>
1959 <parameters xsi:type="language_1:BoolTypeReference"/>
1960 </relations>
1961 <relations xsi:type="language_1:RelationDeclaration" name="derived attribute EStructuralFeature">
1962 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.14"/>
1963 <parameters xsi:type="language_1:BoolTypeReference"/>
1964 </relations>
1965 <relations xsi:type="language_1:RelationDeclaration" name="ordered attribute ETypedElement">
1966 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.15"/>
1967 <parameters xsi:type="language_1:BoolTypeReference"/>
1968 </relations>
1969 <relations xsi:type="language_1:RelationDeclaration" name="unique attribute ETypedElement">
1970 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.15"/>
1971 <parameters xsi:type="language_1:BoolTypeReference"/>
1972 </relations>
1973 <relations xsi:type="language_1:RelationDeclaration" name="lowerBound attribute ETypedElement">
1974 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.15"/>
1975 <parameters xsi:type="language_1:IntTypeReference"/>
1976 </relations>
1977 <relations xsi:type="language_1:RelationDeclaration" name="upperBound attribute ETypedElement">
1978 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.15"/>
1979 <parameters xsi:type="language_1:IntTypeReference"/>
1980 </relations>
1981 <relations xsi:type="language_1:RelationDeclaration" name="many attribute ETypedElement">
1982 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.15"/>
1983 <parameters xsi:type="language_1:BoolTypeReference"/>
1984 </relations>
1985 <relations xsi:type="language_1:RelationDeclaration" name="required attribute ETypedElement">
1986 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.15"/>
1987 <parameters xsi:type="language_1:BoolTypeReference"/>
1988 </relations>
1989 <relations xsi:type="language_1:RelationDeclaration" name="key attribute EStringToStringMapEntry">
1990 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.16"/>
1991 <parameters xsi:type="language_1:StringTypeReference"/>
1992 </relations>
1993 <relations xsi:type="language_1:RelationDeclaration" name="value attribute EStringToStringMapEntry">
1994 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.16"/>
1995 <parameters xsi:type="language_1:StringTypeReference"/>
1996 </relations>
1997 <elements name="o 1" definedInType="//@types.19 //@types.21 //@types.23"/>
1998 <containmentHierarchies typesOrderedInHierarchy="//@types.7 //@types.5 //@types.0 //@types.9 //@types.2 //@types.3 //@types.6 //@types.11 //@types.10 //@types.16 //@types.13 //@types.1 //@types.15 //@types.14 //@types.4 //@types.12 //@types.8 //@types.17 //@types.18 //@types.19 //@types.20 //@types.21 //@types.22 //@types.23 //@types.24" containmentRelations="//@relations.1 //@relations.3 //@relations.6 //@relations.16 //@relations.17 //@relations.20 //@relations.21 //@relations.23 //@relations.25 //@relations.26 //@relations.28 //@relations.29 //@relations.30 //@relations.38 //@relations.39 //@relations.40 //@relations.42 //@relations.45"/>
1999 <annotations xsi:type="ecore2logicannotations:LowerMultiplicityAssertion" target="//@assertions.0" relation="//@relations.0" lower="1"/>
2000 <annotations xsi:type="ecore2logicannotations:UpperMultiplicityAssertion" target="//@assertions.1" relation="//@relations.0" upper="1"/>
2001 <annotations xsi:type="ecore2logicannotations:UpperMultiplicityAssertion" target="//@assertions.2" relation="//@relations.2" upper="1"/>
2002 <annotations xsi:type="ecore2logicannotations:UpperMultiplicityAssertion" target="//@assertions.3" relation="//@relations.15" upper="1"/>
2003 <annotations xsi:type="ecore2logicannotations:UpperMultiplicityAssertion" target="//@assertions.4" relation="//@relations.19" upper="1"/>
2004 <annotations xsi:type="ecore2logicannotations:UpperMultiplicityAssertion" target="//@assertions.5" relation="//@relations.22" upper="1"/>
2005 <annotations xsi:type="ecore2logicannotations:UpperMultiplicityAssertion" target="//@assertions.6" relation="//@relations.24" upper="1"/>
2006 <annotations xsi:type="ecore2logicannotations:UpperMultiplicityAssertion" target="//@assertions.7" relation="//@relations.31" upper="1"/>
2007 <annotations xsi:type="ecore2logicannotations:UpperMultiplicityAssertion" target="//@assertions.8" relation="//@relations.32" upper="1"/>
2008 <annotations xsi:type="ecore2logicannotations:UpperMultiplicityAssertion" target="//@assertions.9" relation="//@relations.33" upper="1"/>
2009 <annotations xsi:type="ecore2logicannotations:LowerMultiplicityAssertion" target="//@assertions.10" relation="//@relations.34" lower="1"/>
2010 <annotations xsi:type="ecore2logicannotations:UpperMultiplicityAssertion" target="//@assertions.11" relation="//@relations.34" upper="1"/>
2011 <annotations xsi:type="ecore2logicannotations:UpperMultiplicityAssertion" target="//@assertions.12" relation="//@relations.36" upper="1"/>
2012 <annotations xsi:type="ecore2logicannotations:UpperMultiplicityAssertion" target="//@assertions.13" relation="//@relations.37" upper="1"/>
2013 <annotations xsi:type="ecore2logicannotations:UpperMultiplicityAssertion" target="//@assertions.14" relation="//@relations.38" upper="1"/>
2014 <annotations xsi:type="ecore2logicannotations:UpperMultiplicityAssertion" target="//@assertions.15" relation="//@relations.39" upper="1"/>
2015 <annotations xsi:type="ecore2logicannotations:LowerMultiplicityAssertion" target="//@assertions.16" relation="//@relations.41" lower="1"/>
2016 <annotations xsi:type="ecore2logicannotations:UpperMultiplicityAssertion" target="//@assertions.17" relation="//@relations.41" upper="1"/>
2017 <annotations xsi:type="ecore2logicannotations:UpperMultiplicityAssertion" target="//@assertions.18" relation="//@relations.42" upper="1"/>
2018 <annotations xsi:type="ecore2logicannotations:UpperMultiplicityAssertion" target="//@assertions.19" relation="//@relations.43" upper="1"/>
2019 <annotations xsi:type="ecore2logicannotations:UpperMultiplicityAssertion" target="//@assertions.20" relation="//@relations.44" upper="1"/>
2020 <annotations xsi:type="ecore2logicannotations:InverseRelationAssertion" target="//@assertions.21" inverseA="//@relations.2" inverseB="//@relations.23"/>
2021 <annotations xsi:type="ecore2logicannotations:InverseRelationAssertion" target="//@assertions.22" inverseA="//@relations.6" inverseB="//@relations.24"/>
2022 <annotations xsi:type="ecore2logicannotations:InverseRelationAssertion" target="//@assertions.23" inverseA="//@relations.16" inverseB="//@relations.36"/>
2023 <annotations xsi:type="ecore2logicannotations:InverseRelationAssertion" target="//@assertions.24" inverseA="//@relations.19" inverseB="//@relations.29"/>
2024 <annotations xsi:type="ecore2logicannotations:InverseRelationAssertion" target="//@assertions.25" inverseA="//@relations.21" inverseB="//@relations.22"/>
2025 <annotations xsi:type="ecore2logicannotations:InverseRelationAssertion" target="//@assertions.26" inverseA="//@relations.26" inverseB="//@relations.32"/>
2026 <annotations xsi:type="ecore2logicannotations:InverseRelationAssertion" target="//@assertions.27" inverseA="//@relations.30" inverseB="//@relations.31"/>
2027 <annotations xsi:type="ecore2logicannotations:UpperMultiplicityAssertion" target="//@assertions.28" relation="//@relations.46" upper="1"/>
2028 <annotations xsi:type="ecore2logicannotations:UpperMultiplicityAssertion" target="//@assertions.29" relation="//@relations.47" upper="1"/>
2029 <annotations xsi:type="ecore2logicannotations:UpperMultiplicityAssertion" target="//@assertions.30" relation="//@relations.48" upper="1"/>
2030 <annotations xsi:type="ecore2logicannotations:UpperMultiplicityAssertion" target="//@assertions.31" relation="//@relations.49" upper="1"/>
2031 <annotations xsi:type="ecore2logicannotations:UpperMultiplicityAssertion" target="//@assertions.32" relation="//@relations.50" upper="1"/>
2032 <annotations xsi:type="ecore2logicannotations:UpperMultiplicityAssertion" target="//@assertions.33" relation="//@relations.51" upper="1"/>
2033 <annotations xsi:type="ecore2logicannotations:UpperMultiplicityAssertion" target="//@assertions.34" relation="//@relations.52" upper="1"/>
2034 <annotations xsi:type="ecore2logicannotations:UpperMultiplicityAssertion" target="//@assertions.35" relation="//@relations.53" upper="1"/>
2035 <annotations xsi:type="ecore2logicannotations:UpperMultiplicityAssertion" target="//@assertions.36" relation="//@relations.54" upper="1"/>
2036 <annotations xsi:type="ecore2logicannotations:UpperMultiplicityAssertion" target="//@assertions.37" relation="//@relations.55" upper="1"/>
2037 <annotations xsi:type="ecore2logicannotations:UpperMultiplicityAssertion" target="//@assertions.38" relation="//@relations.56" upper="1"/>
2038 <annotations xsi:type="ecore2logicannotations:UpperMultiplicityAssertion" target="//@assertions.39" relation="//@relations.57" upper="1"/>
2039 <annotations xsi:type="ecore2logicannotations:UpperMultiplicityAssertion" target="//@assertions.40" relation="//@relations.58" upper="1"/>
2040 <annotations xsi:type="ecore2logicannotations:UpperMultiplicityAssertion" target="//@assertions.41" relation="//@relations.59" upper="1"/>
2041 <annotations xsi:type="ecore2logicannotations:UpperMultiplicityAssertion" target="//@assertions.42" relation="//@relations.60" upper="1"/>
2042 <annotations xsi:type="ecore2logicannotations:UpperMultiplicityAssertion" target="//@assertions.43" relation="//@relations.61" upper="1"/>
2043 <annotations xsi:type="ecore2logicannotations:UpperMultiplicityAssertion" target="//@assertions.44" relation="//@relations.62" upper="1"/>
2044 <annotations xsi:type="ecore2logicannotations:UpperMultiplicityAssertion" target="//@assertions.45" relation="//@relations.63" upper="1"/>
2045 <annotations xsi:type="ecore2logicannotations:UpperMultiplicityAssertion" target="//@assertions.46" relation="//@relations.64" upper="1"/>
2046 <annotations xsi:type="ecore2logicannotations:UpperMultiplicityAssertion" target="//@assertions.47" relation="//@relations.65" upper="1"/>
2047 <annotations xsi:type="ecore2logicannotations:UpperMultiplicityAssertion" target="//@assertions.48" relation="//@relations.66" upper="1"/>
2048 <annotations xsi:type="ecore2logicannotations:UpperMultiplicityAssertion" target="//@assertions.49" relation="//@relations.67" upper="1"/>
2049 <annotations xsi:type="ecore2logicannotations:UpperMultiplicityAssertion" target="//@assertions.50" relation="//@relations.68" upper="1"/>
2050 <annotations xsi:type="ecore2logicannotations:UpperMultiplicityAssertion" target="//@assertions.51" relation="//@relations.69" upper="1"/>
2051 <annotations xsi:type="ecore2logicannotations:UpperMultiplicityAssertion" target="//@assertions.52" relation="//@relations.70" upper="1"/>
2052 <annotations xsi:type="ecore2logicannotations:UpperMultiplicityAssertion" target="//@assertions.53" relation="//@relations.71" upper="1"/>
2053 <annotations xsi:type="ecore2logicannotations:UpperMultiplicityAssertion" target="//@assertions.54" relation="//@relations.72" upper="1"/>
2054 <annotations xsi:type="ecore2logicannotations:UpperMultiplicityAssertion" target="//@assertions.55" relation="//@relations.73" upper="1"/>
2055 <annotations xsi:type="ecore2logicannotations:UpperMultiplicityAssertion" target="//@assertions.56" relation="//@relations.74" upper="1"/>
2056 <annotations xsi:type="partial2logicannotations:PartialModelRelation2Assertion" target="//@assertions.57" targetRelation="//@relations.55"/>
2057 <annotations xsi:type="partial2logicannotations:PartialModelRelation2Assertion" target="//@assertions.58" targetRelation="//@relations.56"/>
2058 <annotations xsi:type="partial2logicannotations:PartialModelRelation2Assertion" target="//@assertions.59" targetRelation="//@relations.57"/>
2059</language:LogicProblem>
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/debug/init.partialmodel b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/debug/init.partialmodel
new file mode 100644
index 00000000..985e7346
--- /dev/null
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/debug/init.partialmodel
@@ -0,0 +1,497 @@
1<?xml version="1.0" encoding="ASCII"?>
2<partialinterpretation:PartialInterpretation xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:language="http://www.bme.hu/mit/inf/dslreasoner/logic/model/language" xmlns:partialinterpretation="http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage" minNewElements="5" maxNewElements="5">
3 <problem href="generation.logicproblem#/"/>
4 <partialrelationinterpretation>
5 <interpretationOf href="generation.logicproblem#//@relations.0"/>
6 <param1 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.0/@parameters.0"/>
7 <param2 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.0/@parameters.1"/>
8 </partialrelationinterpretation>
9 <partialrelationinterpretation>
10 <interpretationOf href="generation.logicproblem#//@relations.1"/>
11 <param1 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.1/@parameters.0"/>
12 <param2 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.1/@parameters.1"/>
13 </partialrelationinterpretation>
14 <partialrelationinterpretation>
15 <interpretationOf href="generation.logicproblem#//@relations.2"/>
16 <param1 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.2/@parameters.0"/>
17 <param2 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.2/@parameters.1"/>
18 </partialrelationinterpretation>
19 <partialrelationinterpretation>
20 <interpretationOf href="generation.logicproblem#//@relations.3"/>
21 <param1 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.3/@parameters.0"/>
22 <param2 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.3/@parameters.1"/>
23 </partialrelationinterpretation>
24 <partialrelationinterpretation>
25 <interpretationOf href="generation.logicproblem#//@relations.4"/>
26 <param1 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.4/@parameters.0"/>
27 <param2 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.4/@parameters.1"/>
28 </partialrelationinterpretation>
29 <partialrelationinterpretation>
30 <interpretationOf href="generation.logicproblem#//@relations.5"/>
31 <param1 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.5/@parameters.0"/>
32 <param2 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.5/@parameters.1"/>
33 </partialrelationinterpretation>
34 <partialrelationinterpretation>
35 <interpretationOf href="generation.logicproblem#//@relations.6"/>
36 <param1 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.6/@parameters.0"/>
37 <param2 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.6/@parameters.1"/>
38 </partialrelationinterpretation>
39 <partialrelationinterpretation>
40 <interpretationOf href="generation.logicproblem#//@relations.7"/>
41 <param1 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.7/@parameters.0"/>
42 <param2 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.7/@parameters.1"/>
43 </partialrelationinterpretation>
44 <partialrelationinterpretation>
45 <interpretationOf href="generation.logicproblem#//@relations.8"/>
46 <param1 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.8/@parameters.0"/>
47 <param2 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.8/@parameters.1"/>
48 </partialrelationinterpretation>
49 <partialrelationinterpretation>
50 <interpretationOf href="generation.logicproblem#//@relations.9"/>
51 <param1 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.9/@parameters.0"/>
52 <param2 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.9/@parameters.1"/>
53 </partialrelationinterpretation>
54 <partialrelationinterpretation>
55 <interpretationOf href="generation.logicproblem#//@relations.10"/>
56 <param1 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.10/@parameters.0"/>
57 <param2 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.10/@parameters.1"/>
58 </partialrelationinterpretation>
59 <partialrelationinterpretation>
60 <interpretationOf href="generation.logicproblem#//@relations.11"/>
61 <param1 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.11/@parameters.0"/>
62 <param2 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.11/@parameters.1"/>
63 </partialrelationinterpretation>
64 <partialrelationinterpretation>
65 <interpretationOf href="generation.logicproblem#//@relations.12"/>
66 <param1 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.12/@parameters.0"/>
67 <param2 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.12/@parameters.1"/>
68 </partialrelationinterpretation>
69 <partialrelationinterpretation>
70 <interpretationOf href="generation.logicproblem#//@relations.13"/>
71 <param1 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.13/@parameters.0"/>
72 <param2 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.13/@parameters.1"/>
73 </partialrelationinterpretation>
74 <partialrelationinterpretation>
75 <interpretationOf href="generation.logicproblem#//@relations.14"/>
76 <param1 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.14/@parameters.0"/>
77 <param2 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.14/@parameters.1"/>
78 </partialrelationinterpretation>
79 <partialrelationinterpretation>
80 <interpretationOf href="generation.logicproblem#//@relations.15"/>
81 <param1 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.15/@parameters.0"/>
82 <param2 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.15/@parameters.1"/>
83 </partialrelationinterpretation>
84 <partialrelationinterpretation>
85 <interpretationOf href="generation.logicproblem#//@relations.16"/>
86 <param1 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.16/@parameters.0"/>
87 <param2 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.16/@parameters.1"/>
88 </partialrelationinterpretation>
89 <partialrelationinterpretation>
90 <interpretationOf href="generation.logicproblem#//@relations.17"/>
91 <param1 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.17/@parameters.0"/>
92 <param2 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.17/@parameters.1"/>
93 </partialrelationinterpretation>
94 <partialrelationinterpretation>
95 <interpretationOf href="generation.logicproblem#//@relations.18"/>
96 <param1 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.18/@parameters.0"/>
97 <param2 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.18/@parameters.1"/>
98 </partialrelationinterpretation>
99 <partialrelationinterpretation>
100 <interpretationOf href="generation.logicproblem#//@relations.19"/>
101 <param1 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.19/@parameters.0"/>
102 <param2 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.19/@parameters.1"/>
103 </partialrelationinterpretation>
104 <partialrelationinterpretation>
105 <interpretationOf href="generation.logicproblem#//@relations.20"/>
106 <param1 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.20/@parameters.0"/>
107 <param2 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.20/@parameters.1"/>
108 </partialrelationinterpretation>
109 <partialrelationinterpretation>
110 <interpretationOf href="generation.logicproblem#//@relations.21"/>
111 <param1 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.21/@parameters.0"/>
112 <param2 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.21/@parameters.1"/>
113 </partialrelationinterpretation>
114 <partialrelationinterpretation>
115 <interpretationOf href="generation.logicproblem#//@relations.22"/>
116 <param1 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.22/@parameters.0"/>
117 <param2 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.22/@parameters.1"/>
118 </partialrelationinterpretation>
119 <partialrelationinterpretation>
120 <interpretationOf href="generation.logicproblem#//@relations.23"/>
121 <param1 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.23/@parameters.0"/>
122 <param2 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.23/@parameters.1"/>
123 </partialrelationinterpretation>
124 <partialrelationinterpretation>
125 <interpretationOf href="generation.logicproblem#//@relations.24"/>
126 <param1 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.24/@parameters.0"/>
127 <param2 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.24/@parameters.1"/>
128 </partialrelationinterpretation>
129 <partialrelationinterpretation>
130 <interpretationOf href="generation.logicproblem#//@relations.25"/>
131 <param1 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.25/@parameters.0"/>
132 <param2 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.25/@parameters.1"/>
133 </partialrelationinterpretation>
134 <partialrelationinterpretation>
135 <interpretationOf href="generation.logicproblem#//@relations.26"/>
136 <param1 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.26/@parameters.0"/>
137 <param2 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.26/@parameters.1"/>
138 </partialrelationinterpretation>
139 <partialrelationinterpretation>
140 <interpretationOf href="generation.logicproblem#//@relations.27"/>
141 <param1 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.27/@parameters.0"/>
142 <param2 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.27/@parameters.1"/>
143 </partialrelationinterpretation>
144 <partialrelationinterpretation>
145 <interpretationOf href="generation.logicproblem#//@relations.28"/>
146 <param1 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.28/@parameters.0"/>
147 <param2 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.28/@parameters.1"/>
148 </partialrelationinterpretation>
149 <partialrelationinterpretation>
150 <interpretationOf href="generation.logicproblem#//@relations.29"/>
151 <param1 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.29/@parameters.0"/>
152 <param2 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.29/@parameters.1"/>
153 </partialrelationinterpretation>
154 <partialrelationinterpretation>
155 <interpretationOf href="generation.logicproblem#//@relations.30"/>
156 <param1 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.30/@parameters.0"/>
157 <param2 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.30/@parameters.1"/>
158 </partialrelationinterpretation>
159 <partialrelationinterpretation>
160 <interpretationOf href="generation.logicproblem#//@relations.31"/>
161 <param1 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.31/@parameters.0"/>
162 <param2 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.31/@parameters.1"/>
163 </partialrelationinterpretation>
164 <partialrelationinterpretation>
165 <interpretationOf href="generation.logicproblem#//@relations.32"/>
166 <param1 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.32/@parameters.0"/>
167 <param2 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.32/@parameters.1"/>
168 </partialrelationinterpretation>
169 <partialrelationinterpretation>
170 <interpretationOf href="generation.logicproblem#//@relations.33"/>
171 <param1 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.33/@parameters.0"/>
172 <param2 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.33/@parameters.1"/>
173 </partialrelationinterpretation>
174 <partialrelationinterpretation>
175 <interpretationOf href="generation.logicproblem#//@relations.34"/>
176 <param1 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.34/@parameters.0"/>
177 <param2 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.34/@parameters.1"/>
178 </partialrelationinterpretation>
179 <partialrelationinterpretation>
180 <interpretationOf href="generation.logicproblem#//@relations.35"/>
181 <param1 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.35/@parameters.0"/>
182 <param2 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.35/@parameters.1"/>
183 </partialrelationinterpretation>
184 <partialrelationinterpretation>
185 <interpretationOf href="generation.logicproblem#//@relations.36"/>
186 <param1 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.36/@parameters.0"/>
187 <param2 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.36/@parameters.1"/>
188 </partialrelationinterpretation>
189 <partialrelationinterpretation>
190 <interpretationOf href="generation.logicproblem#//@relations.37"/>
191 <param1 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.37/@parameters.0"/>
192 <param2 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.37/@parameters.1"/>
193 </partialrelationinterpretation>
194 <partialrelationinterpretation>
195 <interpretationOf href="generation.logicproblem#//@relations.38"/>
196 <param1 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.38/@parameters.0"/>
197 <param2 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.38/@parameters.1"/>
198 </partialrelationinterpretation>
199 <partialrelationinterpretation>
200 <interpretationOf href="generation.logicproblem#//@relations.39"/>
201 <param1 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.39/@parameters.0"/>
202 <param2 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.39/@parameters.1"/>
203 </partialrelationinterpretation>
204 <partialrelationinterpretation>
205 <interpretationOf href="generation.logicproblem#//@relations.40"/>
206 <param1 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.40/@parameters.0"/>
207 <param2 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.40/@parameters.1"/>
208 </partialrelationinterpretation>
209 <partialrelationinterpretation>
210 <interpretationOf href="generation.logicproblem#//@relations.41"/>
211 <param1 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.41/@parameters.0"/>
212 <param2 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.41/@parameters.1"/>
213 </partialrelationinterpretation>
214 <partialrelationinterpretation>
215 <interpretationOf href="generation.logicproblem#//@relations.42"/>
216 <param1 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.42/@parameters.0"/>
217 <param2 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.42/@parameters.1"/>
218 </partialrelationinterpretation>
219 <partialrelationinterpretation>
220 <interpretationOf href="generation.logicproblem#//@relations.43"/>
221 <param1 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.43/@parameters.0"/>
222 <param2 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.43/@parameters.1"/>
223 </partialrelationinterpretation>
224 <partialrelationinterpretation>
225 <interpretationOf href="generation.logicproblem#//@relations.44"/>
226 <param1 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.44/@parameters.0"/>
227 <param2 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.44/@parameters.1"/>
228 </partialrelationinterpretation>
229 <partialrelationinterpretation>
230 <interpretationOf href="generation.logicproblem#//@relations.45"/>
231 <param1 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.45/@parameters.0"/>
232 <param2 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.45/@parameters.1"/>
233 </partialrelationinterpretation>
234 <partialrelationinterpretation>
235 <interpretationOf href="generation.logicproblem#//@relations.46"/>
236 <param1 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.46/@parameters.0"/>
237 <param2 xsi:type="language:BoolTypeReference" href="generation.logicproblem#//@relations.46/@parameters.1"/>
238 </partialrelationinterpretation>
239 <partialrelationinterpretation>
240 <interpretationOf href="generation.logicproblem#//@relations.47"/>
241 <param1 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.47/@parameters.0"/>
242 <param2 xsi:type="language:StringTypeReference" href="generation.logicproblem#//@relations.47/@parameters.1"/>
243 </partialrelationinterpretation>
244 <partialrelationinterpretation>
245 <interpretationOf href="generation.logicproblem#//@relations.48"/>
246 <param1 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.48/@parameters.0"/>
247 <param2 xsi:type="language:BoolTypeReference" href="generation.logicproblem#//@relations.48/@parameters.1"/>
248 </partialrelationinterpretation>
249 <partialrelationinterpretation>
250 <interpretationOf href="generation.logicproblem#//@relations.49"/>
251 <param1 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.49/@parameters.0"/>
252 <param2 xsi:type="language:BoolTypeReference" href="generation.logicproblem#//@relations.49/@parameters.1"/>
253 </partialrelationinterpretation>
254 <partialrelationinterpretation>
255 <interpretationOf href="generation.logicproblem#//@relations.50"/>
256 <param1 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.50/@parameters.0"/>
257 <param2 xsi:type="language:StringTypeReference" href="generation.logicproblem#//@relations.50/@parameters.1"/>
258 </partialrelationinterpretation>
259 <partialrelationinterpretation>
260 <interpretationOf href="generation.logicproblem#//@relations.51"/>
261 <param1 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.51/@parameters.0"/>
262 <param2 xsi:type="language:StringTypeReference" href="generation.logicproblem#//@relations.51/@parameters.1"/>
263 </partialrelationinterpretation>
264 <partialrelationinterpretation>
265 <interpretationOf href="generation.logicproblem#//@relations.52"/>
266 <param1 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.52/@parameters.0"/>
267 <param2 xsi:type="language:BoolTypeReference" href="generation.logicproblem#//@relations.52/@parameters.1"/>
268 </partialrelationinterpretation>
269 <partialrelationinterpretation>
270 <interpretationOf href="generation.logicproblem#//@relations.53"/>
271 <param1 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.53/@parameters.0"/>
272 <param2 xsi:type="language:IntTypeReference" href="generation.logicproblem#//@relations.53/@parameters.1"/>
273 </partialrelationinterpretation>
274 <partialrelationinterpretation>
275 <interpretationOf href="generation.logicproblem#//@relations.54"/>
276 <param1 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.54/@parameters.0"/>
277 <param2 xsi:type="language:StringTypeReference" href="generation.logicproblem#//@relations.54/@parameters.1"/>
278 </partialrelationinterpretation>
279 <partialrelationinterpretation>
280 <interpretationOf href="generation.logicproblem#//@relations.55"/>
281 <relationlinks xsi:type="partialinterpretation:BinaryElementRelationLink" param2="//@newElements.9">
282 <param1 href="generation.logicproblem#//@elements.0"/>
283 </relationlinks>
284 <param1 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.55/@parameters.0"/>
285 <param2 xsi:type="language:StringTypeReference" href="generation.logicproblem#//@relations.55/@parameters.1"/>
286 </partialrelationinterpretation>
287 <partialrelationinterpretation>
288 <interpretationOf href="generation.logicproblem#//@relations.56"/>
289 <relationlinks xsi:type="partialinterpretation:BinaryElementRelationLink" param2="//@newElements.8">
290 <param1 href="generation.logicproblem#//@elements.0"/>
291 </relationlinks>
292 <param1 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.56/@parameters.0"/>
293 <param2 xsi:type="language:StringTypeReference" href="generation.logicproblem#//@relations.56/@parameters.1"/>
294 </partialrelationinterpretation>
295 <partialrelationinterpretation>
296 <interpretationOf href="generation.logicproblem#//@relations.57"/>
297 <relationlinks xsi:type="partialinterpretation:BinaryElementRelationLink" param2="//@newElements.7">
298 <param1 href="generation.logicproblem#//@elements.0"/>
299 </relationlinks>
300 <param1 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.57/@parameters.0"/>
301 <param2 xsi:type="language:StringTypeReference" href="generation.logicproblem#//@relations.57/@parameters.1"/>
302 </partialrelationinterpretation>
303 <partialrelationinterpretation>
304 <interpretationOf href="generation.logicproblem#//@relations.58"/>
305 <param1 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.58/@parameters.0"/>
306 <param2 xsi:type="language:BoolTypeReference" href="generation.logicproblem#//@relations.58/@parameters.1"/>
307 </partialrelationinterpretation>
308 <partialrelationinterpretation>
309 <interpretationOf href="generation.logicproblem#//@relations.59"/>
310 <param1 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.59/@parameters.0"/>
311 <param2 xsi:type="language:BoolTypeReference" href="generation.logicproblem#//@relations.59/@parameters.1"/>
312 </partialrelationinterpretation>
313 <partialrelationinterpretation>
314 <interpretationOf href="generation.logicproblem#//@relations.60"/>
315 <param1 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.60/@parameters.0"/>
316 <param2 xsi:type="language:BoolTypeReference" href="generation.logicproblem#//@relations.60/@parameters.1"/>
317 </partialrelationinterpretation>
318 <partialrelationinterpretation>
319 <interpretationOf href="generation.logicproblem#//@relations.61"/>
320 <param1 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.61/@parameters.0"/>
321 <param2 xsi:type="language:BoolTypeReference" href="generation.logicproblem#//@relations.61/@parameters.1"/>
322 </partialrelationinterpretation>
323 <partialrelationinterpretation>
324 <interpretationOf href="generation.logicproblem#//@relations.62"/>
325 <param1 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.62/@parameters.0"/>
326 <param2 xsi:type="language:BoolTypeReference" href="generation.logicproblem#//@relations.62/@parameters.1"/>
327 </partialrelationinterpretation>
328 <partialrelationinterpretation>
329 <interpretationOf href="generation.logicproblem#//@relations.63"/>
330 <param1 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.63/@parameters.0"/>
331 <param2 xsi:type="language:BoolTypeReference" href="generation.logicproblem#//@relations.63/@parameters.1"/>
332 </partialrelationinterpretation>
333 <partialrelationinterpretation>
334 <interpretationOf href="generation.logicproblem#//@relations.64"/>
335 <param1 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.64/@parameters.0"/>
336 <param2 xsi:type="language:StringTypeReference" href="generation.logicproblem#//@relations.64/@parameters.1"/>
337 </partialrelationinterpretation>
338 <partialrelationinterpretation>
339 <interpretationOf href="generation.logicproblem#//@relations.65"/>
340 <param1 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.65/@parameters.0"/>
341 <param2 xsi:type="language:BoolTypeReference" href="generation.logicproblem#//@relations.65/@parameters.1"/>
342 </partialrelationinterpretation>
343 <partialrelationinterpretation>
344 <interpretationOf href="generation.logicproblem#//@relations.66"/>
345 <param1 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.66/@parameters.0"/>
346 <param2 xsi:type="language:BoolTypeReference" href="generation.logicproblem#//@relations.66/@parameters.1"/>
347 </partialrelationinterpretation>
348 <partialrelationinterpretation>
349 <interpretationOf href="generation.logicproblem#//@relations.67"/>
350 <param1 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.67/@parameters.0"/>
351 <param2 xsi:type="language:BoolTypeReference" href="generation.logicproblem#//@relations.67/@parameters.1"/>
352 </partialrelationinterpretation>
353 <partialrelationinterpretation>
354 <interpretationOf href="generation.logicproblem#//@relations.68"/>
355 <param1 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.68/@parameters.0"/>
356 <param2 xsi:type="language:BoolTypeReference" href="generation.logicproblem#//@relations.68/@parameters.1"/>
357 </partialrelationinterpretation>
358 <partialrelationinterpretation>
359 <interpretationOf href="generation.logicproblem#//@relations.69"/>
360 <param1 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.69/@parameters.0"/>
361 <param2 xsi:type="language:IntTypeReference" href="generation.logicproblem#//@relations.69/@parameters.1"/>
362 </partialrelationinterpretation>
363 <partialrelationinterpretation>
364 <interpretationOf href="generation.logicproblem#//@relations.70"/>
365 <param1 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.70/@parameters.0"/>
366 <param2 xsi:type="language:IntTypeReference" href="generation.logicproblem#//@relations.70/@parameters.1"/>
367 </partialrelationinterpretation>
368 <partialrelationinterpretation>
369 <interpretationOf href="generation.logicproblem#//@relations.71"/>
370 <param1 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.71/@parameters.0"/>
371 <param2 xsi:type="language:BoolTypeReference" href="generation.logicproblem#//@relations.71/@parameters.1"/>
372 </partialrelationinterpretation>
373 <partialrelationinterpretation>
374 <interpretationOf href="generation.logicproblem#//@relations.72"/>
375 <param1 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.72/@parameters.0"/>
376 <param2 xsi:type="language:BoolTypeReference" href="generation.logicproblem#//@relations.72/@parameters.1"/>
377 </partialrelationinterpretation>
378 <partialrelationinterpretation>
379 <interpretationOf href="generation.logicproblem#//@relations.73"/>
380 <param1 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.73/@parameters.0"/>
381 <param2 xsi:type="language:StringTypeReference" href="generation.logicproblem#//@relations.73/@parameters.1"/>
382 </partialrelationinterpretation>
383 <partialrelationinterpretation>
384 <interpretationOf href="generation.logicproblem#//@relations.74"/>
385 <param1 xsi:type="language:ComplexTypeReference" href="generation.logicproblem#//@relations.74/@parameters.0"/>
386 <param2 xsi:type="language:StringTypeReference" href="generation.logicproblem#//@relations.74/@parameters.1"/>
387 </partialrelationinterpretation>
388 <newElements xsi:type="partialinterpretation:BooleanElement" name="true" valueSet="true" value="true"/>
389 <newElements xsi:type="partialinterpretation:BooleanElement" name="false" valueSet="true"/>
390 <newElements xsi:type="partialinterpretation:IntegerElement" name="-1" valueSet="true" value="-1"/>
391 <newElements xsi:type="partialinterpretation:IntegerElement" name="0" valueSet="true"/>
392 <newElements xsi:type="partialinterpretation:IntegerElement" name="1" valueSet="true" value="1"/>
393 <newElements xsi:type="partialinterpretation:StringElement" name="&quot;A&quot;" valueSet="true" value="A"/>
394 <newElements xsi:type="partialinterpretation:StringElement" name="&quot;B&quot;" valueSet="true" value="B"/>
395 <newElements xsi:type="partialinterpretation:StringElement" name="&quot;nsPrefix&quot;" valueSet="true" value="nsPrefix"/>
396 <newElements xsi:type="partialinterpretation:StringElement" name="&quot;nsUri&quot;" valueSet="true" value="nsUri"/>
397 <newElements xsi:type="partialinterpretation:StringElement" name="&quot;packageName&quot;" valueSet="true" value="packageName"/>
398 <partialtypeinterpratation xsi:type="partialinterpretation:PartialBooleanInterpretation" elements="//@newElements.0 //@newElements.1"/>
399 <partialtypeinterpratation xsi:type="partialinterpretation:PartialIntegerInterpretation" elements="//@newElements.2 //@newElements.3 //@newElements.4 //@openWorldElements.0"/>
400 <partialtypeinterpratation xsi:type="partialinterpretation:PartialRealInterpretation" elements="//@openWorldElements.1"/>
401 <partialtypeinterpratation xsi:type="partialinterpretation:PartialStringInterpretation" elements="//@newElements.5 //@newElements.6 //@newElements.7 //@newElements.8 //@newElements.9 //@openWorldElements.2"/>
402 <partialtypeinterpratation xsi:type="partialinterpretation:PartialComplexTypeInterpretation" scopes="//@scopes.0" supertypeInterpretation="//@partialtypeinterpratation.18 //@partialtypeinterpratation.19 //@partialtypeinterpratation.12 //@partialtypeinterpratation.11 //@partialtypeinterpratation.24 //@partialtypeinterpratation.23">
403 <interpretationOf href="generation.logicproblem#//@types.0"/>
404 </partialtypeinterpratation>
405 <partialtypeinterpratation xsi:type="partialinterpretation:PartialComplexTypeInterpretation" scopes="//@scopes.1" supertypeInterpretation="//@partialtypeinterpratation.11 //@partialtypeinterpratation.23">
406 <interpretationOf href="generation.logicproblem#//@types.1"/>
407 </partialtypeinterpratation>
408 <partialtypeinterpratation xsi:type="partialinterpretation:PartialComplexTypeInterpretation" scopes="//@scopes.2" supertypeInterpretation="//@partialtypeinterpratation.7 //@partialtypeinterpratation.12 //@partialtypeinterpratation.11 //@partialtypeinterpratation.24 //@partialtypeinterpratation.23">
409 <interpretationOf href="generation.logicproblem#//@types.2"/>
410 </partialtypeinterpratation>
411 <partialtypeinterpratation xsi:type="partialinterpretation:PartialComplexTypeInterpretation" scopes="//@scopes.3" supertypeInterpretation="//@partialtypeinterpratation.12 //@partialtypeinterpratation.11 //@partialtypeinterpratation.24 //@partialtypeinterpratation.23">
412 <interpretationOf href="generation.logicproblem#//@types.3"/>
413 </partialtypeinterpratation>
414 <partialtypeinterpratation xsi:type="partialinterpretation:PartialComplexTypeInterpretation" scopes="//@scopes.4" supertypeInterpretation="//@partialtypeinterpratation.7 //@partialtypeinterpratation.12 //@partialtypeinterpratation.11 //@partialtypeinterpratation.24 //@partialtypeinterpratation.23">
415 <interpretationOf href="generation.logicproblem#//@types.4"/>
416 </partialtypeinterpratation>
417 <partialtypeinterpratation xsi:type="partialinterpretation:PartialComplexTypeInterpretation" scopes="//@scopes.5" supertypeInterpretation="//@partialtypeinterpratation.8 //@partialtypeinterpratation.7 //@partialtypeinterpratation.12 //@partialtypeinterpratation.11 //@partialtypeinterpratation.24 //@partialtypeinterpratation.23">
418 <interpretationOf href="generation.logicproblem#//@types.5"/>
419 </partialtypeinterpratation>
420 <partialtypeinterpratation xsi:type="partialinterpretation:PartialComplexTypeInterpretation" scopes="//@scopes.6" supertypeInterpretation="//@partialtypeinterpratation.12 //@partialtypeinterpratation.11 //@partialtypeinterpratation.24 //@partialtypeinterpratation.23">
421 <interpretationOf href="generation.logicproblem#//@types.6"/>
422 </partialtypeinterpratation>
423 <partialtypeinterpratation xsi:type="partialinterpretation:PartialComplexTypeInterpretation" scopes="//@scopes.7">
424 <elements href="generation.logicproblem#//@elements.0"/>
425 <interpretationOf href="generation.logicproblem#//@types.7"/>
426 </partialtypeinterpratation>
427 <partialtypeinterpratation xsi:type="partialinterpretation:PartialComplexTypeInterpretation" scopes="//@scopes.8" supertypeInterpretation="//@partialtypeinterpratation.11">
428 <elements href="generation.logicproblem#//@elements.0"/>
429 <interpretationOf href="generation.logicproblem#//@types.8"/>
430 </partialtypeinterpratation>
431 <partialtypeinterpratation xsi:type="partialinterpretation:PartialComplexTypeInterpretation" scopes="//@scopes.9">
432 <interpretationOf href="generation.logicproblem#//@types.9"/>
433 </partialtypeinterpratation>
434 <partialtypeinterpratation xsi:type="partialinterpretation:PartialComplexTypeInterpretation" scopes="//@scopes.10" supertypeInterpretation="//@partialtypeinterpratation.19 //@partialtypeinterpratation.12 //@partialtypeinterpratation.11 //@partialtypeinterpratation.24 //@partialtypeinterpratation.23">
435 <interpretationOf href="generation.logicproblem#//@types.10"/>
436 </partialtypeinterpratation>
437 <partialtypeinterpratation xsi:type="partialinterpretation:PartialComplexTypeInterpretation" scopes="//@scopes.11" supertypeInterpretation="//@partialtypeinterpratation.12 //@partialtypeinterpratation.11">
438 <elements href="generation.logicproblem#//@elements.0"/>
439 <interpretationOf href="generation.logicproblem#//@types.11"/>
440 </partialtypeinterpratation>
441 <partialtypeinterpratation xsi:type="partialinterpretation:PartialComplexTypeInterpretation" scopes="//@scopes.12" supertypeInterpretation="//@partialtypeinterpratation.19 //@partialtypeinterpratation.12 //@partialtypeinterpratation.11 //@partialtypeinterpratation.24 //@partialtypeinterpratation.23">
442 <interpretationOf href="generation.logicproblem#//@types.12"/>
443 </partialtypeinterpratation>
444 <partialtypeinterpratation xsi:type="partialinterpretation:PartialComplexTypeInterpretation" scopes="//@scopes.13" supertypeInterpretation="//@partialtypeinterpratation.18 //@partialtypeinterpratation.19 //@partialtypeinterpratation.12 //@partialtypeinterpratation.11 //@partialtypeinterpratation.24 //@partialtypeinterpratation.23">
445 <interpretationOf href="generation.logicproblem#//@types.13"/>
446 </partialtypeinterpratation>
447 <partialtypeinterpratation xsi:type="partialinterpretation:PartialComplexTypeInterpretation" scopes="//@scopes.14" supertypeInterpretation="//@partialtypeinterpratation.19 //@partialtypeinterpratation.12 //@partialtypeinterpratation.11 //@partialtypeinterpratation.24 //@partialtypeinterpratation.23">
448 <interpretationOf href="generation.logicproblem#//@types.14"/>
449 </partialtypeinterpratation>
450 <partialtypeinterpratation xsi:type="partialinterpretation:PartialComplexTypeInterpretation" scopes="//@scopes.15" supertypeInterpretation="//@partialtypeinterpratation.12 //@partialtypeinterpratation.11 //@partialtypeinterpratation.24 //@partialtypeinterpratation.23">
451 <interpretationOf href="generation.logicproblem#//@types.15"/>
452 </partialtypeinterpratation>
453 <partialtypeinterpratation xsi:type="partialinterpretation:PartialComplexTypeInterpretation" scopes="//@scopes.16">
454 <interpretationOf href="generation.logicproblem#//@types.16"/>
455 </partialtypeinterpratation>
456 <partialtypeinterpratation xsi:type="partialinterpretation:PartialComplexTypeInterpretation" scopes="//@scopes.17">
457 <interpretationOf href="generation.logicproblem#//@types.17"/>
458 </partialtypeinterpratation>
459 <partialtypeinterpratation xsi:type="partialinterpretation:PartialComplexTypeInterpretation" scopes="//@scopes.18" supertypeInterpretation="//@partialtypeinterpratation.12 //@partialtypeinterpratation.11 //@partialtypeinterpratation.24 //@partialtypeinterpratation.23">
460 <interpretationOf href="generation.logicproblem#//@types.18"/>
461 </partialtypeinterpratation>
462 <partialtypeinterpratation xsi:type="partialinterpretation:PartialComplexTypeInterpretation" scopes="//@scopes.19" supertypeInterpretation="//@partialtypeinterpratation.11">
463 <interpretationOf href="generation.logicproblem#//@types.20"/>
464 </partialtypeinterpratation>
465 <partialtypeinterpratation xsi:type="partialinterpretation:PartialComplexTypeInterpretation" scopes="//@scopes.20" supertypeInterpretation="//@partialtypeinterpratation.12 //@partialtypeinterpratation.11 //@partialtypeinterpratation.23">
466 <interpretationOf href="generation.logicproblem#//@types.22"/>
467 </partialtypeinterpratation>
468 <partialtypeinterpratation xsi:type="partialinterpretation:PartialComplexTypeInterpretation" scopes="//@scopes.21" supertypeInterpretation="//@partialtypeinterpratation.15 //@partialtypeinterpratation.12 //@partialtypeinterpratation.11 //@partialtypeinterpratation.24 //@partialtypeinterpratation.23">
469 <interpretationOf href="generation.logicproblem#//@types.24"/>
470 </partialtypeinterpratation>
471 <openWorldElements xsi:type="partialinterpretation:IntegerElement" name="New Integers"/>
472 <openWorldElements xsi:type="partialinterpretation:RealElement" name="New Reals"/>
473 <openWorldElements xsi:type="partialinterpretation:StringElement" name="New Strings"/>
474 <openWorldElements name="New Objects"/>
475 <scopes targetTypeInterpretation="//@partialtypeinterpratation.4"/>
476 <scopes targetTypeInterpretation="//@partialtypeinterpratation.5"/>
477 <scopes targetTypeInterpretation="//@partialtypeinterpratation.6"/>
478 <scopes targetTypeInterpretation="//@partialtypeinterpratation.7"/>
479 <scopes targetTypeInterpretation="//@partialtypeinterpratation.8"/>
480 <scopes targetTypeInterpretation="//@partialtypeinterpratation.9"/>
481 <scopes targetTypeInterpretation="//@partialtypeinterpratation.10"/>
482 <scopes targetTypeInterpretation="//@partialtypeinterpratation.11"/>
483 <scopes targetTypeInterpretation="//@partialtypeinterpratation.12"/>
484 <scopes targetTypeInterpretation="//@partialtypeinterpratation.13"/>
485 <scopes targetTypeInterpretation="//@partialtypeinterpratation.14"/>
486 <scopes targetTypeInterpretation="//@partialtypeinterpratation.15"/>
487 <scopes targetTypeInterpretation="//@partialtypeinterpratation.16"/>
488 <scopes targetTypeInterpretation="//@partialtypeinterpratation.17"/>
489 <scopes targetTypeInterpretation="//@partialtypeinterpratation.18"/>
490 <scopes targetTypeInterpretation="//@partialtypeinterpratation.19"/>
491 <scopes targetTypeInterpretation="//@partialtypeinterpratation.20"/>
492 <scopes targetTypeInterpretation="//@partialtypeinterpratation.21"/>
493 <scopes targetTypeInterpretation="//@partialtypeinterpratation.22"/>
494 <scopes targetTypeInterpretation="//@partialtypeinterpratation.23"/>
495 <scopes targetTypeInterpretation="//@partialtypeinterpratation.24"/>
496 <scopes targetTypeInterpretation="//@partialtypeinterpratation.25"/>
497</partialinterpretation:PartialInterpretation>
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/log.txt b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/log.txt
new file mode 100644
index 00000000..69222b92
--- /dev/null
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/log.txt
@@ -0,0 +1 @@
Model generation startedProblem is consistent, a model is generatedModels: [1.xmi]Visualisations: [1.gml]Visualisations: [1.png]Model generation finishedModel generation startedProblem is consistent, a model is generatedModels: [1.xmi]Visualisations: [1.gml]Visualisations: [1.png]Model generation finishedModel generation startedProblem is consistent, a model is generatedModels: [1.xmi]Visualisations: [1.gml]Visualisations: [1.png]Model generation finishedModel generation startedProblem is consistent, a model is generatedModels: [1.xmi]Visualisations: [1.gml]Visualisations: [1.png]Model generation finishedModel generation startedProblem is consistent, 3 models are generated!Models: [1.xmi][2.xmi][3.xmi]Visualisations: [1.gml][2.gml][3.gml]Visualisations: [1.png][2.png][3.png]Model generation finishedModel generation startedProblem is consistent, 3 models are generated!Models: [1.xmi][2.xmi][3.xmi]Visualisations: [1.gml][2.gml][3.gml]Visualisations: [1.png][2.png][3.png]Model generation finishedModel generation startedProblem is consistent, 2 models are generated!Models: [1.xmi][2.xmi]Visualisations: [1.gml][2.gml]Visualisations: [1.png][2.png]Model generation finishedModel generation startedProblem is consistent, 2 models are generated!Models: [1.xmi][2.xmi]Visualisations: [1.gml][2.gml]Visualisations: [1.png][2.png]Model generation finishedModel generation startedProblem is consistent, a model is generatedModels: [1.xmi]Visualisations: [1.gml]Visualisations: [1.png]Model generation finishedModel generation startedProblem is consistent, 2 models are generated!Models: [1.xmi][2.xmi]Visualisations: [1.gml][2.gml]Visualisations: [1.png][2.png]Model generation finishedModel generation startedProblem is consistent, 2 models are generated!Models: [1.xmi][2.xmi]Visualisations: [1.gml][2.gml]Visualisations: [1.png][2.png]Model generation finishedModel generation startedProblem is consistent, 2 models are generated!Models: [1.xmi][2.xmi]Visualisations: [1.gml][2.gml]Visualisations: [1.png][2.png]Model generation finishedModel generation startedProblem is consistent, a model is generatedModels: [1.xmi]Visualisations: [1.gml]Visualisations: [1.png]Model generation finishedModel generation startedProblem is consistent, a model is generatedModels: [1.xmi]Visualisations: [1.gml]Visualisations: [1.png]Model generation finishedModel generation startedProblem is consistent, 2 models are generated!Models: [1.xmi][2.xmi]Visualisations: [1.gml][2.gml]Visualisations: [1.png][2.png]Model generation finishedModel generation startedProblem is consistent, 5 models are generated!Models: [1.xmi][2.xmi][3.xmi][4.xmi][5.xmi]Visualisations: [1.gml][2.gml][3.gml][4.gml][5.gml]Visualisations: [1.png][2.png][3.png][4.png][5.png]Model generation finished \ No newline at end of file
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/1.gml b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/1.gml
new file mode 100644
index 00000000..c55209f7
--- /dev/null
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/1.gml
@@ -0,0 +1,7641 @@
1graph
2[
3 node
4 [
5 id 0
6 graphics
7 [
8 w 226.60000000000002
9 h 40
10 type "rectangle"
11 fill "#FFFFFF"
12 fill2 "#FFFFFF"
13 outline "#000000"
14 ]
15 LabelGraphics
16 [
17 text "Root literal FunctionType"
18 outline "#000000"
19 fill "#FFFFFF"
20 fontSize 16
21 fontName "Monospace"
22 autoSizePolicy "node_width"
23 anchor "t"
24 borderDistance 0.0
25 ]
26 LabelGraphics
27 [
28 text "
29 FunctionType enum
30 "
31 fontSize 14
32 fontName "Consolas"
33 alignment "left"
34 anchor "tl"
35 borderDistance 6
36 ]
37 ]
38
39 node
40 [
41 id 1
42 graphics
43 [
44 w 297.0
45 h 40
46 type "rectangle"
47 fill "#FFFFFF"
48 fill2 "#FFFFFF"
49 outline "#000000"
50 ]
51 LabelGraphics
52 [
53 text "Intermediate literal FunctionType"
54 outline "#000000"
55 fill "#FFFFFF"
56 fontSize 16
57 fontName "Monospace"
58 autoSizePolicy "node_width"
59 anchor "t"
60 borderDistance 0.0
61 ]
62 LabelGraphics
63 [
64 text "
65 FunctionType enum
66 "
67 fontSize 14
68 fontName "Consolas"
69 alignment "left"
70 anchor "tl"
71 borderDistance 6
72 ]
73 ]
74
75 node
76 [
77 id 2
78 graphics
79 [
80 w 226.60000000000002
81 h 40
82 type "rectangle"
83 fill "#FFFFFF"
84 fill2 "#FFFFFF"
85 outline "#000000"
86 ]
87 LabelGraphics
88 [
89 text "Leaf literal FunctionType"
90 outline "#000000"
91 fill "#FFFFFF"
92 fontSize 16
93 fontName "Monospace"
94 autoSizePolicy "node_width"
95 anchor "t"
96 borderDistance 0.0
97 ]
98 LabelGraphics
99 [
100 text "
101 FunctionType enum
102 "
103 fontSize 14
104 fontName "Consolas"
105 alignment "left"
106 anchor "tl"
107 borderDistance 6
108 ]
109 ]
110
111 node
112 [
113 id 3
114 graphics
115 [
116 w 361.90000000000003
117 h 54
118 type "rectangle"
119 fill "#FFFFFF"
120 fill2 "#FFFFFF"
121 outline "#000000"
122 ]
123 LabelGraphics
124 [
125 text "o 1"
126 outline "#000000"
127 fill "#FFFFFF"
128 fontSize 16
129 fontName "Monospace"
130 autoSizePolicy "node_width"
131 anchor "t"
132 borderDistance 0.0
133 ]
134 LabelGraphics
135 [
136 text "
137 FunctionalArchitectureModel class DefinedPart
138 FunctionalArchitectureModel class
139 "
140 fontSize 14
141 fontName "Consolas"
142 alignment "left"
143 anchor "tl"
144 borderDistance 6
145 ]
146 ]
147
148 node
149 [
150 id 4
151 graphics
152 [
153 w 41.800000000000004
154 h 26
155 type "rectangle"
156 fill "#FFFFFF"
157 fill2 "#FFFFFF"
158 outline "#000000"
159 ]
160 LabelGraphics
161 [
162 text "true"
163 outline "#000000"
164 fill "#FFFFFF"
165 fontSize 16
166 fontName "Monospace"
167 autoSizePolicy "node_width"
168 anchor "t"
169 borderDistance 0.0
170 ]
171 LabelGraphics
172 [
173 text "
174 "
175 fontSize 14
176 fontName "Consolas"
177 alignment "left"
178 anchor "tl"
179 borderDistance 6
180 ]
181 ]
182
183 node
184 [
185 id 5
186 graphics
187 [
188 w 50.6
189 h 26
190 type "rectangle"
191 fill "#FFFFFF"
192 fill2 "#FFFFFF"
193 outline "#000000"
194 ]
195 LabelGraphics
196 [
197 text "false"
198 outline "#000000"
199 fill "#FFFFFF"
200 fontSize 16
201 fontName "Monospace"
202 autoSizePolicy "node_width"
203 anchor "t"
204 borderDistance 0.0
205 ]
206 LabelGraphics
207 [
208 text "
209 "
210 fontSize 14
211 fontName "Consolas"
212 alignment "left"
213 anchor "tl"
214 borderDistance 6
215 ]
216 ]
217
218 node
219 [
220 id 6
221 graphics
222 [
223 w 192.50000000000003
224 h 54
225 type "rectangle"
226 fill "#FFFFFF"
227 fill2 "#FFFFFF"
228 outline "#000000"
229 ]
230 LabelGraphics
231 [
232 text "null"
233 outline "#000000"
234 fill "#FFFFFF"
235 fontSize 16
236 fontName "Monospace"
237 autoSizePolicy "node_width"
238 anchor "t"
239 borderDistance 0.0
240 ]
241 LabelGraphics
242 [
243 text "
244 FunctionalElement class
245 Function class
246 "
247 fontSize 14
248 fontName "Consolas"
249 alignment "left"
250 anchor "tl"
251 borderDistance 6
252 ]
253 ]
254
255 node
256 [
257 id 7
258 graphics
259 [
260 w 112.2
261 h 26
262 type "rectangle"
263 fill "#FFFFFF"
264 fill2 "#FFFFFF"
265 outline "#000000"
266 ]
267 LabelGraphics
268 [
269 text "New Integers"
270 outline "#000000"
271 fill "#FFFFFF"
272 fontSize 16
273 fontName "Monospace"
274 autoSizePolicy "node_width"
275 anchor "t"
276 borderDistance 0.0
277 ]
278 LabelGraphics
279 [
280 text "
281 "
282 fontSize 14
283 fontName "Consolas"
284 alignment "left"
285 anchor "tl"
286 borderDistance 6
287 ]
288 ]
289
290 node
291 [
292 id 8
293 graphics
294 [
295 w 85.80000000000001
296 h 26
297 type "rectangle"
298 fill "#FFFFFF"
299 fill2 "#FFFFFF"
300 outline "#000000"
301 ]
302 LabelGraphics
303 [
304 text "New Reals"
305 outline "#000000"
306 fill "#FFFFFF"
307 fontSize 16
308 fontName "Monospace"
309 autoSizePolicy "node_width"
310 anchor "t"
311 borderDistance 0.0
312 ]
313 LabelGraphics
314 [
315 text "
316 "
317 fontSize 14
318 fontName "Consolas"
319 alignment "left"
320 anchor "tl"
321 borderDistance 6
322 ]
323 ]
324
325 node
326 [
327 id 9
328 graphics
329 [
330 w 103.4
331 h 26
332 type "rectangle"
333 fill "#FFFFFF"
334 fill2 "#FFFFFF"
335 outline "#000000"
336 ]
337 LabelGraphics
338 [
339 text "New Strings"
340 outline "#000000"
341 fill "#FFFFFF"
342 fontSize 16
343 fontName "Monospace"
344 autoSizePolicy "node_width"
345 anchor "t"
346 borderDistance 0.0
347 ]
348 LabelGraphics
349 [
350 text "
351 "
352 fontSize 14
353 fontName "Consolas"
354 alignment "left"
355 anchor "tl"
356 borderDistance 6
357 ]
358 ]
359
360 node
361 [
362 id 10
363 graphics
364 [
365 w 103.4
366 h 26
367 type "rectangle"
368 fill "#FFFFFF"
369 fill2 "#FFFFFF"
370 outline "#000000"
371 ]
372 LabelGraphics
373 [
374 text "New Objects"
375 outline "#000000"
376 fill "#FFFFFF"
377 fontSize 16
378 fontName "Monospace"
379 autoSizePolicy "node_width"
380 anchor "t"
381 borderDistance 0.0
382 ]
383 LabelGraphics
384 [
385 text "
386 "
387 fontSize 14
388 fontName "Consolas"
389 alignment "left"
390 anchor "tl"
391 borderDistance 6
392 ]
393 ]
394 edge
395 [
396 source 3
397 target 6
398 graphics
399 [
400 fill "#000000"
401 width 3
402 targetArrow "standard"
403 ]
404 LabelGraphics
405 [
406 text "rootElements reference FunctionalArchitectureModel"
407 fontSize 14
408 fontName "Consolas"
409 configuration "AutoFlippingLabel"
410 model "six_pos"
411 position "thead"
412 ]
413 ]
414]
415graph
416[
417 node
418 [
419 id 0
420 graphics
421 [
422 w 226.60000000000002
423 h 40
424 type "rectangle"
425 fill "#FFFFFF"
426 fill2 "#FFFFFF"
427 outline "#000000"
428 ]
429 LabelGraphics
430 [
431 text "Root literal FunctionType"
432 outline "#000000"
433 fill "#FFFFFF"
434 fontSize 16
435 fontName "Monospace"
436 autoSizePolicy "node_width"
437 anchor "t"
438 borderDistance 0.0
439 ]
440 LabelGraphics
441 [
442 text "
443 FunctionType enum
444 "
445 fontSize 14
446 fontName "Consolas"
447 alignment "left"
448 anchor "tl"
449 borderDistance 6
450 ]
451 ]
452
453 node
454 [
455 id 1
456 graphics
457 [
458 w 297.0
459 h 40
460 type "rectangle"
461 fill "#FFFFFF"
462 fill2 "#FFFFFF"
463 outline "#000000"
464 ]
465 LabelGraphics
466 [
467 text "Intermediate literal FunctionType"
468 outline "#000000"
469 fill "#FFFFFF"
470 fontSize 16
471 fontName "Monospace"
472 autoSizePolicy "node_width"
473 anchor "t"
474 borderDistance 0.0
475 ]
476 LabelGraphics
477 [
478 text "
479 FunctionType enum
480 "
481 fontSize 14
482 fontName "Consolas"
483 alignment "left"
484 anchor "tl"
485 borderDistance 6
486 ]
487 ]
488
489 node
490 [
491 id 2
492 graphics
493 [
494 w 226.60000000000002
495 h 40
496 type "rectangle"
497 fill "#FFFFFF"
498 fill2 "#FFFFFF"
499 outline "#000000"
500 ]
501 LabelGraphics
502 [
503 text "Leaf literal FunctionType"
504 outline "#000000"
505 fill "#FFFFFF"
506 fontSize 16
507 fontName "Monospace"
508 autoSizePolicy "node_width"
509 anchor "t"
510 borderDistance 0.0
511 ]
512 LabelGraphics
513 [
514 text "
515 FunctionType enum
516 "
517 fontSize 14
518 fontName "Consolas"
519 alignment "left"
520 anchor "tl"
521 borderDistance 6
522 ]
523 ]
524
525 node
526 [
527 id 3
528 graphics
529 [
530 w 361.90000000000003
531 h 54
532 type "rectangle"
533 fill "#FFFFFF"
534 fill2 "#FFFFFF"
535 outline "#000000"
536 ]
537 LabelGraphics
538 [
539 text "o 1"
540 outline "#000000"
541 fill "#FFFFFF"
542 fontSize 16
543 fontName "Monospace"
544 autoSizePolicy "node_width"
545 anchor "t"
546 borderDistance 0.0
547 ]
548 LabelGraphics
549 [
550 text "
551 FunctionalArchitectureModel class DefinedPart
552 FunctionalArchitectureModel class
553 "
554 fontSize 14
555 fontName "Consolas"
556 alignment "left"
557 anchor "tl"
558 borderDistance 6
559 ]
560 ]
561
562 node
563 [
564 id 4
565 graphics
566 [
567 w 41.800000000000004
568 h 26
569 type "rectangle"
570 fill "#FFFFFF"
571 fill2 "#FFFFFF"
572 outline "#000000"
573 ]
574 LabelGraphics
575 [
576 text "true"
577 outline "#000000"
578 fill "#FFFFFF"
579 fontSize 16
580 fontName "Monospace"
581 autoSizePolicy "node_width"
582 anchor "t"
583 borderDistance 0.0
584 ]
585 LabelGraphics
586 [
587 text "
588 "
589 fontSize 14
590 fontName "Consolas"
591 alignment "left"
592 anchor "tl"
593 borderDistance 6
594 ]
595 ]
596
597 node
598 [
599 id 5
600 graphics
601 [
602 w 50.6
603 h 26
604 type "rectangle"
605 fill "#FFFFFF"
606 fill2 "#FFFFFF"
607 outline "#000000"
608 ]
609 LabelGraphics
610 [
611 text "false"
612 outline "#000000"
613 fill "#FFFFFF"
614 fontSize 16
615 fontName "Monospace"
616 autoSizePolicy "node_width"
617 anchor "t"
618 borderDistance 0.0
619 ]
620 LabelGraphics
621 [
622 text "
623 "
624 fontSize 14
625 fontName "Consolas"
626 alignment "left"
627 anchor "tl"
628 borderDistance 6
629 ]
630 ]
631
632 node
633 [
634 id 6
635 graphics
636 [
637 w 192.50000000000003
638 h 54
639 type "rectangle"
640 fill "#FFFFFF"
641 fill2 "#FFFFFF"
642 outline "#000000"
643 ]
644 LabelGraphics
645 [
646 text "null"
647 outline "#000000"
648 fill "#FFFFFF"
649 fontSize 16
650 fontName "Monospace"
651 autoSizePolicy "node_width"
652 anchor "t"
653 borderDistance 0.0
654 ]
655 LabelGraphics
656 [
657 text "
658 FunctionalElement class
659 Function class
660 "
661 fontSize 14
662 fontName "Consolas"
663 alignment "left"
664 anchor "tl"
665 borderDistance 6
666 ]
667 ]
668
669 node
670 [
671 id 7
672 graphics
673 [
674 w 112.2
675 h 26
676 type "rectangle"
677 fill "#FFFFFF"
678 fill2 "#FFFFFF"
679 outline "#000000"
680 ]
681 LabelGraphics
682 [
683 text "New Integers"
684 outline "#000000"
685 fill "#FFFFFF"
686 fontSize 16
687 fontName "Monospace"
688 autoSizePolicy "node_width"
689 anchor "t"
690 borderDistance 0.0
691 ]
692 LabelGraphics
693 [
694 text "
695 "
696 fontSize 14
697 fontName "Consolas"
698 alignment "left"
699 anchor "tl"
700 borderDistance 6
701 ]
702 ]
703
704 node
705 [
706 id 8
707 graphics
708 [
709 w 85.80000000000001
710 h 26
711 type "rectangle"
712 fill "#FFFFFF"
713 fill2 "#FFFFFF"
714 outline "#000000"
715 ]
716 LabelGraphics
717 [
718 text "New Reals"
719 outline "#000000"
720 fill "#FFFFFF"
721 fontSize 16
722 fontName "Monospace"
723 autoSizePolicy "node_width"
724 anchor "t"
725 borderDistance 0.0
726 ]
727 LabelGraphics
728 [
729 text "
730 "
731 fontSize 14
732 fontName "Consolas"
733 alignment "left"
734 anchor "tl"
735 borderDistance 6
736 ]
737 ]
738
739 node
740 [
741 id 9
742 graphics
743 [
744 w 103.4
745 h 26
746 type "rectangle"
747 fill "#FFFFFF"
748 fill2 "#FFFFFF"
749 outline "#000000"
750 ]
751 LabelGraphics
752 [
753 text "New Strings"
754 outline "#000000"
755 fill "#FFFFFF"
756 fontSize 16
757 fontName "Monospace"
758 autoSizePolicy "node_width"
759 anchor "t"
760 borderDistance 0.0
761 ]
762 LabelGraphics
763 [
764 text "
765 "
766 fontSize 14
767 fontName "Consolas"
768 alignment "left"
769 anchor "tl"
770 borderDistance 6
771 ]
772 ]
773
774 node
775 [
776 id 10
777 graphics
778 [
779 w 103.4
780 h 26
781 type "rectangle"
782 fill "#FFFFFF"
783 fill2 "#FFFFFF"
784 outline "#000000"
785 ]
786 LabelGraphics
787 [
788 text "New Objects"
789 outline "#000000"
790 fill "#FFFFFF"
791 fontSize 16
792 fontName "Monospace"
793 autoSizePolicy "node_width"
794 anchor "t"
795 borderDistance 0.0
796 ]
797 LabelGraphics
798 [
799 text "
800 "
801 fontSize 14
802 fontName "Consolas"
803 alignment "left"
804 anchor "tl"
805 borderDistance 6
806 ]
807 ]
808 edge
809 [
810 source 3
811 target 6
812 graphics
813 [
814 fill "#000000"
815 width 3
816 targetArrow "standard"
817 ]
818 LabelGraphics
819 [
820 text "rootElements reference FunctionalArchitectureModel"
821 fontSize 14
822 fontName "Consolas"
823 configuration "AutoFlippingLabel"
824 model "six_pos"
825 position "thead"
826 ]
827 ]
828]
829graph
830[
831 node
832 [
833 id 0
834 graphics
835 [
836 w 226.60000000000002
837 h 40
838 type "rectangle"
839 fill "#FFFFFF"
840 fill2 "#FFFFFF"
841 outline "#000000"
842 ]
843 LabelGraphics
844 [
845 text "Root literal FunctionType"
846 outline "#000000"
847 fill "#FFFFFF"
848 fontSize 16
849 fontName "Monospace"
850 autoSizePolicy "node_width"
851 anchor "t"
852 borderDistance 0.0
853 ]
854 LabelGraphics
855 [
856 text "
857 FunctionType enum
858 "
859 fontSize 14
860 fontName "Consolas"
861 alignment "left"
862 anchor "tl"
863 borderDistance 6
864 ]
865 ]
866
867 node
868 [
869 id 1
870 graphics
871 [
872 w 297.0
873 h 40
874 type "rectangle"
875 fill "#FFFFFF"
876 fill2 "#FFFFFF"
877 outline "#000000"
878 ]
879 LabelGraphics
880 [
881 text "Intermediate literal FunctionType"
882 outline "#000000"
883 fill "#FFFFFF"
884 fontSize 16
885 fontName "Monospace"
886 autoSizePolicy "node_width"
887 anchor "t"
888 borderDistance 0.0
889 ]
890 LabelGraphics
891 [
892 text "
893 FunctionType enum
894 "
895 fontSize 14
896 fontName "Consolas"
897 alignment "left"
898 anchor "tl"
899 borderDistance 6
900 ]
901 ]
902
903 node
904 [
905 id 2
906 graphics
907 [
908 w 226.60000000000002
909 h 40
910 type "rectangle"
911 fill "#FFFFFF"
912 fill2 "#FFFFFF"
913 outline "#000000"
914 ]
915 LabelGraphics
916 [
917 text "Leaf literal FunctionType"
918 outline "#000000"
919 fill "#FFFFFF"
920 fontSize 16
921 fontName "Monospace"
922 autoSizePolicy "node_width"
923 anchor "t"
924 borderDistance 0.0
925 ]
926 LabelGraphics
927 [
928 text "
929 FunctionType enum
930 "
931 fontSize 14
932 fontName "Consolas"
933 alignment "left"
934 anchor "tl"
935 borderDistance 6
936 ]
937 ]
938
939 node
940 [
941 id 3
942 graphics
943 [
944 w 361.90000000000003
945 h 54
946 type "rectangle"
947 fill "#FFFFFF"
948 fill2 "#FFFFFF"
949 outline "#000000"
950 ]
951 LabelGraphics
952 [
953 text "o 1"
954 outline "#000000"
955 fill "#FFFFFF"
956 fontSize 16
957 fontName "Monospace"
958 autoSizePolicy "node_width"
959 anchor "t"
960 borderDistance 0.0
961 ]
962 LabelGraphics
963 [
964 text "
965 FunctionalArchitectureModel class DefinedPart
966 FunctionalArchitectureModel class
967 "
968 fontSize 14
969 fontName "Consolas"
970 alignment "left"
971 anchor "tl"
972 borderDistance 6
973 ]
974 ]
975
976 node
977 [
978 id 4
979 graphics
980 [
981 w 41.800000000000004
982 h 26
983 type "rectangle"
984 fill "#FFFFFF"
985 fill2 "#FFFFFF"
986 outline "#000000"
987 ]
988 LabelGraphics
989 [
990 text "true"
991 outline "#000000"
992 fill "#FFFFFF"
993 fontSize 16
994 fontName "Monospace"
995 autoSizePolicy "node_width"
996 anchor "t"
997 borderDistance 0.0
998 ]
999 LabelGraphics
1000 [
1001 text "
1002 "
1003 fontSize 14
1004 fontName "Consolas"
1005 alignment "left"
1006 anchor "tl"
1007 borderDistance 6
1008 ]
1009 ]
1010
1011 node
1012 [
1013 id 5
1014 graphics
1015 [
1016 w 50.6
1017 h 26
1018 type "rectangle"
1019 fill "#FFFFFF"
1020 fill2 "#FFFFFF"
1021 outline "#000000"
1022 ]
1023 LabelGraphics
1024 [
1025 text "false"
1026 outline "#000000"
1027 fill "#FFFFFF"
1028 fontSize 16
1029 fontName "Monospace"
1030 autoSizePolicy "node_width"
1031 anchor "t"
1032 borderDistance 0.0
1033 ]
1034 LabelGraphics
1035 [
1036 text "
1037 "
1038 fontSize 14
1039 fontName "Consolas"
1040 alignment "left"
1041 anchor "tl"
1042 borderDistance 6
1043 ]
1044 ]
1045
1046 node
1047 [
1048 id 6
1049 graphics
1050 [
1051 w 192.50000000000003
1052 h 54
1053 type "rectangle"
1054 fill "#FFFFFF"
1055 fill2 "#FFFFFF"
1056 outline "#000000"
1057 ]
1058 LabelGraphics
1059 [
1060 text "null"
1061 outline "#000000"
1062 fill "#FFFFFF"
1063 fontSize 16
1064 fontName "Monospace"
1065 autoSizePolicy "node_width"
1066 anchor "t"
1067 borderDistance 0.0
1068 ]
1069 LabelGraphics
1070 [
1071 text "
1072 FunctionalElement class
1073 Function class
1074 "
1075 fontSize 14
1076 fontName "Consolas"
1077 alignment "left"
1078 anchor "tl"
1079 borderDistance 6
1080 ]
1081 ]
1082
1083 node
1084 [
1085 id 7
1086 graphics
1087 [
1088 w 112.2
1089 h 26
1090 type "rectangle"
1091 fill "#FFFFFF"
1092 fill2 "#FFFFFF"
1093 outline "#000000"
1094 ]
1095 LabelGraphics
1096 [
1097 text "New Integers"
1098 outline "#000000"
1099 fill "#FFFFFF"
1100 fontSize 16
1101 fontName "Monospace"
1102 autoSizePolicy "node_width"
1103 anchor "t"
1104 borderDistance 0.0
1105 ]
1106 LabelGraphics
1107 [
1108 text "
1109 "
1110 fontSize 14
1111 fontName "Consolas"
1112 alignment "left"
1113 anchor "tl"
1114 borderDistance 6
1115 ]
1116 ]
1117
1118 node
1119 [
1120 id 8
1121 graphics
1122 [
1123 w 85.80000000000001
1124 h 26
1125 type "rectangle"
1126 fill "#FFFFFF"
1127 fill2 "#FFFFFF"
1128 outline "#000000"
1129 ]
1130 LabelGraphics
1131 [
1132 text "New Reals"
1133 outline "#000000"
1134 fill "#FFFFFF"
1135 fontSize 16
1136 fontName "Monospace"
1137 autoSizePolicy "node_width"
1138 anchor "t"
1139 borderDistance 0.0
1140 ]
1141 LabelGraphics
1142 [
1143 text "
1144 "
1145 fontSize 14
1146 fontName "Consolas"
1147 alignment "left"
1148 anchor "tl"
1149 borderDistance 6
1150 ]
1151 ]
1152
1153 node
1154 [
1155 id 9
1156 graphics
1157 [
1158 w 103.4
1159 h 26
1160 type "rectangle"
1161 fill "#FFFFFF"
1162 fill2 "#FFFFFF"
1163 outline "#000000"
1164 ]
1165 LabelGraphics
1166 [
1167 text "New Strings"
1168 outline "#000000"
1169 fill "#FFFFFF"
1170 fontSize 16
1171 fontName "Monospace"
1172 autoSizePolicy "node_width"
1173 anchor "t"
1174 borderDistance 0.0
1175 ]
1176 LabelGraphics
1177 [
1178 text "
1179 "
1180 fontSize 14
1181 fontName "Consolas"
1182 alignment "left"
1183 anchor "tl"
1184 borderDistance 6
1185 ]
1186 ]
1187
1188 node
1189 [
1190 id 10
1191 graphics
1192 [
1193 w 103.4
1194 h 26
1195 type "rectangle"
1196 fill "#FFFFFF"
1197 fill2 "#FFFFFF"
1198 outline "#000000"
1199 ]
1200 LabelGraphics
1201 [
1202 text "New Objects"
1203 outline "#000000"
1204 fill "#FFFFFF"
1205 fontSize 16
1206 fontName "Monospace"
1207 autoSizePolicy "node_width"
1208 anchor "t"
1209 borderDistance 0.0
1210 ]
1211 LabelGraphics
1212 [
1213 text "
1214 "
1215 fontSize 14
1216 fontName "Consolas"
1217 alignment "left"
1218 anchor "tl"
1219 borderDistance 6
1220 ]
1221 ]
1222 edge
1223 [
1224 source 3
1225 target 6
1226 graphics
1227 [
1228 fill "#000000"
1229 width 3
1230 targetArrow "standard"
1231 ]
1232 LabelGraphics
1233 [
1234 text "rootElements reference FunctionalArchitectureModel"
1235 fontSize 14
1236 fontName "Consolas"
1237 configuration "AutoFlippingLabel"
1238 model "six_pos"
1239 position "thead"
1240 ]
1241 ]
1242]
1243graph
1244[
1245 node
1246 [
1247 id 0
1248 graphics
1249 [
1250 w 226.60000000000002
1251 h 40
1252 type "rectangle"
1253 fill "#FFFFFF"
1254 fill2 "#FFFFFF"
1255 outline "#000000"
1256 ]
1257 LabelGraphics
1258 [
1259 text "Root literal FunctionType"
1260 outline "#000000"
1261 fill "#FFFFFF"
1262 fontSize 16
1263 fontName "Monospace"
1264 autoSizePolicy "node_width"
1265 anchor "t"
1266 borderDistance 0.0
1267 ]
1268 LabelGraphics
1269 [
1270 text "
1271 FunctionType enum
1272 "
1273 fontSize 14
1274 fontName "Consolas"
1275 alignment "left"
1276 anchor "tl"
1277 borderDistance 6
1278 ]
1279 ]
1280
1281 node
1282 [
1283 id 1
1284 graphics
1285 [
1286 w 297.0
1287 h 40
1288 type "rectangle"
1289 fill "#FFFFFF"
1290 fill2 "#FFFFFF"
1291 outline "#000000"
1292 ]
1293 LabelGraphics
1294 [
1295 text "Intermediate literal FunctionType"
1296 outline "#000000"
1297 fill "#FFFFFF"
1298 fontSize 16
1299 fontName "Monospace"
1300 autoSizePolicy "node_width"
1301 anchor "t"
1302 borderDistance 0.0
1303 ]
1304 LabelGraphics
1305 [
1306 text "
1307 FunctionType enum
1308 "
1309 fontSize 14
1310 fontName "Consolas"
1311 alignment "left"
1312 anchor "tl"
1313 borderDistance 6
1314 ]
1315 ]
1316
1317 node
1318 [
1319 id 2
1320 graphics
1321 [
1322 w 226.60000000000002
1323 h 40
1324 type "rectangle"
1325 fill "#FFFFFF"
1326 fill2 "#FFFFFF"
1327 outline "#000000"
1328 ]
1329 LabelGraphics
1330 [
1331 text "Leaf literal FunctionType"
1332 outline "#000000"
1333 fill "#FFFFFF"
1334 fontSize 16
1335 fontName "Monospace"
1336 autoSizePolicy "node_width"
1337 anchor "t"
1338 borderDistance 0.0
1339 ]
1340 LabelGraphics
1341 [
1342 text "
1343 FunctionType enum
1344 "
1345 fontSize 14
1346 fontName "Consolas"
1347 alignment "left"
1348 anchor "tl"
1349 borderDistance 6
1350 ]
1351 ]
1352
1353 node
1354 [
1355 id 3
1356 graphics
1357 [
1358 w 361.90000000000003
1359 h 54
1360 type "rectangle"
1361 fill "#FFFFFF"
1362 fill2 "#FFFFFF"
1363 outline "#000000"
1364 ]
1365 LabelGraphics
1366 [
1367 text "o 1"
1368 outline "#000000"
1369 fill "#FFFFFF"
1370 fontSize 16
1371 fontName "Monospace"
1372 autoSizePolicy "node_width"
1373 anchor "t"
1374 borderDistance 0.0
1375 ]
1376 LabelGraphics
1377 [
1378 text "
1379 FunctionalArchitectureModel class DefinedPart
1380 FunctionalArchitectureModel class
1381 "
1382 fontSize 14
1383 fontName "Consolas"
1384 alignment "left"
1385 anchor "tl"
1386 borderDistance 6
1387 ]
1388 ]
1389
1390 node
1391 [
1392 id 4
1393 graphics
1394 [
1395 w 41.800000000000004
1396 h 26
1397 type "rectangle"
1398 fill "#FFFFFF"
1399 fill2 "#FFFFFF"
1400 outline "#000000"
1401 ]
1402 LabelGraphics
1403 [
1404 text "true"
1405 outline "#000000"
1406 fill "#FFFFFF"
1407 fontSize 16
1408 fontName "Monospace"
1409 autoSizePolicy "node_width"
1410 anchor "t"
1411 borderDistance 0.0
1412 ]
1413 LabelGraphics
1414 [
1415 text "
1416 "
1417 fontSize 14
1418 fontName "Consolas"
1419 alignment "left"
1420 anchor "tl"
1421 borderDistance 6
1422 ]
1423 ]
1424
1425 node
1426 [
1427 id 5
1428 graphics
1429 [
1430 w 50.6
1431 h 26
1432 type "rectangle"
1433 fill "#FFFFFF"
1434 fill2 "#FFFFFF"
1435 outline "#000000"
1436 ]
1437 LabelGraphics
1438 [
1439 text "false"
1440 outline "#000000"
1441 fill "#FFFFFF"
1442 fontSize 16
1443 fontName "Monospace"
1444 autoSizePolicy "node_width"
1445 anchor "t"
1446 borderDistance 0.0
1447 ]
1448 LabelGraphics
1449 [
1450 text "
1451 "
1452 fontSize 14
1453 fontName "Consolas"
1454 alignment "left"
1455 anchor "tl"
1456 borderDistance 6
1457 ]
1458 ]
1459
1460 node
1461 [
1462 id 6
1463 graphics
1464 [
1465 w 192.50000000000003
1466 h 54
1467 type "rectangle"
1468 fill "#FFFFFF"
1469 fill2 "#FFFFFF"
1470 outline "#000000"
1471 ]
1472 LabelGraphics
1473 [
1474 text "null"
1475 outline "#000000"
1476 fill "#FFFFFF"
1477 fontSize 16
1478 fontName "Monospace"
1479 autoSizePolicy "node_width"
1480 anchor "t"
1481 borderDistance 0.0
1482 ]
1483 LabelGraphics
1484 [
1485 text "
1486 FunctionalElement class
1487 Function class
1488 "
1489 fontSize 14
1490 fontName "Consolas"
1491 alignment "left"
1492 anchor "tl"
1493 borderDistance 6
1494 ]
1495 ]
1496
1497 node
1498 [
1499 id 7
1500 graphics
1501 [
1502 w 112.2
1503 h 26
1504 type "rectangle"
1505 fill "#FFFFFF"
1506 fill2 "#FFFFFF"
1507 outline "#000000"
1508 ]
1509 LabelGraphics
1510 [
1511 text "New Integers"
1512 outline "#000000"
1513 fill "#FFFFFF"
1514 fontSize 16
1515 fontName "Monospace"
1516 autoSizePolicy "node_width"
1517 anchor "t"
1518 borderDistance 0.0
1519 ]
1520 LabelGraphics
1521 [
1522 text "
1523 "
1524 fontSize 14
1525 fontName "Consolas"
1526 alignment "left"
1527 anchor "tl"
1528 borderDistance 6
1529 ]
1530 ]
1531
1532 node
1533 [
1534 id 8
1535 graphics
1536 [
1537 w 85.80000000000001
1538 h 26
1539 type "rectangle"
1540 fill "#FFFFFF"
1541 fill2 "#FFFFFF"
1542 outline "#000000"
1543 ]
1544 LabelGraphics
1545 [
1546 text "New Reals"
1547 outline "#000000"
1548 fill "#FFFFFF"
1549 fontSize 16
1550 fontName "Monospace"
1551 autoSizePolicy "node_width"
1552 anchor "t"
1553 borderDistance 0.0
1554 ]
1555 LabelGraphics
1556 [
1557 text "
1558 "
1559 fontSize 14
1560 fontName "Consolas"
1561 alignment "left"
1562 anchor "tl"
1563 borderDistance 6
1564 ]
1565 ]
1566
1567 node
1568 [
1569 id 9
1570 graphics
1571 [
1572 w 103.4
1573 h 26
1574 type "rectangle"
1575 fill "#FFFFFF"
1576 fill2 "#FFFFFF"
1577 outline "#000000"
1578 ]
1579 LabelGraphics
1580 [
1581 text "New Strings"
1582 outline "#000000"
1583 fill "#FFFFFF"
1584 fontSize 16
1585 fontName "Monospace"
1586 autoSizePolicy "node_width"
1587 anchor "t"
1588 borderDistance 0.0
1589 ]
1590 LabelGraphics
1591 [
1592 text "
1593 "
1594 fontSize 14
1595 fontName "Consolas"
1596 alignment "left"
1597 anchor "tl"
1598 borderDistance 6
1599 ]
1600 ]
1601
1602 node
1603 [
1604 id 10
1605 graphics
1606 [
1607 w 103.4
1608 h 26
1609 type "rectangle"
1610 fill "#FFFFFF"
1611 fill2 "#FFFFFF"
1612 outline "#000000"
1613 ]
1614 LabelGraphics
1615 [
1616 text "New Objects"
1617 outline "#000000"
1618 fill "#FFFFFF"
1619 fontSize 16
1620 fontName "Monospace"
1621 autoSizePolicy "node_width"
1622 anchor "t"
1623 borderDistance 0.0
1624 ]
1625 LabelGraphics
1626 [
1627 text "
1628 "
1629 fontSize 14
1630 fontName "Consolas"
1631 alignment "left"
1632 anchor "tl"
1633 borderDistance 6
1634 ]
1635 ]
1636 edge
1637 [
1638 source 3
1639 target 6
1640 graphics
1641 [
1642 fill "#000000"
1643 width 3
1644 targetArrow "standard"
1645 ]
1646 LabelGraphics
1647 [
1648 text "rootElements reference FunctionalArchitectureModel"
1649 fontSize 14
1650 fontName "Consolas"
1651 configuration "AutoFlippingLabel"
1652 model "six_pos"
1653 position "thead"
1654 ]
1655 ]
1656]
1657graph
1658[
1659 node
1660 [
1661 id 0
1662 graphics
1663 [
1664 w 226.60000000000002
1665 h 40
1666 type "rectangle"
1667 fill "#FFFFFF"
1668 fill2 "#FFFFFF"
1669 outline "#000000"
1670 ]
1671 LabelGraphics
1672 [
1673 text "Root literal FunctionType"
1674 outline "#000000"
1675 fill "#FFFFFF"
1676 fontSize 16
1677 fontName "Monospace"
1678 autoSizePolicy "node_width"
1679 anchor "t"
1680 borderDistance 0.0
1681 ]
1682 LabelGraphics
1683 [
1684 text "
1685 FunctionType enum
1686 "
1687 fontSize 14
1688 fontName "Consolas"
1689 alignment "left"
1690 anchor "tl"
1691 borderDistance 6
1692 ]
1693 ]
1694
1695 node
1696 [
1697 id 1
1698 graphics
1699 [
1700 w 297.0
1701 h 40
1702 type "rectangle"
1703 fill "#FFFFFF"
1704 fill2 "#FFFFFF"
1705 outline "#000000"
1706 ]
1707 LabelGraphics
1708 [
1709 text "Intermediate literal FunctionType"
1710 outline "#000000"
1711 fill "#FFFFFF"
1712 fontSize 16
1713 fontName "Monospace"
1714 autoSizePolicy "node_width"
1715 anchor "t"
1716 borderDistance 0.0
1717 ]
1718 LabelGraphics
1719 [
1720 text "
1721 FunctionType enum
1722 "
1723 fontSize 14
1724 fontName "Consolas"
1725 alignment "left"
1726 anchor "tl"
1727 borderDistance 6
1728 ]
1729 ]
1730
1731 node
1732 [
1733 id 2
1734 graphics
1735 [
1736 w 226.60000000000002
1737 h 40
1738 type "rectangle"
1739 fill "#FFFFFF"
1740 fill2 "#FFFFFF"
1741 outline "#000000"
1742 ]
1743 LabelGraphics
1744 [
1745 text "Leaf literal FunctionType"
1746 outline "#000000"
1747 fill "#FFFFFF"
1748 fontSize 16
1749 fontName "Monospace"
1750 autoSizePolicy "node_width"
1751 anchor "t"
1752 borderDistance 0.0
1753 ]
1754 LabelGraphics
1755 [
1756 text "
1757 FunctionType enum
1758 "
1759 fontSize 14
1760 fontName "Consolas"
1761 alignment "left"
1762 anchor "tl"
1763 borderDistance 6
1764 ]
1765 ]
1766
1767 node
1768 [
1769 id 3
1770 graphics
1771 [
1772 w 361.90000000000003
1773 h 54
1774 type "rectangle"
1775 fill "#FFFFFF"
1776 fill2 "#FFFFFF"
1777 outline "#000000"
1778 ]
1779 LabelGraphics
1780 [
1781 text "o 1"
1782 outline "#000000"
1783 fill "#FFFFFF"
1784 fontSize 16
1785 fontName "Monospace"
1786 autoSizePolicy "node_width"
1787 anchor "t"
1788 borderDistance 0.0
1789 ]
1790 LabelGraphics
1791 [
1792 text "
1793 FunctionalArchitectureModel class DefinedPart
1794 FunctionalArchitectureModel class
1795 "
1796 fontSize 14
1797 fontName "Consolas"
1798 alignment "left"
1799 anchor "tl"
1800 borderDistance 6
1801 ]
1802 ]
1803
1804 node
1805 [
1806 id 4
1807 graphics
1808 [
1809 w 41.800000000000004
1810 h 26
1811 type "rectangle"
1812 fill "#FFFFFF"
1813 fill2 "#FFFFFF"
1814 outline "#000000"
1815 ]
1816 LabelGraphics
1817 [
1818 text "true"
1819 outline "#000000"
1820 fill "#FFFFFF"
1821 fontSize 16
1822 fontName "Monospace"
1823 autoSizePolicy "node_width"
1824 anchor "t"
1825 borderDistance 0.0
1826 ]
1827 LabelGraphics
1828 [
1829 text "
1830 "
1831 fontSize 14
1832 fontName "Consolas"
1833 alignment "left"
1834 anchor "tl"
1835 borderDistance 6
1836 ]
1837 ]
1838
1839 node
1840 [
1841 id 5
1842 graphics
1843 [
1844 w 50.6
1845 h 26
1846 type "rectangle"
1847 fill "#FFFFFF"
1848 fill2 "#FFFFFF"
1849 outline "#000000"
1850 ]
1851 LabelGraphics
1852 [
1853 text "false"
1854 outline "#000000"
1855 fill "#FFFFFF"
1856 fontSize 16
1857 fontName "Monospace"
1858 autoSizePolicy "node_width"
1859 anchor "t"
1860 borderDistance 0.0
1861 ]
1862 LabelGraphics
1863 [
1864 text "
1865 "
1866 fontSize 14
1867 fontName "Consolas"
1868 alignment "left"
1869 anchor "tl"
1870 borderDistance 6
1871 ]
1872 ]
1873
1874 node
1875 [
1876 id 6
1877 graphics
1878 [
1879 w 192.50000000000003
1880 h 54
1881 type "rectangle"
1882 fill "#FFFFFF"
1883 fill2 "#FFFFFF"
1884 outline "#000000"
1885 ]
1886 LabelGraphics
1887 [
1888 text "null"
1889 outline "#000000"
1890 fill "#FFFFFF"
1891 fontSize 16
1892 fontName "Monospace"
1893 autoSizePolicy "node_width"
1894 anchor "t"
1895 borderDistance 0.0
1896 ]
1897 LabelGraphics
1898 [
1899 text "
1900 FunctionalElement class
1901 Function class
1902 "
1903 fontSize 14
1904 fontName "Consolas"
1905 alignment "left"
1906 anchor "tl"
1907 borderDistance 6
1908 ]
1909 ]
1910
1911 node
1912 [
1913 id 7
1914 graphics
1915 [
1916 w 112.2
1917 h 26
1918 type "rectangle"
1919 fill "#FFFFFF"
1920 fill2 "#FFFFFF"
1921 outline "#000000"
1922 ]
1923 LabelGraphics
1924 [
1925 text "New Integers"
1926 outline "#000000"
1927 fill "#FFFFFF"
1928 fontSize 16
1929 fontName "Monospace"
1930 autoSizePolicy "node_width"
1931 anchor "t"
1932 borderDistance 0.0
1933 ]
1934 LabelGraphics
1935 [
1936 text "
1937 "
1938 fontSize 14
1939 fontName "Consolas"
1940 alignment "left"
1941 anchor "tl"
1942 borderDistance 6
1943 ]
1944 ]
1945
1946 node
1947 [
1948 id 8
1949 graphics
1950 [
1951 w 85.80000000000001
1952 h 26
1953 type "rectangle"
1954 fill "#FFFFFF"
1955 fill2 "#FFFFFF"
1956 outline "#000000"
1957 ]
1958 LabelGraphics
1959 [
1960 text "New Reals"
1961 outline "#000000"
1962 fill "#FFFFFF"
1963 fontSize 16
1964 fontName "Monospace"
1965 autoSizePolicy "node_width"
1966 anchor "t"
1967 borderDistance 0.0
1968 ]
1969 LabelGraphics
1970 [
1971 text "
1972 "
1973 fontSize 14
1974 fontName "Consolas"
1975 alignment "left"
1976 anchor "tl"
1977 borderDistance 6
1978 ]
1979 ]
1980
1981 node
1982 [
1983 id 9
1984 graphics
1985 [
1986 w 103.4
1987 h 26
1988 type "rectangle"
1989 fill "#FFFFFF"
1990 fill2 "#FFFFFF"
1991 outline "#000000"
1992 ]
1993 LabelGraphics
1994 [
1995 text "New Strings"
1996 outline "#000000"
1997 fill "#FFFFFF"
1998 fontSize 16
1999 fontName "Monospace"
2000 autoSizePolicy "node_width"
2001 anchor "t"
2002 borderDistance 0.0
2003 ]
2004 LabelGraphics
2005 [
2006 text "
2007 "
2008 fontSize 14
2009 fontName "Consolas"
2010 alignment "left"
2011 anchor "tl"
2012 borderDistance 6
2013 ]
2014 ]
2015
2016 node
2017 [
2018 id 10
2019 graphics
2020 [
2021 w 103.4
2022 h 26
2023 type "rectangle"
2024 fill "#FFFFFF"
2025 fill2 "#FFFFFF"
2026 outline "#000000"
2027 ]
2028 LabelGraphics
2029 [
2030 text "New Objects"
2031 outline "#000000"
2032 fill "#FFFFFF"
2033 fontSize 16
2034 fontName "Monospace"
2035 autoSizePolicy "node_width"
2036 anchor "t"
2037 borderDistance 0.0
2038 ]
2039 LabelGraphics
2040 [
2041 text "
2042 "
2043 fontSize 14
2044 fontName "Consolas"
2045 alignment "left"
2046 anchor "tl"
2047 borderDistance 6
2048 ]
2049 ]
2050 edge
2051 [
2052 source 6
2053 target 3
2054 graphics
2055 [
2056 fill "#000000"
2057 targetArrow "standard"
2058 ]
2059 LabelGraphics
2060 [
2061 text "model reference FunctionalElement"
2062 fontSize 14
2063 fontName "Consolas"
2064 configuration "AutoFlippingLabel"
2065 model "six_pos"
2066 position "thead"
2067 ]
2068 ]
2069 edge
2070 [
2071 source 3
2072 target 6
2073 graphics
2074 [
2075 fill "#000000"
2076 width 3
2077 targetArrow "standard"
2078 ]
2079 LabelGraphics
2080 [
2081 text "rootElements reference FunctionalArchitectureModel"
2082 fontSize 14
2083 fontName "Consolas"
2084 configuration "AutoFlippingLabel"
2085 model "six_pos"
2086 position "thead"
2087 ]
2088 ]
2089 edge
2090 [
2091 source 6
2092 target 0
2093 graphics
2094 [
2095 fill "#000000"
2096 targetArrow "standard"
2097 ]
2098 LabelGraphics
2099 [
2100 text "type attribute Function"
2101 fontSize 14
2102 fontName "Consolas"
2103 configuration "AutoFlippingLabel"
2104 model "six_pos"
2105 position "thead"
2106 ]
2107 ]
2108]
2109graph
2110[
2111 node
2112 [
2113 id 0
2114 graphics
2115 [
2116 w 226.60000000000002
2117 h 40
2118 type "rectangle"
2119 fill "#FFFFFF"
2120 fill2 "#FFFFFF"
2121 outline "#000000"
2122 ]
2123 LabelGraphics
2124 [
2125 text "Root literal FunctionType"
2126 outline "#000000"
2127 fill "#FFFFFF"
2128 fontSize 16
2129 fontName "Monospace"
2130 autoSizePolicy "node_width"
2131 anchor "t"
2132 borderDistance 0.0
2133 ]
2134 LabelGraphics
2135 [
2136 text "
2137 FunctionType enum
2138 "
2139 fontSize 14
2140 fontName "Consolas"
2141 alignment "left"
2142 anchor "tl"
2143 borderDistance 6
2144 ]
2145 ]
2146
2147 node
2148 [
2149 id 1
2150 graphics
2151 [
2152 w 297.0
2153 h 40
2154 type "rectangle"
2155 fill "#FFFFFF"
2156 fill2 "#FFFFFF"
2157 outline "#000000"
2158 ]
2159 LabelGraphics
2160 [
2161 text "Intermediate literal FunctionType"
2162 outline "#000000"
2163 fill "#FFFFFF"
2164 fontSize 16
2165 fontName "Monospace"
2166 autoSizePolicy "node_width"
2167 anchor "t"
2168 borderDistance 0.0
2169 ]
2170 LabelGraphics
2171 [
2172 text "
2173 FunctionType enum
2174 "
2175 fontSize 14
2176 fontName "Consolas"
2177 alignment "left"
2178 anchor "tl"
2179 borderDistance 6
2180 ]
2181 ]
2182
2183 node
2184 [
2185 id 2
2186 graphics
2187 [
2188 w 226.60000000000002
2189 h 40
2190 type "rectangle"
2191 fill "#FFFFFF"
2192 fill2 "#FFFFFF"
2193 outline "#000000"
2194 ]
2195 LabelGraphics
2196 [
2197 text "Leaf literal FunctionType"
2198 outline "#000000"
2199 fill "#FFFFFF"
2200 fontSize 16
2201 fontName "Monospace"
2202 autoSizePolicy "node_width"
2203 anchor "t"
2204 borderDistance 0.0
2205 ]
2206 LabelGraphics
2207 [
2208 text "
2209 FunctionType enum
2210 "
2211 fontSize 14
2212 fontName "Consolas"
2213 alignment "left"
2214 anchor "tl"
2215 borderDistance 6
2216 ]
2217 ]
2218
2219 node
2220 [
2221 id 3
2222 graphics
2223 [
2224 w 361.90000000000003
2225 h 54
2226 type "rectangle"
2227 fill "#FFFFFF"
2228 fill2 "#FFFFFF"
2229 outline "#000000"
2230 ]
2231 LabelGraphics
2232 [
2233 text "o 1"
2234 outline "#000000"
2235 fill "#FFFFFF"
2236 fontSize 16
2237 fontName "Monospace"
2238 autoSizePolicy "node_width"
2239 anchor "t"
2240 borderDistance 0.0
2241 ]
2242 LabelGraphics
2243 [
2244 text "
2245 FunctionalArchitectureModel class DefinedPart
2246 FunctionalArchitectureModel class
2247 "
2248 fontSize 14
2249 fontName "Consolas"
2250 alignment "left"
2251 anchor "tl"
2252 borderDistance 6
2253 ]
2254 ]
2255
2256 node
2257 [
2258 id 4
2259 graphics
2260 [
2261 w 41.800000000000004
2262 h 26
2263 type "rectangle"
2264 fill "#FFFFFF"
2265 fill2 "#FFFFFF"
2266 outline "#000000"
2267 ]
2268 LabelGraphics
2269 [
2270 text "true"
2271 outline "#000000"
2272 fill "#FFFFFF"
2273 fontSize 16
2274 fontName "Monospace"
2275 autoSizePolicy "node_width"
2276 anchor "t"
2277 borderDistance 0.0
2278 ]
2279 LabelGraphics
2280 [
2281 text "
2282 "
2283 fontSize 14
2284 fontName "Consolas"
2285 alignment "left"
2286 anchor "tl"
2287 borderDistance 6
2288 ]
2289 ]
2290
2291 node
2292 [
2293 id 5
2294 graphics
2295 [
2296 w 50.6
2297 h 26
2298 type "rectangle"
2299 fill "#FFFFFF"
2300 fill2 "#FFFFFF"
2301 outline "#000000"
2302 ]
2303 LabelGraphics
2304 [
2305 text "false"
2306 outline "#000000"
2307 fill "#FFFFFF"
2308 fontSize 16
2309 fontName "Monospace"
2310 autoSizePolicy "node_width"
2311 anchor "t"
2312 borderDistance 0.0
2313 ]
2314 LabelGraphics
2315 [
2316 text "
2317 "
2318 fontSize 14
2319 fontName "Consolas"
2320 alignment "left"
2321 anchor "tl"
2322 borderDistance 6
2323 ]
2324 ]
2325
2326 node
2327 [
2328 id 6
2329 graphics
2330 [
2331 w 192.50000000000003
2332 h 54
2333 type "rectangle"
2334 fill "#FFFFFF"
2335 fill2 "#FFFFFF"
2336 outline "#000000"
2337 ]
2338 LabelGraphics
2339 [
2340 text "null"
2341 outline "#000000"
2342 fill "#FFFFFF"
2343 fontSize 16
2344 fontName "Monospace"
2345 autoSizePolicy "node_width"
2346 anchor "t"
2347 borderDistance 0.0
2348 ]
2349 LabelGraphics
2350 [
2351 text "
2352 FunctionalElement class
2353 Function class
2354 "
2355 fontSize 14
2356 fontName "Consolas"
2357 alignment "left"
2358 anchor "tl"
2359 borderDistance 6
2360 ]
2361 ]
2362
2363 node
2364 [
2365 id 7
2366 graphics
2367 [
2368 w 112.2
2369 h 26
2370 type "rectangle"
2371 fill "#FFFFFF"
2372 fill2 "#FFFFFF"
2373 outline "#000000"
2374 ]
2375 LabelGraphics
2376 [
2377 text "New Integers"
2378 outline "#000000"
2379 fill "#FFFFFF"
2380 fontSize 16
2381 fontName "Monospace"
2382 autoSizePolicy "node_width"
2383 anchor "t"
2384 borderDistance 0.0
2385 ]
2386 LabelGraphics
2387 [
2388 text "
2389 "
2390 fontSize 14
2391 fontName "Consolas"
2392 alignment "left"
2393 anchor "tl"
2394 borderDistance 6
2395 ]
2396 ]
2397
2398 node
2399 [
2400 id 8
2401 graphics
2402 [
2403 w 85.80000000000001
2404 h 26
2405 type "rectangle"
2406 fill "#FFFFFF"
2407 fill2 "#FFFFFF"
2408 outline "#000000"
2409 ]
2410 LabelGraphics
2411 [
2412 text "New Reals"
2413 outline "#000000"
2414 fill "#FFFFFF"
2415 fontSize 16
2416 fontName "Monospace"
2417 autoSizePolicy "node_width"
2418 anchor "t"
2419 borderDistance 0.0
2420 ]
2421 LabelGraphics
2422 [
2423 text "
2424 "
2425 fontSize 14
2426 fontName "Consolas"
2427 alignment "left"
2428 anchor "tl"
2429 borderDistance 6
2430 ]
2431 ]
2432
2433 node
2434 [
2435 id 9
2436 graphics
2437 [
2438 w 103.4
2439 h 26
2440 type "rectangle"
2441 fill "#FFFFFF"
2442 fill2 "#FFFFFF"
2443 outline "#000000"
2444 ]
2445 LabelGraphics
2446 [
2447 text "New Strings"
2448 outline "#000000"
2449 fill "#FFFFFF"
2450 fontSize 16
2451 fontName "Monospace"
2452 autoSizePolicy "node_width"
2453 anchor "t"
2454 borderDistance 0.0
2455 ]
2456 LabelGraphics
2457 [
2458 text "
2459 "
2460 fontSize 14
2461 fontName "Consolas"
2462 alignment "left"
2463 anchor "tl"
2464 borderDistance 6
2465 ]
2466 ]
2467
2468 node
2469 [
2470 id 10
2471 graphics
2472 [
2473 w 103.4
2474 h 26
2475 type "rectangle"
2476 fill "#FFFFFF"
2477 fill2 "#FFFFFF"
2478 outline "#000000"
2479 ]
2480 LabelGraphics
2481 [
2482 text "New Objects"
2483 outline "#000000"
2484 fill "#FFFFFF"
2485 fontSize 16
2486 fontName "Monospace"
2487 autoSizePolicy "node_width"
2488 anchor "t"
2489 borderDistance 0.0
2490 ]
2491 LabelGraphics
2492 [
2493 text "
2494 "
2495 fontSize 14
2496 fontName "Consolas"
2497 alignment "left"
2498 anchor "tl"
2499 borderDistance 6
2500 ]
2501 ]
2502 edge
2503 [
2504 source 6
2505 target 3
2506 graphics
2507 [
2508 fill "#000000"
2509 targetArrow "standard"
2510 ]
2511 LabelGraphics
2512 [
2513 text "model reference FunctionalElement"
2514 fontSize 14
2515 fontName "Consolas"
2516 configuration "AutoFlippingLabel"
2517 model "six_pos"
2518 position "thead"
2519 ]
2520 ]
2521 edge
2522 [
2523 source 3
2524 target 6
2525 graphics
2526 [
2527 fill "#000000"
2528 width 3
2529 targetArrow "standard"
2530 ]
2531 LabelGraphics
2532 [
2533 text "rootElements reference FunctionalArchitectureModel"
2534 fontSize 14
2535 fontName "Consolas"
2536 configuration "AutoFlippingLabel"
2537 model "six_pos"
2538 position "thead"
2539 ]
2540 ]
2541 edge
2542 [
2543 source 6
2544 target 1
2545 graphics
2546 [
2547 fill "#000000"
2548 targetArrow "standard"
2549 ]
2550 LabelGraphics
2551 [
2552 text "type attribute Function"
2553 fontSize 14
2554 fontName "Consolas"
2555 configuration "AutoFlippingLabel"
2556 model "six_pos"
2557 position "thead"
2558 ]
2559 ]
2560]
2561graph
2562[
2563 node
2564 [
2565 id 0
2566 graphics
2567 [
2568 w 226.60000000000002
2569 h 40
2570 type "rectangle"
2571 fill "#FFFFFF"
2572 fill2 "#FFFFFF"
2573 outline "#000000"
2574 ]
2575 LabelGraphics
2576 [
2577 text "Root literal FunctionType"
2578 outline "#000000"
2579 fill "#FFFFFF"
2580 fontSize 16
2581 fontName "Monospace"
2582 autoSizePolicy "node_width"
2583 anchor "t"
2584 borderDistance 0.0
2585 ]
2586 LabelGraphics
2587 [
2588 text "
2589 FunctionType enum
2590 "
2591 fontSize 14
2592 fontName "Consolas"
2593 alignment "left"
2594 anchor "tl"
2595 borderDistance 6
2596 ]
2597 ]
2598
2599 node
2600 [
2601 id 1
2602 graphics
2603 [
2604 w 297.0
2605 h 40
2606 type "rectangle"
2607 fill "#FFFFFF"
2608 fill2 "#FFFFFF"
2609 outline "#000000"
2610 ]
2611 LabelGraphics
2612 [
2613 text "Intermediate literal FunctionType"
2614 outline "#000000"
2615 fill "#FFFFFF"
2616 fontSize 16
2617 fontName "Monospace"
2618 autoSizePolicy "node_width"
2619 anchor "t"
2620 borderDistance 0.0
2621 ]
2622 LabelGraphics
2623 [
2624 text "
2625 FunctionType enum
2626 "
2627 fontSize 14
2628 fontName "Consolas"
2629 alignment "left"
2630 anchor "tl"
2631 borderDistance 6
2632 ]
2633 ]
2634
2635 node
2636 [
2637 id 2
2638 graphics
2639 [
2640 w 226.60000000000002
2641 h 40
2642 type "rectangle"
2643 fill "#FFFFFF"
2644 fill2 "#FFFFFF"
2645 outline "#000000"
2646 ]
2647 LabelGraphics
2648 [
2649 text "Leaf literal FunctionType"
2650 outline "#000000"
2651 fill "#FFFFFF"
2652 fontSize 16
2653 fontName "Monospace"
2654 autoSizePolicy "node_width"
2655 anchor "t"
2656 borderDistance 0.0
2657 ]
2658 LabelGraphics
2659 [
2660 text "
2661 FunctionType enum
2662 "
2663 fontSize 14
2664 fontName "Consolas"
2665 alignment "left"
2666 anchor "tl"
2667 borderDistance 6
2668 ]
2669 ]
2670
2671 node
2672 [
2673 id 3
2674 graphics
2675 [
2676 w 361.90000000000003
2677 h 54
2678 type "rectangle"
2679 fill "#FFFFFF"
2680 fill2 "#FFFFFF"
2681 outline "#000000"
2682 ]
2683 LabelGraphics
2684 [
2685 text "o 1"
2686 outline "#000000"
2687 fill "#FFFFFF"
2688 fontSize 16
2689 fontName "Monospace"
2690 autoSizePolicy "node_width"
2691 anchor "t"
2692 borderDistance 0.0
2693 ]
2694 LabelGraphics
2695 [
2696 text "
2697 FunctionalArchitectureModel class DefinedPart
2698 FunctionalArchitectureModel class
2699 "
2700 fontSize 14
2701 fontName "Consolas"
2702 alignment "left"
2703 anchor "tl"
2704 borderDistance 6
2705 ]
2706 ]
2707
2708 node
2709 [
2710 id 4
2711 graphics
2712 [
2713 w 41.800000000000004
2714 h 26
2715 type "rectangle"
2716 fill "#FFFFFF"
2717 fill2 "#FFFFFF"
2718 outline "#000000"
2719 ]
2720 LabelGraphics
2721 [
2722 text "true"
2723 outline "#000000"
2724 fill "#FFFFFF"
2725 fontSize 16
2726 fontName "Monospace"
2727 autoSizePolicy "node_width"
2728 anchor "t"
2729 borderDistance 0.0
2730 ]
2731 LabelGraphics
2732 [
2733 text "
2734 "
2735 fontSize 14
2736 fontName "Consolas"
2737 alignment "left"
2738 anchor "tl"
2739 borderDistance 6
2740 ]
2741 ]
2742
2743 node
2744 [
2745 id 5
2746 graphics
2747 [
2748 w 50.6
2749 h 26
2750 type "rectangle"
2751 fill "#FFFFFF"
2752 fill2 "#FFFFFF"
2753 outline "#000000"
2754 ]
2755 LabelGraphics
2756 [
2757 text "false"
2758 outline "#000000"
2759 fill "#FFFFFF"
2760 fontSize 16
2761 fontName "Monospace"
2762 autoSizePolicy "node_width"
2763 anchor "t"
2764 borderDistance 0.0
2765 ]
2766 LabelGraphics
2767 [
2768 text "
2769 "
2770 fontSize 14
2771 fontName "Consolas"
2772 alignment "left"
2773 anchor "tl"
2774 borderDistance 6
2775 ]
2776 ]
2777
2778 node
2779 [
2780 id 6
2781 graphics
2782 [
2783 w 192.50000000000003
2784 h 54
2785 type "rectangle"
2786 fill "#FFFFFF"
2787 fill2 "#FFFFFF"
2788 outline "#000000"
2789 ]
2790 LabelGraphics
2791 [
2792 text "null"
2793 outline "#000000"
2794 fill "#FFFFFF"
2795 fontSize 16
2796 fontName "Monospace"
2797 autoSizePolicy "node_width"
2798 anchor "t"
2799 borderDistance 0.0
2800 ]
2801 LabelGraphics
2802 [
2803 text "
2804 FunctionalElement class
2805 Function class
2806 "
2807 fontSize 14
2808 fontName "Consolas"
2809 alignment "left"
2810 anchor "tl"
2811 borderDistance 6
2812 ]
2813 ]
2814
2815 node
2816 [
2817 id 7
2818 graphics
2819 [
2820 w 112.2
2821 h 26
2822 type "rectangle"
2823 fill "#FFFFFF"
2824 fill2 "#FFFFFF"
2825 outline "#000000"
2826 ]
2827 LabelGraphics
2828 [
2829 text "New Integers"
2830 outline "#000000"
2831 fill "#FFFFFF"
2832 fontSize 16
2833 fontName "Monospace"
2834 autoSizePolicy "node_width"
2835 anchor "t"
2836 borderDistance 0.0
2837 ]
2838 LabelGraphics
2839 [
2840 text "
2841 "
2842 fontSize 14
2843 fontName "Consolas"
2844 alignment "left"
2845 anchor "tl"
2846 borderDistance 6
2847 ]
2848 ]
2849
2850 node
2851 [
2852 id 8
2853 graphics
2854 [
2855 w 85.80000000000001
2856 h 26
2857 type "rectangle"
2858 fill "#FFFFFF"
2859 fill2 "#FFFFFF"
2860 outline "#000000"
2861 ]
2862 LabelGraphics
2863 [
2864 text "New Reals"
2865 outline "#000000"
2866 fill "#FFFFFF"
2867 fontSize 16
2868 fontName "Monospace"
2869 autoSizePolicy "node_width"
2870 anchor "t"
2871 borderDistance 0.0
2872 ]
2873 LabelGraphics
2874 [
2875 text "
2876 "
2877 fontSize 14
2878 fontName "Consolas"
2879 alignment "left"
2880 anchor "tl"
2881 borderDistance 6
2882 ]
2883 ]
2884
2885 node
2886 [
2887 id 9
2888 graphics
2889 [
2890 w 103.4
2891 h 26
2892 type "rectangle"
2893 fill "#FFFFFF"
2894 fill2 "#FFFFFF"
2895 outline "#000000"
2896 ]
2897 LabelGraphics
2898 [
2899 text "New Strings"
2900 outline "#000000"
2901 fill "#FFFFFF"
2902 fontSize 16
2903 fontName "Monospace"
2904 autoSizePolicy "node_width"
2905 anchor "t"
2906 borderDistance 0.0
2907 ]
2908 LabelGraphics
2909 [
2910 text "
2911 "
2912 fontSize 14
2913 fontName "Consolas"
2914 alignment "left"
2915 anchor "tl"
2916 borderDistance 6
2917 ]
2918 ]
2919
2920 node
2921 [
2922 id 10
2923 graphics
2924 [
2925 w 103.4
2926 h 26
2927 type "rectangle"
2928 fill "#FFFFFF"
2929 fill2 "#FFFFFF"
2930 outline "#000000"
2931 ]
2932 LabelGraphics
2933 [
2934 text "New Objects"
2935 outline "#000000"
2936 fill "#FFFFFF"
2937 fontSize 16
2938 fontName "Monospace"
2939 autoSizePolicy "node_width"
2940 anchor "t"
2941 borderDistance 0.0
2942 ]
2943 LabelGraphics
2944 [
2945 text "
2946 "
2947 fontSize 14
2948 fontName "Consolas"
2949 alignment "left"
2950 anchor "tl"
2951 borderDistance 6
2952 ]
2953 ]
2954 edge
2955 [
2956 source 6
2957 target 3
2958 graphics
2959 [
2960 fill "#000000"
2961 targetArrow "standard"
2962 ]
2963 LabelGraphics
2964 [
2965 text "model reference FunctionalElement"
2966 fontSize 14
2967 fontName "Consolas"
2968 configuration "AutoFlippingLabel"
2969 model "six_pos"
2970 position "thead"
2971 ]
2972 ]
2973 edge
2974 [
2975 source 3
2976 target 6
2977 graphics
2978 [
2979 fill "#000000"
2980 width 3
2981 targetArrow "standard"
2982 ]
2983 LabelGraphics
2984 [
2985 text "rootElements reference FunctionalArchitectureModel"
2986 fontSize 14
2987 fontName "Consolas"
2988 configuration "AutoFlippingLabel"
2989 model "six_pos"
2990 position "thead"
2991 ]
2992 ]
2993 edge
2994 [
2995 source 6
2996 target 2
2997 graphics
2998 [
2999 fill "#000000"
3000 targetArrow "standard"
3001 ]
3002 LabelGraphics
3003 [
3004 text "type attribute Function"
3005 fontSize 14
3006 fontName "Consolas"
3007 configuration "AutoFlippingLabel"
3008 model "six_pos"
3009 position "thead"
3010 ]
3011 ]
3012]
3013graph
3014[
3015 node
3016 [
3017 id 0
3018 graphics
3019 [
3020 w 226.60000000000002
3021 h 40
3022 type "rectangle"
3023 fill "#FFFFFF"
3024 fill2 "#FFFFFF"
3025 outline "#000000"
3026 ]
3027 LabelGraphics
3028 [
3029 text "Root literal FunctionType"
3030 outline "#000000"
3031 fill "#FFFFFF"
3032 fontSize 16
3033 fontName "Monospace"
3034 autoSizePolicy "node_width"
3035 anchor "t"
3036 borderDistance 0.0
3037 ]
3038 LabelGraphics
3039 [
3040 text "
3041 FunctionType enum
3042 "
3043 fontSize 14
3044 fontName "Consolas"
3045 alignment "left"
3046 anchor "tl"
3047 borderDistance 6
3048 ]
3049 ]
3050
3051 node
3052 [
3053 id 1
3054 graphics
3055 [
3056 w 297.0
3057 h 40
3058 type "rectangle"
3059 fill "#FFFFFF"
3060 fill2 "#FFFFFF"
3061 outline "#000000"
3062 ]
3063 LabelGraphics
3064 [
3065 text "Intermediate literal FunctionType"
3066 outline "#000000"
3067 fill "#FFFFFF"
3068 fontSize 16
3069 fontName "Monospace"
3070 autoSizePolicy "node_width"
3071 anchor "t"
3072 borderDistance 0.0
3073 ]
3074 LabelGraphics
3075 [
3076 text "
3077 FunctionType enum
3078 "
3079 fontSize 14
3080 fontName "Consolas"
3081 alignment "left"
3082 anchor "tl"
3083 borderDistance 6
3084 ]
3085 ]
3086
3087 node
3088 [
3089 id 2
3090 graphics
3091 [
3092 w 226.60000000000002
3093 h 40
3094 type "rectangle"
3095 fill "#FFFFFF"
3096 fill2 "#FFFFFF"
3097 outline "#000000"
3098 ]
3099 LabelGraphics
3100 [
3101 text "Leaf literal FunctionType"
3102 outline "#000000"
3103 fill "#FFFFFF"
3104 fontSize 16
3105 fontName "Monospace"
3106 autoSizePolicy "node_width"
3107 anchor "t"
3108 borderDistance 0.0
3109 ]
3110 LabelGraphics
3111 [
3112 text "
3113 FunctionType enum
3114 "
3115 fontSize 14
3116 fontName "Consolas"
3117 alignment "left"
3118 anchor "tl"
3119 borderDistance 6
3120 ]
3121 ]
3122
3123 node
3124 [
3125 id 3
3126 graphics
3127 [
3128 w 361.90000000000003
3129 h 54
3130 type "rectangle"
3131 fill "#FFFFFF"
3132 fill2 "#FFFFFF"
3133 outline "#000000"
3134 ]
3135 LabelGraphics
3136 [
3137 text "o 1"
3138 outline "#000000"
3139 fill "#FFFFFF"
3140 fontSize 16
3141 fontName "Monospace"
3142 autoSizePolicy "node_width"
3143 anchor "t"
3144 borderDistance 0.0
3145 ]
3146 LabelGraphics
3147 [
3148 text "
3149 FunctionalArchitectureModel class DefinedPart
3150 FunctionalArchitectureModel class
3151 "
3152 fontSize 14
3153 fontName "Consolas"
3154 alignment "left"
3155 anchor "tl"
3156 borderDistance 6
3157 ]
3158 ]
3159
3160 node
3161 [
3162 id 4
3163 graphics
3164 [
3165 w 41.800000000000004
3166 h 26
3167 type "rectangle"
3168 fill "#FFFFFF"
3169 fill2 "#FFFFFF"
3170 outline "#000000"
3171 ]
3172 LabelGraphics
3173 [
3174 text "true"
3175 outline "#000000"
3176 fill "#FFFFFF"
3177 fontSize 16
3178 fontName "Monospace"
3179 autoSizePolicy "node_width"
3180 anchor "t"
3181 borderDistance 0.0
3182 ]
3183 LabelGraphics
3184 [
3185 text "
3186 "
3187 fontSize 14
3188 fontName "Consolas"
3189 alignment "left"
3190 anchor "tl"
3191 borderDistance 6
3192 ]
3193 ]
3194
3195 node
3196 [
3197 id 5
3198 graphics
3199 [
3200 w 50.6
3201 h 26
3202 type "rectangle"
3203 fill "#FFFFFF"
3204 fill2 "#FFFFFF"
3205 outline "#000000"
3206 ]
3207 LabelGraphics
3208 [
3209 text "false"
3210 outline "#000000"
3211 fill "#FFFFFF"
3212 fontSize 16
3213 fontName "Monospace"
3214 autoSizePolicy "node_width"
3215 anchor "t"
3216 borderDistance 0.0
3217 ]
3218 LabelGraphics
3219 [
3220 text "
3221 "
3222 fontSize 14
3223 fontName "Consolas"
3224 alignment "left"
3225 anchor "tl"
3226 borderDistance 6
3227 ]
3228 ]
3229
3230 node
3231 [
3232 id 6
3233 graphics
3234 [
3235 w 192.50000000000003
3236 h 54
3237 type "rectangle"
3238 fill "#FFFFFF"
3239 fill2 "#FFFFFF"
3240 outline "#000000"
3241 ]
3242 LabelGraphics
3243 [
3244 text "null"
3245 outline "#000000"
3246 fill "#FFFFFF"
3247 fontSize 16
3248 fontName "Monospace"
3249 autoSizePolicy "node_width"
3250 anchor "t"
3251 borderDistance 0.0
3252 ]
3253 LabelGraphics
3254 [
3255 text "
3256 FunctionalElement class
3257 Function class
3258 "
3259 fontSize 14
3260 fontName "Consolas"
3261 alignment "left"
3262 anchor "tl"
3263 borderDistance 6
3264 ]
3265 ]
3266
3267 node
3268 [
3269 id 7
3270 graphics
3271 [
3272 w 112.2
3273 h 26
3274 type "rectangle"
3275 fill "#FFFFFF"
3276 fill2 "#FFFFFF"
3277 outline "#000000"
3278 ]
3279 LabelGraphics
3280 [
3281 text "New Integers"
3282 outline "#000000"
3283 fill "#FFFFFF"
3284 fontSize 16
3285 fontName "Monospace"
3286 autoSizePolicy "node_width"
3287 anchor "t"
3288 borderDistance 0.0
3289 ]
3290 LabelGraphics
3291 [
3292 text "
3293 "
3294 fontSize 14
3295 fontName "Consolas"
3296 alignment "left"
3297 anchor "tl"
3298 borderDistance 6
3299 ]
3300 ]
3301
3302 node
3303 [
3304 id 8
3305 graphics
3306 [
3307 w 85.80000000000001
3308 h 26
3309 type "rectangle"
3310 fill "#FFFFFF"
3311 fill2 "#FFFFFF"
3312 outline "#000000"
3313 ]
3314 LabelGraphics
3315 [
3316 text "New Reals"
3317 outline "#000000"
3318 fill "#FFFFFF"
3319 fontSize 16
3320 fontName "Monospace"
3321 autoSizePolicy "node_width"
3322 anchor "t"
3323 borderDistance 0.0
3324 ]
3325 LabelGraphics
3326 [
3327 text "
3328 "
3329 fontSize 14
3330 fontName "Consolas"
3331 alignment "left"
3332 anchor "tl"
3333 borderDistance 6
3334 ]
3335 ]
3336
3337 node
3338 [
3339 id 9
3340 graphics
3341 [
3342 w 103.4
3343 h 26
3344 type "rectangle"
3345 fill "#FFFFFF"
3346 fill2 "#FFFFFF"
3347 outline "#000000"
3348 ]
3349 LabelGraphics
3350 [
3351 text "New Strings"
3352 outline "#000000"
3353 fill "#FFFFFF"
3354 fontSize 16
3355 fontName "Monospace"
3356 autoSizePolicy "node_width"
3357 anchor "t"
3358 borderDistance 0.0
3359 ]
3360 LabelGraphics
3361 [
3362 text "
3363 "
3364 fontSize 14
3365 fontName "Consolas"
3366 alignment "left"
3367 anchor "tl"
3368 borderDistance 6
3369 ]
3370 ]
3371
3372 node
3373 [
3374 id 10
3375 graphics
3376 [
3377 w 103.4
3378 h 26
3379 type "rectangle"
3380 fill "#FFFFFF"
3381 fill2 "#FFFFFF"
3382 outline "#000000"
3383 ]
3384 LabelGraphics
3385 [
3386 text "New Objects"
3387 outline "#000000"
3388 fill "#FFFFFF"
3389 fontSize 16
3390 fontName "Monospace"
3391 autoSizePolicy "node_width"
3392 anchor "t"
3393 borderDistance 0.0
3394 ]
3395 LabelGraphics
3396 [
3397 text "
3398 "
3399 fontSize 14
3400 fontName "Consolas"
3401 alignment "left"
3402 anchor "tl"
3403 borderDistance 6
3404 ]
3405 ]
3406 edge
3407 [
3408 source 6
3409 target 3
3410 graphics
3411 [
3412 fill "#000000"
3413 targetArrow "standard"
3414 ]
3415 LabelGraphics
3416 [
3417 text "model reference FunctionalElement"
3418 fontSize 14
3419 fontName "Consolas"
3420 configuration "AutoFlippingLabel"
3421 model "six_pos"
3422 position "thead"
3423 ]
3424 ]
3425 edge
3426 [
3427 source 3
3428 target 6
3429 graphics
3430 [
3431 fill "#000000"
3432 width 3
3433 targetArrow "standard"
3434 ]
3435 LabelGraphics
3436 [
3437 text "rootElements reference FunctionalArchitectureModel"
3438 fontSize 14
3439 fontName "Consolas"
3440 configuration "AutoFlippingLabel"
3441 model "six_pos"
3442 position "thead"
3443 ]
3444 ]
3445 edge
3446 [
3447 source 6
3448 target 1
3449 graphics
3450 [
3451 fill "#000000"
3452 targetArrow "standard"
3453 ]
3454 LabelGraphics
3455 [
3456 text "type attribute Function"
3457 fontSize 14
3458 fontName "Consolas"
3459 configuration "AutoFlippingLabel"
3460 model "six_pos"
3461 position "thead"
3462 ]
3463 ]
3464]
3465graph
3466[
3467 node
3468 [
3469 id 0
3470 graphics
3471 [
3472 w 226.60000000000002
3473 h 40
3474 type "rectangle"
3475 fill "#FFFFFF"
3476 fill2 "#FFFFFF"
3477 outline "#000000"
3478 ]
3479 LabelGraphics
3480 [
3481 text "Root literal FunctionType"
3482 outline "#000000"
3483 fill "#FFFFFF"
3484 fontSize 16
3485 fontName "Monospace"
3486 autoSizePolicy "node_width"
3487 anchor "t"
3488 borderDistance 0.0
3489 ]
3490 LabelGraphics
3491 [
3492 text "
3493 FunctionType enum
3494 "
3495 fontSize 14
3496 fontName "Consolas"
3497 alignment "left"
3498 anchor "tl"
3499 borderDistance 6
3500 ]
3501 ]
3502
3503 node
3504 [
3505 id 1
3506 graphics
3507 [
3508 w 297.0
3509 h 40
3510 type "rectangle"
3511 fill "#FFFFFF"
3512 fill2 "#FFFFFF"
3513 outline "#000000"
3514 ]
3515 LabelGraphics
3516 [
3517 text "Intermediate literal FunctionType"
3518 outline "#000000"
3519 fill "#FFFFFF"
3520 fontSize 16
3521 fontName "Monospace"
3522 autoSizePolicy "node_width"
3523 anchor "t"
3524 borderDistance 0.0
3525 ]
3526 LabelGraphics
3527 [
3528 text "
3529 FunctionType enum
3530 "
3531 fontSize 14
3532 fontName "Consolas"
3533 alignment "left"
3534 anchor "tl"
3535 borderDistance 6
3536 ]
3537 ]
3538
3539 node
3540 [
3541 id 2
3542 graphics
3543 [
3544 w 226.60000000000002
3545 h 40
3546 type "rectangle"
3547 fill "#FFFFFF"
3548 fill2 "#FFFFFF"
3549 outline "#000000"
3550 ]
3551 LabelGraphics
3552 [
3553 text "Leaf literal FunctionType"
3554 outline "#000000"
3555 fill "#FFFFFF"
3556 fontSize 16
3557 fontName "Monospace"
3558 autoSizePolicy "node_width"
3559 anchor "t"
3560 borderDistance 0.0
3561 ]
3562 LabelGraphics
3563 [
3564 text "
3565 FunctionType enum
3566 "
3567 fontSize 14
3568 fontName "Consolas"
3569 alignment "left"
3570 anchor "tl"
3571 borderDistance 6
3572 ]
3573 ]
3574
3575 node
3576 [
3577 id 3
3578 graphics
3579 [
3580 w 361.90000000000003
3581 h 54
3582 type "rectangle"
3583 fill "#FFFFFF"
3584 fill2 "#FFFFFF"
3585 outline "#000000"
3586 ]
3587 LabelGraphics
3588 [
3589 text "o 1"
3590 outline "#000000"
3591 fill "#FFFFFF"
3592 fontSize 16
3593 fontName "Monospace"
3594 autoSizePolicy "node_width"
3595 anchor "t"
3596 borderDistance 0.0
3597 ]
3598 LabelGraphics
3599 [
3600 text "
3601 FunctionalArchitectureModel class DefinedPart
3602 FunctionalArchitectureModel class
3603 "
3604 fontSize 14
3605 fontName "Consolas"
3606 alignment "left"
3607 anchor "tl"
3608 borderDistance 6
3609 ]
3610 ]
3611
3612 node
3613 [
3614 id 4
3615 graphics
3616 [
3617 w 41.800000000000004
3618 h 26
3619 type "rectangle"
3620 fill "#FFFFFF"
3621 fill2 "#FFFFFF"
3622 outline "#000000"
3623 ]
3624 LabelGraphics
3625 [
3626 text "true"
3627 outline "#000000"
3628 fill "#FFFFFF"
3629 fontSize 16
3630 fontName "Monospace"
3631 autoSizePolicy "node_width"
3632 anchor "t"
3633 borderDistance 0.0
3634 ]
3635 LabelGraphics
3636 [
3637 text "
3638 "
3639 fontSize 14
3640 fontName "Consolas"
3641 alignment "left"
3642 anchor "tl"
3643 borderDistance 6
3644 ]
3645 ]
3646
3647 node
3648 [
3649 id 5
3650 graphics
3651 [
3652 w 50.6
3653 h 26
3654 type "rectangle"
3655 fill "#FFFFFF"
3656 fill2 "#FFFFFF"
3657 outline "#000000"
3658 ]
3659 LabelGraphics
3660 [
3661 text "false"
3662 outline "#000000"
3663 fill "#FFFFFF"
3664 fontSize 16
3665 fontName "Monospace"
3666 autoSizePolicy "node_width"
3667 anchor "t"
3668 borderDistance 0.0
3669 ]
3670 LabelGraphics
3671 [
3672 text "
3673 "
3674 fontSize 14
3675 fontName "Consolas"
3676 alignment "left"
3677 anchor "tl"
3678 borderDistance 6
3679 ]
3680 ]
3681
3682 node
3683 [
3684 id 6
3685 graphics
3686 [
3687 w 192.50000000000003
3688 h 54
3689 type "rectangle"
3690 fill "#FFFFFF"
3691 fill2 "#FFFFFF"
3692 outline "#000000"
3693 ]
3694 LabelGraphics
3695 [
3696 text "null"
3697 outline "#000000"
3698 fill "#FFFFFF"
3699 fontSize 16
3700 fontName "Monospace"
3701 autoSizePolicy "node_width"
3702 anchor "t"
3703 borderDistance 0.0
3704 ]
3705 LabelGraphics
3706 [
3707 text "
3708 FunctionalElement class
3709 Function class
3710 "
3711 fontSize 14
3712 fontName "Consolas"
3713 alignment "left"
3714 anchor "tl"
3715 borderDistance 6
3716 ]
3717 ]
3718
3719 node
3720 [
3721 id 7
3722 graphics
3723 [
3724 w 112.2
3725 h 26
3726 type "rectangle"
3727 fill "#FFFFFF"
3728 fill2 "#FFFFFF"
3729 outline "#000000"
3730 ]
3731 LabelGraphics
3732 [
3733 text "New Integers"
3734 outline "#000000"
3735 fill "#FFFFFF"
3736 fontSize 16
3737 fontName "Monospace"
3738 autoSizePolicy "node_width"
3739 anchor "t"
3740 borderDistance 0.0
3741 ]
3742 LabelGraphics
3743 [
3744 text "
3745 "
3746 fontSize 14
3747 fontName "Consolas"
3748 alignment "left"
3749 anchor "tl"
3750 borderDistance 6
3751 ]
3752 ]
3753
3754 node
3755 [
3756 id 8
3757 graphics
3758 [
3759 w 85.80000000000001
3760 h 26
3761 type "rectangle"
3762 fill "#FFFFFF"
3763 fill2 "#FFFFFF"
3764 outline "#000000"
3765 ]
3766 LabelGraphics
3767 [
3768 text "New Reals"
3769 outline "#000000"
3770 fill "#FFFFFF"
3771 fontSize 16
3772 fontName "Monospace"
3773 autoSizePolicy "node_width"
3774 anchor "t"
3775 borderDistance 0.0
3776 ]
3777 LabelGraphics
3778 [
3779 text "
3780 "
3781 fontSize 14
3782 fontName "Consolas"
3783 alignment "left"
3784 anchor "tl"
3785 borderDistance 6
3786 ]
3787 ]
3788
3789 node
3790 [
3791 id 9
3792 graphics
3793 [
3794 w 103.4
3795 h 26
3796 type "rectangle"
3797 fill "#FFFFFF"
3798 fill2 "#FFFFFF"
3799 outline "#000000"
3800 ]
3801 LabelGraphics
3802 [
3803 text "New Strings"
3804 outline "#000000"
3805 fill "#FFFFFF"
3806 fontSize 16
3807 fontName "Monospace"
3808 autoSizePolicy "node_width"
3809 anchor "t"
3810 borderDistance 0.0
3811 ]
3812 LabelGraphics
3813 [
3814 text "
3815 "
3816 fontSize 14
3817 fontName "Consolas"
3818 alignment "left"
3819 anchor "tl"
3820 borderDistance 6
3821 ]
3822 ]
3823
3824 node
3825 [
3826 id 10
3827 graphics
3828 [
3829 w 103.4
3830 h 26
3831 type "rectangle"
3832 fill "#FFFFFF"
3833 fill2 "#FFFFFF"
3834 outline "#000000"
3835 ]
3836 LabelGraphics
3837 [
3838 text "New Objects"
3839 outline "#000000"
3840 fill "#FFFFFF"
3841 fontSize 16
3842 fontName "Monospace"
3843 autoSizePolicy "node_width"
3844 anchor "t"
3845 borderDistance 0.0
3846 ]
3847 LabelGraphics
3848 [
3849 text "
3850 "
3851 fontSize 14
3852 fontName "Consolas"
3853 alignment "left"
3854 anchor "tl"
3855 borderDistance 6
3856 ]
3857 ]
3858 edge
3859 [
3860 source 3
3861 target 6
3862 graphics
3863 [
3864 fill "#000000"
3865 width 3
3866 targetArrow "standard"
3867 ]
3868 LabelGraphics
3869 [
3870 text "rootElements reference FunctionalArchitectureModel"
3871 fontSize 14
3872 fontName "Consolas"
3873 configuration "AutoFlippingLabel"
3874 model "six_pos"
3875 position "thead"
3876 ]
3877 ]
3878]
3879graph
3880[
3881 node
3882 [
3883 id 0
3884 graphics
3885 [
3886 w 226.60000000000002
3887 h 40
3888 type "rectangle"
3889 fill "#FFFFFF"
3890 fill2 "#FFFFFF"
3891 outline "#000000"
3892 ]
3893 LabelGraphics
3894 [
3895 text "Root literal FunctionType"
3896 outline "#000000"
3897 fill "#FFFFFF"
3898 fontSize 16
3899 fontName "Monospace"
3900 autoSizePolicy "node_width"
3901 anchor "t"
3902 borderDistance 0.0
3903 ]
3904 LabelGraphics
3905 [
3906 text "
3907 FunctionType enum
3908 "
3909 fontSize 14
3910 fontName "Consolas"
3911 alignment "left"
3912 anchor "tl"
3913 borderDistance 6
3914 ]
3915 ]
3916
3917 node
3918 [
3919 id 1
3920 graphics
3921 [
3922 w 297.0
3923 h 40
3924 type "rectangle"
3925 fill "#FFFFFF"
3926 fill2 "#FFFFFF"
3927 outline "#000000"
3928 ]
3929 LabelGraphics
3930 [
3931 text "Intermediate literal FunctionType"
3932 outline "#000000"
3933 fill "#FFFFFF"
3934 fontSize 16
3935 fontName "Monospace"
3936 autoSizePolicy "node_width"
3937 anchor "t"
3938 borderDistance 0.0
3939 ]
3940 LabelGraphics
3941 [
3942 text "
3943 FunctionType enum
3944 "
3945 fontSize 14
3946 fontName "Consolas"
3947 alignment "left"
3948 anchor "tl"
3949 borderDistance 6
3950 ]
3951 ]
3952
3953 node
3954 [
3955 id 2
3956 graphics
3957 [
3958 w 226.60000000000002
3959 h 40
3960 type "rectangle"
3961 fill "#FFFFFF"
3962 fill2 "#FFFFFF"
3963 outline "#000000"
3964 ]
3965 LabelGraphics
3966 [
3967 text "Leaf literal FunctionType"
3968 outline "#000000"
3969 fill "#FFFFFF"
3970 fontSize 16
3971 fontName "Monospace"
3972 autoSizePolicy "node_width"
3973 anchor "t"
3974 borderDistance 0.0
3975 ]
3976 LabelGraphics
3977 [
3978 text "
3979 FunctionType enum
3980 "
3981 fontSize 14
3982 fontName "Consolas"
3983 alignment "left"
3984 anchor "tl"
3985 borderDistance 6
3986 ]
3987 ]
3988
3989 node
3990 [
3991 id 3
3992 graphics
3993 [
3994 w 361.90000000000003
3995 h 54
3996 type "rectangle"
3997 fill "#FFFFFF"
3998 fill2 "#FFFFFF"
3999 outline "#000000"
4000 ]
4001 LabelGraphics
4002 [
4003 text "o 1"
4004 outline "#000000"
4005 fill "#FFFFFF"
4006 fontSize 16
4007 fontName "Monospace"
4008 autoSizePolicy "node_width"
4009 anchor "t"
4010 borderDistance 0.0
4011 ]
4012 LabelGraphics
4013 [
4014 text "
4015 FunctionalArchitectureModel class DefinedPart
4016 FunctionalArchitectureModel class
4017 "
4018 fontSize 14
4019 fontName "Consolas"
4020 alignment "left"
4021 anchor "tl"
4022 borderDistance 6
4023 ]
4024 ]
4025
4026 node
4027 [
4028 id 4
4029 graphics
4030 [
4031 w 41.800000000000004
4032 h 26
4033 type "rectangle"
4034 fill "#FFFFFF"
4035 fill2 "#FFFFFF"
4036 outline "#000000"
4037 ]
4038 LabelGraphics
4039 [
4040 text "true"
4041 outline "#000000"
4042 fill "#FFFFFF"
4043 fontSize 16
4044 fontName "Monospace"
4045 autoSizePolicy "node_width"
4046 anchor "t"
4047 borderDistance 0.0
4048 ]
4049 LabelGraphics
4050 [
4051 text "
4052 "
4053 fontSize 14
4054 fontName "Consolas"
4055 alignment "left"
4056 anchor "tl"
4057 borderDistance 6
4058 ]
4059 ]
4060
4061 node
4062 [
4063 id 5
4064 graphics
4065 [
4066 w 50.6
4067 h 26
4068 type "rectangle"
4069 fill "#FFFFFF"
4070 fill2 "#FFFFFF"
4071 outline "#000000"
4072 ]
4073 LabelGraphics
4074 [
4075 text "false"
4076 outline "#000000"
4077 fill "#FFFFFF"
4078 fontSize 16
4079 fontName "Monospace"
4080 autoSizePolicy "node_width"
4081 anchor "t"
4082 borderDistance 0.0
4083 ]
4084 LabelGraphics
4085 [
4086 text "
4087 "
4088 fontSize 14
4089 fontName "Consolas"
4090 alignment "left"
4091 anchor "tl"
4092 borderDistance 6
4093 ]
4094 ]
4095
4096 node
4097 [
4098 id 6
4099 graphics
4100 [
4101 w 192.50000000000003
4102 h 54
4103 type "rectangle"
4104 fill "#FFFFFF"
4105 fill2 "#FFFFFF"
4106 outline "#000000"
4107 ]
4108 LabelGraphics
4109 [
4110 text "null"
4111 outline "#000000"
4112 fill "#FFFFFF"
4113 fontSize 16
4114 fontName "Monospace"
4115 autoSizePolicy "node_width"
4116 anchor "t"
4117 borderDistance 0.0
4118 ]
4119 LabelGraphics
4120 [
4121 text "
4122 FunctionalElement class
4123 Function class
4124 "
4125 fontSize 14
4126 fontName "Consolas"
4127 alignment "left"
4128 anchor "tl"
4129 borderDistance 6
4130 ]
4131 ]
4132
4133 node
4134 [
4135 id 7
4136 graphics
4137 [
4138 w 112.2
4139 h 26
4140 type "rectangle"
4141 fill "#FFFFFF"
4142 fill2 "#FFFFFF"
4143 outline "#000000"
4144 ]
4145 LabelGraphics
4146 [
4147 text "New Integers"
4148 outline "#000000"
4149 fill "#FFFFFF"
4150 fontSize 16
4151 fontName "Monospace"
4152 autoSizePolicy "node_width"
4153 anchor "t"
4154 borderDistance 0.0
4155 ]
4156 LabelGraphics
4157 [
4158 text "
4159 "
4160 fontSize 14
4161 fontName "Consolas"
4162 alignment "left"
4163 anchor "tl"
4164 borderDistance 6
4165 ]
4166 ]
4167
4168 node
4169 [
4170 id 8
4171 graphics
4172 [
4173 w 85.80000000000001
4174 h 26
4175 type "rectangle"
4176 fill "#FFFFFF"
4177 fill2 "#FFFFFF"
4178 outline "#000000"
4179 ]
4180 LabelGraphics
4181 [
4182 text "New Reals"
4183 outline "#000000"
4184 fill "#FFFFFF"
4185 fontSize 16
4186 fontName "Monospace"
4187 autoSizePolicy "node_width"
4188 anchor "t"
4189 borderDistance 0.0
4190 ]
4191 LabelGraphics
4192 [
4193 text "
4194 "
4195 fontSize 14
4196 fontName "Consolas"
4197 alignment "left"
4198 anchor "tl"
4199 borderDistance 6
4200 ]
4201 ]
4202
4203 node
4204 [
4205 id 9
4206 graphics
4207 [
4208 w 103.4
4209 h 26
4210 type "rectangle"
4211 fill "#FFFFFF"
4212 fill2 "#FFFFFF"
4213 outline "#000000"
4214 ]
4215 LabelGraphics
4216 [
4217 text "New Strings"
4218 outline "#000000"
4219 fill "#FFFFFF"
4220 fontSize 16
4221 fontName "Monospace"
4222 autoSizePolicy "node_width"
4223 anchor "t"
4224 borderDistance 0.0
4225 ]
4226 LabelGraphics
4227 [
4228 text "
4229 "
4230 fontSize 14
4231 fontName "Consolas"
4232 alignment "left"
4233 anchor "tl"
4234 borderDistance 6
4235 ]
4236 ]
4237
4238 node
4239 [
4240 id 10
4241 graphics
4242 [
4243 w 103.4
4244 h 26
4245 type "rectangle"
4246 fill "#FFFFFF"
4247 fill2 "#FFFFFF"
4248 outline "#000000"
4249 ]
4250 LabelGraphics
4251 [
4252 text "New Objects"
4253 outline "#000000"
4254 fill "#FFFFFF"
4255 fontSize 16
4256 fontName "Monospace"
4257 autoSizePolicy "node_width"
4258 anchor "t"
4259 borderDistance 0.0
4260 ]
4261 LabelGraphics
4262 [
4263 text "
4264 "
4265 fontSize 14
4266 fontName "Consolas"
4267 alignment "left"
4268 anchor "tl"
4269 borderDistance 6
4270 ]
4271 ]
4272 edge
4273 [
4274 source 6
4275 target 3
4276 graphics
4277 [
4278 fill "#000000"
4279 targetArrow "standard"
4280 ]
4281 LabelGraphics
4282 [
4283 text "model reference FunctionalElement"
4284 fontSize 14
4285 fontName "Consolas"
4286 configuration "AutoFlippingLabel"
4287 model "six_pos"
4288 position "thead"
4289 ]
4290 ]
4291 edge
4292 [
4293 source 3
4294 target 6
4295 graphics
4296 [
4297 fill "#000000"
4298 width 3
4299 targetArrow "standard"
4300 ]
4301 LabelGraphics
4302 [
4303 text "rootElements reference FunctionalArchitectureModel"
4304 fontSize 14
4305 fontName "Consolas"
4306 configuration "AutoFlippingLabel"
4307 model "six_pos"
4308 position "thead"
4309 ]
4310 ]
4311 edge
4312 [
4313 source 6
4314 target 2
4315 graphics
4316 [
4317 fill "#000000"
4318 targetArrow "standard"
4319 ]
4320 LabelGraphics
4321 [
4322 text "type attribute Function"
4323 fontSize 14
4324 fontName "Consolas"
4325 configuration "AutoFlippingLabel"
4326 model "six_pos"
4327 position "thead"
4328 ]
4329 ]
4330]
4331graph
4332[
4333 node
4334 [
4335 id 0
4336 graphics
4337 [
4338 w 226.60000000000002
4339 h 40
4340 type "rectangle"
4341 fill "#FFFFFF"
4342 fill2 "#FFFFFF"
4343 outline "#000000"
4344 ]
4345 LabelGraphics
4346 [
4347 text "Root literal FunctionType"
4348 outline "#000000"
4349 fill "#FFFFFF"
4350 fontSize 16
4351 fontName "Monospace"
4352 autoSizePolicy "node_width"
4353 anchor "t"
4354 borderDistance 0.0
4355 ]
4356 LabelGraphics
4357 [
4358 text "
4359 FunctionType enum
4360 "
4361 fontSize 14
4362 fontName "Consolas"
4363 alignment "left"
4364 anchor "tl"
4365 borderDistance 6
4366 ]
4367 ]
4368
4369 node
4370 [
4371 id 1
4372 graphics
4373 [
4374 w 297.0
4375 h 40
4376 type "rectangle"
4377 fill "#FFFFFF"
4378 fill2 "#FFFFFF"
4379 outline "#000000"
4380 ]
4381 LabelGraphics
4382 [
4383 text "Intermediate literal FunctionType"
4384 outline "#000000"
4385 fill "#FFFFFF"
4386 fontSize 16
4387 fontName "Monospace"
4388 autoSizePolicy "node_width"
4389 anchor "t"
4390 borderDistance 0.0
4391 ]
4392 LabelGraphics
4393 [
4394 text "
4395 FunctionType enum
4396 "
4397 fontSize 14
4398 fontName "Consolas"
4399 alignment "left"
4400 anchor "tl"
4401 borderDistance 6
4402 ]
4403 ]
4404
4405 node
4406 [
4407 id 2
4408 graphics
4409 [
4410 w 226.60000000000002
4411 h 40
4412 type "rectangle"
4413 fill "#FFFFFF"
4414 fill2 "#FFFFFF"
4415 outline "#000000"
4416 ]
4417 LabelGraphics
4418 [
4419 text "Leaf literal FunctionType"
4420 outline "#000000"
4421 fill "#FFFFFF"
4422 fontSize 16
4423 fontName "Monospace"
4424 autoSizePolicy "node_width"
4425 anchor "t"
4426 borderDistance 0.0
4427 ]
4428 LabelGraphics
4429 [
4430 text "
4431 FunctionType enum
4432 "
4433 fontSize 14
4434 fontName "Consolas"
4435 alignment "left"
4436 anchor "tl"
4437 borderDistance 6
4438 ]
4439 ]
4440
4441 node
4442 [
4443 id 3
4444 graphics
4445 [
4446 w 361.90000000000003
4447 h 54
4448 type "rectangle"
4449 fill "#FFFFFF"
4450 fill2 "#FFFFFF"
4451 outline "#000000"
4452 ]
4453 LabelGraphics
4454 [
4455 text "o 1"
4456 outline "#000000"
4457 fill "#FFFFFF"
4458 fontSize 16
4459 fontName "Monospace"
4460 autoSizePolicy "node_width"
4461 anchor "t"
4462 borderDistance 0.0
4463 ]
4464 LabelGraphics
4465 [
4466 text "
4467 FunctionalArchitectureModel class DefinedPart
4468 FunctionalArchitectureModel class
4469 "
4470 fontSize 14
4471 fontName "Consolas"
4472 alignment "left"
4473 anchor "tl"
4474 borderDistance 6
4475 ]
4476 ]
4477
4478 node
4479 [
4480 id 4
4481 graphics
4482 [
4483 w 41.800000000000004
4484 h 26
4485 type "rectangle"
4486 fill "#FFFFFF"
4487 fill2 "#FFFFFF"
4488 outline "#000000"
4489 ]
4490 LabelGraphics
4491 [
4492 text "true"
4493 outline "#000000"
4494 fill "#FFFFFF"
4495 fontSize 16
4496 fontName "Monospace"
4497 autoSizePolicy "node_width"
4498 anchor "t"
4499 borderDistance 0.0
4500 ]
4501 LabelGraphics
4502 [
4503 text "
4504 "
4505 fontSize 14
4506 fontName "Consolas"
4507 alignment "left"
4508 anchor "tl"
4509 borderDistance 6
4510 ]
4511 ]
4512
4513 node
4514 [
4515 id 5
4516 graphics
4517 [
4518 w 50.6
4519 h 26
4520 type "rectangle"
4521 fill "#FFFFFF"
4522 fill2 "#FFFFFF"
4523 outline "#000000"
4524 ]
4525 LabelGraphics
4526 [
4527 text "false"
4528 outline "#000000"
4529 fill "#FFFFFF"
4530 fontSize 16
4531 fontName "Monospace"
4532 autoSizePolicy "node_width"
4533 anchor "t"
4534 borderDistance 0.0
4535 ]
4536 LabelGraphics
4537 [
4538 text "
4539 "
4540 fontSize 14
4541 fontName "Consolas"
4542 alignment "left"
4543 anchor "tl"
4544 borderDistance 6
4545 ]
4546 ]
4547
4548 node
4549 [
4550 id 6
4551 graphics
4552 [
4553 w 192.50000000000003
4554 h 54
4555 type "rectangle"
4556 fill "#FFFFFF"
4557 fill2 "#FFFFFF"
4558 outline "#000000"
4559 ]
4560 LabelGraphics
4561 [
4562 text "null"
4563 outline "#000000"
4564 fill "#FFFFFF"
4565 fontSize 16
4566 fontName "Monospace"
4567 autoSizePolicy "node_width"
4568 anchor "t"
4569 borderDistance 0.0
4570 ]
4571 LabelGraphics
4572 [
4573 text "
4574 FunctionalElement class
4575 Function class
4576 "
4577 fontSize 14
4578 fontName "Consolas"
4579 alignment "left"
4580 anchor "tl"
4581 borderDistance 6
4582 ]
4583 ]
4584
4585 node
4586 [
4587 id 7
4588 graphics
4589 [
4590 w 112.2
4591 h 26
4592 type "rectangle"
4593 fill "#FFFFFF"
4594 fill2 "#FFFFFF"
4595 outline "#000000"
4596 ]
4597 LabelGraphics
4598 [
4599 text "New Integers"
4600 outline "#000000"
4601 fill "#FFFFFF"
4602 fontSize 16
4603 fontName "Monospace"
4604 autoSizePolicy "node_width"
4605 anchor "t"
4606 borderDistance 0.0
4607 ]
4608 LabelGraphics
4609 [
4610 text "
4611 "
4612 fontSize 14
4613 fontName "Consolas"
4614 alignment "left"
4615 anchor "tl"
4616 borderDistance 6
4617 ]
4618 ]
4619
4620 node
4621 [
4622 id 8
4623 graphics
4624 [
4625 w 85.80000000000001
4626 h 26
4627 type "rectangle"
4628 fill "#FFFFFF"
4629 fill2 "#FFFFFF"
4630 outline "#000000"
4631 ]
4632 LabelGraphics
4633 [
4634 text "New Reals"
4635 outline "#000000"
4636 fill "#FFFFFF"
4637 fontSize 16
4638 fontName "Monospace"
4639 autoSizePolicy "node_width"
4640 anchor "t"
4641 borderDistance 0.0
4642 ]
4643 LabelGraphics
4644 [
4645 text "
4646 "
4647 fontSize 14
4648 fontName "Consolas"
4649 alignment "left"
4650 anchor "tl"
4651 borderDistance 6
4652 ]
4653 ]
4654
4655 node
4656 [
4657 id 9
4658 graphics
4659 [
4660 w 103.4
4661 h 26
4662 type "rectangle"
4663 fill "#FFFFFF"
4664 fill2 "#FFFFFF"
4665 outline "#000000"
4666 ]
4667 LabelGraphics
4668 [
4669 text "New Strings"
4670 outline "#000000"
4671 fill "#FFFFFF"
4672 fontSize 16
4673 fontName "Monospace"
4674 autoSizePolicy "node_width"
4675 anchor "t"
4676 borderDistance 0.0
4677 ]
4678 LabelGraphics
4679 [
4680 text "
4681 "
4682 fontSize 14
4683 fontName "Consolas"
4684 alignment "left"
4685 anchor "tl"
4686 borderDistance 6
4687 ]
4688 ]
4689
4690 node
4691 [
4692 id 10
4693 graphics
4694 [
4695 w 103.4
4696 h 26
4697 type "rectangle"
4698 fill "#FFFFFF"
4699 fill2 "#FFFFFF"
4700 outline "#000000"
4701 ]
4702 LabelGraphics
4703 [
4704 text "New Objects"
4705 outline "#000000"
4706 fill "#FFFFFF"
4707 fontSize 16
4708 fontName "Monospace"
4709 autoSizePolicy "node_width"
4710 anchor "t"
4711 borderDistance 0.0
4712 ]
4713 LabelGraphics
4714 [
4715 text "
4716 "
4717 fontSize 14
4718 fontName "Consolas"
4719 alignment "left"
4720 anchor "tl"
4721 borderDistance 6
4722 ]
4723 ]
4724 edge
4725 [
4726 source 6
4727 target 3
4728 graphics
4729 [
4730 fill "#000000"
4731 targetArrow "standard"
4732 ]
4733 LabelGraphics
4734 [
4735 text "model reference FunctionalElement"
4736 fontSize 14
4737 fontName "Consolas"
4738 configuration "AutoFlippingLabel"
4739 model "six_pos"
4740 position "thead"
4741 ]
4742 ]
4743 edge
4744 [
4745 source 3
4746 target 6
4747 graphics
4748 [
4749 fill "#000000"
4750 width 3
4751 targetArrow "standard"
4752 ]
4753 LabelGraphics
4754 [
4755 text "rootElements reference FunctionalArchitectureModel"
4756 fontSize 14
4757 fontName "Consolas"
4758 configuration "AutoFlippingLabel"
4759 model "six_pos"
4760 position "thead"
4761 ]
4762 ]
4763 edge
4764 [
4765 source 6
4766 target 0
4767 graphics
4768 [
4769 fill "#000000"
4770 targetArrow "standard"
4771 ]
4772 LabelGraphics
4773 [
4774 text "type attribute Function"
4775 fontSize 14
4776 fontName "Consolas"
4777 configuration "AutoFlippingLabel"
4778 model "six_pos"
4779 position "thead"
4780 ]
4781 ]
4782]
4783graph
4784[
4785 node
4786 [
4787 id 0
4788 graphics
4789 [
4790 w 226.60000000000002
4791 h 40
4792 type "rectangle"
4793 fill "#FFFFFF"
4794 fill2 "#FFFFFF"
4795 outline "#000000"
4796 ]
4797 LabelGraphics
4798 [
4799 text "Root literal FunctionType"
4800 outline "#000000"
4801 fill "#FFFFFF"
4802 fontSize 16
4803 fontName "Monospace"
4804 autoSizePolicy "node_width"
4805 anchor "t"
4806 borderDistance 0.0
4807 ]
4808 LabelGraphics
4809 [
4810 text "
4811 FunctionType enum
4812 "
4813 fontSize 14
4814 fontName "Consolas"
4815 alignment "left"
4816 anchor "tl"
4817 borderDistance 6
4818 ]
4819 ]
4820
4821 node
4822 [
4823 id 1
4824 graphics
4825 [
4826 w 297.0
4827 h 40
4828 type "rectangle"
4829 fill "#FFFFFF"
4830 fill2 "#FFFFFF"
4831 outline "#000000"
4832 ]
4833 LabelGraphics
4834 [
4835 text "Intermediate literal FunctionType"
4836 outline "#000000"
4837 fill "#FFFFFF"
4838 fontSize 16
4839 fontName "Monospace"
4840 autoSizePolicy "node_width"
4841 anchor "t"
4842 borderDistance 0.0
4843 ]
4844 LabelGraphics
4845 [
4846 text "
4847 FunctionType enum
4848 "
4849 fontSize 14
4850 fontName "Consolas"
4851 alignment "left"
4852 anchor "tl"
4853 borderDistance 6
4854 ]
4855 ]
4856
4857 node
4858 [
4859 id 2
4860 graphics
4861 [
4862 w 226.60000000000002
4863 h 40
4864 type "rectangle"
4865 fill "#FFFFFF"
4866 fill2 "#FFFFFF"
4867 outline "#000000"
4868 ]
4869 LabelGraphics
4870 [
4871 text "Leaf literal FunctionType"
4872 outline "#000000"
4873 fill "#FFFFFF"
4874 fontSize 16
4875 fontName "Monospace"
4876 autoSizePolicy "node_width"
4877 anchor "t"
4878 borderDistance 0.0
4879 ]
4880 LabelGraphics
4881 [
4882 text "
4883 FunctionType enum
4884 "
4885 fontSize 14
4886 fontName "Consolas"
4887 alignment "left"
4888 anchor "tl"
4889 borderDistance 6
4890 ]
4891 ]
4892
4893 node
4894 [
4895 id 3
4896 graphics
4897 [
4898 w 361.90000000000003
4899 h 54
4900 type "rectangle"
4901 fill "#FFFFFF"
4902 fill2 "#FFFFFF"
4903 outline "#000000"
4904 ]
4905 LabelGraphics
4906 [
4907 text "o 1"
4908 outline "#000000"
4909 fill "#FFFFFF"
4910 fontSize 16
4911 fontName "Monospace"
4912 autoSizePolicy "node_width"
4913 anchor "t"
4914 borderDistance 0.0
4915 ]
4916 LabelGraphics
4917 [
4918 text "
4919 FunctionalArchitectureModel class DefinedPart
4920 FunctionalArchitectureModel class
4921 "
4922 fontSize 14
4923 fontName "Consolas"
4924 alignment "left"
4925 anchor "tl"
4926 borderDistance 6
4927 ]
4928 ]
4929
4930 node
4931 [
4932 id 4
4933 graphics
4934 [
4935 w 41.800000000000004
4936 h 26
4937 type "rectangle"
4938 fill "#FFFFFF"
4939 fill2 "#FFFFFF"
4940 outline "#000000"
4941 ]
4942 LabelGraphics
4943 [
4944 text "true"
4945 outline "#000000"
4946 fill "#FFFFFF"
4947 fontSize 16
4948 fontName "Monospace"
4949 autoSizePolicy "node_width"
4950 anchor "t"
4951 borderDistance 0.0
4952 ]
4953 LabelGraphics
4954 [
4955 text "
4956 "
4957 fontSize 14
4958 fontName "Consolas"
4959 alignment "left"
4960 anchor "tl"
4961 borderDistance 6
4962 ]
4963 ]
4964
4965 node
4966 [
4967 id 5
4968 graphics
4969 [
4970 w 50.6
4971 h 26
4972 type "rectangle"
4973 fill "#FFFFFF"
4974 fill2 "#FFFFFF"
4975 outline "#000000"
4976 ]
4977 LabelGraphics
4978 [
4979 text "false"
4980 outline "#000000"
4981 fill "#FFFFFF"
4982 fontSize 16
4983 fontName "Monospace"
4984 autoSizePolicy "node_width"
4985 anchor "t"
4986 borderDistance 0.0
4987 ]
4988 LabelGraphics
4989 [
4990 text "
4991 "
4992 fontSize 14
4993 fontName "Consolas"
4994 alignment "left"
4995 anchor "tl"
4996 borderDistance 6
4997 ]
4998 ]
4999
5000 node
5001 [
5002 id 6
5003 graphics
5004 [
5005 w 192.50000000000003
5006 h 54
5007 type "rectangle"
5008 fill "#FFFFFF"
5009 fill2 "#FFFFFF"
5010 outline "#000000"
5011 ]
5012 LabelGraphics
5013 [
5014 text "null"
5015 outline "#000000"
5016 fill "#FFFFFF"
5017 fontSize 16
5018 fontName "Monospace"
5019 autoSizePolicy "node_width"
5020 anchor "t"
5021 borderDistance 0.0
5022 ]
5023 LabelGraphics
5024 [
5025 text "
5026 FunctionalElement class
5027 Function class
5028 "
5029 fontSize 14
5030 fontName "Consolas"
5031 alignment "left"
5032 anchor "tl"
5033 borderDistance 6
5034 ]
5035 ]
5036
5037 node
5038 [
5039 id 7
5040 graphics
5041 [
5042 w 112.2
5043 h 26
5044 type "rectangle"
5045 fill "#FFFFFF"
5046 fill2 "#FFFFFF"
5047 outline "#000000"
5048 ]
5049 LabelGraphics
5050 [
5051 text "New Integers"
5052 outline "#000000"
5053 fill "#FFFFFF"
5054 fontSize 16
5055 fontName "Monospace"
5056 autoSizePolicy "node_width"
5057 anchor "t"
5058 borderDistance 0.0
5059 ]
5060 LabelGraphics
5061 [
5062 text "
5063 "
5064 fontSize 14
5065 fontName "Consolas"
5066 alignment "left"
5067 anchor "tl"
5068 borderDistance 6
5069 ]
5070 ]
5071
5072 node
5073 [
5074 id 8
5075 graphics
5076 [
5077 w 85.80000000000001
5078 h 26
5079 type "rectangle"
5080 fill "#FFFFFF"
5081 fill2 "#FFFFFF"
5082 outline "#000000"
5083 ]
5084 LabelGraphics
5085 [
5086 text "New Reals"
5087 outline "#000000"
5088 fill "#FFFFFF"
5089 fontSize 16
5090 fontName "Monospace"
5091 autoSizePolicy "node_width"
5092 anchor "t"
5093 borderDistance 0.0
5094 ]
5095 LabelGraphics
5096 [
5097 text "
5098 "
5099 fontSize 14
5100 fontName "Consolas"
5101 alignment "left"
5102 anchor "tl"
5103 borderDistance 6
5104 ]
5105 ]
5106
5107 node
5108 [
5109 id 9
5110 graphics
5111 [
5112 w 103.4
5113 h 26
5114 type "rectangle"
5115 fill "#FFFFFF"
5116 fill2 "#FFFFFF"
5117 outline "#000000"
5118 ]
5119 LabelGraphics
5120 [
5121 text "New Strings"
5122 outline "#000000"
5123 fill "#FFFFFF"
5124 fontSize 16
5125 fontName "Monospace"
5126 autoSizePolicy "node_width"
5127 anchor "t"
5128 borderDistance 0.0
5129 ]
5130 LabelGraphics
5131 [
5132 text "
5133 "
5134 fontSize 14
5135 fontName "Consolas"
5136 alignment "left"
5137 anchor "tl"
5138 borderDistance 6
5139 ]
5140 ]
5141
5142 node
5143 [
5144 id 10
5145 graphics
5146 [
5147 w 103.4
5148 h 26
5149 type "rectangle"
5150 fill "#FFFFFF"
5151 fill2 "#FFFFFF"
5152 outline "#000000"
5153 ]
5154 LabelGraphics
5155 [
5156 text "New Objects"
5157 outline "#000000"
5158 fill "#FFFFFF"
5159 fontSize 16
5160 fontName "Monospace"
5161 autoSizePolicy "node_width"
5162 anchor "t"
5163 borderDistance 0.0
5164 ]
5165 LabelGraphics
5166 [
5167 text "
5168 "
5169 fontSize 14
5170 fontName "Consolas"
5171 alignment "left"
5172 anchor "tl"
5173 borderDistance 6
5174 ]
5175 ]
5176 edge
5177 [
5178 source 6
5179 target 3
5180 graphics
5181 [
5182 fill "#000000"
5183 targetArrow "standard"
5184 ]
5185 LabelGraphics
5186 [
5187 text "model reference FunctionalElement"
5188 fontSize 14
5189 fontName "Consolas"
5190 configuration "AutoFlippingLabel"
5191 model "six_pos"
5192 position "thead"
5193 ]
5194 ]
5195 edge
5196 [
5197 source 3
5198 target 6
5199 graphics
5200 [
5201 fill "#000000"
5202 width 3
5203 targetArrow "standard"
5204 ]
5205 LabelGraphics
5206 [
5207 text "rootElements reference FunctionalArchitectureModel"
5208 fontSize 14
5209 fontName "Consolas"
5210 configuration "AutoFlippingLabel"
5211 model "six_pos"
5212 position "thead"
5213 ]
5214 ]
5215 edge
5216 [
5217 source 6
5218 target 0
5219 graphics
5220 [
5221 fill "#000000"
5222 targetArrow "standard"
5223 ]
5224 LabelGraphics
5225 [
5226 text "type attribute Function"
5227 fontSize 14
5228 fontName "Consolas"
5229 configuration "AutoFlippingLabel"
5230 model "six_pos"
5231 position "thead"
5232 ]
5233 ]
5234]
5235graph
5236[
5237 node
5238 [
5239 id 0
5240 graphics
5241 [
5242 w 226.60000000000002
5243 h 40
5244 type "rectangle"
5245 fill "#FFFFFF"
5246 fill2 "#FFFFFF"
5247 outline "#000000"
5248 ]
5249 LabelGraphics
5250 [
5251 text "Root literal FunctionType"
5252 outline "#000000"
5253 fill "#FFFFFF"
5254 fontSize 16
5255 fontName "Monospace"
5256 autoSizePolicy "node_width"
5257 anchor "t"
5258 borderDistance 0.0
5259 ]
5260 LabelGraphics
5261 [
5262 text "
5263 FunctionType enum
5264 "
5265 fontSize 14
5266 fontName "Consolas"
5267 alignment "left"
5268 anchor "tl"
5269 borderDistance 6
5270 ]
5271 ]
5272
5273 node
5274 [
5275 id 1
5276 graphics
5277 [
5278 w 297.0
5279 h 40
5280 type "rectangle"
5281 fill "#FFFFFF"
5282 fill2 "#FFFFFF"
5283 outline "#000000"
5284 ]
5285 LabelGraphics
5286 [
5287 text "Intermediate literal FunctionType"
5288 outline "#000000"
5289 fill "#FFFFFF"
5290 fontSize 16
5291 fontName "Monospace"
5292 autoSizePolicy "node_width"
5293 anchor "t"
5294 borderDistance 0.0
5295 ]
5296 LabelGraphics
5297 [
5298 text "
5299 FunctionType enum
5300 "
5301 fontSize 14
5302 fontName "Consolas"
5303 alignment "left"
5304 anchor "tl"
5305 borderDistance 6
5306 ]
5307 ]
5308
5309 node
5310 [
5311 id 2
5312 graphics
5313 [
5314 w 226.60000000000002
5315 h 40
5316 type "rectangle"
5317 fill "#FFFFFF"
5318 fill2 "#FFFFFF"
5319 outline "#000000"
5320 ]
5321 LabelGraphics
5322 [
5323 text "Leaf literal FunctionType"
5324 outline "#000000"
5325 fill "#FFFFFF"
5326 fontSize 16
5327 fontName "Monospace"
5328 autoSizePolicy "node_width"
5329 anchor "t"
5330 borderDistance 0.0
5331 ]
5332 LabelGraphics
5333 [
5334 text "
5335 FunctionType enum
5336 "
5337 fontSize 14
5338 fontName "Consolas"
5339 alignment "left"
5340 anchor "tl"
5341 borderDistance 6
5342 ]
5343 ]
5344
5345 node
5346 [
5347 id 3
5348 graphics
5349 [
5350 w 361.90000000000003
5351 h 54
5352 type "rectangle"
5353 fill "#FFFFFF"
5354 fill2 "#FFFFFF"
5355 outline "#000000"
5356 ]
5357 LabelGraphics
5358 [
5359 text "o 1"
5360 outline "#000000"
5361 fill "#FFFFFF"
5362 fontSize 16
5363 fontName "Monospace"
5364 autoSizePolicy "node_width"
5365 anchor "t"
5366 borderDistance 0.0
5367 ]
5368 LabelGraphics
5369 [
5370 text "
5371 FunctionalArchitectureModel class DefinedPart
5372 FunctionalArchitectureModel class
5373 "
5374 fontSize 14
5375 fontName "Consolas"
5376 alignment "left"
5377 anchor "tl"
5378 borderDistance 6
5379 ]
5380 ]
5381
5382 node
5383 [
5384 id 4
5385 graphics
5386 [
5387 w 41.800000000000004
5388 h 26
5389 type "rectangle"
5390 fill "#FFFFFF"
5391 fill2 "#FFFFFF"
5392 outline "#000000"
5393 ]
5394 LabelGraphics
5395 [
5396 text "true"
5397 outline "#000000"
5398 fill "#FFFFFF"
5399 fontSize 16
5400 fontName "Monospace"
5401 autoSizePolicy "node_width"
5402 anchor "t"
5403 borderDistance 0.0
5404 ]
5405 LabelGraphics
5406 [
5407 text "
5408 "
5409 fontSize 14
5410 fontName "Consolas"
5411 alignment "left"
5412 anchor "tl"
5413 borderDistance 6
5414 ]
5415 ]
5416
5417 node
5418 [
5419 id 5
5420 graphics
5421 [
5422 w 50.6
5423 h 26
5424 type "rectangle"
5425 fill "#FFFFFF"
5426 fill2 "#FFFFFF"
5427 outline "#000000"
5428 ]
5429 LabelGraphics
5430 [
5431 text "false"
5432 outline "#000000"
5433 fill "#FFFFFF"
5434 fontSize 16
5435 fontName "Monospace"
5436 autoSizePolicy "node_width"
5437 anchor "t"
5438 borderDistance 0.0
5439 ]
5440 LabelGraphics
5441 [
5442 text "
5443 "
5444 fontSize 14
5445 fontName "Consolas"
5446 alignment "left"
5447 anchor "tl"
5448 borderDistance 6
5449 ]
5450 ]
5451
5452 node
5453 [
5454 id 6
5455 graphics
5456 [
5457 w 192.50000000000003
5458 h 54
5459 type "rectangle"
5460 fill "#FFFFFF"
5461 fill2 "#FFFFFF"
5462 outline "#000000"
5463 ]
5464 LabelGraphics
5465 [
5466 text "null"
5467 outline "#000000"
5468 fill "#FFFFFF"
5469 fontSize 16
5470 fontName "Monospace"
5471 autoSizePolicy "node_width"
5472 anchor "t"
5473 borderDistance 0.0
5474 ]
5475 LabelGraphics
5476 [
5477 text "
5478 FunctionalElement class
5479 Function class
5480 "
5481 fontSize 14
5482 fontName "Consolas"
5483 alignment "left"
5484 anchor "tl"
5485 borderDistance 6
5486 ]
5487 ]
5488
5489 node
5490 [
5491 id 7
5492 graphics
5493 [
5494 w 112.2
5495 h 26
5496 type "rectangle"
5497 fill "#FFFFFF"
5498 fill2 "#FFFFFF"
5499 outline "#000000"
5500 ]
5501 LabelGraphics
5502 [
5503 text "New Integers"
5504 outline "#000000"
5505 fill "#FFFFFF"
5506 fontSize 16
5507 fontName "Monospace"
5508 autoSizePolicy "node_width"
5509 anchor "t"
5510 borderDistance 0.0
5511 ]
5512 LabelGraphics
5513 [
5514 text "
5515 "
5516 fontSize 14
5517 fontName "Consolas"
5518 alignment "left"
5519 anchor "tl"
5520 borderDistance 6
5521 ]
5522 ]
5523
5524 node
5525 [
5526 id 8
5527 graphics
5528 [
5529 w 85.80000000000001
5530 h 26
5531 type "rectangle"
5532 fill "#FFFFFF"
5533 fill2 "#FFFFFF"
5534 outline "#000000"
5535 ]
5536 LabelGraphics
5537 [
5538 text "New Reals"
5539 outline "#000000"
5540 fill "#FFFFFF"
5541 fontSize 16
5542 fontName "Monospace"
5543 autoSizePolicy "node_width"
5544 anchor "t"
5545 borderDistance 0.0
5546 ]
5547 LabelGraphics
5548 [
5549 text "
5550 "
5551 fontSize 14
5552 fontName "Consolas"
5553 alignment "left"
5554 anchor "tl"
5555 borderDistance 6
5556 ]
5557 ]
5558
5559 node
5560 [
5561 id 9
5562 graphics
5563 [
5564 w 103.4
5565 h 26
5566 type "rectangle"
5567 fill "#FFFFFF"
5568 fill2 "#FFFFFF"
5569 outline "#000000"
5570 ]
5571 LabelGraphics
5572 [
5573 text "New Strings"
5574 outline "#000000"
5575 fill "#FFFFFF"
5576 fontSize 16
5577 fontName "Monospace"
5578 autoSizePolicy "node_width"
5579 anchor "t"
5580 borderDistance 0.0
5581 ]
5582 LabelGraphics
5583 [
5584 text "
5585 "
5586 fontSize 14
5587 fontName "Consolas"
5588 alignment "left"
5589 anchor "tl"
5590 borderDistance 6
5591 ]
5592 ]
5593
5594 node
5595 [
5596 id 10
5597 graphics
5598 [
5599 w 103.4
5600 h 26
5601 type "rectangle"
5602 fill "#FFFFFF"
5603 fill2 "#FFFFFF"
5604 outline "#000000"
5605 ]
5606 LabelGraphics
5607 [
5608 text "New Objects"
5609 outline "#000000"
5610 fill "#FFFFFF"
5611 fontSize 16
5612 fontName "Monospace"
5613 autoSizePolicy "node_width"
5614 anchor "t"
5615 borderDistance 0.0
5616 ]
5617 LabelGraphics
5618 [
5619 text "
5620 "
5621 fontSize 14
5622 fontName "Consolas"
5623 alignment "left"
5624 anchor "tl"
5625 borderDistance 6
5626 ]
5627 ]
5628 edge
5629 [
5630 source 3
5631 target 6
5632 graphics
5633 [
5634 fill "#000000"
5635 width 3
5636 targetArrow "standard"
5637 ]
5638 LabelGraphics
5639 [
5640 text "rootElements reference FunctionalArchitectureModel"
5641 fontSize 14
5642 fontName "Consolas"
5643 configuration "AutoFlippingLabel"
5644 model "six_pos"
5645 position "thead"
5646 ]
5647 ]
5648]
5649graph
5650[
5651 node
5652 [
5653 id 0
5654 graphics
5655 [
5656 w 226.60000000000002
5657 h 40
5658 type "rectangle"
5659 fill "#FFFFFF"
5660 fill2 "#FFFFFF"
5661 outline "#000000"
5662 ]
5663 LabelGraphics
5664 [
5665 text "Root literal FunctionType"
5666 outline "#000000"
5667 fill "#FFFFFF"
5668 fontSize 16
5669 fontName "Monospace"
5670 autoSizePolicy "node_width"
5671 anchor "t"
5672 borderDistance 0.0
5673 ]
5674 LabelGraphics
5675 [
5676 text "
5677 FunctionType enum
5678 "
5679 fontSize 14
5680 fontName "Consolas"
5681 alignment "left"
5682 anchor "tl"
5683 borderDistance 6
5684 ]
5685 ]
5686
5687 node
5688 [
5689 id 1
5690 graphics
5691 [
5692 w 297.0
5693 h 40
5694 type "rectangle"
5695 fill "#FFFFFF"
5696 fill2 "#FFFFFF"
5697 outline "#000000"
5698 ]
5699 LabelGraphics
5700 [
5701 text "Intermediate literal FunctionType"
5702 outline "#000000"
5703 fill "#FFFFFF"
5704 fontSize 16
5705 fontName "Monospace"
5706 autoSizePolicy "node_width"
5707 anchor "t"
5708 borderDistance 0.0
5709 ]
5710 LabelGraphics
5711 [
5712 text "
5713 FunctionType enum
5714 "
5715 fontSize 14
5716 fontName "Consolas"
5717 alignment "left"
5718 anchor "tl"
5719 borderDistance 6
5720 ]
5721 ]
5722
5723 node
5724 [
5725 id 2
5726 graphics
5727 [
5728 w 226.60000000000002
5729 h 40
5730 type "rectangle"
5731 fill "#FFFFFF"
5732 fill2 "#FFFFFF"
5733 outline "#000000"
5734 ]
5735 LabelGraphics
5736 [
5737 text "Leaf literal FunctionType"
5738 outline "#000000"
5739 fill "#FFFFFF"
5740 fontSize 16
5741 fontName "Monospace"
5742 autoSizePolicy "node_width"
5743 anchor "t"
5744 borderDistance 0.0
5745 ]
5746 LabelGraphics
5747 [
5748 text "
5749 FunctionType enum
5750 "
5751 fontSize 14
5752 fontName "Consolas"
5753 alignment "left"
5754 anchor "tl"
5755 borderDistance 6
5756 ]
5757 ]
5758
5759 node
5760 [
5761 id 3
5762 graphics
5763 [
5764 w 361.90000000000003
5765 h 54
5766 type "rectangle"
5767 fill "#FFFFFF"
5768 fill2 "#FFFFFF"
5769 outline "#000000"
5770 ]
5771 LabelGraphics
5772 [
5773 text "o 1"
5774 outline "#000000"
5775 fill "#FFFFFF"
5776 fontSize 16
5777 fontName "Monospace"
5778 autoSizePolicy "node_width"
5779 anchor "t"
5780 borderDistance 0.0
5781 ]
5782 LabelGraphics
5783 [
5784 text "
5785 FunctionalArchitectureModel class DefinedPart
5786 FunctionalArchitectureModel class
5787 "
5788 fontSize 14
5789 fontName "Consolas"
5790 alignment "left"
5791 anchor "tl"
5792 borderDistance 6
5793 ]
5794 ]
5795
5796 node
5797 [
5798 id 4
5799 graphics
5800 [
5801 w 41.800000000000004
5802 h 26
5803 type "rectangle"
5804 fill "#FFFFFF"
5805 fill2 "#FFFFFF"
5806 outline "#000000"
5807 ]
5808 LabelGraphics
5809 [
5810 text "true"
5811 outline "#000000"
5812 fill "#FFFFFF"
5813 fontSize 16
5814 fontName "Monospace"
5815 autoSizePolicy "node_width"
5816 anchor "t"
5817 borderDistance 0.0
5818 ]
5819 LabelGraphics
5820 [
5821 text "
5822 "
5823 fontSize 14
5824 fontName "Consolas"
5825 alignment "left"
5826 anchor "tl"
5827 borderDistance 6
5828 ]
5829 ]
5830
5831 node
5832 [
5833 id 5
5834 graphics
5835 [
5836 w 50.6
5837 h 26
5838 type "rectangle"
5839 fill "#FFFFFF"
5840 fill2 "#FFFFFF"
5841 outline "#000000"
5842 ]
5843 LabelGraphics
5844 [
5845 text "false"
5846 outline "#000000"
5847 fill "#FFFFFF"
5848 fontSize 16
5849 fontName "Monospace"
5850 autoSizePolicy "node_width"
5851 anchor "t"
5852 borderDistance 0.0
5853 ]
5854 LabelGraphics
5855 [
5856 text "
5857 "
5858 fontSize 14
5859 fontName "Consolas"
5860 alignment "left"
5861 anchor "tl"
5862 borderDistance 6
5863 ]
5864 ]
5865
5866 node
5867 [
5868 id 6
5869 graphics
5870 [
5871 w 192.50000000000003
5872 h 54
5873 type "rectangle"
5874 fill "#FFFFFF"
5875 fill2 "#FFFFFF"
5876 outline "#000000"
5877 ]
5878 LabelGraphics
5879 [
5880 text "null"
5881 outline "#000000"
5882 fill "#FFFFFF"
5883 fontSize 16
5884 fontName "Monospace"
5885 autoSizePolicy "node_width"
5886 anchor "t"
5887 borderDistance 0.0
5888 ]
5889 LabelGraphics
5890 [
5891 text "
5892 FunctionalElement class
5893 Function class
5894 "
5895 fontSize 14
5896 fontName "Consolas"
5897 alignment "left"
5898 anchor "tl"
5899 borderDistance 6
5900 ]
5901 ]
5902
5903 node
5904 [
5905 id 7
5906 graphics
5907 [
5908 w 112.2
5909 h 26
5910 type "rectangle"
5911 fill "#FFFFFF"
5912 fill2 "#FFFFFF"
5913 outline "#000000"
5914 ]
5915 LabelGraphics
5916 [
5917 text "New Integers"
5918 outline "#000000"
5919 fill "#FFFFFF"
5920 fontSize 16
5921 fontName "Monospace"
5922 autoSizePolicy "node_width"
5923 anchor "t"
5924 borderDistance 0.0
5925 ]
5926 LabelGraphics
5927 [
5928 text "
5929 "
5930 fontSize 14
5931 fontName "Consolas"
5932 alignment "left"
5933 anchor "tl"
5934 borderDistance 6
5935 ]
5936 ]
5937
5938 node
5939 [
5940 id 8
5941 graphics
5942 [
5943 w 85.80000000000001
5944 h 26
5945 type "rectangle"
5946 fill "#FFFFFF"
5947 fill2 "#FFFFFF"
5948 outline "#000000"
5949 ]
5950 LabelGraphics
5951 [
5952 text "New Reals"
5953 outline "#000000"
5954 fill "#FFFFFF"
5955 fontSize 16
5956 fontName "Monospace"
5957 autoSizePolicy "node_width"
5958 anchor "t"
5959 borderDistance 0.0
5960 ]
5961 LabelGraphics
5962 [
5963 text "
5964 "
5965 fontSize 14
5966 fontName "Consolas"
5967 alignment "left"
5968 anchor "tl"
5969 borderDistance 6
5970 ]
5971 ]
5972
5973 node
5974 [
5975 id 9
5976 graphics
5977 [
5978 w 103.4
5979 h 26
5980 type "rectangle"
5981 fill "#FFFFFF"
5982 fill2 "#FFFFFF"
5983 outline "#000000"
5984 ]
5985 LabelGraphics
5986 [
5987 text "New Strings"
5988 outline "#000000"
5989 fill "#FFFFFF"
5990 fontSize 16
5991 fontName "Monospace"
5992 autoSizePolicy "node_width"
5993 anchor "t"
5994 borderDistance 0.0
5995 ]
5996 LabelGraphics
5997 [
5998 text "
5999 "
6000 fontSize 14
6001 fontName "Consolas"
6002 alignment "left"
6003 anchor "tl"
6004 borderDistance 6
6005 ]
6006 ]
6007
6008 node
6009 [
6010 id 10
6011 graphics
6012 [
6013 w 103.4
6014 h 26
6015 type "rectangle"
6016 fill "#FFFFFF"
6017 fill2 "#FFFFFF"
6018 outline "#000000"
6019 ]
6020 LabelGraphics
6021 [
6022 text "New Objects"
6023 outline "#000000"
6024 fill "#FFFFFF"
6025 fontSize 16
6026 fontName "Monospace"
6027 autoSizePolicy "node_width"
6028 anchor "t"
6029 borderDistance 0.0
6030 ]
6031 LabelGraphics
6032 [
6033 text "
6034 "
6035 fontSize 14
6036 fontName "Consolas"
6037 alignment "left"
6038 anchor "tl"
6039 borderDistance 6
6040 ]
6041 ]
6042 edge
6043 [
6044 source 3
6045 target 6
6046 graphics
6047 [
6048 fill "#000000"
6049 width 3
6050 targetArrow "standard"
6051 ]
6052 LabelGraphics
6053 [
6054 text "rootElements reference FunctionalArchitectureModel"
6055 fontSize 14
6056 fontName "Consolas"
6057 configuration "AutoFlippingLabel"
6058 model "six_pos"
6059 position "thead"
6060 ]
6061 ]
6062]
6063graph
6064[
6065 node
6066 [
6067 id 0
6068 graphics
6069 [
6070 w 226.60000000000002
6071 h 40
6072 type "rectangle"
6073 fill "#FFFFFF"
6074 fill2 "#FFFFFF"
6075 outline "#000000"
6076 ]
6077 LabelGraphics
6078 [
6079 text "Root literal FunctionType"
6080 outline "#000000"
6081 fill "#FFFFFF"
6082 fontSize 16
6083 fontName "Monospace"
6084 autoSizePolicy "node_width"
6085 anchor "t"
6086 borderDistance 0.0
6087 ]
6088 LabelGraphics
6089 [
6090 text "
6091 FunctionType enum
6092 "
6093 fontSize 14
6094 fontName "Consolas"
6095 alignment "left"
6096 anchor "tl"
6097 borderDistance 6
6098 ]
6099 ]
6100
6101 node
6102 [
6103 id 1
6104 graphics
6105 [
6106 w 297.0
6107 h 40
6108 type "rectangle"
6109 fill "#FFFFFF"
6110 fill2 "#FFFFFF"
6111 outline "#000000"
6112 ]
6113 LabelGraphics
6114 [
6115 text "Intermediate literal FunctionType"
6116 outline "#000000"
6117 fill "#FFFFFF"
6118 fontSize 16
6119 fontName "Monospace"
6120 autoSizePolicy "node_width"
6121 anchor "t"
6122 borderDistance 0.0
6123 ]
6124 LabelGraphics
6125 [
6126 text "
6127 FunctionType enum
6128 "
6129 fontSize 14
6130 fontName "Consolas"
6131 alignment "left"
6132 anchor "tl"
6133 borderDistance 6
6134 ]
6135 ]
6136
6137 node
6138 [
6139 id 2
6140 graphics
6141 [
6142 w 226.60000000000002
6143 h 40
6144 type "rectangle"
6145 fill "#FFFFFF"
6146 fill2 "#FFFFFF"
6147 outline "#000000"
6148 ]
6149 LabelGraphics
6150 [
6151 text "Leaf literal FunctionType"
6152 outline "#000000"
6153 fill "#FFFFFF"
6154 fontSize 16
6155 fontName "Monospace"
6156 autoSizePolicy "node_width"
6157 anchor "t"
6158 borderDistance 0.0
6159 ]
6160 LabelGraphics
6161 [
6162 text "
6163 FunctionType enum
6164 "
6165 fontSize 14
6166 fontName "Consolas"
6167 alignment "left"
6168 anchor "tl"
6169 borderDistance 6
6170 ]
6171 ]
6172
6173 node
6174 [
6175 id 3
6176 graphics
6177 [
6178 w 361.90000000000003
6179 h 54
6180 type "rectangle"
6181 fill "#FFFFFF"
6182 fill2 "#FFFFFF"
6183 outline "#000000"
6184 ]
6185 LabelGraphics
6186 [
6187 text "o 1"
6188 outline "#000000"
6189 fill "#FFFFFF"
6190 fontSize 16
6191 fontName "Monospace"
6192 autoSizePolicy "node_width"
6193 anchor "t"
6194 borderDistance 0.0
6195 ]
6196 LabelGraphics
6197 [
6198 text "
6199 FunctionalArchitectureModel class DefinedPart
6200 FunctionalArchitectureModel class
6201 "
6202 fontSize 14
6203 fontName "Consolas"
6204 alignment "left"
6205 anchor "tl"
6206 borderDistance 6
6207 ]
6208 ]
6209
6210 node
6211 [
6212 id 4
6213 graphics
6214 [
6215 w 41.800000000000004
6216 h 26
6217 type "rectangle"
6218 fill "#FFFFFF"
6219 fill2 "#FFFFFF"
6220 outline "#000000"
6221 ]
6222 LabelGraphics
6223 [
6224 text "true"
6225 outline "#000000"
6226 fill "#FFFFFF"
6227 fontSize 16
6228 fontName "Monospace"
6229 autoSizePolicy "node_width"
6230 anchor "t"
6231 borderDistance 0.0
6232 ]
6233 LabelGraphics
6234 [
6235 text "
6236 "
6237 fontSize 14
6238 fontName "Consolas"
6239 alignment "left"
6240 anchor "tl"
6241 borderDistance 6
6242 ]
6243 ]
6244
6245 node
6246 [
6247 id 5
6248 graphics
6249 [
6250 w 50.6
6251 h 26
6252 type "rectangle"
6253 fill "#FFFFFF"
6254 fill2 "#FFFFFF"
6255 outline "#000000"
6256 ]
6257 LabelGraphics
6258 [
6259 text "false"
6260 outline "#000000"
6261 fill "#FFFFFF"
6262 fontSize 16
6263 fontName "Monospace"
6264 autoSizePolicy "node_width"
6265 anchor "t"
6266 borderDistance 0.0
6267 ]
6268 LabelGraphics
6269 [
6270 text "
6271 "
6272 fontSize 14
6273 fontName "Consolas"
6274 alignment "left"
6275 anchor "tl"
6276 borderDistance 6
6277 ]
6278 ]
6279
6280 node
6281 [
6282 id 6
6283 graphics
6284 [
6285 w 192.50000000000003
6286 h 54
6287 type "rectangle"
6288 fill "#FFFFFF"
6289 fill2 "#FFFFFF"
6290 outline "#000000"
6291 ]
6292 LabelGraphics
6293 [
6294 text "null"
6295 outline "#000000"
6296 fill "#FFFFFF"
6297 fontSize 16
6298 fontName "Monospace"
6299 autoSizePolicy "node_width"
6300 anchor "t"
6301 borderDistance 0.0
6302 ]
6303 LabelGraphics
6304 [
6305 text "
6306 FunctionalElement class
6307 Function class
6308 "
6309 fontSize 14
6310 fontName "Consolas"
6311 alignment "left"
6312 anchor "tl"
6313 borderDistance 6
6314 ]
6315 ]
6316
6317 node
6318 [
6319 id 7
6320 graphics
6321 [
6322 w 112.2
6323 h 26
6324 type "rectangle"
6325 fill "#FFFFFF"
6326 fill2 "#FFFFFF"
6327 outline "#000000"
6328 ]
6329 LabelGraphics
6330 [
6331 text "New Integers"
6332 outline "#000000"
6333 fill "#FFFFFF"
6334 fontSize 16
6335 fontName "Monospace"
6336 autoSizePolicy "node_width"
6337 anchor "t"
6338 borderDistance 0.0
6339 ]
6340 LabelGraphics
6341 [
6342 text "
6343 "
6344 fontSize 14
6345 fontName "Consolas"
6346 alignment "left"
6347 anchor "tl"
6348 borderDistance 6
6349 ]
6350 ]
6351
6352 node
6353 [
6354 id 8
6355 graphics
6356 [
6357 w 85.80000000000001
6358 h 26
6359 type "rectangle"
6360 fill "#FFFFFF"
6361 fill2 "#FFFFFF"
6362 outline "#000000"
6363 ]
6364 LabelGraphics
6365 [
6366 text "New Reals"
6367 outline "#000000"
6368 fill "#FFFFFF"
6369 fontSize 16
6370 fontName "Monospace"
6371 autoSizePolicy "node_width"
6372 anchor "t"
6373 borderDistance 0.0
6374 ]
6375 LabelGraphics
6376 [
6377 text "
6378 "
6379 fontSize 14
6380 fontName "Consolas"
6381 alignment "left"
6382 anchor "tl"
6383 borderDistance 6
6384 ]
6385 ]
6386
6387 node
6388 [
6389 id 9
6390 graphics
6391 [
6392 w 103.4
6393 h 26
6394 type "rectangle"
6395 fill "#FFFFFF"
6396 fill2 "#FFFFFF"
6397 outline "#000000"
6398 ]
6399 LabelGraphics
6400 [
6401 text "New Strings"
6402 outline "#000000"
6403 fill "#FFFFFF"
6404 fontSize 16
6405 fontName "Monospace"
6406 autoSizePolicy "node_width"
6407 anchor "t"
6408 borderDistance 0.0
6409 ]
6410 LabelGraphics
6411 [
6412 text "
6413 "
6414 fontSize 14
6415 fontName "Consolas"
6416 alignment "left"
6417 anchor "tl"
6418 borderDistance 6
6419 ]
6420 ]
6421
6422 node
6423 [
6424 id 10
6425 graphics
6426 [
6427 w 103.4
6428 h 26
6429 type "rectangle"
6430 fill "#FFFFFF"
6431 fill2 "#FFFFFF"
6432 outline "#000000"
6433 ]
6434 LabelGraphics
6435 [
6436 text "New Objects"
6437 outline "#000000"
6438 fill "#FFFFFF"
6439 fontSize 16
6440 fontName "Monospace"
6441 autoSizePolicy "node_width"
6442 anchor "t"
6443 borderDistance 0.0
6444 ]
6445 LabelGraphics
6446 [
6447 text "
6448 "
6449 fontSize 14
6450 fontName "Consolas"
6451 alignment "left"
6452 anchor "tl"
6453 borderDistance 6
6454 ]
6455 ]
6456 edge
6457 [
6458 source 6
6459 target 3
6460 graphics
6461 [
6462 fill "#000000"
6463 targetArrow "standard"
6464 ]
6465 LabelGraphics
6466 [
6467 text "model reference FunctionalElement"
6468 fontSize 14
6469 fontName "Consolas"
6470 configuration "AutoFlippingLabel"
6471 model "six_pos"
6472 position "thead"
6473 ]
6474 ]
6475 edge
6476 [
6477 source 3
6478 target 6
6479 graphics
6480 [
6481 fill "#000000"
6482 width 3
6483 targetArrow "standard"
6484 ]
6485 LabelGraphics
6486 [
6487 text "rootElements reference FunctionalArchitectureModel"
6488 fontSize 14
6489 fontName "Consolas"
6490 configuration "AutoFlippingLabel"
6491 model "six_pos"
6492 position "thead"
6493 ]
6494 ]
6495 edge
6496 [
6497 source 6
6498 target 1
6499 graphics
6500 [
6501 fill "#000000"
6502 targetArrow "standard"
6503 ]
6504 LabelGraphics
6505 [
6506 text "type attribute Function"
6507 fontSize 14
6508 fontName "Consolas"
6509 configuration "AutoFlippingLabel"
6510 model "six_pos"
6511 position "thead"
6512 ]
6513 ]
6514]
6515graph
6516[
6517 node
6518 [
6519 id 0
6520 graphics
6521 [
6522 w 254.10000000000002
6523 h 110
6524 type "rectangle"
6525 fill "#FFFFFF"
6526 fill2 "#FFFFFF"
6527 outline "#000000"
6528 ]
6529 LabelGraphics
6530 [
6531 text "o 1"
6532 outline "#000000"
6533 fill "#FFFFFF"
6534 fontSize 16
6535 fontName "Monospace"
6536 autoSizePolicy "node_width"
6537 anchor "t"
6538 borderDistance 0.0
6539 ]
6540 LabelGraphics
6541 [
6542 text "
6543 EModelElement class DefinedPart
6544 ENamedElement class DefinedPart
6545 EPackage class DefinedPart
6546 EModelElement class
6547 ENamedElement class
6548 EPackage class
6549 "
6550 fontSize 14
6551 fontName "Consolas"
6552 alignment "left"
6553 anchor "tl"
6554 borderDistance 6
6555 ]
6556 ]
6557
6558 node
6559 [
6560 id 1
6561 graphics
6562 [
6563 w 41.800000000000004
6564 h 26
6565 type "rectangle"
6566 fill "#FFFFFF"
6567 fill2 "#FFFFFF"
6568 outline "#000000"
6569 ]
6570 LabelGraphics
6571 [
6572 text "true"
6573 outline "#000000"
6574 fill "#FFFFFF"
6575 fontSize 16
6576 fontName "Monospace"
6577 autoSizePolicy "node_width"
6578 anchor "t"
6579 borderDistance 0.0
6580 ]
6581 LabelGraphics
6582 [
6583 text "
6584 "
6585 fontSize 14
6586 fontName "Consolas"
6587 alignment "left"
6588 anchor "tl"
6589 borderDistance 6
6590 ]
6591 ]
6592
6593 node
6594 [
6595 id 2
6596 graphics
6597 [
6598 w 50.6
6599 h 26
6600 type "rectangle"
6601 fill "#FFFFFF"
6602 fill2 "#FFFFFF"
6603 outline "#000000"
6604 ]
6605 LabelGraphics
6606 [
6607 text "false"
6608 outline "#000000"
6609 fill "#FFFFFF"
6610 fontSize 16
6611 fontName "Monospace"
6612 autoSizePolicy "node_width"
6613 anchor "t"
6614 borderDistance 0.0
6615 ]
6616 LabelGraphics
6617 [
6618 text "
6619 "
6620 fontSize 14
6621 fontName "Consolas"
6622 alignment "left"
6623 anchor "tl"
6624 borderDistance 6
6625 ]
6626 ]
6627
6628 node
6629 [
6630 id 3
6631 graphics
6632 [
6633 w 24.200000000000003
6634 h 26
6635 type "rectangle"
6636 fill "#FFFFFF"
6637 fill2 "#FFFFFF"
6638 outline "#000000"
6639 ]
6640 LabelGraphics
6641 [
6642 text "-1"
6643 outline "#000000"
6644 fill "#FFFFFF"
6645 fontSize 16
6646 fontName "Monospace"
6647 autoSizePolicy "node_width"
6648 anchor "t"
6649 borderDistance 0.0
6650 ]
6651 LabelGraphics
6652 [
6653 text "
6654 "
6655 fontSize 14
6656 fontName "Consolas"
6657 alignment "left"
6658 anchor "tl"
6659 borderDistance 6
6660 ]
6661 ]
6662
6663 node
6664 [
6665 id 4
6666 graphics
6667 [
6668 w 15.400000000000002
6669 h 26
6670 type "rectangle"
6671 fill "#FFFFFF"
6672 fill2 "#FFFFFF"
6673 outline "#000000"
6674 ]
6675 LabelGraphics
6676 [
6677 text "0"
6678 outline "#000000"
6679 fill "#FFFFFF"
6680 fontSize 16
6681 fontName "Monospace"
6682 autoSizePolicy "node_width"
6683 anchor "t"
6684 borderDistance 0.0
6685 ]
6686 LabelGraphics
6687 [
6688 text "
6689 "
6690 fontSize 14
6691 fontName "Consolas"
6692 alignment "left"
6693 anchor "tl"
6694 borderDistance 6
6695 ]
6696 ]
6697
6698 node
6699 [
6700 id 5
6701 graphics
6702 [
6703 w 15.400000000000002
6704 h 26
6705 type "rectangle"
6706 fill "#FFFFFF"
6707 fill2 "#FFFFFF"
6708 outline "#000000"
6709 ]
6710 LabelGraphics
6711 [
6712 text "1"
6713 outline "#000000"
6714 fill "#FFFFFF"
6715 fontSize 16
6716 fontName "Monospace"
6717 autoSizePolicy "node_width"
6718 anchor "t"
6719 borderDistance 0.0
6720 ]
6721 LabelGraphics
6722 [
6723 text "
6724 "
6725 fontSize 14
6726 fontName "Consolas"
6727 alignment "left"
6728 anchor "tl"
6729 borderDistance 6
6730 ]
6731 ]
6732
6733 node
6734 [
6735 id 6
6736 graphics
6737 [
6738 w 33.0
6739 h 26
6740 type "rectangle"
6741 fill "#FFFFFF"
6742 fill2 "#FFFFFF"
6743 outline "#000000"
6744 ]
6745 LabelGraphics
6746 [
6747 text ""A""
6748 outline "#000000"
6749 fill "#FFFFFF"
6750 fontSize 16
6751 fontName "Monospace"
6752 autoSizePolicy "node_width"
6753 anchor "t"
6754 borderDistance 0.0
6755 ]
6756 LabelGraphics
6757 [
6758 text "
6759 "
6760 fontSize 14
6761 fontName "Consolas"
6762 alignment "left"
6763 anchor "tl"
6764 borderDistance 6
6765 ]
6766 ]
6767
6768 node
6769 [
6770 id 7
6771 graphics
6772 [
6773 w 33.0
6774 h 26
6775 type "rectangle"
6776 fill "#FFFFFF"
6777 fill2 "#FFFFFF"
6778 outline "#000000"
6779 ]
6780 LabelGraphics
6781 [
6782 text ""B""
6783 outline "#000000"
6784 fill "#FFFFFF"
6785 fontSize 16
6786 fontName "Monospace"
6787 autoSizePolicy "node_width"
6788 anchor "t"
6789 borderDistance 0.0
6790 ]
6791 LabelGraphics
6792 [
6793 text "
6794 "
6795 fontSize 14
6796 fontName "Consolas"
6797 alignment "left"
6798 anchor "tl"
6799 borderDistance 6
6800 ]
6801 ]
6802
6803 node
6804 [
6805 id 8
6806 graphics
6807 [
6808 w 94.60000000000001
6809 h 26
6810 type "rectangle"
6811 fill "#FFFFFF"
6812 fill2 "#FFFFFF"
6813 outline "#000000"
6814 ]
6815 LabelGraphics
6816 [
6817 text ""nsPrefix""
6818 outline "#000000"
6819 fill "#FFFFFF"
6820 fontSize 16
6821 fontName "Monospace"
6822 autoSizePolicy "node_width"
6823 anchor "t"
6824 borderDistance 0.0
6825 ]
6826 LabelGraphics
6827 [
6828 text "
6829 "
6830 fontSize 14
6831 fontName "Consolas"
6832 alignment "left"
6833 anchor "tl"
6834 borderDistance 6
6835 ]
6836 ]
6837
6838 node
6839 [
6840 id 9
6841 graphics
6842 [
6843 w 68.2
6844 h 26
6845 type "rectangle"
6846 fill "#FFFFFF"
6847 fill2 "#FFFFFF"
6848 outline "#000000"
6849 ]
6850 LabelGraphics
6851 [
6852 text ""nsUri""
6853 outline "#000000"
6854 fill "#FFFFFF"
6855 fontSize 16
6856 fontName "Monospace"
6857 autoSizePolicy "node_width"
6858 anchor "t"
6859 borderDistance 0.0
6860 ]
6861 LabelGraphics
6862 [
6863 text "
6864 "
6865 fontSize 14
6866 fontName "Consolas"
6867 alignment "left"
6868 anchor "tl"
6869 borderDistance 6
6870 ]
6871 ]
6872
6873 node
6874 [
6875 id 10
6876 graphics
6877 [
6878 w 121.00000000000001
6879 h 26
6880 type "rectangle"
6881 fill "#FFFFFF"
6882 fill2 "#FFFFFF"
6883 outline "#000000"
6884 ]
6885 LabelGraphics
6886 [
6887 text ""packageName""
6888 outline "#000000"
6889 fill "#FFFFFF"
6890 fontSize 16
6891 fontName "Monospace"
6892 autoSizePolicy "node_width"
6893 anchor "t"
6894 borderDistance 0.0
6895 ]
6896 LabelGraphics
6897 [
6898 text "
6899 "
6900 fontSize 14
6901 fontName "Consolas"
6902 alignment "left"
6903 anchor "tl"
6904 borderDistance 6
6905 ]
6906 ]
6907
6908 node
6909 [
6910 id 11
6911 graphics
6912 [
6913 w 269.5
6914 h 124
6915 type "rectangle"
6916 fill "#FFFFFF"
6917 fill2 "#FFFFFF"
6918 outline "#000000"
6919 ]
6920 LabelGraphics
6921 [
6922 text "null"
6923 outline "#000000"
6924 fill "#FFFFFF"
6925 fontSize 16
6926 fontName "Monospace"
6927 autoSizePolicy "node_width"
6928 anchor "t"
6929 borderDistance 0.0
6930 ]
6931 LabelGraphics
6932 [
6933 text "
6934 EClassifier class
6935 EDataType class
6936 EEnum class
6937 EModelElement class
6938 ENamedElement class
6939 EModelElement class UndefinedPart
6940 ENamedElement class UndefinedPart
6941 "
6942 fontSize 14
6943 fontName "Consolas"
6944 alignment "left"
6945 anchor "tl"
6946 borderDistance 6
6947 ]
6948 ]
6949
6950 node
6951 [
6952 id 12
6953 graphics
6954 [
6955 w 269.5
6956 h 124
6957 type "rectangle"
6958 fill "#FFFFFF"
6959 fill2 "#FFFFFF"
6960 outline "#000000"
6961 ]
6962 LabelGraphics
6963 [
6964 text "null"
6965 outline "#000000"
6966 fill "#FFFFFF"
6967 fontSize 16
6968 fontName "Monospace"
6969 autoSizePolicy "node_width"
6970 anchor "t"
6971 borderDistance 0.0
6972 ]
6973 LabelGraphics
6974 [
6975 text "
6976 EClassifier class
6977 EDataType class
6978 EEnum class
6979 EModelElement class
6980 ENamedElement class
6981 EModelElement class UndefinedPart
6982 ENamedElement class UndefinedPart
6983 "
6984 fontSize 14
6985 fontName "Consolas"
6986 alignment "left"
6987 anchor "tl"
6988 borderDistance 6
6989 ]
6990 ]
6991
6992 node
6993 [
6994 id 13
6995 graphics
6996 [
6997 w 269.5
6998 h 110
6999 type "rectangle"
7000 fill "#FFFFFF"
7001 fill2 "#FFFFFF"
7002 outline "#000000"
7003 ]
7004 LabelGraphics
7005 [
7006 text "null"
7007 outline "#000000"
7008 fill "#FFFFFF"
7009 fontSize 16
7010 fontName "Monospace"
7011 autoSizePolicy "node_width"
7012 anchor "t"
7013 borderDistance 0.0
7014 ]
7015 LabelGraphics
7016 [
7017 text "
7018 EModelElement class
7019 ENamedElement class
7020 EPackage class
7021 EModelElement class UndefinedPart
7022 ENamedElement class UndefinedPart
7023 EPackage class UndefinedPart
7024 "
7025 fontSize 14
7026 fontName "Consolas"
7027 alignment "left"
7028 anchor "tl"
7029 borderDistance 6
7030 ]
7031 ]
7032
7033 node
7034 [
7035 id 14
7036 graphics
7037 [
7038 w 269.5
7039 h 124
7040 type "rectangle"
7041 fill "#FFFFFF"
7042 fill2 "#FFFFFF"
7043 outline "#000000"
7044 ]
7045 LabelGraphics
7046 [
7047 text "null"
7048 outline "#000000"
7049 fill "#FFFFFF"
7050 fontSize 16
7051 fontName "Monospace"
7052 autoSizePolicy "node_width"
7053 anchor "t"
7054 borderDistance 0.0
7055 ]
7056 LabelGraphics
7057 [
7058 text "
7059 EClassifier class
7060 EDataType class
7061 EEnum class
7062 EModelElement class
7063 ENamedElement class
7064 EModelElement class UndefinedPart
7065 ENamedElement class UndefinedPart
7066 "
7067 fontSize 14
7068 fontName "Consolas"
7069 alignment "left"
7070 anchor "tl"
7071 borderDistance 6
7072 ]
7073 ]
7074
7075 node
7076 [
7077 id 15
7078 graphics
7079 [
7080 w 269.5
7081 h 124
7082 type "rectangle"
7083 fill "#FFFFFF"
7084 fill2 "#FFFFFF"
7085 outline "#000000"
7086 ]
7087 LabelGraphics
7088 [
7089 text "null"
7090 outline "#000000"
7091 fill "#FFFFFF"
7092 fontSize 16
7093 fontName "Monospace"
7094 autoSizePolicy "node_width"
7095 anchor "t"
7096 borderDistance 0.0
7097 ]
7098 LabelGraphics
7099 [
7100 text "
7101 EClassifier class
7102 EDataType class
7103 EEnum class
7104 EModelElement class
7105 ENamedElement class
7106 EModelElement class UndefinedPart
7107 ENamedElement class UndefinedPart
7108 "
7109 fontSize 14
7110 fontName "Consolas"
7111 alignment "left"
7112 anchor "tl"
7113 borderDistance 6
7114 ]
7115 ]
7116
7117 node
7118 [
7119 id 16
7120 graphics
7121 [
7122 w 112.2
7123 h 26
7124 type "rectangle"
7125 fill "#FFFFFF"
7126 fill2 "#FFFFFF"
7127 outline "#000000"
7128 ]
7129 LabelGraphics
7130 [
7131 text "New Integers"
7132 outline "#000000"
7133 fill "#FFFFFF"
7134 fontSize 16
7135 fontName "Monospace"
7136 autoSizePolicy "node_width"
7137 anchor "t"
7138 borderDistance 0.0
7139 ]
7140 LabelGraphics
7141 [
7142 text "
7143 "
7144 fontSize 14
7145 fontName "Consolas"
7146 alignment "left"
7147 anchor "tl"
7148 borderDistance 6
7149 ]
7150 ]
7151
7152 node
7153 [
7154 id 17
7155 graphics
7156 [
7157 w 85.80000000000001
7158 h 26
7159 type "rectangle"
7160 fill "#FFFFFF"
7161 fill2 "#FFFFFF"
7162 outline "#000000"
7163 ]
7164 LabelGraphics
7165 [
7166 text "New Reals"
7167 outline "#000000"
7168 fill "#FFFFFF"
7169 fontSize 16
7170 fontName "Monospace"
7171 autoSizePolicy "node_width"
7172 anchor "t"
7173 borderDistance 0.0
7174 ]
7175 LabelGraphics
7176 [
7177 text "
7178 "
7179 fontSize 14
7180 fontName "Consolas"
7181 alignment "left"
7182 anchor "tl"
7183 borderDistance 6
7184 ]
7185 ]
7186
7187 node
7188 [
7189 id 18
7190 graphics
7191 [
7192 w 103.4
7193 h 26
7194 type "rectangle"
7195 fill "#FFFFFF"
7196 fill2 "#FFFFFF"
7197 outline "#000000"
7198 ]
7199 LabelGraphics
7200 [
7201 text "New Strings"
7202 outline "#000000"
7203 fill "#FFFFFF"
7204 fontSize 16
7205 fontName "Monospace"
7206 autoSizePolicy "node_width"
7207 anchor "t"
7208 borderDistance 0.0
7209 ]
7210 LabelGraphics
7211 [
7212 text "
7213 "
7214 fontSize 14
7215 fontName "Consolas"
7216 alignment "left"
7217 anchor "tl"
7218 borderDistance 6
7219 ]
7220 ]
7221
7222 node
7223 [
7224 id 19
7225 graphics
7226 [
7227 w 103.4
7228 h 26
7229 type "rectangle"
7230 fill "#FFFFFF"
7231 fill2 "#FFFFFF"
7232 outline "#000000"
7233 ]
7234 LabelGraphics
7235 [
7236 text "New Objects"
7237 outline "#000000"
7238 fill "#FFFFFF"
7239 fontSize 16
7240 fontName "Monospace"
7241 autoSizePolicy "node_width"
7242 anchor "t"
7243 borderDistance 0.0
7244 ]
7245 LabelGraphics
7246 [
7247 text "
7248 "
7249 fontSize 14
7250 fontName "Consolas"
7251 alignment "left"
7252 anchor "tl"
7253 borderDistance 6
7254 ]
7255 ]
7256 edge
7257 [
7258 source 11
7259 target 0
7260 graphics
7261 [
7262 fill "#000000"
7263 targetArrow "standard"
7264 ]
7265 LabelGraphics
7266 [
7267 text "ePackage reference EClassifier"
7268 fontSize 14
7269 fontName "Consolas"
7270 configuration "AutoFlippingLabel"
7271 model "six_pos"
7272 position "thead"
7273 ]
7274 ]
7275 edge
7276 [
7277 source 12
7278 target 0
7279 graphics
7280 [
7281 fill "#000000"
7282 targetArrow "standard"
7283 ]
7284 LabelGraphics
7285 [
7286 text "ePackage reference EClassifier"
7287 fontSize 14
7288 fontName "Consolas"
7289 configuration "AutoFlippingLabel"
7290 model "six_pos"
7291 position "thead"
7292 ]
7293 ]
7294 edge
7295 [
7296 source 14
7297 target 0
7298 graphics
7299 [
7300 fill "#000000"
7301 targetArrow "standard"
7302 ]
7303 LabelGraphics
7304 [
7305 text "ePackage reference EClassifier"
7306 fontSize 14
7307 fontName "Consolas"
7308 configuration "AutoFlippingLabel"
7309 model "six_pos"
7310 position "thead"
7311 ]
7312 ]
7313 edge
7314 [
7315 source 15
7316 target 13
7317 graphics
7318 [
7319 fill "#000000"
7320 targetArrow "standard"
7321 ]
7322 LabelGraphics
7323 [
7324 text "ePackage reference EClassifier"
7325 fontSize 14
7326 fontName "Consolas"
7327 configuration "AutoFlippingLabel"
7328 model "six_pos"
7329 position "thead"
7330 ]
7331 ]
7332 edge
7333 [
7334 source 0
7335 target 11
7336 graphics
7337 [
7338 fill "#000000"
7339 width 3
7340 targetArrow "standard"
7341 ]
7342 LabelGraphics
7343 [
7344 text "eClassifiers reference EPackage"
7345 fontSize 14
7346 fontName "Consolas"
7347 configuration "AutoFlippingLabel"
7348 model "six_pos"
7349 position "thead"
7350 ]
7351 ]
7352 edge
7353 [
7354 source 0
7355 target 12
7356 graphics
7357 [
7358 fill "#000000"
7359 width 3
7360 targetArrow "standard"
7361 ]
7362 LabelGraphics
7363 [
7364 text "eClassifiers reference EPackage"
7365 fontSize 14
7366 fontName "Consolas"
7367 configuration "AutoFlippingLabel"
7368 model "six_pos"
7369 position "thead"
7370 ]
7371 ]
7372 edge
7373 [
7374 source 0
7375 target 14
7376 graphics
7377 [
7378 fill "#000000"
7379 width 3
7380 targetArrow "standard"
7381 ]
7382 LabelGraphics
7383 [
7384 text "eClassifiers reference EPackage"
7385 fontSize 14
7386 fontName "Consolas"
7387 configuration "AutoFlippingLabel"
7388 model "six_pos"
7389 position "thead"
7390 ]
7391 ]
7392 edge
7393 [
7394 source 13
7395 target 15
7396 graphics
7397 [
7398 fill "#000000"
7399 width 3
7400 targetArrow "standard"
7401 ]
7402 LabelGraphics
7403 [
7404 text "eClassifiers reference EPackage"
7405 fontSize 14
7406 fontName "Consolas"
7407 configuration "AutoFlippingLabel"
7408 model "six_pos"
7409 position "thead"
7410 ]
7411 ]
7412 edge
7413 [
7414 source 0
7415 target 13
7416 graphics
7417 [
7418 fill "#000000"
7419 width 3
7420 targetArrow "standard"
7421 ]
7422 LabelGraphics
7423 [
7424 text "eSubpackages reference EPackage"
7425 fontSize 14
7426 fontName "Consolas"
7427 configuration "AutoFlippingLabel"
7428 model "six_pos"
7429 position "thead"
7430 ]
7431 ]
7432 edge
7433 [
7434 source 13
7435 target 0
7436 graphics
7437 [
7438 fill "#000000"
7439 targetArrow "standard"
7440 ]
7441 LabelGraphics
7442 [
7443 text "eSuperPackage reference EPackage"
7444 fontSize 14
7445 fontName "Consolas"
7446 configuration "AutoFlippingLabel"
7447 model "six_pos"
7448 position "thead"
7449 ]
7450 ]
7451 edge
7452 [
7453 source 12
7454 target 8
7455 graphics
7456 [
7457 fill "#000000"
7458 targetArrow "standard"
7459 ]
7460 LabelGraphics
7461 [
7462 text "instanceClassName attribute EClassifier"
7463 fontSize 14
7464 fontName "Consolas"
7465 configuration "AutoFlippingLabel"
7466 model "six_pos"
7467 position "thead"
7468 ]
7469 ]
7470 edge
7471 [
7472 source 11
7473 target 6
7474 graphics
7475 [
7476 fill "#000000"
7477 targetArrow "standard"
7478 ]
7479 LabelGraphics
7480 [
7481 text "instanceClassName attribute EClassifier"
7482 fontSize 14
7483 fontName "Consolas"
7484 configuration "AutoFlippingLabel"
7485 model "six_pos"
7486 position "thead"
7487 ]
7488 ]
7489 edge
7490 [
7491 source 11
7492 target 10
7493 graphics
7494 [
7495 fill "#000000"
7496 targetArrow "standard"
7497 ]
7498 LabelGraphics
7499 [
7500 text "instanceTypeName attribute EClassifier"
7501 fontSize 14
7502 fontName "Consolas"
7503 configuration "AutoFlippingLabel"
7504 model "six_pos"
7505 position "thead"
7506 ]
7507 ]
7508 edge
7509 [
7510 source 12
7511 target 8
7512 graphics
7513 [
7514 fill "#000000"
7515 targetArrow "standard"
7516 ]
7517 LabelGraphics
7518 [
7519 text "instanceTypeName attribute EClassifier"
7520 fontSize 14
7521 fontName "Consolas"
7522 configuration "AutoFlippingLabel"
7523 model "six_pos"
7524 position "thead"
7525 ]
7526 ]
7527 edge
7528 [
7529 source 0
7530 target 10
7531 graphics
7532 [
7533 fill "#000000"
7534 targetArrow "standard"
7535 ]
7536 LabelGraphics
7537 [
7538 text "name attribute ENamedElement"
7539 fontSize 14
7540 fontName "Consolas"
7541 configuration "AutoFlippingLabel"
7542 model "six_pos"
7543 position "thead"
7544 ]
7545 ]
7546 edge
7547 [
7548 source 12
7549 target 10
7550 graphics
7551 [
7552 fill "#000000"
7553 targetArrow "standard"
7554 ]
7555 LabelGraphics
7556 [
7557 text "name attribute ENamedElement"
7558 fontSize 14
7559 fontName "Consolas"
7560 configuration "AutoFlippingLabel"
7561 model "six_pos"
7562 position "thead"
7563 ]
7564 ]
7565 edge
7566 [
7567 source 11
7568 target 10
7569 graphics
7570 [
7571 fill "#000000"
7572 targetArrow "standard"
7573 ]
7574 LabelGraphics
7575 [
7576 text "name attribute ENamedElement"
7577 fontSize 14
7578 fontName "Consolas"
7579 configuration "AutoFlippingLabel"
7580 model "six_pos"
7581 position "thead"
7582 ]
7583 ]
7584 edge
7585 [
7586 source 13
7587 target 6
7588 graphics
7589 [
7590 fill "#000000"
7591 targetArrow "standard"
7592 ]
7593 LabelGraphics
7594 [
7595 text "name attribute ENamedElement"
7596 fontSize 14
7597 fontName "Consolas"
7598 configuration "AutoFlippingLabel"
7599 model "six_pos"
7600 position "thead"
7601 ]
7602 ]
7603 edge
7604 [
7605 source 0
7606 target 9
7607 graphics
7608 [
7609 fill "#000000"
7610 targetArrow "standard"
7611 ]
7612 LabelGraphics
7613 [
7614 text "nsURI attribute EPackage"
7615 fontSize 14
7616 fontName "Consolas"
7617 configuration "AutoFlippingLabel"
7618 model "six_pos"
7619 position "thead"
7620 ]
7621 ]
7622 edge
7623 [
7624 source 0
7625 target 8
7626 graphics
7627 [
7628 fill "#000000"
7629 targetArrow "standard"
7630 ]
7631 LabelGraphics
7632 [
7633 text "nsPrefix attribute EPackage"
7634 fontSize 14
7635 fontName "Consolas"
7636 configuration "AutoFlippingLabel"
7637 model "six_pos"
7638 position "thead"
7639 ]
7640 ]
7641]
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/1.png b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/1.png
new file mode 100644
index 00000000..c1d6f49f
--- /dev/null
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/1.png
Binary files differ
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/1.xmi b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/1.xmi
new file mode 100644
index 00000000..d9529633
--- /dev/null
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/1.xmi
@@ -0,0 +1,9 @@
1<?xml version="1.0" encoding="ASCII"?>
2<ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="packageName" nsURI="nsUri" nsPrefix="nsPrefix">
3 <eClassifiers xsi:type="ecore:EEnum" name="packageName" instanceClassName="A"/>
4 <eClassifiers xsi:type="ecore:EEnum"/>
5 <eClassifiers xsi:type="ecore:EEnum" name="packageName" instanceClassName="nsPrefix"/>
6 <eSubpackages name="A">
7 <eClassifiers xsi:type="ecore:EEnum"/>
8 </eSubpackages>
9</ecore:EPackage>
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/2.gml b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/2.gml
new file mode 100644
index 00000000..f6242732
--- /dev/null
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/2.gml
@@ -0,0 +1,4762 @@
1graph
2[
3 node
4 [
5 id 0
6 graphics
7 [
8 w 226.60000000000002
9 h 40
10 type "rectangle"
11 fill "#FFFFFF"
12 fill2 "#FFFFFF"
13 outline "#000000"
14 ]
15 LabelGraphics
16 [
17 text "Root literal FunctionType"
18 outline "#000000"
19 fill "#FFFFFF"
20 fontSize 16
21 fontName "Monospace"
22 autoSizePolicy "node_width"
23 anchor "t"
24 borderDistance 0.0
25 ]
26 LabelGraphics
27 [
28 text "
29 FunctionType enum
30 "
31 fontSize 14
32 fontName "Consolas"
33 alignment "left"
34 anchor "tl"
35 borderDistance 6
36 ]
37 ]
38
39 node
40 [
41 id 1
42 graphics
43 [
44 w 297.0
45 h 40
46 type "rectangle"
47 fill "#FFFFFF"
48 fill2 "#FFFFFF"
49 outline "#000000"
50 ]
51 LabelGraphics
52 [
53 text "Intermediate literal FunctionType"
54 outline "#000000"
55 fill "#FFFFFF"
56 fontSize 16
57 fontName "Monospace"
58 autoSizePolicy "node_width"
59 anchor "t"
60 borderDistance 0.0
61 ]
62 LabelGraphics
63 [
64 text "
65 FunctionType enum
66 "
67 fontSize 14
68 fontName "Consolas"
69 alignment "left"
70 anchor "tl"
71 borderDistance 6
72 ]
73 ]
74
75 node
76 [
77 id 2
78 graphics
79 [
80 w 226.60000000000002
81 h 40
82 type "rectangle"
83 fill "#FFFFFF"
84 fill2 "#FFFFFF"
85 outline "#000000"
86 ]
87 LabelGraphics
88 [
89 text "Leaf literal FunctionType"
90 outline "#000000"
91 fill "#FFFFFF"
92 fontSize 16
93 fontName "Monospace"
94 autoSizePolicy "node_width"
95 anchor "t"
96 borderDistance 0.0
97 ]
98 LabelGraphics
99 [
100 text "
101 FunctionType enum
102 "
103 fontSize 14
104 fontName "Consolas"
105 alignment "left"
106 anchor "tl"
107 borderDistance 6
108 ]
109 ]
110
111 node
112 [
113 id 3
114 graphics
115 [
116 w 361.90000000000003
117 h 54
118 type "rectangle"
119 fill "#FFFFFF"
120 fill2 "#FFFFFF"
121 outline "#000000"
122 ]
123 LabelGraphics
124 [
125 text "o 1"
126 outline "#000000"
127 fill "#FFFFFF"
128 fontSize 16
129 fontName "Monospace"
130 autoSizePolicy "node_width"
131 anchor "t"
132 borderDistance 0.0
133 ]
134 LabelGraphics
135 [
136 text "
137 FunctionalArchitectureModel class DefinedPart
138 FunctionalArchitectureModel class
139 "
140 fontSize 14
141 fontName "Consolas"
142 alignment "left"
143 anchor "tl"
144 borderDistance 6
145 ]
146 ]
147
148 node
149 [
150 id 4
151 graphics
152 [
153 w 41.800000000000004
154 h 26
155 type "rectangle"
156 fill "#FFFFFF"
157 fill2 "#FFFFFF"
158 outline "#000000"
159 ]
160 LabelGraphics
161 [
162 text "true"
163 outline "#000000"
164 fill "#FFFFFF"
165 fontSize 16
166 fontName "Monospace"
167 autoSizePolicy "node_width"
168 anchor "t"
169 borderDistance 0.0
170 ]
171 LabelGraphics
172 [
173 text "
174 "
175 fontSize 14
176 fontName "Consolas"
177 alignment "left"
178 anchor "tl"
179 borderDistance 6
180 ]
181 ]
182
183 node
184 [
185 id 5
186 graphics
187 [
188 w 50.6
189 h 26
190 type "rectangle"
191 fill "#FFFFFF"
192 fill2 "#FFFFFF"
193 outline "#000000"
194 ]
195 LabelGraphics
196 [
197 text "false"
198 outline "#000000"
199 fill "#FFFFFF"
200 fontSize 16
201 fontName "Monospace"
202 autoSizePolicy "node_width"
203 anchor "t"
204 borderDistance 0.0
205 ]
206 LabelGraphics
207 [
208 text "
209 "
210 fontSize 14
211 fontName "Consolas"
212 alignment "left"
213 anchor "tl"
214 borderDistance 6
215 ]
216 ]
217
218 node
219 [
220 id 6
221 graphics
222 [
223 w 192.50000000000003
224 h 54
225 type "rectangle"
226 fill "#FFFFFF"
227 fill2 "#FFFFFF"
228 outline "#000000"
229 ]
230 LabelGraphics
231 [
232 text "null"
233 outline "#000000"
234 fill "#FFFFFF"
235 fontSize 16
236 fontName "Monospace"
237 autoSizePolicy "node_width"
238 anchor "t"
239 borderDistance 0.0
240 ]
241 LabelGraphics
242 [
243 text "
244 FunctionalElement class
245 Function class
246 "
247 fontSize 14
248 fontName "Consolas"
249 alignment "left"
250 anchor "tl"
251 borderDistance 6
252 ]
253 ]
254
255 node
256 [
257 id 7
258 graphics
259 [
260 w 112.2
261 h 26
262 type "rectangle"
263 fill "#FFFFFF"
264 fill2 "#FFFFFF"
265 outline "#000000"
266 ]
267 LabelGraphics
268 [
269 text "New Integers"
270 outline "#000000"
271 fill "#FFFFFF"
272 fontSize 16
273 fontName "Monospace"
274 autoSizePolicy "node_width"
275 anchor "t"
276 borderDistance 0.0
277 ]
278 LabelGraphics
279 [
280 text "
281 "
282 fontSize 14
283 fontName "Consolas"
284 alignment "left"
285 anchor "tl"
286 borderDistance 6
287 ]
288 ]
289
290 node
291 [
292 id 8
293 graphics
294 [
295 w 85.80000000000001
296 h 26
297 type "rectangle"
298 fill "#FFFFFF"
299 fill2 "#FFFFFF"
300 outline "#000000"
301 ]
302 LabelGraphics
303 [
304 text "New Reals"
305 outline "#000000"
306 fill "#FFFFFF"
307 fontSize 16
308 fontName "Monospace"
309 autoSizePolicy "node_width"
310 anchor "t"
311 borderDistance 0.0
312 ]
313 LabelGraphics
314 [
315 text "
316 "
317 fontSize 14
318 fontName "Consolas"
319 alignment "left"
320 anchor "tl"
321 borderDistance 6
322 ]
323 ]
324
325 node
326 [
327 id 9
328 graphics
329 [
330 w 103.4
331 h 26
332 type "rectangle"
333 fill "#FFFFFF"
334 fill2 "#FFFFFF"
335 outline "#000000"
336 ]
337 LabelGraphics
338 [
339 text "New Strings"
340 outline "#000000"
341 fill "#FFFFFF"
342 fontSize 16
343 fontName "Monospace"
344 autoSizePolicy "node_width"
345 anchor "t"
346 borderDistance 0.0
347 ]
348 LabelGraphics
349 [
350 text "
351 "
352 fontSize 14
353 fontName "Consolas"
354 alignment "left"
355 anchor "tl"
356 borderDistance 6
357 ]
358 ]
359
360 node
361 [
362 id 10
363 graphics
364 [
365 w 103.4
366 h 26
367 type "rectangle"
368 fill "#FFFFFF"
369 fill2 "#FFFFFF"
370 outline "#000000"
371 ]
372 LabelGraphics
373 [
374 text "New Objects"
375 outline "#000000"
376 fill "#FFFFFF"
377 fontSize 16
378 fontName "Monospace"
379 autoSizePolicy "node_width"
380 anchor "t"
381 borderDistance 0.0
382 ]
383 LabelGraphics
384 [
385 text "
386 "
387 fontSize 14
388 fontName "Consolas"
389 alignment "left"
390 anchor "tl"
391 borderDistance 6
392 ]
393 ]
394 edge
395 [
396 source 6
397 target 3
398 graphics
399 [
400 fill "#000000"
401 targetArrow "standard"
402 ]
403 LabelGraphics
404 [
405 text "model reference FunctionalElement"
406 fontSize 14
407 fontName "Consolas"
408 configuration "AutoFlippingLabel"
409 model "six_pos"
410 position "thead"
411 ]
412 ]
413 edge
414 [
415 source 3
416 target 6
417 graphics
418 [
419 fill "#000000"
420 width 3
421 targetArrow "standard"
422 ]
423 LabelGraphics
424 [
425 text "rootElements reference FunctionalArchitectureModel"
426 fontSize 14
427 fontName "Consolas"
428 configuration "AutoFlippingLabel"
429 model "six_pos"
430 position "thead"
431 ]
432 ]
433 edge
434 [
435 source 6
436 target 1
437 graphics
438 [
439 fill "#000000"
440 targetArrow "standard"
441 ]
442 LabelGraphics
443 [
444 text "type attribute Function"
445 fontSize 14
446 fontName "Consolas"
447 configuration "AutoFlippingLabel"
448 model "six_pos"
449 position "thead"
450 ]
451 ]
452]
453graph
454[
455 node
456 [
457 id 0
458 graphics
459 [
460 w 226.60000000000002
461 h 40
462 type "rectangle"
463 fill "#FFFFFF"
464 fill2 "#FFFFFF"
465 outline "#000000"
466 ]
467 LabelGraphics
468 [
469 text "Root literal FunctionType"
470 outline "#000000"
471 fill "#FFFFFF"
472 fontSize 16
473 fontName "Monospace"
474 autoSizePolicy "node_width"
475 anchor "t"
476 borderDistance 0.0
477 ]
478 LabelGraphics
479 [
480 text "
481 FunctionType enum
482 "
483 fontSize 14
484 fontName "Consolas"
485 alignment "left"
486 anchor "tl"
487 borderDistance 6
488 ]
489 ]
490
491 node
492 [
493 id 1
494 graphics
495 [
496 w 297.0
497 h 40
498 type "rectangle"
499 fill "#FFFFFF"
500 fill2 "#FFFFFF"
501 outline "#000000"
502 ]
503 LabelGraphics
504 [
505 text "Intermediate literal FunctionType"
506 outline "#000000"
507 fill "#FFFFFF"
508 fontSize 16
509 fontName "Monospace"
510 autoSizePolicy "node_width"
511 anchor "t"
512 borderDistance 0.0
513 ]
514 LabelGraphics
515 [
516 text "
517 FunctionType enum
518 "
519 fontSize 14
520 fontName "Consolas"
521 alignment "left"
522 anchor "tl"
523 borderDistance 6
524 ]
525 ]
526
527 node
528 [
529 id 2
530 graphics
531 [
532 w 226.60000000000002
533 h 40
534 type "rectangle"
535 fill "#FFFFFF"
536 fill2 "#FFFFFF"
537 outline "#000000"
538 ]
539 LabelGraphics
540 [
541 text "Leaf literal FunctionType"
542 outline "#000000"
543 fill "#FFFFFF"
544 fontSize 16
545 fontName "Monospace"
546 autoSizePolicy "node_width"
547 anchor "t"
548 borderDistance 0.0
549 ]
550 LabelGraphics
551 [
552 text "
553 FunctionType enum
554 "
555 fontSize 14
556 fontName "Consolas"
557 alignment "left"
558 anchor "tl"
559 borderDistance 6
560 ]
561 ]
562
563 node
564 [
565 id 3
566 graphics
567 [
568 w 361.90000000000003
569 h 54
570 type "rectangle"
571 fill "#FFFFFF"
572 fill2 "#FFFFFF"
573 outline "#000000"
574 ]
575 LabelGraphics
576 [
577 text "o 1"
578 outline "#000000"
579 fill "#FFFFFF"
580 fontSize 16
581 fontName "Monospace"
582 autoSizePolicy "node_width"
583 anchor "t"
584 borderDistance 0.0
585 ]
586 LabelGraphics
587 [
588 text "
589 FunctionalArchitectureModel class DefinedPart
590 FunctionalArchitectureModel class
591 "
592 fontSize 14
593 fontName "Consolas"
594 alignment "left"
595 anchor "tl"
596 borderDistance 6
597 ]
598 ]
599
600 node
601 [
602 id 4
603 graphics
604 [
605 w 41.800000000000004
606 h 26
607 type "rectangle"
608 fill "#FFFFFF"
609 fill2 "#FFFFFF"
610 outline "#000000"
611 ]
612 LabelGraphics
613 [
614 text "true"
615 outline "#000000"
616 fill "#FFFFFF"
617 fontSize 16
618 fontName "Monospace"
619 autoSizePolicy "node_width"
620 anchor "t"
621 borderDistance 0.0
622 ]
623 LabelGraphics
624 [
625 text "
626 "
627 fontSize 14
628 fontName "Consolas"
629 alignment "left"
630 anchor "tl"
631 borderDistance 6
632 ]
633 ]
634
635 node
636 [
637 id 5
638 graphics
639 [
640 w 50.6
641 h 26
642 type "rectangle"
643 fill "#FFFFFF"
644 fill2 "#FFFFFF"
645 outline "#000000"
646 ]
647 LabelGraphics
648 [
649 text "false"
650 outline "#000000"
651 fill "#FFFFFF"
652 fontSize 16
653 fontName "Monospace"
654 autoSizePolicy "node_width"
655 anchor "t"
656 borderDistance 0.0
657 ]
658 LabelGraphics
659 [
660 text "
661 "
662 fontSize 14
663 fontName "Consolas"
664 alignment "left"
665 anchor "tl"
666 borderDistance 6
667 ]
668 ]
669
670 node
671 [
672 id 6
673 graphics
674 [
675 w 192.50000000000003
676 h 54
677 type "rectangle"
678 fill "#FFFFFF"
679 fill2 "#FFFFFF"
680 outline "#000000"
681 ]
682 LabelGraphics
683 [
684 text "null"
685 outline "#000000"
686 fill "#FFFFFF"
687 fontSize 16
688 fontName "Monospace"
689 autoSizePolicy "node_width"
690 anchor "t"
691 borderDistance 0.0
692 ]
693 LabelGraphics
694 [
695 text "
696 FunctionalElement class
697 Function class
698 "
699 fontSize 14
700 fontName "Consolas"
701 alignment "left"
702 anchor "tl"
703 borderDistance 6
704 ]
705 ]
706
707 node
708 [
709 id 7
710 graphics
711 [
712 w 112.2
713 h 26
714 type "rectangle"
715 fill "#FFFFFF"
716 fill2 "#FFFFFF"
717 outline "#000000"
718 ]
719 LabelGraphics
720 [
721 text "New Integers"
722 outline "#000000"
723 fill "#FFFFFF"
724 fontSize 16
725 fontName "Monospace"
726 autoSizePolicy "node_width"
727 anchor "t"
728 borderDistance 0.0
729 ]
730 LabelGraphics
731 [
732 text "
733 "
734 fontSize 14
735 fontName "Consolas"
736 alignment "left"
737 anchor "tl"
738 borderDistance 6
739 ]
740 ]
741
742 node
743 [
744 id 8
745 graphics
746 [
747 w 85.80000000000001
748 h 26
749 type "rectangle"
750 fill "#FFFFFF"
751 fill2 "#FFFFFF"
752 outline "#000000"
753 ]
754 LabelGraphics
755 [
756 text "New Reals"
757 outline "#000000"
758 fill "#FFFFFF"
759 fontSize 16
760 fontName "Monospace"
761 autoSizePolicy "node_width"
762 anchor "t"
763 borderDistance 0.0
764 ]
765 LabelGraphics
766 [
767 text "
768 "
769 fontSize 14
770 fontName "Consolas"
771 alignment "left"
772 anchor "tl"
773 borderDistance 6
774 ]
775 ]
776
777 node
778 [
779 id 9
780 graphics
781 [
782 w 103.4
783 h 26
784 type "rectangle"
785 fill "#FFFFFF"
786 fill2 "#FFFFFF"
787 outline "#000000"
788 ]
789 LabelGraphics
790 [
791 text "New Strings"
792 outline "#000000"
793 fill "#FFFFFF"
794 fontSize 16
795 fontName "Monospace"
796 autoSizePolicy "node_width"
797 anchor "t"
798 borderDistance 0.0
799 ]
800 LabelGraphics
801 [
802 text "
803 "
804 fontSize 14
805 fontName "Consolas"
806 alignment "left"
807 anchor "tl"
808 borderDistance 6
809 ]
810 ]
811
812 node
813 [
814 id 10
815 graphics
816 [
817 w 103.4
818 h 26
819 type "rectangle"
820 fill "#FFFFFF"
821 fill2 "#FFFFFF"
822 outline "#000000"
823 ]
824 LabelGraphics
825 [
826 text "New Objects"
827 outline "#000000"
828 fill "#FFFFFF"
829 fontSize 16
830 fontName "Monospace"
831 autoSizePolicy "node_width"
832 anchor "t"
833 borderDistance 0.0
834 ]
835 LabelGraphics
836 [
837 text "
838 "
839 fontSize 14
840 fontName "Consolas"
841 alignment "left"
842 anchor "tl"
843 borderDistance 6
844 ]
845 ]
846 edge
847 [
848 source 6
849 target 3
850 graphics
851 [
852 fill "#000000"
853 targetArrow "standard"
854 ]
855 LabelGraphics
856 [
857 text "model reference FunctionalElement"
858 fontSize 14
859 fontName "Consolas"
860 configuration "AutoFlippingLabel"
861 model "six_pos"
862 position "thead"
863 ]
864 ]
865 edge
866 [
867 source 3
868 target 6
869 graphics
870 [
871 fill "#000000"
872 width 3
873 targetArrow "standard"
874 ]
875 LabelGraphics
876 [
877 text "rootElements reference FunctionalArchitectureModel"
878 fontSize 14
879 fontName "Consolas"
880 configuration "AutoFlippingLabel"
881 model "six_pos"
882 position "thead"
883 ]
884 ]
885 edge
886 [
887 source 6
888 target 2
889 graphics
890 [
891 fill "#000000"
892 targetArrow "standard"
893 ]
894 LabelGraphics
895 [
896 text "type attribute Function"
897 fontSize 14
898 fontName "Consolas"
899 configuration "AutoFlippingLabel"
900 model "six_pos"
901 position "thead"
902 ]
903 ]
904]
905graph
906[
907 node
908 [
909 id 0
910 graphics
911 [
912 w 226.60000000000002
913 h 40
914 type "rectangle"
915 fill "#FFFFFF"
916 fill2 "#FFFFFF"
917 outline "#000000"
918 ]
919 LabelGraphics
920 [
921 text "Root literal FunctionType"
922 outline "#000000"
923 fill "#FFFFFF"
924 fontSize 16
925 fontName "Monospace"
926 autoSizePolicy "node_width"
927 anchor "t"
928 borderDistance 0.0
929 ]
930 LabelGraphics
931 [
932 text "
933 FunctionType enum
934 "
935 fontSize 14
936 fontName "Consolas"
937 alignment "left"
938 anchor "tl"
939 borderDistance 6
940 ]
941 ]
942
943 node
944 [
945 id 1
946 graphics
947 [
948 w 297.0
949 h 40
950 type "rectangle"
951 fill "#FFFFFF"
952 fill2 "#FFFFFF"
953 outline "#000000"
954 ]
955 LabelGraphics
956 [
957 text "Intermediate literal FunctionType"
958 outline "#000000"
959 fill "#FFFFFF"
960 fontSize 16
961 fontName "Monospace"
962 autoSizePolicy "node_width"
963 anchor "t"
964 borderDistance 0.0
965 ]
966 LabelGraphics
967 [
968 text "
969 FunctionType enum
970 "
971 fontSize 14
972 fontName "Consolas"
973 alignment "left"
974 anchor "tl"
975 borderDistance 6
976 ]
977 ]
978
979 node
980 [
981 id 2
982 graphics
983 [
984 w 226.60000000000002
985 h 40
986 type "rectangle"
987 fill "#FFFFFF"
988 fill2 "#FFFFFF"
989 outline "#000000"
990 ]
991 LabelGraphics
992 [
993 text "Leaf literal FunctionType"
994 outline "#000000"
995 fill "#FFFFFF"
996 fontSize 16
997 fontName "Monospace"
998 autoSizePolicy "node_width"
999 anchor "t"
1000 borderDistance 0.0
1001 ]
1002 LabelGraphics
1003 [
1004 text "
1005 FunctionType enum
1006 "
1007 fontSize 14
1008 fontName "Consolas"
1009 alignment "left"
1010 anchor "tl"
1011 borderDistance 6
1012 ]
1013 ]
1014
1015 node
1016 [
1017 id 3
1018 graphics
1019 [
1020 w 361.90000000000003
1021 h 54
1022 type "rectangle"
1023 fill "#FFFFFF"
1024 fill2 "#FFFFFF"
1025 outline "#000000"
1026 ]
1027 LabelGraphics
1028 [
1029 text "o 1"
1030 outline "#000000"
1031 fill "#FFFFFF"
1032 fontSize 16
1033 fontName "Monospace"
1034 autoSizePolicy "node_width"
1035 anchor "t"
1036 borderDistance 0.0
1037 ]
1038 LabelGraphics
1039 [
1040 text "
1041 FunctionalArchitectureModel class DefinedPart
1042 FunctionalArchitectureModel class
1043 "
1044 fontSize 14
1045 fontName "Consolas"
1046 alignment "left"
1047 anchor "tl"
1048 borderDistance 6
1049 ]
1050 ]
1051
1052 node
1053 [
1054 id 4
1055 graphics
1056 [
1057 w 41.800000000000004
1058 h 26
1059 type "rectangle"
1060 fill "#FFFFFF"
1061 fill2 "#FFFFFF"
1062 outline "#000000"
1063 ]
1064 LabelGraphics
1065 [
1066 text "true"
1067 outline "#000000"
1068 fill "#FFFFFF"
1069 fontSize 16
1070 fontName "Monospace"
1071 autoSizePolicy "node_width"
1072 anchor "t"
1073 borderDistance 0.0
1074 ]
1075 LabelGraphics
1076 [
1077 text "
1078 "
1079 fontSize 14
1080 fontName "Consolas"
1081 alignment "left"
1082 anchor "tl"
1083 borderDistance 6
1084 ]
1085 ]
1086
1087 node
1088 [
1089 id 5
1090 graphics
1091 [
1092 w 50.6
1093 h 26
1094 type "rectangle"
1095 fill "#FFFFFF"
1096 fill2 "#FFFFFF"
1097 outline "#000000"
1098 ]
1099 LabelGraphics
1100 [
1101 text "false"
1102 outline "#000000"
1103 fill "#FFFFFF"
1104 fontSize 16
1105 fontName "Monospace"
1106 autoSizePolicy "node_width"
1107 anchor "t"
1108 borderDistance 0.0
1109 ]
1110 LabelGraphics
1111 [
1112 text "
1113 "
1114 fontSize 14
1115 fontName "Consolas"
1116 alignment "left"
1117 anchor "tl"
1118 borderDistance 6
1119 ]
1120 ]
1121
1122 node
1123 [
1124 id 6
1125 graphics
1126 [
1127 w 192.50000000000003
1128 h 54
1129 type "rectangle"
1130 fill "#FFFFFF"
1131 fill2 "#FFFFFF"
1132 outline "#000000"
1133 ]
1134 LabelGraphics
1135 [
1136 text "null"
1137 outline "#000000"
1138 fill "#FFFFFF"
1139 fontSize 16
1140 fontName "Monospace"
1141 autoSizePolicy "node_width"
1142 anchor "t"
1143 borderDistance 0.0
1144 ]
1145 LabelGraphics
1146 [
1147 text "
1148 FunctionalElement class
1149 Function class
1150 "
1151 fontSize 14
1152 fontName "Consolas"
1153 alignment "left"
1154 anchor "tl"
1155 borderDistance 6
1156 ]
1157 ]
1158
1159 node
1160 [
1161 id 7
1162 graphics
1163 [
1164 w 112.2
1165 h 26
1166 type "rectangle"
1167 fill "#FFFFFF"
1168 fill2 "#FFFFFF"
1169 outline "#000000"
1170 ]
1171 LabelGraphics
1172 [
1173 text "New Integers"
1174 outline "#000000"
1175 fill "#FFFFFF"
1176 fontSize 16
1177 fontName "Monospace"
1178 autoSizePolicy "node_width"
1179 anchor "t"
1180 borderDistance 0.0
1181 ]
1182 LabelGraphics
1183 [
1184 text "
1185 "
1186 fontSize 14
1187 fontName "Consolas"
1188 alignment "left"
1189 anchor "tl"
1190 borderDistance 6
1191 ]
1192 ]
1193
1194 node
1195 [
1196 id 8
1197 graphics
1198 [
1199 w 85.80000000000001
1200 h 26
1201 type "rectangle"
1202 fill "#FFFFFF"
1203 fill2 "#FFFFFF"
1204 outline "#000000"
1205 ]
1206 LabelGraphics
1207 [
1208 text "New Reals"
1209 outline "#000000"
1210 fill "#FFFFFF"
1211 fontSize 16
1212 fontName "Monospace"
1213 autoSizePolicy "node_width"
1214 anchor "t"
1215 borderDistance 0.0
1216 ]
1217 LabelGraphics
1218 [
1219 text "
1220 "
1221 fontSize 14
1222 fontName "Consolas"
1223 alignment "left"
1224 anchor "tl"
1225 borderDistance 6
1226 ]
1227 ]
1228
1229 node
1230 [
1231 id 9
1232 graphics
1233 [
1234 w 103.4
1235 h 26
1236 type "rectangle"
1237 fill "#FFFFFF"
1238 fill2 "#FFFFFF"
1239 outline "#000000"
1240 ]
1241 LabelGraphics
1242 [
1243 text "New Strings"
1244 outline "#000000"
1245 fill "#FFFFFF"
1246 fontSize 16
1247 fontName "Monospace"
1248 autoSizePolicy "node_width"
1249 anchor "t"
1250 borderDistance 0.0
1251 ]
1252 LabelGraphics
1253 [
1254 text "
1255 "
1256 fontSize 14
1257 fontName "Consolas"
1258 alignment "left"
1259 anchor "tl"
1260 borderDistance 6
1261 ]
1262 ]
1263
1264 node
1265 [
1266 id 10
1267 graphics
1268 [
1269 w 103.4
1270 h 26
1271 type "rectangle"
1272 fill "#FFFFFF"
1273 fill2 "#FFFFFF"
1274 outline "#000000"
1275 ]
1276 LabelGraphics
1277 [
1278 text "New Objects"
1279 outline "#000000"
1280 fill "#FFFFFF"
1281 fontSize 16
1282 fontName "Monospace"
1283 autoSizePolicy "node_width"
1284 anchor "t"
1285 borderDistance 0.0
1286 ]
1287 LabelGraphics
1288 [
1289 text "
1290 "
1291 fontSize 14
1292 fontName "Consolas"
1293 alignment "left"
1294 anchor "tl"
1295 borderDistance 6
1296 ]
1297 ]
1298 edge
1299 [
1300 source 6
1301 target 3
1302 graphics
1303 [
1304 fill "#000000"
1305 targetArrow "standard"
1306 ]
1307 LabelGraphics
1308 [
1309 text "model reference FunctionalElement"
1310 fontSize 14
1311 fontName "Consolas"
1312 configuration "AutoFlippingLabel"
1313 model "six_pos"
1314 position "thead"
1315 ]
1316 ]
1317 edge
1318 [
1319 source 3
1320 target 6
1321 graphics
1322 [
1323 fill "#000000"
1324 width 3
1325 targetArrow "standard"
1326 ]
1327 LabelGraphics
1328 [
1329 text "rootElements reference FunctionalArchitectureModel"
1330 fontSize 14
1331 fontName "Consolas"
1332 configuration "AutoFlippingLabel"
1333 model "six_pos"
1334 position "thead"
1335 ]
1336 ]
1337 edge
1338 [
1339 source 6
1340 target 0
1341 graphics
1342 [
1343 fill "#000000"
1344 targetArrow "standard"
1345 ]
1346 LabelGraphics
1347 [
1348 text "type attribute Function"
1349 fontSize 14
1350 fontName "Consolas"
1351 configuration "AutoFlippingLabel"
1352 model "six_pos"
1353 position "thead"
1354 ]
1355 ]
1356]
1357graph
1358[
1359 node
1360 [
1361 id 0
1362 graphics
1363 [
1364 w 226.60000000000002
1365 h 40
1366 type "rectangle"
1367 fill "#FFFFFF"
1368 fill2 "#FFFFFF"
1369 outline "#000000"
1370 ]
1371 LabelGraphics
1372 [
1373 text "Root literal FunctionType"
1374 outline "#000000"
1375 fill "#FFFFFF"
1376 fontSize 16
1377 fontName "Monospace"
1378 autoSizePolicy "node_width"
1379 anchor "t"
1380 borderDistance 0.0
1381 ]
1382 LabelGraphics
1383 [
1384 text "
1385 FunctionType enum
1386 "
1387 fontSize 14
1388 fontName "Consolas"
1389 alignment "left"
1390 anchor "tl"
1391 borderDistance 6
1392 ]
1393 ]
1394
1395 node
1396 [
1397 id 1
1398 graphics
1399 [
1400 w 297.0
1401 h 40
1402 type "rectangle"
1403 fill "#FFFFFF"
1404 fill2 "#FFFFFF"
1405 outline "#000000"
1406 ]
1407 LabelGraphics
1408 [
1409 text "Intermediate literal FunctionType"
1410 outline "#000000"
1411 fill "#FFFFFF"
1412 fontSize 16
1413 fontName "Monospace"
1414 autoSizePolicy "node_width"
1415 anchor "t"
1416 borderDistance 0.0
1417 ]
1418 LabelGraphics
1419 [
1420 text "
1421 FunctionType enum
1422 "
1423 fontSize 14
1424 fontName "Consolas"
1425 alignment "left"
1426 anchor "tl"
1427 borderDistance 6
1428 ]
1429 ]
1430
1431 node
1432 [
1433 id 2
1434 graphics
1435 [
1436 w 226.60000000000002
1437 h 40
1438 type "rectangle"
1439 fill "#FFFFFF"
1440 fill2 "#FFFFFF"
1441 outline "#000000"
1442 ]
1443 LabelGraphics
1444 [
1445 text "Leaf literal FunctionType"
1446 outline "#000000"
1447 fill "#FFFFFF"
1448 fontSize 16
1449 fontName "Monospace"
1450 autoSizePolicy "node_width"
1451 anchor "t"
1452 borderDistance 0.0
1453 ]
1454 LabelGraphics
1455 [
1456 text "
1457 FunctionType enum
1458 "
1459 fontSize 14
1460 fontName "Consolas"
1461 alignment "left"
1462 anchor "tl"
1463 borderDistance 6
1464 ]
1465 ]
1466
1467 node
1468 [
1469 id 3
1470 graphics
1471 [
1472 w 361.90000000000003
1473 h 54
1474 type "rectangle"
1475 fill "#FFFFFF"
1476 fill2 "#FFFFFF"
1477 outline "#000000"
1478 ]
1479 LabelGraphics
1480 [
1481 text "o 1"
1482 outline "#000000"
1483 fill "#FFFFFF"
1484 fontSize 16
1485 fontName "Monospace"
1486 autoSizePolicy "node_width"
1487 anchor "t"
1488 borderDistance 0.0
1489 ]
1490 LabelGraphics
1491 [
1492 text "
1493 FunctionalArchitectureModel class DefinedPart
1494 FunctionalArchitectureModel class
1495 "
1496 fontSize 14
1497 fontName "Consolas"
1498 alignment "left"
1499 anchor "tl"
1500 borderDistance 6
1501 ]
1502 ]
1503
1504 node
1505 [
1506 id 4
1507 graphics
1508 [
1509 w 41.800000000000004
1510 h 26
1511 type "rectangle"
1512 fill "#FFFFFF"
1513 fill2 "#FFFFFF"
1514 outline "#000000"
1515 ]
1516 LabelGraphics
1517 [
1518 text "true"
1519 outline "#000000"
1520 fill "#FFFFFF"
1521 fontSize 16
1522 fontName "Monospace"
1523 autoSizePolicy "node_width"
1524 anchor "t"
1525 borderDistance 0.0
1526 ]
1527 LabelGraphics
1528 [
1529 text "
1530 "
1531 fontSize 14
1532 fontName "Consolas"
1533 alignment "left"
1534 anchor "tl"
1535 borderDistance 6
1536 ]
1537 ]
1538
1539 node
1540 [
1541 id 5
1542 graphics
1543 [
1544 w 50.6
1545 h 26
1546 type "rectangle"
1547 fill "#FFFFFF"
1548 fill2 "#FFFFFF"
1549 outline "#000000"
1550 ]
1551 LabelGraphics
1552 [
1553 text "false"
1554 outline "#000000"
1555 fill "#FFFFFF"
1556 fontSize 16
1557 fontName "Monospace"
1558 autoSizePolicy "node_width"
1559 anchor "t"
1560 borderDistance 0.0
1561 ]
1562 LabelGraphics
1563 [
1564 text "
1565 "
1566 fontSize 14
1567 fontName "Consolas"
1568 alignment "left"
1569 anchor "tl"
1570 borderDistance 6
1571 ]
1572 ]
1573
1574 node
1575 [
1576 id 6
1577 graphics
1578 [
1579 w 192.50000000000003
1580 h 54
1581 type "rectangle"
1582 fill "#FFFFFF"
1583 fill2 "#FFFFFF"
1584 outline "#000000"
1585 ]
1586 LabelGraphics
1587 [
1588 text "null"
1589 outline "#000000"
1590 fill "#FFFFFF"
1591 fontSize 16
1592 fontName "Monospace"
1593 autoSizePolicy "node_width"
1594 anchor "t"
1595 borderDistance 0.0
1596 ]
1597 LabelGraphics
1598 [
1599 text "
1600 FunctionalElement class
1601 Function class
1602 "
1603 fontSize 14
1604 fontName "Consolas"
1605 alignment "left"
1606 anchor "tl"
1607 borderDistance 6
1608 ]
1609 ]
1610
1611 node
1612 [
1613 id 7
1614 graphics
1615 [
1616 w 112.2
1617 h 26
1618 type "rectangle"
1619 fill "#FFFFFF"
1620 fill2 "#FFFFFF"
1621 outline "#000000"
1622 ]
1623 LabelGraphics
1624 [
1625 text "New Integers"
1626 outline "#000000"
1627 fill "#FFFFFF"
1628 fontSize 16
1629 fontName "Monospace"
1630 autoSizePolicy "node_width"
1631 anchor "t"
1632 borderDistance 0.0
1633 ]
1634 LabelGraphics
1635 [
1636 text "
1637 "
1638 fontSize 14
1639 fontName "Consolas"
1640 alignment "left"
1641 anchor "tl"
1642 borderDistance 6
1643 ]
1644 ]
1645
1646 node
1647 [
1648 id 8
1649 graphics
1650 [
1651 w 85.80000000000001
1652 h 26
1653 type "rectangle"
1654 fill "#FFFFFF"
1655 fill2 "#FFFFFF"
1656 outline "#000000"
1657 ]
1658 LabelGraphics
1659 [
1660 text "New Reals"
1661 outline "#000000"
1662 fill "#FFFFFF"
1663 fontSize 16
1664 fontName "Monospace"
1665 autoSizePolicy "node_width"
1666 anchor "t"
1667 borderDistance 0.0
1668 ]
1669 LabelGraphics
1670 [
1671 text "
1672 "
1673 fontSize 14
1674 fontName "Consolas"
1675 alignment "left"
1676 anchor "tl"
1677 borderDistance 6
1678 ]
1679 ]
1680
1681 node
1682 [
1683 id 9
1684 graphics
1685 [
1686 w 103.4
1687 h 26
1688 type "rectangle"
1689 fill "#FFFFFF"
1690 fill2 "#FFFFFF"
1691 outline "#000000"
1692 ]
1693 LabelGraphics
1694 [
1695 text "New Strings"
1696 outline "#000000"
1697 fill "#FFFFFF"
1698 fontSize 16
1699 fontName "Monospace"
1700 autoSizePolicy "node_width"
1701 anchor "t"
1702 borderDistance 0.0
1703 ]
1704 LabelGraphics
1705 [
1706 text "
1707 "
1708 fontSize 14
1709 fontName "Consolas"
1710 alignment "left"
1711 anchor "tl"
1712 borderDistance 6
1713 ]
1714 ]
1715
1716 node
1717 [
1718 id 10
1719 graphics
1720 [
1721 w 103.4
1722 h 26
1723 type "rectangle"
1724 fill "#FFFFFF"
1725 fill2 "#FFFFFF"
1726 outline "#000000"
1727 ]
1728 LabelGraphics
1729 [
1730 text "New Objects"
1731 outline "#000000"
1732 fill "#FFFFFF"
1733 fontSize 16
1734 fontName "Monospace"
1735 autoSizePolicy "node_width"
1736 anchor "t"
1737 borderDistance 0.0
1738 ]
1739 LabelGraphics
1740 [
1741 text "
1742 "
1743 fontSize 14
1744 fontName "Consolas"
1745 alignment "left"
1746 anchor "tl"
1747 borderDistance 6
1748 ]
1749 ]
1750 edge
1751 [
1752 source 6
1753 target 3
1754 graphics
1755 [
1756 fill "#000000"
1757 targetArrow "standard"
1758 ]
1759 LabelGraphics
1760 [
1761 text "model reference FunctionalElement"
1762 fontSize 14
1763 fontName "Consolas"
1764 configuration "AutoFlippingLabel"
1765 model "six_pos"
1766 position "thead"
1767 ]
1768 ]
1769 edge
1770 [
1771 source 3
1772 target 6
1773 graphics
1774 [
1775 fill "#000000"
1776 width 3
1777 targetArrow "standard"
1778 ]
1779 LabelGraphics
1780 [
1781 text "rootElements reference FunctionalArchitectureModel"
1782 fontSize 14
1783 fontName "Consolas"
1784 configuration "AutoFlippingLabel"
1785 model "six_pos"
1786 position "thead"
1787 ]
1788 ]
1789 edge
1790 [
1791 source 6
1792 target 2
1793 graphics
1794 [
1795 fill "#000000"
1796 targetArrow "standard"
1797 ]
1798 LabelGraphics
1799 [
1800 text "type attribute Function"
1801 fontSize 14
1802 fontName "Consolas"
1803 configuration "AutoFlippingLabel"
1804 model "six_pos"
1805 position "thead"
1806 ]
1807 ]
1808]
1809graph
1810[
1811 node
1812 [
1813 id 0
1814 graphics
1815 [
1816 w 226.60000000000002
1817 h 40
1818 type "rectangle"
1819 fill "#FFFFFF"
1820 fill2 "#FFFFFF"
1821 outline "#000000"
1822 ]
1823 LabelGraphics
1824 [
1825 text "Root literal FunctionType"
1826 outline "#000000"
1827 fill "#FFFFFF"
1828 fontSize 16
1829 fontName "Monospace"
1830 autoSizePolicy "node_width"
1831 anchor "t"
1832 borderDistance 0.0
1833 ]
1834 LabelGraphics
1835 [
1836 text "
1837 FunctionType enum
1838 "
1839 fontSize 14
1840 fontName "Consolas"
1841 alignment "left"
1842 anchor "tl"
1843 borderDistance 6
1844 ]
1845 ]
1846
1847 node
1848 [
1849 id 1
1850 graphics
1851 [
1852 w 297.0
1853 h 40
1854 type "rectangle"
1855 fill "#FFFFFF"
1856 fill2 "#FFFFFF"
1857 outline "#000000"
1858 ]
1859 LabelGraphics
1860 [
1861 text "Intermediate literal FunctionType"
1862 outline "#000000"
1863 fill "#FFFFFF"
1864 fontSize 16
1865 fontName "Monospace"
1866 autoSizePolicy "node_width"
1867 anchor "t"
1868 borderDistance 0.0
1869 ]
1870 LabelGraphics
1871 [
1872 text "
1873 FunctionType enum
1874 "
1875 fontSize 14
1876 fontName "Consolas"
1877 alignment "left"
1878 anchor "tl"
1879 borderDistance 6
1880 ]
1881 ]
1882
1883 node
1884 [
1885 id 2
1886 graphics
1887 [
1888 w 226.60000000000002
1889 h 40
1890 type "rectangle"
1891 fill "#FFFFFF"
1892 fill2 "#FFFFFF"
1893 outline "#000000"
1894 ]
1895 LabelGraphics
1896 [
1897 text "Leaf literal FunctionType"
1898 outline "#000000"
1899 fill "#FFFFFF"
1900 fontSize 16
1901 fontName "Monospace"
1902 autoSizePolicy "node_width"
1903 anchor "t"
1904 borderDistance 0.0
1905 ]
1906 LabelGraphics
1907 [
1908 text "
1909 FunctionType enum
1910 "
1911 fontSize 14
1912 fontName "Consolas"
1913 alignment "left"
1914 anchor "tl"
1915 borderDistance 6
1916 ]
1917 ]
1918
1919 node
1920 [
1921 id 3
1922 graphics
1923 [
1924 w 361.90000000000003
1925 h 54
1926 type "rectangle"
1927 fill "#FFFFFF"
1928 fill2 "#FFFFFF"
1929 outline "#000000"
1930 ]
1931 LabelGraphics
1932 [
1933 text "o 1"
1934 outline "#000000"
1935 fill "#FFFFFF"
1936 fontSize 16
1937 fontName "Monospace"
1938 autoSizePolicy "node_width"
1939 anchor "t"
1940 borderDistance 0.0
1941 ]
1942 LabelGraphics
1943 [
1944 text "
1945 FunctionalArchitectureModel class DefinedPart
1946 FunctionalArchitectureModel class
1947 "
1948 fontSize 14
1949 fontName "Consolas"
1950 alignment "left"
1951 anchor "tl"
1952 borderDistance 6
1953 ]
1954 ]
1955
1956 node
1957 [
1958 id 4
1959 graphics
1960 [
1961 w 41.800000000000004
1962 h 26
1963 type "rectangle"
1964 fill "#FFFFFF"
1965 fill2 "#FFFFFF"
1966 outline "#000000"
1967 ]
1968 LabelGraphics
1969 [
1970 text "true"
1971 outline "#000000"
1972 fill "#FFFFFF"
1973 fontSize 16
1974 fontName "Monospace"
1975 autoSizePolicy "node_width"
1976 anchor "t"
1977 borderDistance 0.0
1978 ]
1979 LabelGraphics
1980 [
1981 text "
1982 "
1983 fontSize 14
1984 fontName "Consolas"
1985 alignment "left"
1986 anchor "tl"
1987 borderDistance 6
1988 ]
1989 ]
1990
1991 node
1992 [
1993 id 5
1994 graphics
1995 [
1996 w 50.6
1997 h 26
1998 type "rectangle"
1999 fill "#FFFFFF"
2000 fill2 "#FFFFFF"
2001 outline "#000000"
2002 ]
2003 LabelGraphics
2004 [
2005 text "false"
2006 outline "#000000"
2007 fill "#FFFFFF"
2008 fontSize 16
2009 fontName "Monospace"
2010 autoSizePolicy "node_width"
2011 anchor "t"
2012 borderDistance 0.0
2013 ]
2014 LabelGraphics
2015 [
2016 text "
2017 "
2018 fontSize 14
2019 fontName "Consolas"
2020 alignment "left"
2021 anchor "tl"
2022 borderDistance 6
2023 ]
2024 ]
2025
2026 node
2027 [
2028 id 6
2029 graphics
2030 [
2031 w 192.50000000000003
2032 h 54
2033 type "rectangle"
2034 fill "#FFFFFF"
2035 fill2 "#FFFFFF"
2036 outline "#000000"
2037 ]
2038 LabelGraphics
2039 [
2040 text "null"
2041 outline "#000000"
2042 fill "#FFFFFF"
2043 fontSize 16
2044 fontName "Monospace"
2045 autoSizePolicy "node_width"
2046 anchor "t"
2047 borderDistance 0.0
2048 ]
2049 LabelGraphics
2050 [
2051 text "
2052 FunctionalElement class
2053 Function class
2054 "
2055 fontSize 14
2056 fontName "Consolas"
2057 alignment "left"
2058 anchor "tl"
2059 borderDistance 6
2060 ]
2061 ]
2062
2063 node
2064 [
2065 id 7
2066 graphics
2067 [
2068 w 112.2
2069 h 26
2070 type "rectangle"
2071 fill "#FFFFFF"
2072 fill2 "#FFFFFF"
2073 outline "#000000"
2074 ]
2075 LabelGraphics
2076 [
2077 text "New Integers"
2078 outline "#000000"
2079 fill "#FFFFFF"
2080 fontSize 16
2081 fontName "Monospace"
2082 autoSizePolicy "node_width"
2083 anchor "t"
2084 borderDistance 0.0
2085 ]
2086 LabelGraphics
2087 [
2088 text "
2089 "
2090 fontSize 14
2091 fontName "Consolas"
2092 alignment "left"
2093 anchor "tl"
2094 borderDistance 6
2095 ]
2096 ]
2097
2098 node
2099 [
2100 id 8
2101 graphics
2102 [
2103 w 85.80000000000001
2104 h 26
2105 type "rectangle"
2106 fill "#FFFFFF"
2107 fill2 "#FFFFFF"
2108 outline "#000000"
2109 ]
2110 LabelGraphics
2111 [
2112 text "New Reals"
2113 outline "#000000"
2114 fill "#FFFFFF"
2115 fontSize 16
2116 fontName "Monospace"
2117 autoSizePolicy "node_width"
2118 anchor "t"
2119 borderDistance 0.0
2120 ]
2121 LabelGraphics
2122 [
2123 text "
2124 "
2125 fontSize 14
2126 fontName "Consolas"
2127 alignment "left"
2128 anchor "tl"
2129 borderDistance 6
2130 ]
2131 ]
2132
2133 node
2134 [
2135 id 9
2136 graphics
2137 [
2138 w 103.4
2139 h 26
2140 type "rectangle"
2141 fill "#FFFFFF"
2142 fill2 "#FFFFFF"
2143 outline "#000000"
2144 ]
2145 LabelGraphics
2146 [
2147 text "New Strings"
2148 outline "#000000"
2149 fill "#FFFFFF"
2150 fontSize 16
2151 fontName "Monospace"
2152 autoSizePolicy "node_width"
2153 anchor "t"
2154 borderDistance 0.0
2155 ]
2156 LabelGraphics
2157 [
2158 text "
2159 "
2160 fontSize 14
2161 fontName "Consolas"
2162 alignment "left"
2163 anchor "tl"
2164 borderDistance 6
2165 ]
2166 ]
2167
2168 node
2169 [
2170 id 10
2171 graphics
2172 [
2173 w 103.4
2174 h 26
2175 type "rectangle"
2176 fill "#FFFFFF"
2177 fill2 "#FFFFFF"
2178 outline "#000000"
2179 ]
2180 LabelGraphics
2181 [
2182 text "New Objects"
2183 outline "#000000"
2184 fill "#FFFFFF"
2185 fontSize 16
2186 fontName "Monospace"
2187 autoSizePolicy "node_width"
2188 anchor "t"
2189 borderDistance 0.0
2190 ]
2191 LabelGraphics
2192 [
2193 text "
2194 "
2195 fontSize 14
2196 fontName "Consolas"
2197 alignment "left"
2198 anchor "tl"
2199 borderDistance 6
2200 ]
2201 ]
2202 edge
2203 [
2204 source 6
2205 target 3
2206 graphics
2207 [
2208 fill "#000000"
2209 targetArrow "standard"
2210 ]
2211 LabelGraphics
2212 [
2213 text "model reference FunctionalElement"
2214 fontSize 14
2215 fontName "Consolas"
2216 configuration "AutoFlippingLabel"
2217 model "six_pos"
2218 position "thead"
2219 ]
2220 ]
2221 edge
2222 [
2223 source 3
2224 target 6
2225 graphics
2226 [
2227 fill "#000000"
2228 width 3
2229 targetArrow "standard"
2230 ]
2231 LabelGraphics
2232 [
2233 text "rootElements reference FunctionalArchitectureModel"
2234 fontSize 14
2235 fontName "Consolas"
2236 configuration "AutoFlippingLabel"
2237 model "six_pos"
2238 position "thead"
2239 ]
2240 ]
2241 edge
2242 [
2243 source 6
2244 target 1
2245 graphics
2246 [
2247 fill "#000000"
2248 targetArrow "standard"
2249 ]
2250 LabelGraphics
2251 [
2252 text "type attribute Function"
2253 fontSize 14
2254 fontName "Consolas"
2255 configuration "AutoFlippingLabel"
2256 model "six_pos"
2257 position "thead"
2258 ]
2259 ]
2260]
2261graph
2262[
2263 node
2264 [
2265 id 0
2266 graphics
2267 [
2268 w 226.60000000000002
2269 h 40
2270 type "rectangle"
2271 fill "#FFFFFF"
2272 fill2 "#FFFFFF"
2273 outline "#000000"
2274 ]
2275 LabelGraphics
2276 [
2277 text "Root literal FunctionType"
2278 outline "#000000"
2279 fill "#FFFFFF"
2280 fontSize 16
2281 fontName "Monospace"
2282 autoSizePolicy "node_width"
2283 anchor "t"
2284 borderDistance 0.0
2285 ]
2286 LabelGraphics
2287 [
2288 text "
2289 FunctionType enum
2290 "
2291 fontSize 14
2292 fontName "Consolas"
2293 alignment "left"
2294 anchor "tl"
2295 borderDistance 6
2296 ]
2297 ]
2298
2299 node
2300 [
2301 id 1
2302 graphics
2303 [
2304 w 297.0
2305 h 40
2306 type "rectangle"
2307 fill "#FFFFFF"
2308 fill2 "#FFFFFF"
2309 outline "#000000"
2310 ]
2311 LabelGraphics
2312 [
2313 text "Intermediate literal FunctionType"
2314 outline "#000000"
2315 fill "#FFFFFF"
2316 fontSize 16
2317 fontName "Monospace"
2318 autoSizePolicy "node_width"
2319 anchor "t"
2320 borderDistance 0.0
2321 ]
2322 LabelGraphics
2323 [
2324 text "
2325 FunctionType enum
2326 "
2327 fontSize 14
2328 fontName "Consolas"
2329 alignment "left"
2330 anchor "tl"
2331 borderDistance 6
2332 ]
2333 ]
2334
2335 node
2336 [
2337 id 2
2338 graphics
2339 [
2340 w 226.60000000000002
2341 h 40
2342 type "rectangle"
2343 fill "#FFFFFF"
2344 fill2 "#FFFFFF"
2345 outline "#000000"
2346 ]
2347 LabelGraphics
2348 [
2349 text "Leaf literal FunctionType"
2350 outline "#000000"
2351 fill "#FFFFFF"
2352 fontSize 16
2353 fontName "Monospace"
2354 autoSizePolicy "node_width"
2355 anchor "t"
2356 borderDistance 0.0
2357 ]
2358 LabelGraphics
2359 [
2360 text "
2361 FunctionType enum
2362 "
2363 fontSize 14
2364 fontName "Consolas"
2365 alignment "left"
2366 anchor "tl"
2367 borderDistance 6
2368 ]
2369 ]
2370
2371 node
2372 [
2373 id 3
2374 graphics
2375 [
2376 w 361.90000000000003
2377 h 54
2378 type "rectangle"
2379 fill "#FFFFFF"
2380 fill2 "#FFFFFF"
2381 outline "#000000"
2382 ]
2383 LabelGraphics
2384 [
2385 text "o 1"
2386 outline "#000000"
2387 fill "#FFFFFF"
2388 fontSize 16
2389 fontName "Monospace"
2390 autoSizePolicy "node_width"
2391 anchor "t"
2392 borderDistance 0.0
2393 ]
2394 LabelGraphics
2395 [
2396 text "
2397 FunctionalArchitectureModel class DefinedPart
2398 FunctionalArchitectureModel class
2399 "
2400 fontSize 14
2401 fontName "Consolas"
2402 alignment "left"
2403 anchor "tl"
2404 borderDistance 6
2405 ]
2406 ]
2407
2408 node
2409 [
2410 id 4
2411 graphics
2412 [
2413 w 41.800000000000004
2414 h 26
2415 type "rectangle"
2416 fill "#FFFFFF"
2417 fill2 "#FFFFFF"
2418 outline "#000000"
2419 ]
2420 LabelGraphics
2421 [
2422 text "true"
2423 outline "#000000"
2424 fill "#FFFFFF"
2425 fontSize 16
2426 fontName "Monospace"
2427 autoSizePolicy "node_width"
2428 anchor "t"
2429 borderDistance 0.0
2430 ]
2431 LabelGraphics
2432 [
2433 text "
2434 "
2435 fontSize 14
2436 fontName "Consolas"
2437 alignment "left"
2438 anchor "tl"
2439 borderDistance 6
2440 ]
2441 ]
2442
2443 node
2444 [
2445 id 5
2446 graphics
2447 [
2448 w 50.6
2449 h 26
2450 type "rectangle"
2451 fill "#FFFFFF"
2452 fill2 "#FFFFFF"
2453 outline "#000000"
2454 ]
2455 LabelGraphics
2456 [
2457 text "false"
2458 outline "#000000"
2459 fill "#FFFFFF"
2460 fontSize 16
2461 fontName "Monospace"
2462 autoSizePolicy "node_width"
2463 anchor "t"
2464 borderDistance 0.0
2465 ]
2466 LabelGraphics
2467 [
2468 text "
2469 "
2470 fontSize 14
2471 fontName "Consolas"
2472 alignment "left"
2473 anchor "tl"
2474 borderDistance 6
2475 ]
2476 ]
2477
2478 node
2479 [
2480 id 6
2481 graphics
2482 [
2483 w 192.50000000000003
2484 h 54
2485 type "rectangle"
2486 fill "#FFFFFF"
2487 fill2 "#FFFFFF"
2488 outline "#000000"
2489 ]
2490 LabelGraphics
2491 [
2492 text "null"
2493 outline "#000000"
2494 fill "#FFFFFF"
2495 fontSize 16
2496 fontName "Monospace"
2497 autoSizePolicy "node_width"
2498 anchor "t"
2499 borderDistance 0.0
2500 ]
2501 LabelGraphics
2502 [
2503 text "
2504 FunctionalElement class
2505 Function class
2506 "
2507 fontSize 14
2508 fontName "Consolas"
2509 alignment "left"
2510 anchor "tl"
2511 borderDistance 6
2512 ]
2513 ]
2514
2515 node
2516 [
2517 id 7
2518 graphics
2519 [
2520 w 112.2
2521 h 26
2522 type "rectangle"
2523 fill "#FFFFFF"
2524 fill2 "#FFFFFF"
2525 outline "#000000"
2526 ]
2527 LabelGraphics
2528 [
2529 text "New Integers"
2530 outline "#000000"
2531 fill "#FFFFFF"
2532 fontSize 16
2533 fontName "Monospace"
2534 autoSizePolicy "node_width"
2535 anchor "t"
2536 borderDistance 0.0
2537 ]
2538 LabelGraphics
2539 [
2540 text "
2541 "
2542 fontSize 14
2543 fontName "Consolas"
2544 alignment "left"
2545 anchor "tl"
2546 borderDistance 6
2547 ]
2548 ]
2549
2550 node
2551 [
2552 id 8
2553 graphics
2554 [
2555 w 85.80000000000001
2556 h 26
2557 type "rectangle"
2558 fill "#FFFFFF"
2559 fill2 "#FFFFFF"
2560 outline "#000000"
2561 ]
2562 LabelGraphics
2563 [
2564 text "New Reals"
2565 outline "#000000"
2566 fill "#FFFFFF"
2567 fontSize 16
2568 fontName "Monospace"
2569 autoSizePolicy "node_width"
2570 anchor "t"
2571 borderDistance 0.0
2572 ]
2573 LabelGraphics
2574 [
2575 text "
2576 "
2577 fontSize 14
2578 fontName "Consolas"
2579 alignment "left"
2580 anchor "tl"
2581 borderDistance 6
2582 ]
2583 ]
2584
2585 node
2586 [
2587 id 9
2588 graphics
2589 [
2590 w 103.4
2591 h 26
2592 type "rectangle"
2593 fill "#FFFFFF"
2594 fill2 "#FFFFFF"
2595 outline "#000000"
2596 ]
2597 LabelGraphics
2598 [
2599 text "New Strings"
2600 outline "#000000"
2601 fill "#FFFFFF"
2602 fontSize 16
2603 fontName "Monospace"
2604 autoSizePolicy "node_width"
2605 anchor "t"
2606 borderDistance 0.0
2607 ]
2608 LabelGraphics
2609 [
2610 text "
2611 "
2612 fontSize 14
2613 fontName "Consolas"
2614 alignment "left"
2615 anchor "tl"
2616 borderDistance 6
2617 ]
2618 ]
2619
2620 node
2621 [
2622 id 10
2623 graphics
2624 [
2625 w 103.4
2626 h 26
2627 type "rectangle"
2628 fill "#FFFFFF"
2629 fill2 "#FFFFFF"
2630 outline "#000000"
2631 ]
2632 LabelGraphics
2633 [
2634 text "New Objects"
2635 outline "#000000"
2636 fill "#FFFFFF"
2637 fontSize 16
2638 fontName "Monospace"
2639 autoSizePolicy "node_width"
2640 anchor "t"
2641 borderDistance 0.0
2642 ]
2643 LabelGraphics
2644 [
2645 text "
2646 "
2647 fontSize 14
2648 fontName "Consolas"
2649 alignment "left"
2650 anchor "tl"
2651 borderDistance 6
2652 ]
2653 ]
2654 edge
2655 [
2656 source 6
2657 target 3
2658 graphics
2659 [
2660 fill "#000000"
2661 targetArrow "standard"
2662 ]
2663 LabelGraphics
2664 [
2665 text "model reference FunctionalElement"
2666 fontSize 14
2667 fontName "Consolas"
2668 configuration "AutoFlippingLabel"
2669 model "six_pos"
2670 position "thead"
2671 ]
2672 ]
2673 edge
2674 [
2675 source 3
2676 target 6
2677 graphics
2678 [
2679 fill "#000000"
2680 width 3
2681 targetArrow "standard"
2682 ]
2683 LabelGraphics
2684 [
2685 text "rootElements reference FunctionalArchitectureModel"
2686 fontSize 14
2687 fontName "Consolas"
2688 configuration "AutoFlippingLabel"
2689 model "six_pos"
2690 position "thead"
2691 ]
2692 ]
2693 edge
2694 [
2695 source 6
2696 target 2
2697 graphics
2698 [
2699 fill "#000000"
2700 targetArrow "standard"
2701 ]
2702 LabelGraphics
2703 [
2704 text "type attribute Function"
2705 fontSize 14
2706 fontName "Consolas"
2707 configuration "AutoFlippingLabel"
2708 model "six_pos"
2709 position "thead"
2710 ]
2711 ]
2712]
2713graph
2714[
2715 node
2716 [
2717 id 0
2718 graphics
2719 [
2720 w 226.60000000000002
2721 h 40
2722 type "rectangle"
2723 fill "#FFFFFF"
2724 fill2 "#FFFFFF"
2725 outline "#000000"
2726 ]
2727 LabelGraphics
2728 [
2729 text "Root literal FunctionType"
2730 outline "#000000"
2731 fill "#FFFFFF"
2732 fontSize 16
2733 fontName "Monospace"
2734 autoSizePolicy "node_width"
2735 anchor "t"
2736 borderDistance 0.0
2737 ]
2738 LabelGraphics
2739 [
2740 text "
2741 FunctionType enum
2742 "
2743 fontSize 14
2744 fontName "Consolas"
2745 alignment "left"
2746 anchor "tl"
2747 borderDistance 6
2748 ]
2749 ]
2750
2751 node
2752 [
2753 id 1
2754 graphics
2755 [
2756 w 297.0
2757 h 40
2758 type "rectangle"
2759 fill "#FFFFFF"
2760 fill2 "#FFFFFF"
2761 outline "#000000"
2762 ]
2763 LabelGraphics
2764 [
2765 text "Intermediate literal FunctionType"
2766 outline "#000000"
2767 fill "#FFFFFF"
2768 fontSize 16
2769 fontName "Monospace"
2770 autoSizePolicy "node_width"
2771 anchor "t"
2772 borderDistance 0.0
2773 ]
2774 LabelGraphics
2775 [
2776 text "
2777 FunctionType enum
2778 "
2779 fontSize 14
2780 fontName "Consolas"
2781 alignment "left"
2782 anchor "tl"
2783 borderDistance 6
2784 ]
2785 ]
2786
2787 node
2788 [
2789 id 2
2790 graphics
2791 [
2792 w 226.60000000000002
2793 h 40
2794 type "rectangle"
2795 fill "#FFFFFF"
2796 fill2 "#FFFFFF"
2797 outline "#000000"
2798 ]
2799 LabelGraphics
2800 [
2801 text "Leaf literal FunctionType"
2802 outline "#000000"
2803 fill "#FFFFFF"
2804 fontSize 16
2805 fontName "Monospace"
2806 autoSizePolicy "node_width"
2807 anchor "t"
2808 borderDistance 0.0
2809 ]
2810 LabelGraphics
2811 [
2812 text "
2813 FunctionType enum
2814 "
2815 fontSize 14
2816 fontName "Consolas"
2817 alignment "left"
2818 anchor "tl"
2819 borderDistance 6
2820 ]
2821 ]
2822
2823 node
2824 [
2825 id 3
2826 graphics
2827 [
2828 w 361.90000000000003
2829 h 54
2830 type "rectangle"
2831 fill "#FFFFFF"
2832 fill2 "#FFFFFF"
2833 outline "#000000"
2834 ]
2835 LabelGraphics
2836 [
2837 text "o 1"
2838 outline "#000000"
2839 fill "#FFFFFF"
2840 fontSize 16
2841 fontName "Monospace"
2842 autoSizePolicy "node_width"
2843 anchor "t"
2844 borderDistance 0.0
2845 ]
2846 LabelGraphics
2847 [
2848 text "
2849 FunctionalArchitectureModel class DefinedPart
2850 FunctionalArchitectureModel class
2851 "
2852 fontSize 14
2853 fontName "Consolas"
2854 alignment "left"
2855 anchor "tl"
2856 borderDistance 6
2857 ]
2858 ]
2859
2860 node
2861 [
2862 id 4
2863 graphics
2864 [
2865 w 41.800000000000004
2866 h 26
2867 type "rectangle"
2868 fill "#FFFFFF"
2869 fill2 "#FFFFFF"
2870 outline "#000000"
2871 ]
2872 LabelGraphics
2873 [
2874 text "true"
2875 outline "#000000"
2876 fill "#FFFFFF"
2877 fontSize 16
2878 fontName "Monospace"
2879 autoSizePolicy "node_width"
2880 anchor "t"
2881 borderDistance 0.0
2882 ]
2883 LabelGraphics
2884 [
2885 text "
2886 "
2887 fontSize 14
2888 fontName "Consolas"
2889 alignment "left"
2890 anchor "tl"
2891 borderDistance 6
2892 ]
2893 ]
2894
2895 node
2896 [
2897 id 5
2898 graphics
2899 [
2900 w 50.6
2901 h 26
2902 type "rectangle"
2903 fill "#FFFFFF"
2904 fill2 "#FFFFFF"
2905 outline "#000000"
2906 ]
2907 LabelGraphics
2908 [
2909 text "false"
2910 outline "#000000"
2911 fill "#FFFFFF"
2912 fontSize 16
2913 fontName "Monospace"
2914 autoSizePolicy "node_width"
2915 anchor "t"
2916 borderDistance 0.0
2917 ]
2918 LabelGraphics
2919 [
2920 text "
2921 "
2922 fontSize 14
2923 fontName "Consolas"
2924 alignment "left"
2925 anchor "tl"
2926 borderDistance 6
2927 ]
2928 ]
2929
2930 node
2931 [
2932 id 6
2933 graphics
2934 [
2935 w 192.50000000000003
2936 h 54
2937 type "rectangle"
2938 fill "#FFFFFF"
2939 fill2 "#FFFFFF"
2940 outline "#000000"
2941 ]
2942 LabelGraphics
2943 [
2944 text "null"
2945 outline "#000000"
2946 fill "#FFFFFF"
2947 fontSize 16
2948 fontName "Monospace"
2949 autoSizePolicy "node_width"
2950 anchor "t"
2951 borderDistance 0.0
2952 ]
2953 LabelGraphics
2954 [
2955 text "
2956 FunctionalElement class
2957 Function class
2958 "
2959 fontSize 14
2960 fontName "Consolas"
2961 alignment "left"
2962 anchor "tl"
2963 borderDistance 6
2964 ]
2965 ]
2966
2967 node
2968 [
2969 id 7
2970 graphics
2971 [
2972 w 112.2
2973 h 26
2974 type "rectangle"
2975 fill "#FFFFFF"
2976 fill2 "#FFFFFF"
2977 outline "#000000"
2978 ]
2979 LabelGraphics
2980 [
2981 text "New Integers"
2982 outline "#000000"
2983 fill "#FFFFFF"
2984 fontSize 16
2985 fontName "Monospace"
2986 autoSizePolicy "node_width"
2987 anchor "t"
2988 borderDistance 0.0
2989 ]
2990 LabelGraphics
2991 [
2992 text "
2993 "
2994 fontSize 14
2995 fontName "Consolas"
2996 alignment "left"
2997 anchor "tl"
2998 borderDistance 6
2999 ]
3000 ]
3001
3002 node
3003 [
3004 id 8
3005 graphics
3006 [
3007 w 85.80000000000001
3008 h 26
3009 type "rectangle"
3010 fill "#FFFFFF"
3011 fill2 "#FFFFFF"
3012 outline "#000000"
3013 ]
3014 LabelGraphics
3015 [
3016 text "New Reals"
3017 outline "#000000"
3018 fill "#FFFFFF"
3019 fontSize 16
3020 fontName "Monospace"
3021 autoSizePolicy "node_width"
3022 anchor "t"
3023 borderDistance 0.0
3024 ]
3025 LabelGraphics
3026 [
3027 text "
3028 "
3029 fontSize 14
3030 fontName "Consolas"
3031 alignment "left"
3032 anchor "tl"
3033 borderDistance 6
3034 ]
3035 ]
3036
3037 node
3038 [
3039 id 9
3040 graphics
3041 [
3042 w 103.4
3043 h 26
3044 type "rectangle"
3045 fill "#FFFFFF"
3046 fill2 "#FFFFFF"
3047 outline "#000000"
3048 ]
3049 LabelGraphics
3050 [
3051 text "New Strings"
3052 outline "#000000"
3053 fill "#FFFFFF"
3054 fontSize 16
3055 fontName "Monospace"
3056 autoSizePolicy "node_width"
3057 anchor "t"
3058 borderDistance 0.0
3059 ]
3060 LabelGraphics
3061 [
3062 text "
3063 "
3064 fontSize 14
3065 fontName "Consolas"
3066 alignment "left"
3067 anchor "tl"
3068 borderDistance 6
3069 ]
3070 ]
3071
3072 node
3073 [
3074 id 10
3075 graphics
3076 [
3077 w 103.4
3078 h 26
3079 type "rectangle"
3080 fill "#FFFFFF"
3081 fill2 "#FFFFFF"
3082 outline "#000000"
3083 ]
3084 LabelGraphics
3085 [
3086 text "New Objects"
3087 outline "#000000"
3088 fill "#FFFFFF"
3089 fontSize 16
3090 fontName "Monospace"
3091 autoSizePolicy "node_width"
3092 anchor "t"
3093 borderDistance 0.0
3094 ]
3095 LabelGraphics
3096 [
3097 text "
3098 "
3099 fontSize 14
3100 fontName "Consolas"
3101 alignment "left"
3102 anchor "tl"
3103 borderDistance 6
3104 ]
3105 ]
3106 edge
3107 [
3108 source 6
3109 target 3
3110 graphics
3111 [
3112 fill "#000000"
3113 targetArrow "standard"
3114 ]
3115 LabelGraphics
3116 [
3117 text "model reference FunctionalElement"
3118 fontSize 14
3119 fontName "Consolas"
3120 configuration "AutoFlippingLabel"
3121 model "six_pos"
3122 position "thead"
3123 ]
3124 ]
3125 edge
3126 [
3127 source 3
3128 target 6
3129 graphics
3130 [
3131 fill "#000000"
3132 width 3
3133 targetArrow "standard"
3134 ]
3135 LabelGraphics
3136 [
3137 text "rootElements reference FunctionalArchitectureModel"
3138 fontSize 14
3139 fontName "Consolas"
3140 configuration "AutoFlippingLabel"
3141 model "six_pos"
3142 position "thead"
3143 ]
3144 ]
3145 edge
3146 [
3147 source 6
3148 target 2
3149 graphics
3150 [
3151 fill "#000000"
3152 targetArrow "standard"
3153 ]
3154 LabelGraphics
3155 [
3156 text "type attribute Function"
3157 fontSize 14
3158 fontName "Consolas"
3159 configuration "AutoFlippingLabel"
3160 model "six_pos"
3161 position "thead"
3162 ]
3163 ]
3164]
3165graph
3166[
3167 node
3168 [
3169 id 0
3170 graphics
3171 [
3172 w 226.60000000000002
3173 h 40
3174 type "rectangle"
3175 fill "#FFFFFF"
3176 fill2 "#FFFFFF"
3177 outline "#000000"
3178 ]
3179 LabelGraphics
3180 [
3181 text "Root literal FunctionType"
3182 outline "#000000"
3183 fill "#FFFFFF"
3184 fontSize 16
3185 fontName "Monospace"
3186 autoSizePolicy "node_width"
3187 anchor "t"
3188 borderDistance 0.0
3189 ]
3190 LabelGraphics
3191 [
3192 text "
3193 FunctionType enum
3194 "
3195 fontSize 14
3196 fontName "Consolas"
3197 alignment "left"
3198 anchor "tl"
3199 borderDistance 6
3200 ]
3201 ]
3202
3203 node
3204 [
3205 id 1
3206 graphics
3207 [
3208 w 297.0
3209 h 40
3210 type "rectangle"
3211 fill "#FFFFFF"
3212 fill2 "#FFFFFF"
3213 outline "#000000"
3214 ]
3215 LabelGraphics
3216 [
3217 text "Intermediate literal FunctionType"
3218 outline "#000000"
3219 fill "#FFFFFF"
3220 fontSize 16
3221 fontName "Monospace"
3222 autoSizePolicy "node_width"
3223 anchor "t"
3224 borderDistance 0.0
3225 ]
3226 LabelGraphics
3227 [
3228 text "
3229 FunctionType enum
3230 "
3231 fontSize 14
3232 fontName "Consolas"
3233 alignment "left"
3234 anchor "tl"
3235 borderDistance 6
3236 ]
3237 ]
3238
3239 node
3240 [
3241 id 2
3242 graphics
3243 [
3244 w 226.60000000000002
3245 h 40
3246 type "rectangle"
3247 fill "#FFFFFF"
3248 fill2 "#FFFFFF"
3249 outline "#000000"
3250 ]
3251 LabelGraphics
3252 [
3253 text "Leaf literal FunctionType"
3254 outline "#000000"
3255 fill "#FFFFFF"
3256 fontSize 16
3257 fontName "Monospace"
3258 autoSizePolicy "node_width"
3259 anchor "t"
3260 borderDistance 0.0
3261 ]
3262 LabelGraphics
3263 [
3264 text "
3265 FunctionType enum
3266 "
3267 fontSize 14
3268 fontName "Consolas"
3269 alignment "left"
3270 anchor "tl"
3271 borderDistance 6
3272 ]
3273 ]
3274
3275 node
3276 [
3277 id 3
3278 graphics
3279 [
3280 w 361.90000000000003
3281 h 54
3282 type "rectangle"
3283 fill "#FFFFFF"
3284 fill2 "#FFFFFF"
3285 outline "#000000"
3286 ]
3287 LabelGraphics
3288 [
3289 text "o 1"
3290 outline "#000000"
3291 fill "#FFFFFF"
3292 fontSize 16
3293 fontName "Monospace"
3294 autoSizePolicy "node_width"
3295 anchor "t"
3296 borderDistance 0.0
3297 ]
3298 LabelGraphics
3299 [
3300 text "
3301 FunctionalArchitectureModel class DefinedPart
3302 FunctionalArchitectureModel class
3303 "
3304 fontSize 14
3305 fontName "Consolas"
3306 alignment "left"
3307 anchor "tl"
3308 borderDistance 6
3309 ]
3310 ]
3311
3312 node
3313 [
3314 id 4
3315 graphics
3316 [
3317 w 41.800000000000004
3318 h 26
3319 type "rectangle"
3320 fill "#FFFFFF"
3321 fill2 "#FFFFFF"
3322 outline "#000000"
3323 ]
3324 LabelGraphics
3325 [
3326 text "true"
3327 outline "#000000"
3328 fill "#FFFFFF"
3329 fontSize 16
3330 fontName "Monospace"
3331 autoSizePolicy "node_width"
3332 anchor "t"
3333 borderDistance 0.0
3334 ]
3335 LabelGraphics
3336 [
3337 text "
3338 "
3339 fontSize 14
3340 fontName "Consolas"
3341 alignment "left"
3342 anchor "tl"
3343 borderDistance 6
3344 ]
3345 ]
3346
3347 node
3348 [
3349 id 5
3350 graphics
3351 [
3352 w 50.6
3353 h 26
3354 type "rectangle"
3355 fill "#FFFFFF"
3356 fill2 "#FFFFFF"
3357 outline "#000000"
3358 ]
3359 LabelGraphics
3360 [
3361 text "false"
3362 outline "#000000"
3363 fill "#FFFFFF"
3364 fontSize 16
3365 fontName "Monospace"
3366 autoSizePolicy "node_width"
3367 anchor "t"
3368 borderDistance 0.0
3369 ]
3370 LabelGraphics
3371 [
3372 text "
3373 "
3374 fontSize 14
3375 fontName "Consolas"
3376 alignment "left"
3377 anchor "tl"
3378 borderDistance 6
3379 ]
3380 ]
3381
3382 node
3383 [
3384 id 6
3385 graphics
3386 [
3387 w 192.50000000000003
3388 h 54
3389 type "rectangle"
3390 fill "#FFFFFF"
3391 fill2 "#FFFFFF"
3392 outline "#000000"
3393 ]
3394 LabelGraphics
3395 [
3396 text "null"
3397 outline "#000000"
3398 fill "#FFFFFF"
3399 fontSize 16
3400 fontName "Monospace"
3401 autoSizePolicy "node_width"
3402 anchor "t"
3403 borderDistance 0.0
3404 ]
3405 LabelGraphics
3406 [
3407 text "
3408 FunctionalElement class
3409 Function class
3410 "
3411 fontSize 14
3412 fontName "Consolas"
3413 alignment "left"
3414 anchor "tl"
3415 borderDistance 6
3416 ]
3417 ]
3418
3419 node
3420 [
3421 id 7
3422 graphics
3423 [
3424 w 112.2
3425 h 26
3426 type "rectangle"
3427 fill "#FFFFFF"
3428 fill2 "#FFFFFF"
3429 outline "#000000"
3430 ]
3431 LabelGraphics
3432 [
3433 text "New Integers"
3434 outline "#000000"
3435 fill "#FFFFFF"
3436 fontSize 16
3437 fontName "Monospace"
3438 autoSizePolicy "node_width"
3439 anchor "t"
3440 borderDistance 0.0
3441 ]
3442 LabelGraphics
3443 [
3444 text "
3445 "
3446 fontSize 14
3447 fontName "Consolas"
3448 alignment "left"
3449 anchor "tl"
3450 borderDistance 6
3451 ]
3452 ]
3453
3454 node
3455 [
3456 id 8
3457 graphics
3458 [
3459 w 85.80000000000001
3460 h 26
3461 type "rectangle"
3462 fill "#FFFFFF"
3463 fill2 "#FFFFFF"
3464 outline "#000000"
3465 ]
3466 LabelGraphics
3467 [
3468 text "New Reals"
3469 outline "#000000"
3470 fill "#FFFFFF"
3471 fontSize 16
3472 fontName "Monospace"
3473 autoSizePolicy "node_width"
3474 anchor "t"
3475 borderDistance 0.0
3476 ]
3477 LabelGraphics
3478 [
3479 text "
3480 "
3481 fontSize 14
3482 fontName "Consolas"
3483 alignment "left"
3484 anchor "tl"
3485 borderDistance 6
3486 ]
3487 ]
3488
3489 node
3490 [
3491 id 9
3492 graphics
3493 [
3494 w 103.4
3495 h 26
3496 type "rectangle"
3497 fill "#FFFFFF"
3498 fill2 "#FFFFFF"
3499 outline "#000000"
3500 ]
3501 LabelGraphics
3502 [
3503 text "New Strings"
3504 outline "#000000"
3505 fill "#FFFFFF"
3506 fontSize 16
3507 fontName "Monospace"
3508 autoSizePolicy "node_width"
3509 anchor "t"
3510 borderDistance 0.0
3511 ]
3512 LabelGraphics
3513 [
3514 text "
3515 "
3516 fontSize 14
3517 fontName "Consolas"
3518 alignment "left"
3519 anchor "tl"
3520 borderDistance 6
3521 ]
3522 ]
3523
3524 node
3525 [
3526 id 10
3527 graphics
3528 [
3529 w 103.4
3530 h 26
3531 type "rectangle"
3532 fill "#FFFFFF"
3533 fill2 "#FFFFFF"
3534 outline "#000000"
3535 ]
3536 LabelGraphics
3537 [
3538 text "New Objects"
3539 outline "#000000"
3540 fill "#FFFFFF"
3541 fontSize 16
3542 fontName "Monospace"
3543 autoSizePolicy "node_width"
3544 anchor "t"
3545 borderDistance 0.0
3546 ]
3547 LabelGraphics
3548 [
3549 text "
3550 "
3551 fontSize 14
3552 fontName "Consolas"
3553 alignment "left"
3554 anchor "tl"
3555 borderDistance 6
3556 ]
3557 ]
3558 edge
3559 [
3560 source 6
3561 target 3
3562 graphics
3563 [
3564 fill "#000000"
3565 targetArrow "standard"
3566 ]
3567 LabelGraphics
3568 [
3569 text "model reference FunctionalElement"
3570 fontSize 14
3571 fontName "Consolas"
3572 configuration "AutoFlippingLabel"
3573 model "six_pos"
3574 position "thead"
3575 ]
3576 ]
3577 edge
3578 [
3579 source 3
3580 target 6
3581 graphics
3582 [
3583 fill "#000000"
3584 width 3
3585 targetArrow "standard"
3586 ]
3587 LabelGraphics
3588 [
3589 text "rootElements reference FunctionalArchitectureModel"
3590 fontSize 14
3591 fontName "Consolas"
3592 configuration "AutoFlippingLabel"
3593 model "six_pos"
3594 position "thead"
3595 ]
3596 ]
3597 edge
3598 [
3599 source 6
3600 target 0
3601 graphics
3602 [
3603 fill "#000000"
3604 targetArrow "standard"
3605 ]
3606 LabelGraphics
3607 [
3608 text "type attribute Function"
3609 fontSize 14
3610 fontName "Consolas"
3611 configuration "AutoFlippingLabel"
3612 model "six_pos"
3613 position "thead"
3614 ]
3615 ]
3616]
3617graph
3618[
3619 node
3620 [
3621 id 0
3622 graphics
3623 [
3624 w 254.10000000000002
3625 h 110
3626 type "rectangle"
3627 fill "#FFFFFF"
3628 fill2 "#FFFFFF"
3629 outline "#000000"
3630 ]
3631 LabelGraphics
3632 [
3633 text "o 1"
3634 outline "#000000"
3635 fill "#FFFFFF"
3636 fontSize 16
3637 fontName "Monospace"
3638 autoSizePolicy "node_width"
3639 anchor "t"
3640 borderDistance 0.0
3641 ]
3642 LabelGraphics
3643 [
3644 text "
3645 EModelElement class DefinedPart
3646 ENamedElement class DefinedPart
3647 EPackage class DefinedPart
3648 EModelElement class
3649 ENamedElement class
3650 EPackage class
3651 "
3652 fontSize 14
3653 fontName "Consolas"
3654 alignment "left"
3655 anchor "tl"
3656 borderDistance 6
3657 ]
3658 ]
3659
3660 node
3661 [
3662 id 1
3663 graphics
3664 [
3665 w 41.800000000000004
3666 h 26
3667 type "rectangle"
3668 fill "#FFFFFF"
3669 fill2 "#FFFFFF"
3670 outline "#000000"
3671 ]
3672 LabelGraphics
3673 [
3674 text "true"
3675 outline "#000000"
3676 fill "#FFFFFF"
3677 fontSize 16
3678 fontName "Monospace"
3679 autoSizePolicy "node_width"
3680 anchor "t"
3681 borderDistance 0.0
3682 ]
3683 LabelGraphics
3684 [
3685 text "
3686 "
3687 fontSize 14
3688 fontName "Consolas"
3689 alignment "left"
3690 anchor "tl"
3691 borderDistance 6
3692 ]
3693 ]
3694
3695 node
3696 [
3697 id 2
3698 graphics
3699 [
3700 w 50.6
3701 h 26
3702 type "rectangle"
3703 fill "#FFFFFF"
3704 fill2 "#FFFFFF"
3705 outline "#000000"
3706 ]
3707 LabelGraphics
3708 [
3709 text "false"
3710 outline "#000000"
3711 fill "#FFFFFF"
3712 fontSize 16
3713 fontName "Monospace"
3714 autoSizePolicy "node_width"
3715 anchor "t"
3716 borderDistance 0.0
3717 ]
3718 LabelGraphics
3719 [
3720 text "
3721 "
3722 fontSize 14
3723 fontName "Consolas"
3724 alignment "left"
3725 anchor "tl"
3726 borderDistance 6
3727 ]
3728 ]
3729
3730 node
3731 [
3732 id 3
3733 graphics
3734 [
3735 w 24.200000000000003
3736 h 26
3737 type "rectangle"
3738 fill "#FFFFFF"
3739 fill2 "#FFFFFF"
3740 outline "#000000"
3741 ]
3742 LabelGraphics
3743 [
3744 text "-1"
3745 outline "#000000"
3746 fill "#FFFFFF"
3747 fontSize 16
3748 fontName "Monospace"
3749 autoSizePolicy "node_width"
3750 anchor "t"
3751 borderDistance 0.0
3752 ]
3753 LabelGraphics
3754 [
3755 text "
3756 "
3757 fontSize 14
3758 fontName "Consolas"
3759 alignment "left"
3760 anchor "tl"
3761 borderDistance 6
3762 ]
3763 ]
3764
3765 node
3766 [
3767 id 4
3768 graphics
3769 [
3770 w 15.400000000000002
3771 h 26
3772 type "rectangle"
3773 fill "#FFFFFF"
3774 fill2 "#FFFFFF"
3775 outline "#000000"
3776 ]
3777 LabelGraphics
3778 [
3779 text "0"
3780 outline "#000000"
3781 fill "#FFFFFF"
3782 fontSize 16
3783 fontName "Monospace"
3784 autoSizePolicy "node_width"
3785 anchor "t"
3786 borderDistance 0.0
3787 ]
3788 LabelGraphics
3789 [
3790 text "
3791 "
3792 fontSize 14
3793 fontName "Consolas"
3794 alignment "left"
3795 anchor "tl"
3796 borderDistance 6
3797 ]
3798 ]
3799
3800 node
3801 [
3802 id 5
3803 graphics
3804 [
3805 w 15.400000000000002
3806 h 26
3807 type "rectangle"
3808 fill "#FFFFFF"
3809 fill2 "#FFFFFF"
3810 outline "#000000"
3811 ]
3812 LabelGraphics
3813 [
3814 text "1"
3815 outline "#000000"
3816 fill "#FFFFFF"
3817 fontSize 16
3818 fontName "Monospace"
3819 autoSizePolicy "node_width"
3820 anchor "t"
3821 borderDistance 0.0
3822 ]
3823 LabelGraphics
3824 [
3825 text "
3826 "
3827 fontSize 14
3828 fontName "Consolas"
3829 alignment "left"
3830 anchor "tl"
3831 borderDistance 6
3832 ]
3833 ]
3834
3835 node
3836 [
3837 id 6
3838 graphics
3839 [
3840 w 33.0
3841 h 26
3842 type "rectangle"
3843 fill "#FFFFFF"
3844 fill2 "#FFFFFF"
3845 outline "#000000"
3846 ]
3847 LabelGraphics
3848 [
3849 text ""A""
3850 outline "#000000"
3851 fill "#FFFFFF"
3852 fontSize 16
3853 fontName "Monospace"
3854 autoSizePolicy "node_width"
3855 anchor "t"
3856 borderDistance 0.0
3857 ]
3858 LabelGraphics
3859 [
3860 text "
3861 "
3862 fontSize 14
3863 fontName "Consolas"
3864 alignment "left"
3865 anchor "tl"
3866 borderDistance 6
3867 ]
3868 ]
3869
3870 node
3871 [
3872 id 7
3873 graphics
3874 [
3875 w 33.0
3876 h 26
3877 type "rectangle"
3878 fill "#FFFFFF"
3879 fill2 "#FFFFFF"
3880 outline "#000000"
3881 ]
3882 LabelGraphics
3883 [
3884 text ""B""
3885 outline "#000000"
3886 fill "#FFFFFF"
3887 fontSize 16
3888 fontName "Monospace"
3889 autoSizePolicy "node_width"
3890 anchor "t"
3891 borderDistance 0.0
3892 ]
3893 LabelGraphics
3894 [
3895 text "
3896 "
3897 fontSize 14
3898 fontName "Consolas"
3899 alignment "left"
3900 anchor "tl"
3901 borderDistance 6
3902 ]
3903 ]
3904
3905 node
3906 [
3907 id 8
3908 graphics
3909 [
3910 w 94.60000000000001
3911 h 26
3912 type "rectangle"
3913 fill "#FFFFFF"
3914 fill2 "#FFFFFF"
3915 outline "#000000"
3916 ]
3917 LabelGraphics
3918 [
3919 text ""nsPrefix""
3920 outline "#000000"
3921 fill "#FFFFFF"
3922 fontSize 16
3923 fontName "Monospace"
3924 autoSizePolicy "node_width"
3925 anchor "t"
3926 borderDistance 0.0
3927 ]
3928 LabelGraphics
3929 [
3930 text "
3931 "
3932 fontSize 14
3933 fontName "Consolas"
3934 alignment "left"
3935 anchor "tl"
3936 borderDistance 6
3937 ]
3938 ]
3939
3940 node
3941 [
3942 id 9
3943 graphics
3944 [
3945 w 68.2
3946 h 26
3947 type "rectangle"
3948 fill "#FFFFFF"
3949 fill2 "#FFFFFF"
3950 outline "#000000"
3951 ]
3952 LabelGraphics
3953 [
3954 text ""nsUri""
3955 outline "#000000"
3956 fill "#FFFFFF"
3957 fontSize 16
3958 fontName "Monospace"
3959 autoSizePolicy "node_width"
3960 anchor "t"
3961 borderDistance 0.0
3962 ]
3963 LabelGraphics
3964 [
3965 text "
3966 "
3967 fontSize 14
3968 fontName "Consolas"
3969 alignment "left"
3970 anchor "tl"
3971 borderDistance 6
3972 ]
3973 ]
3974
3975 node
3976 [
3977 id 10
3978 graphics
3979 [
3980 w 121.00000000000001
3981 h 26
3982 type "rectangle"
3983 fill "#FFFFFF"
3984 fill2 "#FFFFFF"
3985 outline "#000000"
3986 ]
3987 LabelGraphics
3988 [
3989 text ""packageName""
3990 outline "#000000"
3991 fill "#FFFFFF"
3992 fontSize 16
3993 fontName "Monospace"
3994 autoSizePolicy "node_width"
3995 anchor "t"
3996 borderDistance 0.0
3997 ]
3998 LabelGraphics
3999 [
4000 text "
4001 "
4002 fontSize 14
4003 fontName "Consolas"
4004 alignment "left"
4005 anchor "tl"
4006 borderDistance 6
4007 ]
4008 ]
4009
4010 node
4011 [
4012 id 11
4013 graphics
4014 [
4015 w 269.5
4016 h 124
4017 type "rectangle"
4018 fill "#FFFFFF"
4019 fill2 "#FFFFFF"
4020 outline "#000000"
4021 ]
4022 LabelGraphics
4023 [
4024 text "null"
4025 outline "#000000"
4026 fill "#FFFFFF"
4027 fontSize 16
4028 fontName "Monospace"
4029 autoSizePolicy "node_width"
4030 anchor "t"
4031 borderDistance 0.0
4032 ]
4033 LabelGraphics
4034 [
4035 text "
4036 EClassifier class
4037 EDataType class
4038 EEnum class
4039 EModelElement class
4040 ENamedElement class
4041 EModelElement class UndefinedPart
4042 ENamedElement class UndefinedPart
4043 "
4044 fontSize 14
4045 fontName "Consolas"
4046 alignment "left"
4047 anchor "tl"
4048 borderDistance 6
4049 ]
4050 ]
4051
4052 node
4053 [
4054 id 12
4055 graphics
4056 [
4057 w 269.5
4058 h 124
4059 type "rectangle"
4060 fill "#FFFFFF"
4061 fill2 "#FFFFFF"
4062 outline "#000000"
4063 ]
4064 LabelGraphics
4065 [
4066 text "null"
4067 outline "#000000"
4068 fill "#FFFFFF"
4069 fontSize 16
4070 fontName "Monospace"
4071 autoSizePolicy "node_width"
4072 anchor "t"
4073 borderDistance 0.0
4074 ]
4075 LabelGraphics
4076 [
4077 text "
4078 EClassifier class
4079 EDataType class
4080 EEnum class
4081 EModelElement class
4082 ENamedElement class
4083 EModelElement class UndefinedPart
4084 ENamedElement class UndefinedPart
4085 "
4086 fontSize 14
4087 fontName "Consolas"
4088 alignment "left"
4089 anchor "tl"
4090 borderDistance 6
4091 ]
4092 ]
4093
4094 node
4095 [
4096 id 13
4097 graphics
4098 [
4099 w 269.5
4100 h 110
4101 type "rectangle"
4102 fill "#FFFFFF"
4103 fill2 "#FFFFFF"
4104 outline "#000000"
4105 ]
4106 LabelGraphics
4107 [
4108 text "null"
4109 outline "#000000"
4110 fill "#FFFFFF"
4111 fontSize 16
4112 fontName "Monospace"
4113 autoSizePolicy "node_width"
4114 anchor "t"
4115 borderDistance 0.0
4116 ]
4117 LabelGraphics
4118 [
4119 text "
4120 EModelElement class
4121 ENamedElement class
4122 EPackage class
4123 EModelElement class UndefinedPart
4124 ENamedElement class UndefinedPart
4125 EPackage class UndefinedPart
4126 "
4127 fontSize 14
4128 fontName "Consolas"
4129 alignment "left"
4130 anchor "tl"
4131 borderDistance 6
4132 ]
4133 ]
4134
4135 node
4136 [
4137 id 14
4138 graphics
4139 [
4140 w 269.5
4141 h 124
4142 type "rectangle"
4143 fill "#FFFFFF"
4144 fill2 "#FFFFFF"
4145 outline "#000000"
4146 ]
4147 LabelGraphics
4148 [
4149 text "null"
4150 outline "#000000"
4151 fill "#FFFFFF"
4152 fontSize 16
4153 fontName "Monospace"
4154 autoSizePolicy "node_width"
4155 anchor "t"
4156 borderDistance 0.0
4157 ]
4158 LabelGraphics
4159 [
4160 text "
4161 EClassifier class
4162 EDataType class
4163 EEnum class
4164 EModelElement class
4165 ENamedElement class
4166 EModelElement class UndefinedPart
4167 ENamedElement class UndefinedPart
4168 "
4169 fontSize 14
4170 fontName "Consolas"
4171 alignment "left"
4172 anchor "tl"
4173 borderDistance 6
4174 ]
4175 ]
4176
4177 node
4178 [
4179 id 15
4180 graphics
4181 [
4182 w 269.5
4183 h 124
4184 type "rectangle"
4185 fill "#FFFFFF"
4186 fill2 "#FFFFFF"
4187 outline "#000000"
4188 ]
4189 LabelGraphics
4190 [
4191 text "null"
4192 outline "#000000"
4193 fill "#FFFFFF"
4194 fontSize 16
4195 fontName "Monospace"
4196 autoSizePolicy "node_width"
4197 anchor "t"
4198 borderDistance 0.0
4199 ]
4200 LabelGraphics
4201 [
4202 text "
4203 EClassifier class
4204 EDataType class
4205 EEnum class
4206 EModelElement class
4207 ENamedElement class
4208 EModelElement class UndefinedPart
4209 ENamedElement class UndefinedPart
4210 "
4211 fontSize 14
4212 fontName "Consolas"
4213 alignment "left"
4214 anchor "tl"
4215 borderDistance 6
4216 ]
4217 ]
4218
4219 node
4220 [
4221 id 16
4222 graphics
4223 [
4224 w 112.2
4225 h 26
4226 type "rectangle"
4227 fill "#FFFFFF"
4228 fill2 "#FFFFFF"
4229 outline "#000000"
4230 ]
4231 LabelGraphics
4232 [
4233 text "New Integers"
4234 outline "#000000"
4235 fill "#FFFFFF"
4236 fontSize 16
4237 fontName "Monospace"
4238 autoSizePolicy "node_width"
4239 anchor "t"
4240 borderDistance 0.0
4241 ]
4242 LabelGraphics
4243 [
4244 text "
4245 "
4246 fontSize 14
4247 fontName "Consolas"
4248 alignment "left"
4249 anchor "tl"
4250 borderDistance 6
4251 ]
4252 ]
4253
4254 node
4255 [
4256 id 17
4257 graphics
4258 [
4259 w 85.80000000000001
4260 h 26
4261 type "rectangle"
4262 fill "#FFFFFF"
4263 fill2 "#FFFFFF"
4264 outline "#000000"
4265 ]
4266 LabelGraphics
4267 [
4268 text "New Reals"
4269 outline "#000000"
4270 fill "#FFFFFF"
4271 fontSize 16
4272 fontName "Monospace"
4273 autoSizePolicy "node_width"
4274 anchor "t"
4275 borderDistance 0.0
4276 ]
4277 LabelGraphics
4278 [
4279 text "
4280 "
4281 fontSize 14
4282 fontName "Consolas"
4283 alignment "left"
4284 anchor "tl"
4285 borderDistance 6
4286 ]
4287 ]
4288
4289 node
4290 [
4291 id 18
4292 graphics
4293 [
4294 w 103.4
4295 h 26
4296 type "rectangle"
4297 fill "#FFFFFF"
4298 fill2 "#FFFFFF"
4299 outline "#000000"
4300 ]
4301 LabelGraphics
4302 [
4303 text "New Strings"
4304 outline "#000000"
4305 fill "#FFFFFF"
4306 fontSize 16
4307 fontName "Monospace"
4308 autoSizePolicy "node_width"
4309 anchor "t"
4310 borderDistance 0.0
4311 ]
4312 LabelGraphics
4313 [
4314 text "
4315 "
4316 fontSize 14
4317 fontName "Consolas"
4318 alignment "left"
4319 anchor "tl"
4320 borderDistance 6
4321 ]
4322 ]
4323
4324 node
4325 [
4326 id 19
4327 graphics
4328 [
4329 w 103.4
4330 h 26
4331 type "rectangle"
4332 fill "#FFFFFF"
4333 fill2 "#FFFFFF"
4334 outline "#000000"
4335 ]
4336 LabelGraphics
4337 [
4338 text "New Objects"
4339 outline "#000000"
4340 fill "#FFFFFF"
4341 fontSize 16
4342 fontName "Monospace"
4343 autoSizePolicy "node_width"
4344 anchor "t"
4345 borderDistance 0.0
4346 ]
4347 LabelGraphics
4348 [
4349 text "
4350 "
4351 fontSize 14
4352 fontName "Consolas"
4353 alignment "left"
4354 anchor "tl"
4355 borderDistance 6
4356 ]
4357 ]
4358 edge
4359 [
4360 source 11
4361 target 0
4362 graphics
4363 [
4364 fill "#000000"
4365 targetArrow "standard"
4366 ]
4367 LabelGraphics
4368 [
4369 text "ePackage reference EClassifier"
4370 fontSize 14
4371 fontName "Consolas"
4372 configuration "AutoFlippingLabel"
4373 model "six_pos"
4374 position "thead"
4375 ]
4376 ]
4377 edge
4378 [
4379 source 12
4380 target 0
4381 graphics
4382 [
4383 fill "#000000"
4384 targetArrow "standard"
4385 ]
4386 LabelGraphics
4387 [
4388 text "ePackage reference EClassifier"
4389 fontSize 14
4390 fontName "Consolas"
4391 configuration "AutoFlippingLabel"
4392 model "six_pos"
4393 position "thead"
4394 ]
4395 ]
4396 edge
4397 [
4398 source 14
4399 target 0
4400 graphics
4401 [
4402 fill "#000000"
4403 targetArrow "standard"
4404 ]
4405 LabelGraphics
4406 [
4407 text "ePackage reference EClassifier"
4408 fontSize 14
4409 fontName "Consolas"
4410 configuration "AutoFlippingLabel"
4411 model "six_pos"
4412 position "thead"
4413 ]
4414 ]
4415 edge
4416 [
4417 source 15
4418 target 13
4419 graphics
4420 [
4421 fill "#000000"
4422 targetArrow "standard"
4423 ]
4424 LabelGraphics
4425 [
4426 text "ePackage reference EClassifier"
4427 fontSize 14
4428 fontName "Consolas"
4429 configuration "AutoFlippingLabel"
4430 model "six_pos"
4431 position "thead"
4432 ]
4433 ]
4434 edge
4435 [
4436 source 0
4437 target 11
4438 graphics
4439 [
4440 fill "#000000"
4441 width 3
4442 targetArrow "standard"
4443 ]
4444 LabelGraphics
4445 [
4446 text "eClassifiers reference EPackage"
4447 fontSize 14
4448 fontName "Consolas"
4449 configuration "AutoFlippingLabel"
4450 model "six_pos"
4451 position "thead"
4452 ]
4453 ]
4454 edge
4455 [
4456 source 0
4457 target 12
4458 graphics
4459 [
4460 fill "#000000"
4461 width 3
4462 targetArrow "standard"
4463 ]
4464 LabelGraphics
4465 [
4466 text "eClassifiers reference EPackage"
4467 fontSize 14
4468 fontName "Consolas"
4469 configuration "AutoFlippingLabel"
4470 model "six_pos"
4471 position "thead"
4472 ]
4473 ]
4474 edge
4475 [
4476 source 0
4477 target 14
4478 graphics
4479 [
4480 fill "#000000"
4481 width 3
4482 targetArrow "standard"
4483 ]
4484 LabelGraphics
4485 [
4486 text "eClassifiers reference EPackage"
4487 fontSize 14
4488 fontName "Consolas"
4489 configuration "AutoFlippingLabel"
4490 model "six_pos"
4491 position "thead"
4492 ]
4493 ]
4494 edge
4495 [
4496 source 13
4497 target 15
4498 graphics
4499 [
4500 fill "#000000"
4501 width 3
4502 targetArrow "standard"
4503 ]
4504 LabelGraphics
4505 [
4506 text "eClassifiers reference EPackage"
4507 fontSize 14
4508 fontName "Consolas"
4509 configuration "AutoFlippingLabel"
4510 model "six_pos"
4511 position "thead"
4512 ]
4513 ]
4514 edge
4515 [
4516 source 0
4517 target 13
4518 graphics
4519 [
4520 fill "#000000"
4521 width 3
4522 targetArrow "standard"
4523 ]
4524 LabelGraphics
4525 [
4526 text "eSubpackages reference EPackage"
4527 fontSize 14
4528 fontName "Consolas"
4529 configuration "AutoFlippingLabel"
4530 model "six_pos"
4531 position "thead"
4532 ]
4533 ]
4534 edge
4535 [
4536 source 13
4537 target 0
4538 graphics
4539 [
4540 fill "#000000"
4541 targetArrow "standard"
4542 ]
4543 LabelGraphics
4544 [
4545 text "eSuperPackage reference EPackage"
4546 fontSize 14
4547 fontName "Consolas"
4548 configuration "AutoFlippingLabel"
4549 model "six_pos"
4550 position "thead"
4551 ]
4552 ]
4553 edge
4554 [
4555 source 12
4556 target 8
4557 graphics
4558 [
4559 fill "#000000"
4560 targetArrow "standard"
4561 ]
4562 LabelGraphics
4563 [
4564 text "instanceClassName attribute EClassifier"
4565 fontSize 14
4566 fontName "Consolas"
4567 configuration "AutoFlippingLabel"
4568 model "six_pos"
4569 position "thead"
4570 ]
4571 ]
4572 edge
4573 [
4574 source 11
4575 target 6
4576 graphics
4577 [
4578 fill "#000000"
4579 targetArrow "standard"
4580 ]
4581 LabelGraphics
4582 [
4583 text "instanceClassName attribute EClassifier"
4584 fontSize 14
4585 fontName "Consolas"
4586 configuration "AutoFlippingLabel"
4587 model "six_pos"
4588 position "thead"
4589 ]
4590 ]
4591 edge
4592 [
4593 source 11
4594 target 10
4595 graphics
4596 [
4597 fill "#000000"
4598 targetArrow "standard"
4599 ]
4600 LabelGraphics
4601 [
4602 text "instanceTypeName attribute EClassifier"
4603 fontSize 14
4604 fontName "Consolas"
4605 configuration "AutoFlippingLabel"
4606 model "six_pos"
4607 position "thead"
4608 ]
4609 ]
4610 edge
4611 [
4612 source 12
4613 target 8
4614 graphics
4615 [
4616 fill "#000000"
4617 targetArrow "standard"
4618 ]
4619 LabelGraphics
4620 [
4621 text "instanceTypeName attribute EClassifier"
4622 fontSize 14
4623 fontName "Consolas"
4624 configuration "AutoFlippingLabel"
4625 model "six_pos"
4626 position "thead"
4627 ]
4628 ]
4629 edge
4630 [
4631 source 0
4632 target 10
4633 graphics
4634 [
4635 fill "#000000"
4636 targetArrow "standard"
4637 ]
4638 LabelGraphics
4639 [
4640 text "name attribute ENamedElement"
4641 fontSize 14
4642 fontName "Consolas"
4643 configuration "AutoFlippingLabel"
4644 model "six_pos"
4645 position "thead"
4646 ]
4647 ]
4648 edge
4649 [
4650 source 12
4651 target 10
4652 graphics
4653 [
4654 fill "#000000"
4655 targetArrow "standard"
4656 ]
4657 LabelGraphics
4658 [
4659 text "name attribute ENamedElement"
4660 fontSize 14
4661 fontName "Consolas"
4662 configuration "AutoFlippingLabel"
4663 model "six_pos"
4664 position "thead"
4665 ]
4666 ]
4667 edge
4668 [
4669 source 11
4670 target 10
4671 graphics
4672 [
4673 fill "#000000"
4674 targetArrow "standard"
4675 ]
4676 LabelGraphics
4677 [
4678 text "name attribute ENamedElement"
4679 fontSize 14
4680 fontName "Consolas"
4681 configuration "AutoFlippingLabel"
4682 model "six_pos"
4683 position "thead"
4684 ]
4685 ]
4686 edge
4687 [
4688 source 13
4689 target 6
4690 graphics
4691 [
4692 fill "#000000"
4693 targetArrow "standard"
4694 ]
4695 LabelGraphics
4696 [
4697 text "name attribute ENamedElement"
4698 fontSize 14
4699 fontName "Consolas"
4700 configuration "AutoFlippingLabel"
4701 model "six_pos"
4702 position "thead"
4703 ]
4704 ]
4705 edge
4706 [
4707 source 0
4708 target 9
4709 graphics
4710 [
4711 fill "#000000"
4712 targetArrow "standard"
4713 ]
4714 LabelGraphics
4715 [
4716 text "nsURI attribute EPackage"
4717 fontSize 14
4718 fontName "Consolas"
4719 configuration "AutoFlippingLabel"
4720 model "six_pos"
4721 position "thead"
4722 ]
4723 ]
4724 edge
4725 [
4726 source 13
4727 target 8
4728 graphics
4729 [
4730 fill "#000000"
4731 targetArrow "standard"
4732 ]
4733 LabelGraphics
4734 [
4735 text "nsURI attribute EPackage"
4736 fontSize 14
4737 fontName "Consolas"
4738 configuration "AutoFlippingLabel"
4739 model "six_pos"
4740 position "thead"
4741 ]
4742 ]
4743 edge
4744 [
4745 source 0
4746 target 8
4747 graphics
4748 [
4749 fill "#000000"
4750 targetArrow "standard"
4751 ]
4752 LabelGraphics
4753 [
4754 text "nsPrefix attribute EPackage"
4755 fontSize 14
4756 fontName "Consolas"
4757 configuration "AutoFlippingLabel"
4758 model "six_pos"
4759 position "thead"
4760 ]
4761 ]
4762]
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/2.png b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/2.png
new file mode 100644
index 00000000..e01ca46b
--- /dev/null
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/2.png
Binary files differ
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/2.xmi b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/2.xmi
new file mode 100644
index 00000000..c6287127
--- /dev/null
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/2.xmi
@@ -0,0 +1,9 @@
1<?xml version="1.0" encoding="ASCII"?>
2<ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="packageName" nsURI="nsUri" nsPrefix="nsPrefix">
3 <eClassifiers xsi:type="ecore:EEnum" name="packageName" instanceClassName="A"/>
4 <eClassifiers xsi:type="ecore:EEnum"/>
5 <eClassifiers xsi:type="ecore:EEnum" name="packageName" instanceClassName="nsPrefix"/>
6 <eSubpackages name="A" nsURI="nsPrefix">
7 <eClassifiers xsi:type="ecore:EEnum"/>
8 </eSubpackages>
9</ecore:EPackage>
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/3.gml b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/3.gml
new file mode 100644
index 00000000..05f41ccb
--- /dev/null
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/3.gml
@@ -0,0 +1,2069 @@
1graph
2[
3 node
4 [
5 id 0
6 graphics
7 [
8 w 226.60000000000002
9 h 40
10 type "rectangle"
11 fill "#FFFFFF"
12 fill2 "#FFFFFF"
13 outline "#000000"
14 ]
15 LabelGraphics
16 [
17 text "Root literal FunctionType"
18 outline "#000000"
19 fill "#FFFFFF"
20 fontSize 16
21 fontName "Monospace"
22 autoSizePolicy "node_width"
23 anchor "t"
24 borderDistance 0.0
25 ]
26 LabelGraphics
27 [
28 text "
29 FunctionType enum
30 "
31 fontSize 14
32 fontName "Consolas"
33 alignment "left"
34 anchor "tl"
35 borderDistance 6
36 ]
37 ]
38
39 node
40 [
41 id 1
42 graphics
43 [
44 w 297.0
45 h 40
46 type "rectangle"
47 fill "#FFFFFF"
48 fill2 "#FFFFFF"
49 outline "#000000"
50 ]
51 LabelGraphics
52 [
53 text "Intermediate literal FunctionType"
54 outline "#000000"
55 fill "#FFFFFF"
56 fontSize 16
57 fontName "Monospace"
58 autoSizePolicy "node_width"
59 anchor "t"
60 borderDistance 0.0
61 ]
62 LabelGraphics
63 [
64 text "
65 FunctionType enum
66 "
67 fontSize 14
68 fontName "Consolas"
69 alignment "left"
70 anchor "tl"
71 borderDistance 6
72 ]
73 ]
74
75 node
76 [
77 id 2
78 graphics
79 [
80 w 226.60000000000002
81 h 40
82 type "rectangle"
83 fill "#FFFFFF"
84 fill2 "#FFFFFF"
85 outline "#000000"
86 ]
87 LabelGraphics
88 [
89 text "Leaf literal FunctionType"
90 outline "#000000"
91 fill "#FFFFFF"
92 fontSize 16
93 fontName "Monospace"
94 autoSizePolicy "node_width"
95 anchor "t"
96 borderDistance 0.0
97 ]
98 LabelGraphics
99 [
100 text "
101 FunctionType enum
102 "
103 fontSize 14
104 fontName "Consolas"
105 alignment "left"
106 anchor "tl"
107 borderDistance 6
108 ]
109 ]
110
111 node
112 [
113 id 3
114 graphics
115 [
116 w 361.90000000000003
117 h 54
118 type "rectangle"
119 fill "#FFFFFF"
120 fill2 "#FFFFFF"
121 outline "#000000"
122 ]
123 LabelGraphics
124 [
125 text "o 1"
126 outline "#000000"
127 fill "#FFFFFF"
128 fontSize 16
129 fontName "Monospace"
130 autoSizePolicy "node_width"
131 anchor "t"
132 borderDistance 0.0
133 ]
134 LabelGraphics
135 [
136 text "
137 FunctionalArchitectureModel class DefinedPart
138 FunctionalArchitectureModel class
139 "
140 fontSize 14
141 fontName "Consolas"
142 alignment "left"
143 anchor "tl"
144 borderDistance 6
145 ]
146 ]
147
148 node
149 [
150 id 4
151 graphics
152 [
153 w 41.800000000000004
154 h 26
155 type "rectangle"
156 fill "#FFFFFF"
157 fill2 "#FFFFFF"
158 outline "#000000"
159 ]
160 LabelGraphics
161 [
162 text "true"
163 outline "#000000"
164 fill "#FFFFFF"
165 fontSize 16
166 fontName "Monospace"
167 autoSizePolicy "node_width"
168 anchor "t"
169 borderDistance 0.0
170 ]
171 LabelGraphics
172 [
173 text "
174 "
175 fontSize 14
176 fontName "Consolas"
177 alignment "left"
178 anchor "tl"
179 borderDistance 6
180 ]
181 ]
182
183 node
184 [
185 id 5
186 graphics
187 [
188 w 50.6
189 h 26
190 type "rectangle"
191 fill "#FFFFFF"
192 fill2 "#FFFFFF"
193 outline "#000000"
194 ]
195 LabelGraphics
196 [
197 text "false"
198 outline "#000000"
199 fill "#FFFFFF"
200 fontSize 16
201 fontName "Monospace"
202 autoSizePolicy "node_width"
203 anchor "t"
204 borderDistance 0.0
205 ]
206 LabelGraphics
207 [
208 text "
209 "
210 fontSize 14
211 fontName "Consolas"
212 alignment "left"
213 anchor "tl"
214 borderDistance 6
215 ]
216 ]
217
218 node
219 [
220 id 6
221 graphics
222 [
223 w 192.50000000000003
224 h 54
225 type "rectangle"
226 fill "#FFFFFF"
227 fill2 "#FFFFFF"
228 outline "#000000"
229 ]
230 LabelGraphics
231 [
232 text "null"
233 outline "#000000"
234 fill "#FFFFFF"
235 fontSize 16
236 fontName "Monospace"
237 autoSizePolicy "node_width"
238 anchor "t"
239 borderDistance 0.0
240 ]
241 LabelGraphics
242 [
243 text "
244 FunctionalElement class
245 Function class
246 "
247 fontSize 14
248 fontName "Consolas"
249 alignment "left"
250 anchor "tl"
251 borderDistance 6
252 ]
253 ]
254
255 node
256 [
257 id 7
258 graphics
259 [
260 w 112.2
261 h 26
262 type "rectangle"
263 fill "#FFFFFF"
264 fill2 "#FFFFFF"
265 outline "#000000"
266 ]
267 LabelGraphics
268 [
269 text "New Integers"
270 outline "#000000"
271 fill "#FFFFFF"
272 fontSize 16
273 fontName "Monospace"
274 autoSizePolicy "node_width"
275 anchor "t"
276 borderDistance 0.0
277 ]
278 LabelGraphics
279 [
280 text "
281 "
282 fontSize 14
283 fontName "Consolas"
284 alignment "left"
285 anchor "tl"
286 borderDistance 6
287 ]
288 ]
289
290 node
291 [
292 id 8
293 graphics
294 [
295 w 85.80000000000001
296 h 26
297 type "rectangle"
298 fill "#FFFFFF"
299 fill2 "#FFFFFF"
300 outline "#000000"
301 ]
302 LabelGraphics
303 [
304 text "New Reals"
305 outline "#000000"
306 fill "#FFFFFF"
307 fontSize 16
308 fontName "Monospace"
309 autoSizePolicy "node_width"
310 anchor "t"
311 borderDistance 0.0
312 ]
313 LabelGraphics
314 [
315 text "
316 "
317 fontSize 14
318 fontName "Consolas"
319 alignment "left"
320 anchor "tl"
321 borderDistance 6
322 ]
323 ]
324
325 node
326 [
327 id 9
328 graphics
329 [
330 w 103.4
331 h 26
332 type "rectangle"
333 fill "#FFFFFF"
334 fill2 "#FFFFFF"
335 outline "#000000"
336 ]
337 LabelGraphics
338 [
339 text "New Strings"
340 outline "#000000"
341 fill "#FFFFFF"
342 fontSize 16
343 fontName "Monospace"
344 autoSizePolicy "node_width"
345 anchor "t"
346 borderDistance 0.0
347 ]
348 LabelGraphics
349 [
350 text "
351 "
352 fontSize 14
353 fontName "Consolas"
354 alignment "left"
355 anchor "tl"
356 borderDistance 6
357 ]
358 ]
359
360 node
361 [
362 id 10
363 graphics
364 [
365 w 103.4
366 h 26
367 type "rectangle"
368 fill "#FFFFFF"
369 fill2 "#FFFFFF"
370 outline "#000000"
371 ]
372 LabelGraphics
373 [
374 text "New Objects"
375 outline "#000000"
376 fill "#FFFFFF"
377 fontSize 16
378 fontName "Monospace"
379 autoSizePolicy "node_width"
380 anchor "t"
381 borderDistance 0.0
382 ]
383 LabelGraphics
384 [
385 text "
386 "
387 fontSize 14
388 fontName "Consolas"
389 alignment "left"
390 anchor "tl"
391 borderDistance 6
392 ]
393 ]
394 edge
395 [
396 source 6
397 target 3
398 graphics
399 [
400 fill "#000000"
401 targetArrow "standard"
402 ]
403 LabelGraphics
404 [
405 text "model reference FunctionalElement"
406 fontSize 14
407 fontName "Consolas"
408 configuration "AutoFlippingLabel"
409 model "six_pos"
410 position "thead"
411 ]
412 ]
413 edge
414 [
415 source 3
416 target 6
417 graphics
418 [
419 fill "#000000"
420 width 3
421 targetArrow "standard"
422 ]
423 LabelGraphics
424 [
425 text "rootElements reference FunctionalArchitectureModel"
426 fontSize 14
427 fontName "Consolas"
428 configuration "AutoFlippingLabel"
429 model "six_pos"
430 position "thead"
431 ]
432 ]
433 edge
434 [
435 source 6
436 target 2
437 graphics
438 [
439 fill "#000000"
440 targetArrow "standard"
441 ]
442 LabelGraphics
443 [
444 text "type attribute Function"
445 fontSize 14
446 fontName "Consolas"
447 configuration "AutoFlippingLabel"
448 model "six_pos"
449 position "thead"
450 ]
451 ]
452]
453graph
454[
455 node
456 [
457 id 0
458 graphics
459 [
460 w 226.60000000000002
461 h 40
462 type "rectangle"
463 fill "#FFFFFF"
464 fill2 "#FFFFFF"
465 outline "#000000"
466 ]
467 LabelGraphics
468 [
469 text "Root literal FunctionType"
470 outline "#000000"
471 fill "#FFFFFF"
472 fontSize 16
473 fontName "Monospace"
474 autoSizePolicy "node_width"
475 anchor "t"
476 borderDistance 0.0
477 ]
478 LabelGraphics
479 [
480 text "
481 FunctionType enum
482 "
483 fontSize 14
484 fontName "Consolas"
485 alignment "left"
486 anchor "tl"
487 borderDistance 6
488 ]
489 ]
490
491 node
492 [
493 id 1
494 graphics
495 [
496 w 297.0
497 h 40
498 type "rectangle"
499 fill "#FFFFFF"
500 fill2 "#FFFFFF"
501 outline "#000000"
502 ]
503 LabelGraphics
504 [
505 text "Intermediate literal FunctionType"
506 outline "#000000"
507 fill "#FFFFFF"
508 fontSize 16
509 fontName "Monospace"
510 autoSizePolicy "node_width"
511 anchor "t"
512 borderDistance 0.0
513 ]
514 LabelGraphics
515 [
516 text "
517 FunctionType enum
518 "
519 fontSize 14
520 fontName "Consolas"
521 alignment "left"
522 anchor "tl"
523 borderDistance 6
524 ]
525 ]
526
527 node
528 [
529 id 2
530 graphics
531 [
532 w 226.60000000000002
533 h 40
534 type "rectangle"
535 fill "#FFFFFF"
536 fill2 "#FFFFFF"
537 outline "#000000"
538 ]
539 LabelGraphics
540 [
541 text "Leaf literal FunctionType"
542 outline "#000000"
543 fill "#FFFFFF"
544 fontSize 16
545 fontName "Monospace"
546 autoSizePolicy "node_width"
547 anchor "t"
548 borderDistance 0.0
549 ]
550 LabelGraphics
551 [
552 text "
553 FunctionType enum
554 "
555 fontSize 14
556 fontName "Consolas"
557 alignment "left"
558 anchor "tl"
559 borderDistance 6
560 ]
561 ]
562
563 node
564 [
565 id 3
566 graphics
567 [
568 w 361.90000000000003
569 h 54
570 type "rectangle"
571 fill "#FFFFFF"
572 fill2 "#FFFFFF"
573 outline "#000000"
574 ]
575 LabelGraphics
576 [
577 text "o 1"
578 outline "#000000"
579 fill "#FFFFFF"
580 fontSize 16
581 fontName "Monospace"
582 autoSizePolicy "node_width"
583 anchor "t"
584 borderDistance 0.0
585 ]
586 LabelGraphics
587 [
588 text "
589 FunctionalArchitectureModel class DefinedPart
590 FunctionalArchitectureModel class
591 "
592 fontSize 14
593 fontName "Consolas"
594 alignment "left"
595 anchor "tl"
596 borderDistance 6
597 ]
598 ]
599
600 node
601 [
602 id 4
603 graphics
604 [
605 w 41.800000000000004
606 h 26
607 type "rectangle"
608 fill "#FFFFFF"
609 fill2 "#FFFFFF"
610 outline "#000000"
611 ]
612 LabelGraphics
613 [
614 text "true"
615 outline "#000000"
616 fill "#FFFFFF"
617 fontSize 16
618 fontName "Monospace"
619 autoSizePolicy "node_width"
620 anchor "t"
621 borderDistance 0.0
622 ]
623 LabelGraphics
624 [
625 text "
626 "
627 fontSize 14
628 fontName "Consolas"
629 alignment "left"
630 anchor "tl"
631 borderDistance 6
632 ]
633 ]
634
635 node
636 [
637 id 5
638 graphics
639 [
640 w 50.6
641 h 26
642 type "rectangle"
643 fill "#FFFFFF"
644 fill2 "#FFFFFF"
645 outline "#000000"
646 ]
647 LabelGraphics
648 [
649 text "false"
650 outline "#000000"
651 fill "#FFFFFF"
652 fontSize 16
653 fontName "Monospace"
654 autoSizePolicy "node_width"
655 anchor "t"
656 borderDistance 0.0
657 ]
658 LabelGraphics
659 [
660 text "
661 "
662 fontSize 14
663 fontName "Consolas"
664 alignment "left"
665 anchor "tl"
666 borderDistance 6
667 ]
668 ]
669
670 node
671 [
672 id 6
673 graphics
674 [
675 w 192.50000000000003
676 h 54
677 type "rectangle"
678 fill "#FFFFFF"
679 fill2 "#FFFFFF"
680 outline "#000000"
681 ]
682 LabelGraphics
683 [
684 text "null"
685 outline "#000000"
686 fill "#FFFFFF"
687 fontSize 16
688 fontName "Monospace"
689 autoSizePolicy "node_width"
690 anchor "t"
691 borderDistance 0.0
692 ]
693 LabelGraphics
694 [
695 text "
696 FunctionalElement class
697 Function class
698 "
699 fontSize 14
700 fontName "Consolas"
701 alignment "left"
702 anchor "tl"
703 borderDistance 6
704 ]
705 ]
706
707 node
708 [
709 id 7
710 graphics
711 [
712 w 112.2
713 h 26
714 type "rectangle"
715 fill "#FFFFFF"
716 fill2 "#FFFFFF"
717 outline "#000000"
718 ]
719 LabelGraphics
720 [
721 text "New Integers"
722 outline "#000000"
723 fill "#FFFFFF"
724 fontSize 16
725 fontName "Monospace"
726 autoSizePolicy "node_width"
727 anchor "t"
728 borderDistance 0.0
729 ]
730 LabelGraphics
731 [
732 text "
733 "
734 fontSize 14
735 fontName "Consolas"
736 alignment "left"
737 anchor "tl"
738 borderDistance 6
739 ]
740 ]
741
742 node
743 [
744 id 8
745 graphics
746 [
747 w 85.80000000000001
748 h 26
749 type "rectangle"
750 fill "#FFFFFF"
751 fill2 "#FFFFFF"
752 outline "#000000"
753 ]
754 LabelGraphics
755 [
756 text "New Reals"
757 outline "#000000"
758 fill "#FFFFFF"
759 fontSize 16
760 fontName "Monospace"
761 autoSizePolicy "node_width"
762 anchor "t"
763 borderDistance 0.0
764 ]
765 LabelGraphics
766 [
767 text "
768 "
769 fontSize 14
770 fontName "Consolas"
771 alignment "left"
772 anchor "tl"
773 borderDistance 6
774 ]
775 ]
776
777 node
778 [
779 id 9
780 graphics
781 [
782 w 103.4
783 h 26
784 type "rectangle"
785 fill "#FFFFFF"
786 fill2 "#FFFFFF"
787 outline "#000000"
788 ]
789 LabelGraphics
790 [
791 text "New Strings"
792 outline "#000000"
793 fill "#FFFFFF"
794 fontSize 16
795 fontName "Monospace"
796 autoSizePolicy "node_width"
797 anchor "t"
798 borderDistance 0.0
799 ]
800 LabelGraphics
801 [
802 text "
803 "
804 fontSize 14
805 fontName "Consolas"
806 alignment "left"
807 anchor "tl"
808 borderDistance 6
809 ]
810 ]
811
812 node
813 [
814 id 10
815 graphics
816 [
817 w 103.4
818 h 26
819 type "rectangle"
820 fill "#FFFFFF"
821 fill2 "#FFFFFF"
822 outline "#000000"
823 ]
824 LabelGraphics
825 [
826 text "New Objects"
827 outline "#000000"
828 fill "#FFFFFF"
829 fontSize 16
830 fontName "Monospace"
831 autoSizePolicy "node_width"
832 anchor "t"
833 borderDistance 0.0
834 ]
835 LabelGraphics
836 [
837 text "
838 "
839 fontSize 14
840 fontName "Consolas"
841 alignment "left"
842 anchor "tl"
843 borderDistance 6
844 ]
845 ]
846 edge
847 [
848 source 6
849 target 3
850 graphics
851 [
852 fill "#000000"
853 targetArrow "standard"
854 ]
855 LabelGraphics
856 [
857 text "model reference FunctionalElement"
858 fontSize 14
859 fontName "Consolas"
860 configuration "AutoFlippingLabel"
861 model "six_pos"
862 position "thead"
863 ]
864 ]
865 edge
866 [
867 source 3
868 target 6
869 graphics
870 [
871 fill "#000000"
872 width 3
873 targetArrow "standard"
874 ]
875 LabelGraphics
876 [
877 text "rootElements reference FunctionalArchitectureModel"
878 fontSize 14
879 fontName "Consolas"
880 configuration "AutoFlippingLabel"
881 model "six_pos"
882 position "thead"
883 ]
884 ]
885 edge
886 [
887 source 6
888 target 0
889 graphics
890 [
891 fill "#000000"
892 targetArrow "standard"
893 ]
894 LabelGraphics
895 [
896 text "type attribute Function"
897 fontSize 14
898 fontName "Consolas"
899 configuration "AutoFlippingLabel"
900 model "six_pos"
901 position "thead"
902 ]
903 ]
904]
905graph
906[
907 node
908 [
909 id 0
910 graphics
911 [
912 w 254.10000000000002
913 h 110
914 type "rectangle"
915 fill "#FFFFFF"
916 fill2 "#FFFFFF"
917 outline "#000000"
918 ]
919 LabelGraphics
920 [
921 text "o 1"
922 outline "#000000"
923 fill "#FFFFFF"
924 fontSize 16
925 fontName "Monospace"
926 autoSizePolicy "node_width"
927 anchor "t"
928 borderDistance 0.0
929 ]
930 LabelGraphics
931 [
932 text "
933 EModelElement class DefinedPart
934 ENamedElement class DefinedPart
935 EPackage class DefinedPart
936 EModelElement class
937 ENamedElement class
938 EPackage class
939 "
940 fontSize 14
941 fontName "Consolas"
942 alignment "left"
943 anchor "tl"
944 borderDistance 6
945 ]
946 ]
947
948 node
949 [
950 id 1
951 graphics
952 [
953 w 41.800000000000004
954 h 26
955 type "rectangle"
956 fill "#FFFFFF"
957 fill2 "#FFFFFF"
958 outline "#000000"
959 ]
960 LabelGraphics
961 [
962 text "true"
963 outline "#000000"
964 fill "#FFFFFF"
965 fontSize 16
966 fontName "Monospace"
967 autoSizePolicy "node_width"
968 anchor "t"
969 borderDistance 0.0
970 ]
971 LabelGraphics
972 [
973 text "
974 "
975 fontSize 14
976 fontName "Consolas"
977 alignment "left"
978 anchor "tl"
979 borderDistance 6
980 ]
981 ]
982
983 node
984 [
985 id 2
986 graphics
987 [
988 w 50.6
989 h 26
990 type "rectangle"
991 fill "#FFFFFF"
992 fill2 "#FFFFFF"
993 outline "#000000"
994 ]
995 LabelGraphics
996 [
997 text "false"
998 outline "#000000"
999 fill "#FFFFFF"
1000 fontSize 16
1001 fontName "Monospace"
1002 autoSizePolicy "node_width"
1003 anchor "t"
1004 borderDistance 0.0
1005 ]
1006 LabelGraphics
1007 [
1008 text "
1009 "
1010 fontSize 14
1011 fontName "Consolas"
1012 alignment "left"
1013 anchor "tl"
1014 borderDistance 6
1015 ]
1016 ]
1017
1018 node
1019 [
1020 id 3
1021 graphics
1022 [
1023 w 24.200000000000003
1024 h 26
1025 type "rectangle"
1026 fill "#FFFFFF"
1027 fill2 "#FFFFFF"
1028 outline "#000000"
1029 ]
1030 LabelGraphics
1031 [
1032 text "-1"
1033 outline "#000000"
1034 fill "#FFFFFF"
1035 fontSize 16
1036 fontName "Monospace"
1037 autoSizePolicy "node_width"
1038 anchor "t"
1039 borderDistance 0.0
1040 ]
1041 LabelGraphics
1042 [
1043 text "
1044 "
1045 fontSize 14
1046 fontName "Consolas"
1047 alignment "left"
1048 anchor "tl"
1049 borderDistance 6
1050 ]
1051 ]
1052
1053 node
1054 [
1055 id 4
1056 graphics
1057 [
1058 w 15.400000000000002
1059 h 26
1060 type "rectangle"
1061 fill "#FFFFFF"
1062 fill2 "#FFFFFF"
1063 outline "#000000"
1064 ]
1065 LabelGraphics
1066 [
1067 text "0"
1068 outline "#000000"
1069 fill "#FFFFFF"
1070 fontSize 16
1071 fontName "Monospace"
1072 autoSizePolicy "node_width"
1073 anchor "t"
1074 borderDistance 0.0
1075 ]
1076 LabelGraphics
1077 [
1078 text "
1079 "
1080 fontSize 14
1081 fontName "Consolas"
1082 alignment "left"
1083 anchor "tl"
1084 borderDistance 6
1085 ]
1086 ]
1087
1088 node
1089 [
1090 id 5
1091 graphics
1092 [
1093 w 15.400000000000002
1094 h 26
1095 type "rectangle"
1096 fill "#FFFFFF"
1097 fill2 "#FFFFFF"
1098 outline "#000000"
1099 ]
1100 LabelGraphics
1101 [
1102 text "1"
1103 outline "#000000"
1104 fill "#FFFFFF"
1105 fontSize 16
1106 fontName "Monospace"
1107 autoSizePolicy "node_width"
1108 anchor "t"
1109 borderDistance 0.0
1110 ]
1111 LabelGraphics
1112 [
1113 text "
1114 "
1115 fontSize 14
1116 fontName "Consolas"
1117 alignment "left"
1118 anchor "tl"
1119 borderDistance 6
1120 ]
1121 ]
1122
1123 node
1124 [
1125 id 6
1126 graphics
1127 [
1128 w 33.0
1129 h 26
1130 type "rectangle"
1131 fill "#FFFFFF"
1132 fill2 "#FFFFFF"
1133 outline "#000000"
1134 ]
1135 LabelGraphics
1136 [
1137 text ""A""
1138 outline "#000000"
1139 fill "#FFFFFF"
1140 fontSize 16
1141 fontName "Monospace"
1142 autoSizePolicy "node_width"
1143 anchor "t"
1144 borderDistance 0.0
1145 ]
1146 LabelGraphics
1147 [
1148 text "
1149 "
1150 fontSize 14
1151 fontName "Consolas"
1152 alignment "left"
1153 anchor "tl"
1154 borderDistance 6
1155 ]
1156 ]
1157
1158 node
1159 [
1160 id 7
1161 graphics
1162 [
1163 w 33.0
1164 h 26
1165 type "rectangle"
1166 fill "#FFFFFF"
1167 fill2 "#FFFFFF"
1168 outline "#000000"
1169 ]
1170 LabelGraphics
1171 [
1172 text ""B""
1173 outline "#000000"
1174 fill "#FFFFFF"
1175 fontSize 16
1176 fontName "Monospace"
1177 autoSizePolicy "node_width"
1178 anchor "t"
1179 borderDistance 0.0
1180 ]
1181 LabelGraphics
1182 [
1183 text "
1184 "
1185 fontSize 14
1186 fontName "Consolas"
1187 alignment "left"
1188 anchor "tl"
1189 borderDistance 6
1190 ]
1191 ]
1192
1193 node
1194 [
1195 id 8
1196 graphics
1197 [
1198 w 94.60000000000001
1199 h 26
1200 type "rectangle"
1201 fill "#FFFFFF"
1202 fill2 "#FFFFFF"
1203 outline "#000000"
1204 ]
1205 LabelGraphics
1206 [
1207 text ""nsPrefix""
1208 outline "#000000"
1209 fill "#FFFFFF"
1210 fontSize 16
1211 fontName "Monospace"
1212 autoSizePolicy "node_width"
1213 anchor "t"
1214 borderDistance 0.0
1215 ]
1216 LabelGraphics
1217 [
1218 text "
1219 "
1220 fontSize 14
1221 fontName "Consolas"
1222 alignment "left"
1223 anchor "tl"
1224 borderDistance 6
1225 ]
1226 ]
1227
1228 node
1229 [
1230 id 9
1231 graphics
1232 [
1233 w 68.2
1234 h 26
1235 type "rectangle"
1236 fill "#FFFFFF"
1237 fill2 "#FFFFFF"
1238 outline "#000000"
1239 ]
1240 LabelGraphics
1241 [
1242 text ""nsUri""
1243 outline "#000000"
1244 fill "#FFFFFF"
1245 fontSize 16
1246 fontName "Monospace"
1247 autoSizePolicy "node_width"
1248 anchor "t"
1249 borderDistance 0.0
1250 ]
1251 LabelGraphics
1252 [
1253 text "
1254 "
1255 fontSize 14
1256 fontName "Consolas"
1257 alignment "left"
1258 anchor "tl"
1259 borderDistance 6
1260 ]
1261 ]
1262
1263 node
1264 [
1265 id 10
1266 graphics
1267 [
1268 w 121.00000000000001
1269 h 26
1270 type "rectangle"
1271 fill "#FFFFFF"
1272 fill2 "#FFFFFF"
1273 outline "#000000"
1274 ]
1275 LabelGraphics
1276 [
1277 text ""packageName""
1278 outline "#000000"
1279 fill "#FFFFFF"
1280 fontSize 16
1281 fontName "Monospace"
1282 autoSizePolicy "node_width"
1283 anchor "t"
1284 borderDistance 0.0
1285 ]
1286 LabelGraphics
1287 [
1288 text "
1289 "
1290 fontSize 14
1291 fontName "Consolas"
1292 alignment "left"
1293 anchor "tl"
1294 borderDistance 6
1295 ]
1296 ]
1297
1298 node
1299 [
1300 id 11
1301 graphics
1302 [
1303 w 269.5
1304 h 124
1305 type "rectangle"
1306 fill "#FFFFFF"
1307 fill2 "#FFFFFF"
1308 outline "#000000"
1309 ]
1310 LabelGraphics
1311 [
1312 text "null"
1313 outline "#000000"
1314 fill "#FFFFFF"
1315 fontSize 16
1316 fontName "Monospace"
1317 autoSizePolicy "node_width"
1318 anchor "t"
1319 borderDistance 0.0
1320 ]
1321 LabelGraphics
1322 [
1323 text "
1324 EClassifier class
1325 EDataType class
1326 EEnum class
1327 EModelElement class
1328 ENamedElement class
1329 EModelElement class UndefinedPart
1330 ENamedElement class UndefinedPart
1331 "
1332 fontSize 14
1333 fontName "Consolas"
1334 alignment "left"
1335 anchor "tl"
1336 borderDistance 6
1337 ]
1338 ]
1339
1340 node
1341 [
1342 id 12
1343 graphics
1344 [
1345 w 269.5
1346 h 124
1347 type "rectangle"
1348 fill "#FFFFFF"
1349 fill2 "#FFFFFF"
1350 outline "#000000"
1351 ]
1352 LabelGraphics
1353 [
1354 text "null"
1355 outline "#000000"
1356 fill "#FFFFFF"
1357 fontSize 16
1358 fontName "Monospace"
1359 autoSizePolicy "node_width"
1360 anchor "t"
1361 borderDistance 0.0
1362 ]
1363 LabelGraphics
1364 [
1365 text "
1366 EClassifier class
1367 EDataType class
1368 EEnum class
1369 EModelElement class
1370 ENamedElement class
1371 EModelElement class UndefinedPart
1372 ENamedElement class UndefinedPart
1373 "
1374 fontSize 14
1375 fontName "Consolas"
1376 alignment "left"
1377 anchor "tl"
1378 borderDistance 6
1379 ]
1380 ]
1381
1382 node
1383 [
1384 id 13
1385 graphics
1386 [
1387 w 269.5
1388 h 110
1389 type "rectangle"
1390 fill "#FFFFFF"
1391 fill2 "#FFFFFF"
1392 outline "#000000"
1393 ]
1394 LabelGraphics
1395 [
1396 text "null"
1397 outline "#000000"
1398 fill "#FFFFFF"
1399 fontSize 16
1400 fontName "Monospace"
1401 autoSizePolicy "node_width"
1402 anchor "t"
1403 borderDistance 0.0
1404 ]
1405 LabelGraphics
1406 [
1407 text "
1408 EModelElement class
1409 ENamedElement class
1410 EPackage class
1411 EModelElement class UndefinedPart
1412 ENamedElement class UndefinedPart
1413 EPackage class UndefinedPart
1414 "
1415 fontSize 14
1416 fontName "Consolas"
1417 alignment "left"
1418 anchor "tl"
1419 borderDistance 6
1420 ]
1421 ]
1422
1423 node
1424 [
1425 id 14
1426 graphics
1427 [
1428 w 269.5
1429 h 124
1430 type "rectangle"
1431 fill "#FFFFFF"
1432 fill2 "#FFFFFF"
1433 outline "#000000"
1434 ]
1435 LabelGraphics
1436 [
1437 text "null"
1438 outline "#000000"
1439 fill "#FFFFFF"
1440 fontSize 16
1441 fontName "Monospace"
1442 autoSizePolicy "node_width"
1443 anchor "t"
1444 borderDistance 0.0
1445 ]
1446 LabelGraphics
1447 [
1448 text "
1449 EClassifier class
1450 EDataType class
1451 EEnum class
1452 EModelElement class
1453 ENamedElement class
1454 EModelElement class UndefinedPart
1455 ENamedElement class UndefinedPart
1456 "
1457 fontSize 14
1458 fontName "Consolas"
1459 alignment "left"
1460 anchor "tl"
1461 borderDistance 6
1462 ]
1463 ]
1464
1465 node
1466 [
1467 id 15
1468 graphics
1469 [
1470 w 269.5
1471 h 124
1472 type "rectangle"
1473 fill "#FFFFFF"
1474 fill2 "#FFFFFF"
1475 outline "#000000"
1476 ]
1477 LabelGraphics
1478 [
1479 text "null"
1480 outline "#000000"
1481 fill "#FFFFFF"
1482 fontSize 16
1483 fontName "Monospace"
1484 autoSizePolicy "node_width"
1485 anchor "t"
1486 borderDistance 0.0
1487 ]
1488 LabelGraphics
1489 [
1490 text "
1491 EClassifier class
1492 EDataType class
1493 EEnum class
1494 EModelElement class
1495 ENamedElement class
1496 EModelElement class UndefinedPart
1497 ENamedElement class UndefinedPart
1498 "
1499 fontSize 14
1500 fontName "Consolas"
1501 alignment "left"
1502 anchor "tl"
1503 borderDistance 6
1504 ]
1505 ]
1506
1507 node
1508 [
1509 id 16
1510 graphics
1511 [
1512 w 112.2
1513 h 26
1514 type "rectangle"
1515 fill "#FFFFFF"
1516 fill2 "#FFFFFF"
1517 outline "#000000"
1518 ]
1519 LabelGraphics
1520 [
1521 text "New Integers"
1522 outline "#000000"
1523 fill "#FFFFFF"
1524 fontSize 16
1525 fontName "Monospace"
1526 autoSizePolicy "node_width"
1527 anchor "t"
1528 borderDistance 0.0
1529 ]
1530 LabelGraphics
1531 [
1532 text "
1533 "
1534 fontSize 14
1535 fontName "Consolas"
1536 alignment "left"
1537 anchor "tl"
1538 borderDistance 6
1539 ]
1540 ]
1541
1542 node
1543 [
1544 id 17
1545 graphics
1546 [
1547 w 85.80000000000001
1548 h 26
1549 type "rectangle"
1550 fill "#FFFFFF"
1551 fill2 "#FFFFFF"
1552 outline "#000000"
1553 ]
1554 LabelGraphics
1555 [
1556 text "New Reals"
1557 outline "#000000"
1558 fill "#FFFFFF"
1559 fontSize 16
1560 fontName "Monospace"
1561 autoSizePolicy "node_width"
1562 anchor "t"
1563 borderDistance 0.0
1564 ]
1565 LabelGraphics
1566 [
1567 text "
1568 "
1569 fontSize 14
1570 fontName "Consolas"
1571 alignment "left"
1572 anchor "tl"
1573 borderDistance 6
1574 ]
1575 ]
1576
1577 node
1578 [
1579 id 18
1580 graphics
1581 [
1582 w 103.4
1583 h 26
1584 type "rectangle"
1585 fill "#FFFFFF"
1586 fill2 "#FFFFFF"
1587 outline "#000000"
1588 ]
1589 LabelGraphics
1590 [
1591 text "New Strings"
1592 outline "#000000"
1593 fill "#FFFFFF"
1594 fontSize 16
1595 fontName "Monospace"
1596 autoSizePolicy "node_width"
1597 anchor "t"
1598 borderDistance 0.0
1599 ]
1600 LabelGraphics
1601 [
1602 text "
1603 "
1604 fontSize 14
1605 fontName "Consolas"
1606 alignment "left"
1607 anchor "tl"
1608 borderDistance 6
1609 ]
1610 ]
1611
1612 node
1613 [
1614 id 19
1615 graphics
1616 [
1617 w 103.4
1618 h 26
1619 type "rectangle"
1620 fill "#FFFFFF"
1621 fill2 "#FFFFFF"
1622 outline "#000000"
1623 ]
1624 LabelGraphics
1625 [
1626 text "New Objects"
1627 outline "#000000"
1628 fill "#FFFFFF"
1629 fontSize 16
1630 fontName "Monospace"
1631 autoSizePolicy "node_width"
1632 anchor "t"
1633 borderDistance 0.0
1634 ]
1635 LabelGraphics
1636 [
1637 text "
1638 "
1639 fontSize 14
1640 fontName "Consolas"
1641 alignment "left"
1642 anchor "tl"
1643 borderDistance 6
1644 ]
1645 ]
1646 edge
1647 [
1648 source 11
1649 target 0
1650 graphics
1651 [
1652 fill "#000000"
1653 targetArrow "standard"
1654 ]
1655 LabelGraphics
1656 [
1657 text "ePackage reference EClassifier"
1658 fontSize 14
1659 fontName "Consolas"
1660 configuration "AutoFlippingLabel"
1661 model "six_pos"
1662 position "thead"
1663 ]
1664 ]
1665 edge
1666 [
1667 source 12
1668 target 0
1669 graphics
1670 [
1671 fill "#000000"
1672 targetArrow "standard"
1673 ]
1674 LabelGraphics
1675 [
1676 text "ePackage reference EClassifier"
1677 fontSize 14
1678 fontName "Consolas"
1679 configuration "AutoFlippingLabel"
1680 model "six_pos"
1681 position "thead"
1682 ]
1683 ]
1684 edge
1685 [
1686 source 14
1687 target 0
1688 graphics
1689 [
1690 fill "#000000"
1691 targetArrow "standard"
1692 ]
1693 LabelGraphics
1694 [
1695 text "ePackage reference EClassifier"
1696 fontSize 14
1697 fontName "Consolas"
1698 configuration "AutoFlippingLabel"
1699 model "six_pos"
1700 position "thead"
1701 ]
1702 ]
1703 edge
1704 [
1705 source 15
1706 target 13
1707 graphics
1708 [
1709 fill "#000000"
1710 targetArrow "standard"
1711 ]
1712 LabelGraphics
1713 [
1714 text "ePackage reference EClassifier"
1715 fontSize 14
1716 fontName "Consolas"
1717 configuration "AutoFlippingLabel"
1718 model "six_pos"
1719 position "thead"
1720 ]
1721 ]
1722 edge
1723 [
1724 source 0
1725 target 11
1726 graphics
1727 [
1728 fill "#000000"
1729 width 3
1730 targetArrow "standard"
1731 ]
1732 LabelGraphics
1733 [
1734 text "eClassifiers reference EPackage"
1735 fontSize 14
1736 fontName "Consolas"
1737 configuration "AutoFlippingLabel"
1738 model "six_pos"
1739 position "thead"
1740 ]
1741 ]
1742 edge
1743 [
1744 source 0
1745 target 12
1746 graphics
1747 [
1748 fill "#000000"
1749 width 3
1750 targetArrow "standard"
1751 ]
1752 LabelGraphics
1753 [
1754 text "eClassifiers reference EPackage"
1755 fontSize 14
1756 fontName "Consolas"
1757 configuration "AutoFlippingLabel"
1758 model "six_pos"
1759 position "thead"
1760 ]
1761 ]
1762 edge
1763 [
1764 source 0
1765 target 14
1766 graphics
1767 [
1768 fill "#000000"
1769 width 3
1770 targetArrow "standard"
1771 ]
1772 LabelGraphics
1773 [
1774 text "eClassifiers reference EPackage"
1775 fontSize 14
1776 fontName "Consolas"
1777 configuration "AutoFlippingLabel"
1778 model "six_pos"
1779 position "thead"
1780 ]
1781 ]
1782 edge
1783 [
1784 source 13
1785 target 15
1786 graphics
1787 [
1788 fill "#000000"
1789 width 3
1790 targetArrow "standard"
1791 ]
1792 LabelGraphics
1793 [
1794 text "eClassifiers reference EPackage"
1795 fontSize 14
1796 fontName "Consolas"
1797 configuration "AutoFlippingLabel"
1798 model "six_pos"
1799 position "thead"
1800 ]
1801 ]
1802 edge
1803 [
1804 source 0
1805 target 13
1806 graphics
1807 [
1808 fill "#000000"
1809 width 3
1810 targetArrow "standard"
1811 ]
1812 LabelGraphics
1813 [
1814 text "eSubpackages reference EPackage"
1815 fontSize 14
1816 fontName "Consolas"
1817 configuration "AutoFlippingLabel"
1818 model "six_pos"
1819 position "thead"
1820 ]
1821 ]
1822 edge
1823 [
1824 source 13
1825 target 0
1826 graphics
1827 [
1828 fill "#000000"
1829 targetArrow "standard"
1830 ]
1831 LabelGraphics
1832 [
1833 text "eSuperPackage reference EPackage"
1834 fontSize 14
1835 fontName "Consolas"
1836 configuration "AutoFlippingLabel"
1837 model "six_pos"
1838 position "thead"
1839 ]
1840 ]
1841 edge
1842 [
1843 source 12
1844 target 8
1845 graphics
1846 [
1847 fill "#000000"
1848 targetArrow "standard"
1849 ]
1850 LabelGraphics
1851 [
1852 text "instanceClassName attribute EClassifier"
1853 fontSize 14
1854 fontName "Consolas"
1855 configuration "AutoFlippingLabel"
1856 model "six_pos"
1857 position "thead"
1858 ]
1859 ]
1860 edge
1861 [
1862 source 11
1863 target 6
1864 graphics
1865 [
1866 fill "#000000"
1867 targetArrow "standard"
1868 ]
1869 LabelGraphics
1870 [
1871 text "instanceClassName attribute EClassifier"
1872 fontSize 14
1873 fontName "Consolas"
1874 configuration "AutoFlippingLabel"
1875 model "six_pos"
1876 position "thead"
1877 ]
1878 ]
1879 edge
1880 [
1881 source 11
1882 target 10
1883 graphics
1884 [
1885 fill "#000000"
1886 targetArrow "standard"
1887 ]
1888 LabelGraphics
1889 [
1890 text "instanceTypeName attribute EClassifier"
1891 fontSize 14
1892 fontName "Consolas"
1893 configuration "AutoFlippingLabel"
1894 model "six_pos"
1895 position "thead"
1896 ]
1897 ]
1898 edge
1899 [
1900 source 12
1901 target 8
1902 graphics
1903 [
1904 fill "#000000"
1905 targetArrow "standard"
1906 ]
1907 LabelGraphics
1908 [
1909 text "instanceTypeName attribute EClassifier"
1910 fontSize 14
1911 fontName "Consolas"
1912 configuration "AutoFlippingLabel"
1913 model "six_pos"
1914 position "thead"
1915 ]
1916 ]
1917 edge
1918 [
1919 source 0
1920 target 10
1921 graphics
1922 [
1923 fill "#000000"
1924 targetArrow "standard"
1925 ]
1926 LabelGraphics
1927 [
1928 text "name attribute ENamedElement"
1929 fontSize 14
1930 fontName "Consolas"
1931 configuration "AutoFlippingLabel"
1932 model "six_pos"
1933 position "thead"
1934 ]
1935 ]
1936 edge
1937 [
1938 source 12
1939 target 10
1940 graphics
1941 [
1942 fill "#000000"
1943 targetArrow "standard"
1944 ]
1945 LabelGraphics
1946 [
1947 text "name attribute ENamedElement"
1948 fontSize 14
1949 fontName "Consolas"
1950 configuration "AutoFlippingLabel"
1951 model "six_pos"
1952 position "thead"
1953 ]
1954 ]
1955 edge
1956 [
1957 source 11
1958 target 10
1959 graphics
1960 [
1961 fill "#000000"
1962 targetArrow "standard"
1963 ]
1964 LabelGraphics
1965 [
1966 text "name attribute ENamedElement"
1967 fontSize 14
1968 fontName "Consolas"
1969 configuration "AutoFlippingLabel"
1970 model "six_pos"
1971 position "thead"
1972 ]
1973 ]
1974 edge
1975 [
1976 source 13
1977 target 6
1978 graphics
1979 [
1980 fill "#000000"
1981 targetArrow "standard"
1982 ]
1983 LabelGraphics
1984 [
1985 text "name attribute ENamedElement"
1986 fontSize 14
1987 fontName "Consolas"
1988 configuration "AutoFlippingLabel"
1989 model "six_pos"
1990 position "thead"
1991 ]
1992 ]
1993 edge
1994 [
1995 source 0
1996 target 9
1997 graphics
1998 [
1999 fill "#000000"
2000 targetArrow "standard"
2001 ]
2002 LabelGraphics
2003 [
2004 text "nsURI attribute EPackage"
2005 fontSize 14
2006 fontName "Consolas"
2007 configuration "AutoFlippingLabel"
2008 model "six_pos"
2009 position "thead"
2010 ]
2011 ]
2012 edge
2013 [
2014 source 13
2015 target 8
2016 graphics
2017 [
2018 fill "#000000"
2019 targetArrow "standard"
2020 ]
2021 LabelGraphics
2022 [
2023 text "nsURI attribute EPackage"
2024 fontSize 14
2025 fontName "Consolas"
2026 configuration "AutoFlippingLabel"
2027 model "six_pos"
2028 position "thead"
2029 ]
2030 ]
2031 edge
2032 [
2033 source 0
2034 target 8
2035 graphics
2036 [
2037 fill "#000000"
2038 targetArrow "standard"
2039 ]
2040 LabelGraphics
2041 [
2042 text "nsPrefix attribute EPackage"
2043 fontSize 14
2044 fontName "Consolas"
2045 configuration "AutoFlippingLabel"
2046 model "six_pos"
2047 position "thead"
2048 ]
2049 ]
2050 edge
2051 [
2052 source 13
2053 target 6
2054 graphics
2055 [
2056 fill "#000000"
2057 targetArrow "standard"
2058 ]
2059 LabelGraphics
2060 [
2061 text "nsPrefix attribute EPackage"
2062 fontSize 14
2063 fontName "Consolas"
2064 configuration "AutoFlippingLabel"
2065 model "six_pos"
2066 position "thead"
2067 ]
2068 ]
2069]
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/3.png b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/3.png
new file mode 100644
index 00000000..afaa28c2
--- /dev/null
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/3.png
Binary files differ
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/3.xmi b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/3.xmi
new file mode 100644
index 00000000..ef8e8e65
--- /dev/null
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/3.xmi
@@ -0,0 +1,9 @@
1<?xml version="1.0" encoding="ASCII"?>
2<ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="packageName" nsURI="nsUri" nsPrefix="nsPrefix">
3 <eClassifiers xsi:type="ecore:EEnum" name="packageName" instanceClassName="A"/>
4 <eClassifiers xsi:type="ecore:EEnum"/>
5 <eClassifiers xsi:type="ecore:EEnum" name="packageName" instanceClassName="nsPrefix"/>
6 <eSubpackages name="A" nsURI="nsPrefix" nsPrefix="A">
7 <eClassifiers xsi:type="ecore:EEnum"/>
8 </eSubpackages>
9</ecore:EPackage>
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/4.gml b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/4.gml
new file mode 100644
index 00000000..d61b14d0
--- /dev/null
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/4.gml
@@ -0,0 +1,1184 @@
1graph
2[
3 node
4 [
5 id 0
6 graphics
7 [
8 w 254.10000000000002
9 h 110
10 type "rectangle"
11 fill "#FFFFFF"
12 fill2 "#FFFFFF"
13 outline "#000000"
14 ]
15 LabelGraphics
16 [
17 text "o 1"
18 outline "#000000"
19 fill "#FFFFFF"
20 fontSize 16
21 fontName "Monospace"
22 autoSizePolicy "node_width"
23 anchor "t"
24 borderDistance 0.0
25 ]
26 LabelGraphics
27 [
28 text "
29 EModelElement class DefinedPart
30 ENamedElement class DefinedPart
31 EPackage class DefinedPart
32 EModelElement class
33 ENamedElement class
34 EPackage class
35 "
36 fontSize 14
37 fontName "Consolas"
38 alignment "left"
39 anchor "tl"
40 borderDistance 6
41 ]
42 ]
43
44 node
45 [
46 id 1
47 graphics
48 [
49 w 41.800000000000004
50 h 26
51 type "rectangle"
52 fill "#FFFFFF"
53 fill2 "#FFFFFF"
54 outline "#000000"
55 ]
56 LabelGraphics
57 [
58 text "true"
59 outline "#000000"
60 fill "#FFFFFF"
61 fontSize 16
62 fontName "Monospace"
63 autoSizePolicy "node_width"
64 anchor "t"
65 borderDistance 0.0
66 ]
67 LabelGraphics
68 [
69 text "
70 "
71 fontSize 14
72 fontName "Consolas"
73 alignment "left"
74 anchor "tl"
75 borderDistance 6
76 ]
77 ]
78
79 node
80 [
81 id 2
82 graphics
83 [
84 w 50.6
85 h 26
86 type "rectangle"
87 fill "#FFFFFF"
88 fill2 "#FFFFFF"
89 outline "#000000"
90 ]
91 LabelGraphics
92 [
93 text "false"
94 outline "#000000"
95 fill "#FFFFFF"
96 fontSize 16
97 fontName "Monospace"
98 autoSizePolicy "node_width"
99 anchor "t"
100 borderDistance 0.0
101 ]
102 LabelGraphics
103 [
104 text "
105 "
106 fontSize 14
107 fontName "Consolas"
108 alignment "left"
109 anchor "tl"
110 borderDistance 6
111 ]
112 ]
113
114 node
115 [
116 id 3
117 graphics
118 [
119 w 24.200000000000003
120 h 26
121 type "rectangle"
122 fill "#FFFFFF"
123 fill2 "#FFFFFF"
124 outline "#000000"
125 ]
126 LabelGraphics
127 [
128 text "-1"
129 outline "#000000"
130 fill "#FFFFFF"
131 fontSize 16
132 fontName "Monospace"
133 autoSizePolicy "node_width"
134 anchor "t"
135 borderDistance 0.0
136 ]
137 LabelGraphics
138 [
139 text "
140 "
141 fontSize 14
142 fontName "Consolas"
143 alignment "left"
144 anchor "tl"
145 borderDistance 6
146 ]
147 ]
148
149 node
150 [
151 id 4
152 graphics
153 [
154 w 15.400000000000002
155 h 26
156 type "rectangle"
157 fill "#FFFFFF"
158 fill2 "#FFFFFF"
159 outline "#000000"
160 ]
161 LabelGraphics
162 [
163 text "0"
164 outline "#000000"
165 fill "#FFFFFF"
166 fontSize 16
167 fontName "Monospace"
168 autoSizePolicy "node_width"
169 anchor "t"
170 borderDistance 0.0
171 ]
172 LabelGraphics
173 [
174 text "
175 "
176 fontSize 14
177 fontName "Consolas"
178 alignment "left"
179 anchor "tl"
180 borderDistance 6
181 ]
182 ]
183
184 node
185 [
186 id 5
187 graphics
188 [
189 w 15.400000000000002
190 h 26
191 type "rectangle"
192 fill "#FFFFFF"
193 fill2 "#FFFFFF"
194 outline "#000000"
195 ]
196 LabelGraphics
197 [
198 text "1"
199 outline "#000000"
200 fill "#FFFFFF"
201 fontSize 16
202 fontName "Monospace"
203 autoSizePolicy "node_width"
204 anchor "t"
205 borderDistance 0.0
206 ]
207 LabelGraphics
208 [
209 text "
210 "
211 fontSize 14
212 fontName "Consolas"
213 alignment "left"
214 anchor "tl"
215 borderDistance 6
216 ]
217 ]
218
219 node
220 [
221 id 6
222 graphics
223 [
224 w 33.0
225 h 26
226 type "rectangle"
227 fill "#FFFFFF"
228 fill2 "#FFFFFF"
229 outline "#000000"
230 ]
231 LabelGraphics
232 [
233 text ""A""
234 outline "#000000"
235 fill "#FFFFFF"
236 fontSize 16
237 fontName "Monospace"
238 autoSizePolicy "node_width"
239 anchor "t"
240 borderDistance 0.0
241 ]
242 LabelGraphics
243 [
244 text "
245 "
246 fontSize 14
247 fontName "Consolas"
248 alignment "left"
249 anchor "tl"
250 borderDistance 6
251 ]
252 ]
253
254 node
255 [
256 id 7
257 graphics
258 [
259 w 33.0
260 h 26
261 type "rectangle"
262 fill "#FFFFFF"
263 fill2 "#FFFFFF"
264 outline "#000000"
265 ]
266 LabelGraphics
267 [
268 text ""B""
269 outline "#000000"
270 fill "#FFFFFF"
271 fontSize 16
272 fontName "Monospace"
273 autoSizePolicy "node_width"
274 anchor "t"
275 borderDistance 0.0
276 ]
277 LabelGraphics
278 [
279 text "
280 "
281 fontSize 14
282 fontName "Consolas"
283 alignment "left"
284 anchor "tl"
285 borderDistance 6
286 ]
287 ]
288
289 node
290 [
291 id 8
292 graphics
293 [
294 w 94.60000000000001
295 h 26
296 type "rectangle"
297 fill "#FFFFFF"
298 fill2 "#FFFFFF"
299 outline "#000000"
300 ]
301 LabelGraphics
302 [
303 text ""nsPrefix""
304 outline "#000000"
305 fill "#FFFFFF"
306 fontSize 16
307 fontName "Monospace"
308 autoSizePolicy "node_width"
309 anchor "t"
310 borderDistance 0.0
311 ]
312 LabelGraphics
313 [
314 text "
315 "
316 fontSize 14
317 fontName "Consolas"
318 alignment "left"
319 anchor "tl"
320 borderDistance 6
321 ]
322 ]
323
324 node
325 [
326 id 9
327 graphics
328 [
329 w 68.2
330 h 26
331 type "rectangle"
332 fill "#FFFFFF"
333 fill2 "#FFFFFF"
334 outline "#000000"
335 ]
336 LabelGraphics
337 [
338 text ""nsUri""
339 outline "#000000"
340 fill "#FFFFFF"
341 fontSize 16
342 fontName "Monospace"
343 autoSizePolicy "node_width"
344 anchor "t"
345 borderDistance 0.0
346 ]
347 LabelGraphics
348 [
349 text "
350 "
351 fontSize 14
352 fontName "Consolas"
353 alignment "left"
354 anchor "tl"
355 borderDistance 6
356 ]
357 ]
358
359 node
360 [
361 id 10
362 graphics
363 [
364 w 121.00000000000001
365 h 26
366 type "rectangle"
367 fill "#FFFFFF"
368 fill2 "#FFFFFF"
369 outline "#000000"
370 ]
371 LabelGraphics
372 [
373 text ""packageName""
374 outline "#000000"
375 fill "#FFFFFF"
376 fontSize 16
377 fontName "Monospace"
378 autoSizePolicy "node_width"
379 anchor "t"
380 borderDistance 0.0
381 ]
382 LabelGraphics
383 [
384 text "
385 "
386 fontSize 14
387 fontName "Consolas"
388 alignment "left"
389 anchor "tl"
390 borderDistance 6
391 ]
392 ]
393
394 node
395 [
396 id 11
397 graphics
398 [
399 w 269.5
400 h 124
401 type "rectangle"
402 fill "#FFFFFF"
403 fill2 "#FFFFFF"
404 outline "#000000"
405 ]
406 LabelGraphics
407 [
408 text "null"
409 outline "#000000"
410 fill "#FFFFFF"
411 fontSize 16
412 fontName "Monospace"
413 autoSizePolicy "node_width"
414 anchor "t"
415 borderDistance 0.0
416 ]
417 LabelGraphics
418 [
419 text "
420 EClassifier class
421 EDataType class
422 EEnum class
423 EModelElement class
424 ENamedElement class
425 EModelElement class UndefinedPart
426 ENamedElement class UndefinedPart
427 "
428 fontSize 14
429 fontName "Consolas"
430 alignment "left"
431 anchor "tl"
432 borderDistance 6
433 ]
434 ]
435
436 node
437 [
438 id 12
439 graphics
440 [
441 w 269.5
442 h 124
443 type "rectangle"
444 fill "#FFFFFF"
445 fill2 "#FFFFFF"
446 outline "#000000"
447 ]
448 LabelGraphics
449 [
450 text "null"
451 outline "#000000"
452 fill "#FFFFFF"
453 fontSize 16
454 fontName "Monospace"
455 autoSizePolicy "node_width"
456 anchor "t"
457 borderDistance 0.0
458 ]
459 LabelGraphics
460 [
461 text "
462 EClassifier class
463 EDataType class
464 EEnum class
465 EModelElement class
466 ENamedElement class
467 EModelElement class UndefinedPart
468 ENamedElement class UndefinedPart
469 "
470 fontSize 14
471 fontName "Consolas"
472 alignment "left"
473 anchor "tl"
474 borderDistance 6
475 ]
476 ]
477
478 node
479 [
480 id 13
481 graphics
482 [
483 w 269.5
484 h 110
485 type "rectangle"
486 fill "#FFFFFF"
487 fill2 "#FFFFFF"
488 outline "#000000"
489 ]
490 LabelGraphics
491 [
492 text "null"
493 outline "#000000"
494 fill "#FFFFFF"
495 fontSize 16
496 fontName "Monospace"
497 autoSizePolicy "node_width"
498 anchor "t"
499 borderDistance 0.0
500 ]
501 LabelGraphics
502 [
503 text "
504 EModelElement class
505 ENamedElement class
506 EPackage class
507 EModelElement class UndefinedPart
508 ENamedElement class UndefinedPart
509 EPackage class UndefinedPart
510 "
511 fontSize 14
512 fontName "Consolas"
513 alignment "left"
514 anchor "tl"
515 borderDistance 6
516 ]
517 ]
518
519 node
520 [
521 id 14
522 graphics
523 [
524 w 269.5
525 h 124
526 type "rectangle"
527 fill "#FFFFFF"
528 fill2 "#FFFFFF"
529 outline "#000000"
530 ]
531 LabelGraphics
532 [
533 text "null"
534 outline "#000000"
535 fill "#FFFFFF"
536 fontSize 16
537 fontName "Monospace"
538 autoSizePolicy "node_width"
539 anchor "t"
540 borderDistance 0.0
541 ]
542 LabelGraphics
543 [
544 text "
545 EClassifier class
546 EDataType class
547 EEnum class
548 EModelElement class
549 ENamedElement class
550 EModelElement class UndefinedPart
551 ENamedElement class UndefinedPart
552 "
553 fontSize 14
554 fontName "Consolas"
555 alignment "left"
556 anchor "tl"
557 borderDistance 6
558 ]
559 ]
560
561 node
562 [
563 id 15
564 graphics
565 [
566 w 269.5
567 h 124
568 type "rectangle"
569 fill "#FFFFFF"
570 fill2 "#FFFFFF"
571 outline "#000000"
572 ]
573 LabelGraphics
574 [
575 text "null"
576 outline "#000000"
577 fill "#FFFFFF"
578 fontSize 16
579 fontName "Monospace"
580 autoSizePolicy "node_width"
581 anchor "t"
582 borderDistance 0.0
583 ]
584 LabelGraphics
585 [
586 text "
587 EClassifier class
588 EDataType class
589 EEnum class
590 EModelElement class
591 ENamedElement class
592 EModelElement class UndefinedPart
593 ENamedElement class UndefinedPart
594 "
595 fontSize 14
596 fontName "Consolas"
597 alignment "left"
598 anchor "tl"
599 borderDistance 6
600 ]
601 ]
602
603 node
604 [
605 id 16
606 graphics
607 [
608 w 112.2
609 h 26
610 type "rectangle"
611 fill "#FFFFFF"
612 fill2 "#FFFFFF"
613 outline "#000000"
614 ]
615 LabelGraphics
616 [
617 text "New Integers"
618 outline "#000000"
619 fill "#FFFFFF"
620 fontSize 16
621 fontName "Monospace"
622 autoSizePolicy "node_width"
623 anchor "t"
624 borderDistance 0.0
625 ]
626 LabelGraphics
627 [
628 text "
629 "
630 fontSize 14
631 fontName "Consolas"
632 alignment "left"
633 anchor "tl"
634 borderDistance 6
635 ]
636 ]
637
638 node
639 [
640 id 17
641 graphics
642 [
643 w 85.80000000000001
644 h 26
645 type "rectangle"
646 fill "#FFFFFF"
647 fill2 "#FFFFFF"
648 outline "#000000"
649 ]
650 LabelGraphics
651 [
652 text "New Reals"
653 outline "#000000"
654 fill "#FFFFFF"
655 fontSize 16
656 fontName "Monospace"
657 autoSizePolicy "node_width"
658 anchor "t"
659 borderDistance 0.0
660 ]
661 LabelGraphics
662 [
663 text "
664 "
665 fontSize 14
666 fontName "Consolas"
667 alignment "left"
668 anchor "tl"
669 borderDistance 6
670 ]
671 ]
672
673 node
674 [
675 id 18
676 graphics
677 [
678 w 103.4
679 h 26
680 type "rectangle"
681 fill "#FFFFFF"
682 fill2 "#FFFFFF"
683 outline "#000000"
684 ]
685 LabelGraphics
686 [
687 text "New Strings"
688 outline "#000000"
689 fill "#FFFFFF"
690 fontSize 16
691 fontName "Monospace"
692 autoSizePolicy "node_width"
693 anchor "t"
694 borderDistance 0.0
695 ]
696 LabelGraphics
697 [
698 text "
699 "
700 fontSize 14
701 fontName "Consolas"
702 alignment "left"
703 anchor "tl"
704 borderDistance 6
705 ]
706 ]
707
708 node
709 [
710 id 19
711 graphics
712 [
713 w 103.4
714 h 26
715 type "rectangle"
716 fill "#FFFFFF"
717 fill2 "#FFFFFF"
718 outline "#000000"
719 ]
720 LabelGraphics
721 [
722 text "New Objects"
723 outline "#000000"
724 fill "#FFFFFF"
725 fontSize 16
726 fontName "Monospace"
727 autoSizePolicy "node_width"
728 anchor "t"
729 borderDistance 0.0
730 ]
731 LabelGraphics
732 [
733 text "
734 "
735 fontSize 14
736 fontName "Consolas"
737 alignment "left"
738 anchor "tl"
739 borderDistance 6
740 ]
741 ]
742 edge
743 [
744 source 11
745 target 0
746 graphics
747 [
748 fill "#000000"
749 targetArrow "standard"
750 ]
751 LabelGraphics
752 [
753 text "ePackage reference EClassifier"
754 fontSize 14
755 fontName "Consolas"
756 configuration "AutoFlippingLabel"
757 model "six_pos"
758 position "thead"
759 ]
760 ]
761 edge
762 [
763 source 12
764 target 0
765 graphics
766 [
767 fill "#000000"
768 targetArrow "standard"
769 ]
770 LabelGraphics
771 [
772 text "ePackage reference EClassifier"
773 fontSize 14
774 fontName "Consolas"
775 configuration "AutoFlippingLabel"
776 model "six_pos"
777 position "thead"
778 ]
779 ]
780 edge
781 [
782 source 14
783 target 0
784 graphics
785 [
786 fill "#000000"
787 targetArrow "standard"
788 ]
789 LabelGraphics
790 [
791 text "ePackage reference EClassifier"
792 fontSize 14
793 fontName "Consolas"
794 configuration "AutoFlippingLabel"
795 model "six_pos"
796 position "thead"
797 ]
798 ]
799 edge
800 [
801 source 15
802 target 13
803 graphics
804 [
805 fill "#000000"
806 targetArrow "standard"
807 ]
808 LabelGraphics
809 [
810 text "ePackage reference EClassifier"
811 fontSize 14
812 fontName "Consolas"
813 configuration "AutoFlippingLabel"
814 model "six_pos"
815 position "thead"
816 ]
817 ]
818 edge
819 [
820 source 0
821 target 11
822 graphics
823 [
824 fill "#000000"
825 width 3
826 targetArrow "standard"
827 ]
828 LabelGraphics
829 [
830 text "eClassifiers reference EPackage"
831 fontSize 14
832 fontName "Consolas"
833 configuration "AutoFlippingLabel"
834 model "six_pos"
835 position "thead"
836 ]
837 ]
838 edge
839 [
840 source 0
841 target 12
842 graphics
843 [
844 fill "#000000"
845 width 3
846 targetArrow "standard"
847 ]
848 LabelGraphics
849 [
850 text "eClassifiers reference EPackage"
851 fontSize 14
852 fontName "Consolas"
853 configuration "AutoFlippingLabel"
854 model "six_pos"
855 position "thead"
856 ]
857 ]
858 edge
859 [
860 source 0
861 target 14
862 graphics
863 [
864 fill "#000000"
865 width 3
866 targetArrow "standard"
867 ]
868 LabelGraphics
869 [
870 text "eClassifiers reference EPackage"
871 fontSize 14
872 fontName "Consolas"
873 configuration "AutoFlippingLabel"
874 model "six_pos"
875 position "thead"
876 ]
877 ]
878 edge
879 [
880 source 13
881 target 15
882 graphics
883 [
884 fill "#000000"
885 width 3
886 targetArrow "standard"
887 ]
888 LabelGraphics
889 [
890 text "eClassifiers reference EPackage"
891 fontSize 14
892 fontName "Consolas"
893 configuration "AutoFlippingLabel"
894 model "six_pos"
895 position "thead"
896 ]
897 ]
898 edge
899 [
900 source 0
901 target 13
902 graphics
903 [
904 fill "#000000"
905 width 3
906 targetArrow "standard"
907 ]
908 LabelGraphics
909 [
910 text "eSubpackages reference EPackage"
911 fontSize 14
912 fontName "Consolas"
913 configuration "AutoFlippingLabel"
914 model "six_pos"
915 position "thead"
916 ]
917 ]
918 edge
919 [
920 source 13
921 target 0
922 graphics
923 [
924 fill "#000000"
925 targetArrow "standard"
926 ]
927 LabelGraphics
928 [
929 text "eSuperPackage reference EPackage"
930 fontSize 14
931 fontName "Consolas"
932 configuration "AutoFlippingLabel"
933 model "six_pos"
934 position "thead"
935 ]
936 ]
937 edge
938 [
939 source 12
940 target 8
941 graphics
942 [
943 fill "#000000"
944 targetArrow "standard"
945 ]
946 LabelGraphics
947 [
948 text "instanceClassName attribute EClassifier"
949 fontSize 14
950 fontName "Consolas"
951 configuration "AutoFlippingLabel"
952 model "six_pos"
953 position "thead"
954 ]
955 ]
956 edge
957 [
958 source 11
959 target 6
960 graphics
961 [
962 fill "#000000"
963 targetArrow "standard"
964 ]
965 LabelGraphics
966 [
967 text "instanceClassName attribute EClassifier"
968 fontSize 14
969 fontName "Consolas"
970 configuration "AutoFlippingLabel"
971 model "six_pos"
972 position "thead"
973 ]
974 ]
975 edge
976 [
977 source 11
978 target 10
979 graphics
980 [
981 fill "#000000"
982 targetArrow "standard"
983 ]
984 LabelGraphics
985 [
986 text "instanceTypeName attribute EClassifier"
987 fontSize 14
988 fontName "Consolas"
989 configuration "AutoFlippingLabel"
990 model "six_pos"
991 position "thead"
992 ]
993 ]
994 edge
995 [
996 source 12
997 target 8
998 graphics
999 [
1000 fill "#000000"
1001 targetArrow "standard"
1002 ]
1003 LabelGraphics
1004 [
1005 text "instanceTypeName attribute EClassifier"
1006 fontSize 14
1007 fontName "Consolas"
1008 configuration "AutoFlippingLabel"
1009 model "six_pos"
1010 position "thead"
1011 ]
1012 ]
1013 edge
1014 [
1015 source 0
1016 target 10
1017 graphics
1018 [
1019 fill "#000000"
1020 targetArrow "standard"
1021 ]
1022 LabelGraphics
1023 [
1024 text "name attribute ENamedElement"
1025 fontSize 14
1026 fontName "Consolas"
1027 configuration "AutoFlippingLabel"
1028 model "six_pos"
1029 position "thead"
1030 ]
1031 ]
1032 edge
1033 [
1034 source 12
1035 target 10
1036 graphics
1037 [
1038 fill "#000000"
1039 targetArrow "standard"
1040 ]
1041 LabelGraphics
1042 [
1043 text "name attribute ENamedElement"
1044 fontSize 14
1045 fontName "Consolas"
1046 configuration "AutoFlippingLabel"
1047 model "six_pos"
1048 position "thead"
1049 ]
1050 ]
1051 edge
1052 [
1053 source 11
1054 target 10
1055 graphics
1056 [
1057 fill "#000000"
1058 targetArrow "standard"
1059 ]
1060 LabelGraphics
1061 [
1062 text "name attribute ENamedElement"
1063 fontSize 14
1064 fontName "Consolas"
1065 configuration "AutoFlippingLabel"
1066 model "six_pos"
1067 position "thead"
1068 ]
1069 ]
1070 edge
1071 [
1072 source 13
1073 target 6
1074 graphics
1075 [
1076 fill "#000000"
1077 targetArrow "standard"
1078 ]
1079 LabelGraphics
1080 [
1081 text "name attribute ENamedElement"
1082 fontSize 14
1083 fontName "Consolas"
1084 configuration "AutoFlippingLabel"
1085 model "six_pos"
1086 position "thead"
1087 ]
1088 ]
1089 edge
1090 [
1091 source 14
1092 target 10
1093 graphics
1094 [
1095 fill "#000000"
1096 targetArrow "standard"
1097 ]
1098 LabelGraphics
1099 [
1100 text "name attribute ENamedElement"
1101 fontSize 14
1102 fontName "Consolas"
1103 configuration "AutoFlippingLabel"
1104 model "six_pos"
1105 position "thead"
1106 ]
1107 ]
1108 edge
1109 [
1110 source 0
1111 target 9
1112 graphics
1113 [
1114 fill "#000000"
1115 targetArrow "standard"
1116 ]
1117 LabelGraphics
1118 [
1119 text "nsURI attribute EPackage"
1120 fontSize 14
1121 fontName "Consolas"
1122 configuration "AutoFlippingLabel"
1123 model "six_pos"
1124 position "thead"
1125 ]
1126 ]
1127 edge
1128 [
1129 source 13
1130 target 8
1131 graphics
1132 [
1133 fill "#000000"
1134 targetArrow "standard"
1135 ]
1136 LabelGraphics
1137 [
1138 text "nsURI attribute EPackage"
1139 fontSize 14
1140 fontName "Consolas"
1141 configuration "AutoFlippingLabel"
1142 model "six_pos"
1143 position "thead"
1144 ]
1145 ]
1146 edge
1147 [
1148 source 0
1149 target 8
1150 graphics
1151 [
1152 fill "#000000"
1153 targetArrow "standard"
1154 ]
1155 LabelGraphics
1156 [
1157 text "nsPrefix attribute EPackage"
1158 fontSize 14
1159 fontName "Consolas"
1160 configuration "AutoFlippingLabel"
1161 model "six_pos"
1162 position "thead"
1163 ]
1164 ]
1165 edge
1166 [
1167 source 13
1168 target 6
1169 graphics
1170 [
1171 fill "#000000"
1172 targetArrow "standard"
1173 ]
1174 LabelGraphics
1175 [
1176 text "nsPrefix attribute EPackage"
1177 fontSize 14
1178 fontName "Consolas"
1179 configuration "AutoFlippingLabel"
1180 model "six_pos"
1181 position "thead"
1182 ]
1183 ]
1184]
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/4.png b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/4.png
new file mode 100644
index 00000000..72ccb4b6
--- /dev/null
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/4.png
Binary files differ
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/4.xmi b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/4.xmi
new file mode 100644
index 00000000..1a10e5b6
--- /dev/null
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/4.xmi
@@ -0,0 +1,9 @@
1<?xml version="1.0" encoding="ASCII"?>
2<ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="packageName" nsURI="nsUri" nsPrefix="nsPrefix">
3 <eClassifiers xsi:type="ecore:EEnum" name="packageName" instanceClassName="A"/>
4 <eClassifiers xsi:type="ecore:EEnum" name="packageName"/>
5 <eClassifiers xsi:type="ecore:EEnum" name="packageName" instanceClassName="nsPrefix"/>
6 <eSubpackages name="A" nsURI="nsPrefix" nsPrefix="A">
7 <eClassifiers xsi:type="ecore:EEnum"/>
8 </eSubpackages>
9</ecore:EPackage>
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/5.gml b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/5.gml
new file mode 100644
index 00000000..f071f63e
--- /dev/null
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/5.gml
@@ -0,0 +1,1203 @@
1graph
2[
3 node
4 [
5 id 0
6 graphics
7 [
8 w 254.10000000000002
9 h 110
10 type "rectangle"
11 fill "#FFFFFF"
12 fill2 "#FFFFFF"
13 outline "#000000"
14 ]
15 LabelGraphics
16 [
17 text "o 1"
18 outline "#000000"
19 fill "#FFFFFF"
20 fontSize 16
21 fontName "Monospace"
22 autoSizePolicy "node_width"
23 anchor "t"
24 borderDistance 0.0
25 ]
26 LabelGraphics
27 [
28 text "
29 EModelElement class DefinedPart
30 ENamedElement class DefinedPart
31 EPackage class DefinedPart
32 EModelElement class
33 ENamedElement class
34 EPackage class
35 "
36 fontSize 14
37 fontName "Consolas"
38 alignment "left"
39 anchor "tl"
40 borderDistance 6
41 ]
42 ]
43
44 node
45 [
46 id 1
47 graphics
48 [
49 w 41.800000000000004
50 h 26
51 type "rectangle"
52 fill "#FFFFFF"
53 fill2 "#FFFFFF"
54 outline "#000000"
55 ]
56 LabelGraphics
57 [
58 text "true"
59 outline "#000000"
60 fill "#FFFFFF"
61 fontSize 16
62 fontName "Monospace"
63 autoSizePolicy "node_width"
64 anchor "t"
65 borderDistance 0.0
66 ]
67 LabelGraphics
68 [
69 text "
70 "
71 fontSize 14
72 fontName "Consolas"
73 alignment "left"
74 anchor "tl"
75 borderDistance 6
76 ]
77 ]
78
79 node
80 [
81 id 2
82 graphics
83 [
84 w 50.6
85 h 26
86 type "rectangle"
87 fill "#FFFFFF"
88 fill2 "#FFFFFF"
89 outline "#000000"
90 ]
91 LabelGraphics
92 [
93 text "false"
94 outline "#000000"
95 fill "#FFFFFF"
96 fontSize 16
97 fontName "Monospace"
98 autoSizePolicy "node_width"
99 anchor "t"
100 borderDistance 0.0
101 ]
102 LabelGraphics
103 [
104 text "
105 "
106 fontSize 14
107 fontName "Consolas"
108 alignment "left"
109 anchor "tl"
110 borderDistance 6
111 ]
112 ]
113
114 node
115 [
116 id 3
117 graphics
118 [
119 w 24.200000000000003
120 h 26
121 type "rectangle"
122 fill "#FFFFFF"
123 fill2 "#FFFFFF"
124 outline "#000000"
125 ]
126 LabelGraphics
127 [
128 text "-1"
129 outline "#000000"
130 fill "#FFFFFF"
131 fontSize 16
132 fontName "Monospace"
133 autoSizePolicy "node_width"
134 anchor "t"
135 borderDistance 0.0
136 ]
137 LabelGraphics
138 [
139 text "
140 "
141 fontSize 14
142 fontName "Consolas"
143 alignment "left"
144 anchor "tl"
145 borderDistance 6
146 ]
147 ]
148
149 node
150 [
151 id 4
152 graphics
153 [
154 w 15.400000000000002
155 h 26
156 type "rectangle"
157 fill "#FFFFFF"
158 fill2 "#FFFFFF"
159 outline "#000000"
160 ]
161 LabelGraphics
162 [
163 text "0"
164 outline "#000000"
165 fill "#FFFFFF"
166 fontSize 16
167 fontName "Monospace"
168 autoSizePolicy "node_width"
169 anchor "t"
170 borderDistance 0.0
171 ]
172 LabelGraphics
173 [
174 text "
175 "
176 fontSize 14
177 fontName "Consolas"
178 alignment "left"
179 anchor "tl"
180 borderDistance 6
181 ]
182 ]
183
184 node
185 [
186 id 5
187 graphics
188 [
189 w 15.400000000000002
190 h 26
191 type "rectangle"
192 fill "#FFFFFF"
193 fill2 "#FFFFFF"
194 outline "#000000"
195 ]
196 LabelGraphics
197 [
198 text "1"
199 outline "#000000"
200 fill "#FFFFFF"
201 fontSize 16
202 fontName "Monospace"
203 autoSizePolicy "node_width"
204 anchor "t"
205 borderDistance 0.0
206 ]
207 LabelGraphics
208 [
209 text "
210 "
211 fontSize 14
212 fontName "Consolas"
213 alignment "left"
214 anchor "tl"
215 borderDistance 6
216 ]
217 ]
218
219 node
220 [
221 id 6
222 graphics
223 [
224 w 33.0
225 h 26
226 type "rectangle"
227 fill "#FFFFFF"
228 fill2 "#FFFFFF"
229 outline "#000000"
230 ]
231 LabelGraphics
232 [
233 text ""A""
234 outline "#000000"
235 fill "#FFFFFF"
236 fontSize 16
237 fontName "Monospace"
238 autoSizePolicy "node_width"
239 anchor "t"
240 borderDistance 0.0
241 ]
242 LabelGraphics
243 [
244 text "
245 "
246 fontSize 14
247 fontName "Consolas"
248 alignment "left"
249 anchor "tl"
250 borderDistance 6
251 ]
252 ]
253
254 node
255 [
256 id 7
257 graphics
258 [
259 w 33.0
260 h 26
261 type "rectangle"
262 fill "#FFFFFF"
263 fill2 "#FFFFFF"
264 outline "#000000"
265 ]
266 LabelGraphics
267 [
268 text ""B""
269 outline "#000000"
270 fill "#FFFFFF"
271 fontSize 16
272 fontName "Monospace"
273 autoSizePolicy "node_width"
274 anchor "t"
275 borderDistance 0.0
276 ]
277 LabelGraphics
278 [
279 text "
280 "
281 fontSize 14
282 fontName "Consolas"
283 alignment "left"
284 anchor "tl"
285 borderDistance 6
286 ]
287 ]
288
289 node
290 [
291 id 8
292 graphics
293 [
294 w 94.60000000000001
295 h 26
296 type "rectangle"
297 fill "#FFFFFF"
298 fill2 "#FFFFFF"
299 outline "#000000"
300 ]
301 LabelGraphics
302 [
303 text ""nsPrefix""
304 outline "#000000"
305 fill "#FFFFFF"
306 fontSize 16
307 fontName "Monospace"
308 autoSizePolicy "node_width"
309 anchor "t"
310 borderDistance 0.0
311 ]
312 LabelGraphics
313 [
314 text "
315 "
316 fontSize 14
317 fontName "Consolas"
318 alignment "left"
319 anchor "tl"
320 borderDistance 6
321 ]
322 ]
323
324 node
325 [
326 id 9
327 graphics
328 [
329 w 68.2
330 h 26
331 type "rectangle"
332 fill "#FFFFFF"
333 fill2 "#FFFFFF"
334 outline "#000000"
335 ]
336 LabelGraphics
337 [
338 text ""nsUri""
339 outline "#000000"
340 fill "#FFFFFF"
341 fontSize 16
342 fontName "Monospace"
343 autoSizePolicy "node_width"
344 anchor "t"
345 borderDistance 0.0
346 ]
347 LabelGraphics
348 [
349 text "
350 "
351 fontSize 14
352 fontName "Consolas"
353 alignment "left"
354 anchor "tl"
355 borderDistance 6
356 ]
357 ]
358
359 node
360 [
361 id 10
362 graphics
363 [
364 w 121.00000000000001
365 h 26
366 type "rectangle"
367 fill "#FFFFFF"
368 fill2 "#FFFFFF"
369 outline "#000000"
370 ]
371 LabelGraphics
372 [
373 text ""packageName""
374 outline "#000000"
375 fill "#FFFFFF"
376 fontSize 16
377 fontName "Monospace"
378 autoSizePolicy "node_width"
379 anchor "t"
380 borderDistance 0.0
381 ]
382 LabelGraphics
383 [
384 text "
385 "
386 fontSize 14
387 fontName "Consolas"
388 alignment "left"
389 anchor "tl"
390 borderDistance 6
391 ]
392 ]
393
394 node
395 [
396 id 11
397 graphics
398 [
399 w 269.5
400 h 124
401 type "rectangle"
402 fill "#FFFFFF"
403 fill2 "#FFFFFF"
404 outline "#000000"
405 ]
406 LabelGraphics
407 [
408 text "null"
409 outline "#000000"
410 fill "#FFFFFF"
411 fontSize 16
412 fontName "Monospace"
413 autoSizePolicy "node_width"
414 anchor "t"
415 borderDistance 0.0
416 ]
417 LabelGraphics
418 [
419 text "
420 EClassifier class
421 EDataType class
422 EEnum class
423 EModelElement class
424 ENamedElement class
425 EModelElement class UndefinedPart
426 ENamedElement class UndefinedPart
427 "
428 fontSize 14
429 fontName "Consolas"
430 alignment "left"
431 anchor "tl"
432 borderDistance 6
433 ]
434 ]
435
436 node
437 [
438 id 12
439 graphics
440 [
441 w 269.5
442 h 124
443 type "rectangle"
444 fill "#FFFFFF"
445 fill2 "#FFFFFF"
446 outline "#000000"
447 ]
448 LabelGraphics
449 [
450 text "null"
451 outline "#000000"
452 fill "#FFFFFF"
453 fontSize 16
454 fontName "Monospace"
455 autoSizePolicy "node_width"
456 anchor "t"
457 borderDistance 0.0
458 ]
459 LabelGraphics
460 [
461 text "
462 EClassifier class
463 EDataType class
464 EEnum class
465 EModelElement class
466 ENamedElement class
467 EModelElement class UndefinedPart
468 ENamedElement class UndefinedPart
469 "
470 fontSize 14
471 fontName "Consolas"
472 alignment "left"
473 anchor "tl"
474 borderDistance 6
475 ]
476 ]
477
478 node
479 [
480 id 13
481 graphics
482 [
483 w 269.5
484 h 110
485 type "rectangle"
486 fill "#FFFFFF"
487 fill2 "#FFFFFF"
488 outline "#000000"
489 ]
490 LabelGraphics
491 [
492 text "null"
493 outline "#000000"
494 fill "#FFFFFF"
495 fontSize 16
496 fontName "Monospace"
497 autoSizePolicy "node_width"
498 anchor "t"
499 borderDistance 0.0
500 ]
501 LabelGraphics
502 [
503 text "
504 EModelElement class
505 ENamedElement class
506 EPackage class
507 EModelElement class UndefinedPart
508 ENamedElement class UndefinedPart
509 EPackage class UndefinedPart
510 "
511 fontSize 14
512 fontName "Consolas"
513 alignment "left"
514 anchor "tl"
515 borderDistance 6
516 ]
517 ]
518
519 node
520 [
521 id 14
522 graphics
523 [
524 w 269.5
525 h 124
526 type "rectangle"
527 fill "#FFFFFF"
528 fill2 "#FFFFFF"
529 outline "#000000"
530 ]
531 LabelGraphics
532 [
533 text "null"
534 outline "#000000"
535 fill "#FFFFFF"
536 fontSize 16
537 fontName "Monospace"
538 autoSizePolicy "node_width"
539 anchor "t"
540 borderDistance 0.0
541 ]
542 LabelGraphics
543 [
544 text "
545 EClassifier class
546 EDataType class
547 EEnum class
548 EModelElement class
549 ENamedElement class
550 EModelElement class UndefinedPart
551 ENamedElement class UndefinedPart
552 "
553 fontSize 14
554 fontName "Consolas"
555 alignment "left"
556 anchor "tl"
557 borderDistance 6
558 ]
559 ]
560
561 node
562 [
563 id 15
564 graphics
565 [
566 w 269.5
567 h 124
568 type "rectangle"
569 fill "#FFFFFF"
570 fill2 "#FFFFFF"
571 outline "#000000"
572 ]
573 LabelGraphics
574 [
575 text "null"
576 outline "#000000"
577 fill "#FFFFFF"
578 fontSize 16
579 fontName "Monospace"
580 autoSizePolicy "node_width"
581 anchor "t"
582 borderDistance 0.0
583 ]
584 LabelGraphics
585 [
586 text "
587 EClassifier class
588 EDataType class
589 EEnum class
590 EModelElement class
591 ENamedElement class
592 EModelElement class UndefinedPart
593 ENamedElement class UndefinedPart
594 "
595 fontSize 14
596 fontName "Consolas"
597 alignment "left"
598 anchor "tl"
599 borderDistance 6
600 ]
601 ]
602
603 node
604 [
605 id 16
606 graphics
607 [
608 w 112.2
609 h 26
610 type "rectangle"
611 fill "#FFFFFF"
612 fill2 "#FFFFFF"
613 outline "#000000"
614 ]
615 LabelGraphics
616 [
617 text "New Integers"
618 outline "#000000"
619 fill "#FFFFFF"
620 fontSize 16
621 fontName "Monospace"
622 autoSizePolicy "node_width"
623 anchor "t"
624 borderDistance 0.0
625 ]
626 LabelGraphics
627 [
628 text "
629 "
630 fontSize 14
631 fontName "Consolas"
632 alignment "left"
633 anchor "tl"
634 borderDistance 6
635 ]
636 ]
637
638 node
639 [
640 id 17
641 graphics
642 [
643 w 85.80000000000001
644 h 26
645 type "rectangle"
646 fill "#FFFFFF"
647 fill2 "#FFFFFF"
648 outline "#000000"
649 ]
650 LabelGraphics
651 [
652 text "New Reals"
653 outline "#000000"
654 fill "#FFFFFF"
655 fontSize 16
656 fontName "Monospace"
657 autoSizePolicy "node_width"
658 anchor "t"
659 borderDistance 0.0
660 ]
661 LabelGraphics
662 [
663 text "
664 "
665 fontSize 14
666 fontName "Consolas"
667 alignment "left"
668 anchor "tl"
669 borderDistance 6
670 ]
671 ]
672
673 node
674 [
675 id 18
676 graphics
677 [
678 w 103.4
679 h 26
680 type "rectangle"
681 fill "#FFFFFF"
682 fill2 "#FFFFFF"
683 outline "#000000"
684 ]
685 LabelGraphics
686 [
687 text "New Strings"
688 outline "#000000"
689 fill "#FFFFFF"
690 fontSize 16
691 fontName "Monospace"
692 autoSizePolicy "node_width"
693 anchor "t"
694 borderDistance 0.0
695 ]
696 LabelGraphics
697 [
698 text "
699 "
700 fontSize 14
701 fontName "Consolas"
702 alignment "left"
703 anchor "tl"
704 borderDistance 6
705 ]
706 ]
707
708 node
709 [
710 id 19
711 graphics
712 [
713 w 103.4
714 h 26
715 type "rectangle"
716 fill "#FFFFFF"
717 fill2 "#FFFFFF"
718 outline "#000000"
719 ]
720 LabelGraphics
721 [
722 text "New Objects"
723 outline "#000000"
724 fill "#FFFFFF"
725 fontSize 16
726 fontName "Monospace"
727 autoSizePolicy "node_width"
728 anchor "t"
729 borderDistance 0.0
730 ]
731 LabelGraphics
732 [
733 text "
734 "
735 fontSize 14
736 fontName "Consolas"
737 alignment "left"
738 anchor "tl"
739 borderDistance 6
740 ]
741 ]
742 edge
743 [
744 source 11
745 target 0
746 graphics
747 [
748 fill "#000000"
749 targetArrow "standard"
750 ]
751 LabelGraphics
752 [
753 text "ePackage reference EClassifier"
754 fontSize 14
755 fontName "Consolas"
756 configuration "AutoFlippingLabel"
757 model "six_pos"
758 position "thead"
759 ]
760 ]
761 edge
762 [
763 source 12
764 target 0
765 graphics
766 [
767 fill "#000000"
768 targetArrow "standard"
769 ]
770 LabelGraphics
771 [
772 text "ePackage reference EClassifier"
773 fontSize 14
774 fontName "Consolas"
775 configuration "AutoFlippingLabel"
776 model "six_pos"
777 position "thead"
778 ]
779 ]
780 edge
781 [
782 source 14
783 target 0
784 graphics
785 [
786 fill "#000000"
787 targetArrow "standard"
788 ]
789 LabelGraphics
790 [
791 text "ePackage reference EClassifier"
792 fontSize 14
793 fontName "Consolas"
794 configuration "AutoFlippingLabel"
795 model "six_pos"
796 position "thead"
797 ]
798 ]
799 edge
800 [
801 source 15
802 target 13
803 graphics
804 [
805 fill "#000000"
806 targetArrow "standard"
807 ]
808 LabelGraphics
809 [
810 text "ePackage reference EClassifier"
811 fontSize 14
812 fontName "Consolas"
813 configuration "AutoFlippingLabel"
814 model "six_pos"
815 position "thead"
816 ]
817 ]
818 edge
819 [
820 source 0
821 target 11
822 graphics
823 [
824 fill "#000000"
825 width 3
826 targetArrow "standard"
827 ]
828 LabelGraphics
829 [
830 text "eClassifiers reference EPackage"
831 fontSize 14
832 fontName "Consolas"
833 configuration "AutoFlippingLabel"
834 model "six_pos"
835 position "thead"
836 ]
837 ]
838 edge
839 [
840 source 0
841 target 12
842 graphics
843 [
844 fill "#000000"
845 width 3
846 targetArrow "standard"
847 ]
848 LabelGraphics
849 [
850 text "eClassifiers reference EPackage"
851 fontSize 14
852 fontName "Consolas"
853 configuration "AutoFlippingLabel"
854 model "six_pos"
855 position "thead"
856 ]
857 ]
858 edge
859 [
860 source 0
861 target 14
862 graphics
863 [
864 fill "#000000"
865 width 3
866 targetArrow "standard"
867 ]
868 LabelGraphics
869 [
870 text "eClassifiers reference EPackage"
871 fontSize 14
872 fontName "Consolas"
873 configuration "AutoFlippingLabel"
874 model "six_pos"
875 position "thead"
876 ]
877 ]
878 edge
879 [
880 source 13
881 target 15
882 graphics
883 [
884 fill "#000000"
885 width 3
886 targetArrow "standard"
887 ]
888 LabelGraphics
889 [
890 text "eClassifiers reference EPackage"
891 fontSize 14
892 fontName "Consolas"
893 configuration "AutoFlippingLabel"
894 model "six_pos"
895 position "thead"
896 ]
897 ]
898 edge
899 [
900 source 0
901 target 13
902 graphics
903 [
904 fill "#000000"
905 width 3
906 targetArrow "standard"
907 ]
908 LabelGraphics
909 [
910 text "eSubpackages reference EPackage"
911 fontSize 14
912 fontName "Consolas"
913 configuration "AutoFlippingLabel"
914 model "six_pos"
915 position "thead"
916 ]
917 ]
918 edge
919 [
920 source 13
921 target 0
922 graphics
923 [
924 fill "#000000"
925 targetArrow "standard"
926 ]
927 LabelGraphics
928 [
929 text "eSuperPackage reference EPackage"
930 fontSize 14
931 fontName "Consolas"
932 configuration "AutoFlippingLabel"
933 model "six_pos"
934 position "thead"
935 ]
936 ]
937 edge
938 [
939 source 12
940 target 8
941 graphics
942 [
943 fill "#000000"
944 targetArrow "standard"
945 ]
946 LabelGraphics
947 [
948 text "instanceClassName attribute EClassifier"
949 fontSize 14
950 fontName "Consolas"
951 configuration "AutoFlippingLabel"
952 model "six_pos"
953 position "thead"
954 ]
955 ]
956 edge
957 [
958 source 11
959 target 6
960 graphics
961 [
962 fill "#000000"
963 targetArrow "standard"
964 ]
965 LabelGraphics
966 [
967 text "instanceClassName attribute EClassifier"
968 fontSize 14
969 fontName "Consolas"
970 configuration "AutoFlippingLabel"
971 model "six_pos"
972 position "thead"
973 ]
974 ]
975 edge
976 [
977 source 11
978 target 10
979 graphics
980 [
981 fill "#000000"
982 targetArrow "standard"
983 ]
984 LabelGraphics
985 [
986 text "instanceTypeName attribute EClassifier"
987 fontSize 14
988 fontName "Consolas"
989 configuration "AutoFlippingLabel"
990 model "six_pos"
991 position "thead"
992 ]
993 ]
994 edge
995 [
996 source 12
997 target 8
998 graphics
999 [
1000 fill "#000000"
1001 targetArrow "standard"
1002 ]
1003 LabelGraphics
1004 [
1005 text "instanceTypeName attribute EClassifier"
1006 fontSize 14
1007 fontName "Consolas"
1008 configuration "AutoFlippingLabel"
1009 model "six_pos"
1010 position "thead"
1011 ]
1012 ]
1013 edge
1014 [
1015 source 11
1016 target 1
1017 graphics
1018 [
1019 fill "#000000"
1020 targetArrow "standard"
1021 ]
1022 LabelGraphics
1023 [
1024 text "serializable attribute EDataType"
1025 fontSize 14
1026 fontName "Consolas"
1027 configuration "AutoFlippingLabel"
1028 model "six_pos"
1029 position "thead"
1030 ]
1031 ]
1032 edge
1033 [
1034 source 0
1035 target 10
1036 graphics
1037 [
1038 fill "#000000"
1039 targetArrow "standard"
1040 ]
1041 LabelGraphics
1042 [
1043 text "name attribute ENamedElement"
1044 fontSize 14
1045 fontName "Consolas"
1046 configuration "AutoFlippingLabel"
1047 model "six_pos"
1048 position "thead"
1049 ]
1050 ]
1051 edge
1052 [
1053 source 12
1054 target 10
1055 graphics
1056 [
1057 fill "#000000"
1058 targetArrow "standard"
1059 ]
1060 LabelGraphics
1061 [
1062 text "name attribute ENamedElement"
1063 fontSize 14
1064 fontName "Consolas"
1065 configuration "AutoFlippingLabel"
1066 model "six_pos"
1067 position "thead"
1068 ]
1069 ]
1070 edge
1071 [
1072 source 11
1073 target 10
1074 graphics
1075 [
1076 fill "#000000"
1077 targetArrow "standard"
1078 ]
1079 LabelGraphics
1080 [
1081 text "name attribute ENamedElement"
1082 fontSize 14
1083 fontName "Consolas"
1084 configuration "AutoFlippingLabel"
1085 model "six_pos"
1086 position "thead"
1087 ]
1088 ]
1089 edge
1090 [
1091 source 13
1092 target 6
1093 graphics
1094 [
1095 fill "#000000"
1096 targetArrow "standard"
1097 ]
1098 LabelGraphics
1099 [
1100 text "name attribute ENamedElement"
1101 fontSize 14
1102 fontName "Consolas"
1103 configuration "AutoFlippingLabel"
1104 model "six_pos"
1105 position "thead"
1106 ]
1107 ]
1108 edge
1109 [
1110 source 14
1111 target 10
1112 graphics
1113 [
1114 fill "#000000"
1115 targetArrow "standard"
1116 ]
1117 LabelGraphics
1118 [
1119 text "name attribute ENamedElement"
1120 fontSize 14
1121 fontName "Consolas"
1122 configuration "AutoFlippingLabel"
1123 model "six_pos"
1124 position "thead"
1125 ]
1126 ]
1127 edge
1128 [
1129 source 0
1130 target 9
1131 graphics
1132 [
1133 fill "#000000"
1134 targetArrow "standard"
1135 ]
1136 LabelGraphics
1137 [
1138 text "nsURI attribute EPackage"
1139 fontSize 14
1140 fontName "Consolas"
1141 configuration "AutoFlippingLabel"
1142 model "six_pos"
1143 position "thead"
1144 ]
1145 ]
1146 edge
1147 [
1148 source 13
1149 target 8
1150 graphics
1151 [
1152 fill "#000000"
1153 targetArrow "standard"
1154 ]
1155 LabelGraphics
1156 [
1157 text "nsURI attribute EPackage"
1158 fontSize 14
1159 fontName "Consolas"
1160 configuration "AutoFlippingLabel"
1161 model "six_pos"
1162 position "thead"
1163 ]
1164 ]
1165 edge
1166 [
1167 source 0
1168 target 8
1169 graphics
1170 [
1171 fill "#000000"
1172 targetArrow "standard"
1173 ]
1174 LabelGraphics
1175 [
1176 text "nsPrefix attribute EPackage"
1177 fontSize 14
1178 fontName "Consolas"
1179 configuration "AutoFlippingLabel"
1180 model "six_pos"
1181 position "thead"
1182 ]
1183 ]
1184 edge
1185 [
1186 source 13
1187 target 6
1188 graphics
1189 [
1190 fill "#000000"
1191 targetArrow "standard"
1192 ]
1193 LabelGraphics
1194 [
1195 text "nsPrefix attribute EPackage"
1196 fontSize 14
1197 fontName "Consolas"
1198 configuration "AutoFlippingLabel"
1199 model "six_pos"
1200 position "thead"
1201 ]
1202 ]
1203]
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/5.png b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/5.png
new file mode 100644
index 00000000..bb835587
--- /dev/null
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/5.png
Binary files differ
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/5.xmi b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/5.xmi
new file mode 100644
index 00000000..1a10e5b6
--- /dev/null
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/5.xmi
@@ -0,0 +1,9 @@
1<?xml version="1.0" encoding="ASCII"?>
2<ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="packageName" nsURI="nsUri" nsPrefix="nsPrefix">
3 <eClassifiers xsi:type="ecore:EEnum" name="packageName" instanceClassName="A"/>
4 <eClassifiers xsi:type="ecore:EEnum" name="packageName"/>
5 <eClassifiers xsi:type="ecore:EEnum" name="packageName" instanceClassName="nsPrefix"/>
6 <eSubpackages name="A" nsURI="nsPrefix" nsPrefix="A">
7 <eClassifiers xsi:type="ecore:EEnum"/>
8 </eSubpackages>
9</ecore:EPackage>
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/statistics.csv b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/statistics.csv
new file mode 100644
index 00000000..0c19baf2
--- /dev/null
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/statistics.csv
@@ -0,0 +1,32 @@
1Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;_Solution0FoundAt;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime
21;1;ModelResultImpl;441;2068;2486;3217702419;62;29;140;4;0;2
3Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;_Solution0FoundAt;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime
41;1;ModelResultImpl;463;2860;2654;3199911479;74;37;138;5;0;3
5Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;_Solution0FoundAt;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime
61;1;ModelResultImpl;499;2201;2467;3339884626;68;36;141;4;0;2
7Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;_Solution0FoundAt;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime
81;1;ModelResultImpl;452;2821;2223;3526490298;59;27;122;5;0;2
9Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;_Solution0FoundAt;_Solution1FoundAt;_Solution2FoundAt;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime
101;1;ModelResultImpl;11;1529;1717;4396467206;87;94;100;54;17;4;0;3
11Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;_Solution0FoundAt;_Solution1FoundAt;_Solution2FoundAt;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime
121;1;ModelResultImpl;15;1411;1457;4222415279;54;68;77;36;10;4;0;5
13Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;_Solution0FoundAt;_Solution1FoundAt;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime
141;1;ModelResultImpl;9;1335;1288;2769089958;64;74;31;12;1;0;2
15Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;_Solution0FoundAt;_Solution1FoundAt;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime
161;1;ModelResultImpl;4;1180;1189;2923747093;50;58;26;10;1;0;1
17Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;_Solution0FoundAt;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime
181;1;ModelResultImpl;839;2519;2455;3266543842;68;33;193;5;0;3
19Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;_Solution0FoundAt;_Solution1FoundAt;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime
201;1;ModelResultImpl;11;2019;1948;3337962573;91;104;53;16;2;0;3
21Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;_Solution0FoundAt;_Solution1FoundAt;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime
221;1;ModelResultImpl;1719;3345;2829;7904668959;235;261;107;497;53;0;6
23Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;_Solution0FoundAt;_Solution1FoundAt;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime
241;1;ModelResultImpl;13;1736;1740;2852471270;62;73;37;19;1;0;2
25Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;_Solution0FoundAt;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime
261;1;ModelResultImpl;529;2502;2857;3681787432;68;30;125;4;0;2
27Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;_Solution0FoundAt;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime
281;1;ModelResultImpl;788;2572;2188;3322713636;67;30;148;5;0;4
29Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;_Solution0FoundAt;_Solution1FoundAt;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime
301;1;ModelResultImpl;443;2849;2573;4906642931;151;171;75;124;7;0;8
31Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;_Solution0FoundAt;_Solution1FoundAt;_Solution2FoundAt;_Solution3FoundAt;_Solution4FoundAt;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime
322;1;ModelResultImpl;19;4315;9042;20459725100;239;247;252;257;261;217;19;6;0;11