aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar ArenBabikian <aren.babikian@mail.mcgill.ca>2019-02-16 15:45:14 -0500
committerLibravatar ArenBabikian <aren.babikian@mail.mcgill.ca>2019-02-16 15:45:14 -0500
commit1da40b0bf07319bdb2e9a89f8d7d6ecfbc638952 (patch)
tree65a3cd74ed278d8af013c0e8a8c4d6ba920c3192
parentSet up #19 (diff)
downloadVIATRA-Generator-1da40b0bf07319bdb2e9a89f8d7d6ecfbc638952.tar.gz
VIATRA-Generator-1da40b0bf07319bdb2e9a89f8d7d6ecfbc638952.tar.zst
VIATRA-Generator-1da40b0bf07319bdb2e9a89f8d7d6ecfbc638952.zip
Integrate queries partially #19
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/.classpath1
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/.project6
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/META-INF/MANIFEST.MF34
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/build.properties4
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/configurations/ecore.vsconfig5
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/configurations/fam.vsconfig4
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/configurations/fileSystem.vsconfig4
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/configurations/yakindu.vsconfig6
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/metamodels/fam.ecore4
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/metamodels/filesystem.ecore2
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/debug/errors.txt114
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/debug/generated3valued.vql_deactivated32522
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/debug/generation.logicproblem2
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/debug/problem.als203
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/log.txt2
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/1.gml6779
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/1.pngbin141462 -> 159195 bytes
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/1.xmi13
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/2.gml6874
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/2.pngbin151601 -> 177546 bytes
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/2.xmi13
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/3.gml5613
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/3.pngbin157309 -> 177661 bytes
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/3.xmi13
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/4.gml1136
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/4.pngbin162587 -> 189772 bytes
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/4.xmi11
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/5.gml1155
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/5.pngbin168585 -> 194199 bytes
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/models/5.xmi11
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/statistics.csv16
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/debug/errors.txt54
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/debug/generated3valued.vql_deactivated23532
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/debug/generation.logicproblem277
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/debug/init.partialmodel47
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/log.txt2
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/models/1.gml4304
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/models/1.pngbin30880 -> 33827 bytes
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/models/1.xmi16
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/models/2.gml3692
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/models/2.pngbin36094 -> 29697 bytes
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/models/2.xmi15
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/statistics.csv20
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/plugin.xml168
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/ecore/queries/ecorePatterns.vql (renamed from Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/ecore/queries/Ecore.vql)0
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/fam/queries/famPatterns.vql (renamed from Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/queries/famPatterns.vql)0
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/queries/FileSystemPatterns.vql (renamed from Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/queries/FileSystem.vql)0
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduMutatedPatterns.vql (renamed from Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduMutatedPatterns.vql)0
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduPatterns.vql (renamed from Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduPatterns.vql)0
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/ecore/queries/.gitignore13
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/fam/queries/.gitignore10
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/fam/queries/TerminatorAndInformation.java747
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/fam/queries/Type.java770
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/queries/.gitignore9
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/.gitignore158
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/Child.java721
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/ChoiceHasNoIncoming.java551
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/ChoiceHasNoOutgoing.java559
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/EntryInRegion.java702
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/HasMultipleIncomingTrainsition.java549
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/HasMultipleOutgoingTrainsition.java549
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/HasMultipleRegions.java555
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/IncomingToEntry.java703
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/MultipleTransitionFromEntry.java827
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/NoEntryInRegion.java550
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/NoOutgoingTransitionFromEntry.java551
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/NoStateInRegion.java558
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/NotSynchronizingStates.java554
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/OutgoingFromExit.java715
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/OutgoingFromFinal.java715
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/StateInRegion.java694
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/SynchHasNoIncoming.java551
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/SynchHasNoOutgoing.java559
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/SynchThree.java639
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/SynchronizedIncomingInSameRegion.java888
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/SynchronizedRegionDoesNotHaveMultipleRegions.java744
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/SynchronizedRegionsAreNotSiblings.java902
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/Transition.java808
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/TwoSynch.java714
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/Function.java2
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/FunctionalElement.java2
-rw-r--r--Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/impl/famPackageImpl.java4
82 files changed, 104029 insertions, 218 deletions
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/.classpath b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/.classpath
index d8bd95f6..dbb1533f 100644
--- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/.classpath
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/.classpath
@@ -1,6 +1,7 @@
1<?xml version="1.0" encoding="UTF-8"?> 1<?xml version="1.0" encoding="UTF-8"?>
2<classpath> 2<classpath>
3 <classpathentry kind="src" path="src"/> 3 <classpathentry kind="src" path="src"/>
4 <classpathentry kind="src" path="src-gen"/>
4 <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> 5 <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
5 <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> 6 <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
6 <classpathentry kind="src" path="queries"/> 7 <classpathentry kind="src" path="queries"/>
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/.project b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/.project
index c2212771..279c4d65 100644
--- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/.project
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/.project
@@ -6,6 +6,11 @@
6 </projects> 6 </projects>
7 <buildSpec> 7 <buildSpec>
8 <buildCommand> 8 <buildCommand>
9 <name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
10 <arguments>
11 </arguments>
12 </buildCommand>
13 <buildCommand>
9 <name>org.eclipse.viatra.query.tooling.ui.projectbuilder</name> 14 <name>org.eclipse.viatra.query.tooling.ui.projectbuilder</name>
10 <arguments> 15 <arguments>
11 </arguments> 16 </arguments>
@@ -30,5 +35,6 @@
30 <nature>org.eclipse.pde.PluginNature</nature> 35 <nature>org.eclipse.pde.PluginNature</nature>
31 <nature>org.eclipse.jdt.core.javanature</nature> 36 <nature>org.eclipse.jdt.core.javanature</nature>
32 <nature>org.eclipse.viatra.query.projectnature</nature> 37 <nature>org.eclipse.viatra.query.projectnature</nature>
38 <nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
33 </natures> 39 </natures>
34</projectDescription> 40</projectDescription>
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/META-INF/MANIFEST.MF b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/META-INF/MANIFEST.MF
index ca7ad11c..61135ac9 100644
--- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/META-INF/MANIFEST.MF
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/META-INF/MANIFEST.MF
@@ -6,22 +6,26 @@ Bundle-Version: 1.0.0.qualifier
6Bundle-ClassPath: . 6Bundle-ClassPath: .
7Bundle-Vendor: %providerName 7Bundle-Vendor: %providerName
8Bundle-Localization: plugin 8Bundle-Localization: plugin
9Export-Package: ca.mcgill.ecse.dslreasoner.standalone.test.fam, 9Export-Package: ca.mcgill.ecse.dslreasoner.standalone.test.ecore.queries,
10 ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl, 10 ca.mcgill.ecse.dslreasoner.standalone.test.fam,
11 ca.mcgill.ecse.dslreasoner.standalone.test.fam.util, 11 ca.mcgill.ecse.dslreasoner.standalone.test.fam.impl,
12 ca.mcgill.ecse.dslreasoner.standalone.test.yakindu, 12 ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries,
13 ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl, 13 ca.mcgill.ecse.dslreasoner.standalone.test.fam.util,
14 ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.util, 14 ca.mcgill.ecse.dslreasoner.standalone.test.filesystem,
15 ca.mcgill.ecse.dslreasoner.standalone.test.filesystem, 15 ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.impl,
16 ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.impl, 16 ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.queries,
17 ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.util 17 ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.util,
18 ca.mcgill.ecse.dslreasoner.standalone.test.yakindu,
19 ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.impl,
20 ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries,
21 ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.util
18Require-Bundle: org.eclipse.viatra.addon.querybasedfeatures.runtime, 22Require-Bundle: org.eclipse.viatra.addon.querybasedfeatures.runtime,
19 org.eclipse.core.runtime;bundle-version="3.13.0", 23 org.eclipse.core.runtime;bundle-version="3.13.0",
20 org.eclipse.emf.ecore;bundle-version="2.13.0";visibility:=reexport, 24 org.eclipse.emf.ecore;bundle-version="2.13.0";visibility:=reexport,
21 org.eclipse.viatra.query.runtime;bundle-version="2.1.0", 25 org.eclipse.viatra.query.runtime;bundle-version="2.1.0",
22 org.eclipse.viatra.query.runtime.rete;bundle-version="2.1.0", 26 org.eclipse.viatra.query.runtime.rete;bundle-version="2.1.0",
23 org.eclipse.viatra.query.runtime.localsearch;bundle-version="2.1.0", 27 org.eclipse.viatra.query.runtime.localsearch;bundle-version="2.1.0",
24 org.eclipse.xtext.xbase.lib;bundle-version="2.12.0" 28 org.eclipse.xtext.xbase.lib;bundle-version="2.12.0"
25Import-Package: org.apache.log4j 29Import-Package: org.apache.log4j
26Automatic-Module-Name: ca.mcgill.ecse.dslreasoner.standalone.test 30Automatic-Module-Name: ca.mcgill.ecse.dslreasoner.standalone.test
27Bundle-ActivationPolicy: lazy 31Bundle-ActivationPolicy: lazy
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/build.properties b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/build.properties
index 8ae35ddd..876d970c 100644
--- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/build.properties
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/build.properties
@@ -3,5 +3,7 @@ bin.includes = META-INF/,\
3 plugin.properties 3 plugin.properties
4 4
5jars.compile.order = . 5jars.compile.order = .
6source.. = src/ 6source.. = src/,\
7 src-gen/,\
8 queries/
7output.. = bin/ 9output.. = bin/
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/configurations/ecore.vsconfig b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/configurations/ecore.vsconfig
index e5873211..9360ab61 100644
--- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/configurations/ecore.vsconfig
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/configurations/ecore.vsconfig
@@ -1,4 +1,5 @@
1import epackage "http://www.eclipse.org/emf/2002/Ecore" 1import epackage "http://www.eclipse.org/emf/2002/Ecore"
2import viatra "ca.mcgill.ecse.dslreasoner.standalone.test.ecore.queries.EcorePatterns"
2 3
3metamodel allSupported { package ecore excluding { 4metamodel allSupported { package ecore excluding {
4 EClassifier.instanceClass,EClassifier.defaultValue,EEnumLiteral.instance,EStructuralFeature.defaultValue, 5 EClassifier.instanceClass,EClassifier.defaultValue,EEnumLiteral.instance,EStructuralFeature.defaultValue,
@@ -9,7 +10,7 @@ metamodel allSupported { package ecore excluding {
9 10
10generate { 11generate {
11 metamodel = allSupported 12 metamodel = allSupported
12 //constraints = { ... } 13// constraints = { package ca.mcgill.ecse.dslreasoner.standalone.test.ecore.queries}
13 partial-model = { "platform:/resource/Ecore-Plugin/InitialPackage.ecore" } 14 partial-model = { "platform:/resource/Ecore-Plugin/InitialPackage.ecore" }
14 solver = ViatraSolver 15 solver = ViatraSolver
15 scope = { 16 scope = {
@@ -23,7 +24,7 @@ generate {
23 log-level = normal 24 log-level = normal
24 } 25 }
25 26
26 number = 5 27 number = 3
27 runs = 1 28 runs = 1
28 29
29 debug = "platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/debug" 30 debug = "platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/debug"
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/configurations/fam.vsconfig b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/configurations/fam.vsconfig
index f4f29089..d376dce8 100644
--- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/configurations/fam.vsconfig
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/configurations/fam.vsconfig
@@ -1,9 +1,9 @@
1import epackage "FamMetamodel" 1import epackage "FamMetamodel"
2//import viatra "ca.mcgill.ecse.dslreasoner.standalone.test.queries.fam.FamPatterns" 2import viatra "ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.FamPatterns"
3 3
4generate { 4generate {
5 metamodel = { package fam } 5 metamodel = { package fam }
6// constraints = { package ca.mcgill.ecse.dslreasoner.standalone.test.xyz } 6 constraints = { package ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries}
7 partial-model = { "platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/instanceModels/famInstance.xmi"} 7 partial-model = { "platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/instanceModels/famInstance.xmi"}
8 solver = ViatraSolver 8 solver = ViatraSolver
9 scope = { 9 scope = {
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/configurations/fileSystem.vsconfig b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/configurations/fileSystem.vsconfig
index 64775e8d..0e510a55 100644
--- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/configurations/fileSystem.vsconfig
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/configurations/fileSystem.vsconfig
@@ -1,9 +1,9 @@
1import epackage "FileSystemMetamodel" 1import epackage "FileSystemMetamodel"
2//import viatra "" 2import viatra "ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.queries.FileSystemPatterns"
3 3
4generate { 4generate {
5 metamodel = { package filesystem } 5 metamodel = { package filesystem }
6// constraints = { package ca.mcgill.ecse.dslreasoner.standalone.test.xyz } 6 constraints = { package ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.queries}
7 partial-model = { "platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/instanceModels/filesystemInstance.xmi"} 7 partial-model = { "platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/instanceModels/filesystemInstance.xmi"}
8 solver = ViatraSolver 8 solver = ViatraSolver
9 scope = { 9 scope = {
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/configurations/yakindu.vsconfig b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/configurations/yakindu.vsconfig
index 246337de..423bf80e 100644
--- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/configurations/yakindu.vsconfig
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/configurations/yakindu.vsconfig
@@ -1,13 +1,13 @@
1import epackage "YakinduMetamodel" 1import epackage "YakinduMetamodel"
2//import viatra "" 2import viatra "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.YakinduPatterns"
3 3
4generate { 4generate {
5 metamodel = { package yakindu } 5 metamodel = { package yakindu }
6// constraints = { package ca.mcgill.ecse.dslreasoner.standalone.test.xyz } 6 constraints = { package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries }
7 partial-model = { "platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/instanceModels/yakinduInstance.xmi"} 7 partial-model = { "platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/instanceModels/yakinduInstance.xmi"}
8 solver = ViatraSolver 8 solver = ViatraSolver
9 scope = { 9 scope = {
10 #node = 5 10 #node = 6
11 } 11 }
12 12
13 config = { 13 config = {
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/metamodels/fam.ecore b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/metamodels/fam.ecore
index 498e9838..d9c8bfef 100644
--- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/metamodels/fam.ecore
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/metamodels/fam.ecore
@@ -10,7 +10,7 @@
10 <eStructuralFeatures xsi:type="ecore:EReference" name="model" lowerBound="1" eType="#//FunctionalArchitectureModel" 10 <eStructuralFeatures xsi:type="ecore:EReference" name="model" lowerBound="1" eType="#//FunctionalArchitectureModel"
11 volatile="true" transient="true" derived="true"> 11 volatile="true" transient="true" derived="true">
12 <eAnnotations source="org.eclipse.viatra.query.querybasedfeature"> 12 <eAnnotations source="org.eclipse.viatra.query.querybasedfeature">
13 <details key="patternFQN" value="ca.mcgill.ecse.dslreasoner.standalone.test.xyz.model"/> 13 <details key="patternFQN" value="ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.model"/>
14 </eAnnotations> 14 </eAnnotations>
15 </eStructuralFeatures> 15 </eStructuralFeatures>
16 <eStructuralFeatures xsi:type="ecore:EReference" name="parent" eType="#//Function" 16 <eStructuralFeatures xsi:type="ecore:EReference" name="parent" eType="#//Function"
@@ -26,7 +26,7 @@
26 <eStructuralFeatures xsi:type="ecore:EAttribute" name="type" lowerBound="1" eType="#//FunctionType" 26 <eStructuralFeatures xsi:type="ecore:EAttribute" name="type" lowerBound="1" eType="#//FunctionType"
27 changeable="false" volatile="true" transient="true" derived="true"> 27 changeable="false" volatile="true" transient="true" derived="true">
28 <eAnnotations source="org.eclipse.viatra.query.querybasedfeature"> 28 <eAnnotations source="org.eclipse.viatra.query.querybasedfeature">
29 <details key="patternFQN" value="ca.mcgill.ecse.dslreasoner.standalone.test.xyz.type"/> 29 <details key="patternFQN" value="ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.type"/>
30 </eAnnotations> 30 </eAnnotations>
31 </eStructuralFeatures> 31 </eStructuralFeatures>
32 </eClassifiers> 32 </eClassifiers>
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/metamodels/filesystem.ecore b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/metamodels/filesystem.ecore
index 3dd2061b..8952cfb5 100644
--- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/metamodels/filesystem.ecore
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/metamodels/filesystem.ecore
@@ -10,7 +10,7 @@
10 <eStructuralFeatures xsi:type="ecore:EReference" name="live" upperBound="-1" eType="#//FSObject" 10 <eStructuralFeatures xsi:type="ecore:EReference" name="live" upperBound="-1" eType="#//FSObject"
11 changeable="false" volatile="true" transient="true" derived="true"> 11 changeable="false" volatile="true" transient="true" derived="true">
12 <eAnnotations source="org.eclipse.viatra.query.querybasedfeature"> 12 <eAnnotations source="org.eclipse.viatra.query.querybasedfeature">
13 <details key="patternFQN" value="hu.bme.mit.inf.dslreasoner.domains.alloyexamples.live"/> 13 <details key="patternFQN" value="ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.queries.live"/>
14 </eAnnotations> 14 </eAnnotations>
15 </eStructuralFeatures> 15 </eStructuralFeatures>
16 </eClassifiers> 16 </eClassifiers>
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
index 94b0f4e3..e96fe7c5 100644
--- 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
@@ -192,4 +192,118 @@ Error occured (IllegalStateException): Query ca.mcgill.ecse.dslreasoner.standalo
192 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:339) 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) 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) 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)Error occured (NullPointerException):
196 hu.bme.mit.inf.dslreasoner.application.execution.QueryLoader.lambda$8(QueryLoader.java:108)
197 org.eclipse.xtext.xbase.lib.internal.BooleanFunctionDelegate.apply(BooleanFunctionDelegate.java:41)
198 com.google.common.collect.Iterators$6.computeNext(Iterators.java:617)
199 com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:145)
200 com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:140)
201 com.google.common.collect.Iterators.addAll(Iterators.java:366)
202 com.google.common.collect.Iterables.addAll(Iterables.java:332)
203 com.google.common.collect.Sets.newLinkedHashSet(Sets.java:383)
204 org.eclipse.xtext.xbase.lib.IterableExtensions.toSet(IterableExtensions.java:592)
205 hu.bme.mit.inf.dslreasoner.application.execution.QueryLoader._getPatterns(QueryLoader.java:84)
206 hu.bme.mit.inf.dslreasoner.application.execution.QueryLoader.getPatterns(QueryLoader.java:213)
207 hu.bme.mit.inf.dslreasoner.application.execution.QueryLoader.loadQueries(QueryLoader.java:54)
208 hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:167)
209 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:130)
210 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:339)
211 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111)
212 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73)
213 org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)Error occured (UnsupportedOperationException): Can not transform pattern "ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.type"! Reason: Unknown constant type: class ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionType
214 hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.RelationDefinitionIndexer.transformPattern(RelationDefinitionIndexer.java:205)
215 hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.RelationDefinitionIndexer.generateRelationDefinitions(RelationDefinitionIndexer.java:66)
216 hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.PatternGenerator.transformBaseProperties(PatternGenerator.java:423)
217 hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.PatternProvider.generateQueries(PatternProvider.java:59)
218 hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.ModelGenerationMethodProvider.createModelGenerationMethod(ModelGenerationMethodProvider.java:57)
219 hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.ViatraReasoner.solve(ViatraReasoner.java:96)
220 hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:316)
221 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:130)
222 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:339)
223 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111)
224 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73)
225 org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)Error occured (UnsupportedOperationException): Can not transform pattern "ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.type"! Reason: Unknown constant type: class ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionType
226 hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.RelationDefinitionIndexer.transformPattern(RelationDefinitionIndexer.java:205)
227 hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.RelationDefinitionIndexer.generateRelationDefinitions(RelationDefinitionIndexer.java:66)
228 hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.PatternGenerator.transformBaseProperties(PatternGenerator.java:423)
229 hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.PatternProvider.generateQueries(PatternProvider.java:59)
230 hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.ModelGenerationMethodProvider.createModelGenerationMethod(ModelGenerationMethodProvider.java:57)
231 hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.ViatraReasoner.solve(ViatraReasoner.java:96)
232 hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:316)
233 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:130)
234 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:339)
235 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111)
236 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73)
237 org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)Error occured (UnsupportedOperationException): Can not transform pattern "ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.type"! Reason: Unknown constant type: class ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionType
238 hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.RelationDefinitionIndexer.transformPattern(RelationDefinitionIndexer.java:205)
239 hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.RelationDefinitionIndexer.generateRelationDefinitions(RelationDefinitionIndexer.java:66)
240 hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.PatternGenerator.transformBaseProperties(PatternGenerator.java:423)
241 hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.PatternProvider.generateQueries(PatternProvider.java:59)
242 hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.ModelGenerationMethodProvider.createModelGenerationMethod(ModelGenerationMethodProvider.java:57)
243 hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.ViatraReasoner.solve(ViatraReasoner.java:96)
244 hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:316)
245 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:130)
246 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:339)
247 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111)
248 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73)
249 org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)Error occured (UnsupportedOperationException): Can not transform pattern "ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.type"! Reason: Unknown constant type: class ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionType
250 hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.RelationDefinitionIndexer.transformPattern(RelationDefinitionIndexer.java:205)
251 hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.RelationDefinitionIndexer.generateRelationDefinitions(RelationDefinitionIndexer.java:66)
252 hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.PatternGenerator.transformBaseProperties(PatternGenerator.java:423)
253 hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.PatternProvider.generateQueries(PatternProvider.java:59)
254 hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.ModelGenerationMethodProvider.createModelGenerationMethod(ModelGenerationMethodProvider.java:57)
255 hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.ViatraReasoner.solve(ViatraReasoner.java:96)
256 hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:316)
257 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:130)
258 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:339)
259 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111)
260 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73)
261 org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)Error occured (NullPointerException):
262 hu.bme.mit.inf.dlsreasoner.alloy.reasoner.builder.Alloy2LogicMapper.transformOutput(Alloy2LogicMapper.java:53)
263 hu.bme.mit.inf.dlsreasoner.alloy.reasoner.AlloySolver.solve(AlloySolver.java:66)
264 hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:316)
265 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:132)
266 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:343)
267 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111)
268 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73)
269 org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)Error occured (UnsupportedOperationException): Can not transform pattern "ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.type"! Reason: Unknown constant type: class ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionType
270 hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.RelationDefinitionIndexer.transformPattern(RelationDefinitionIndexer.java:205)
271 hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.RelationDefinitionIndexer.generateRelationDefinitions(RelationDefinitionIndexer.java:66)
272 hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.PatternGenerator.transformBaseProperties(PatternGenerator.java:423)
273 hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.PatternProvider.generateQueries(PatternProvider.java:59)
274 hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.ModelGenerationMethodProvider.createModelGenerationMethod(ModelGenerationMethodProvider.java:57)
275 hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.ViatraReasoner.solve(ViatraReasoner.java:96)
276 hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:316)
277 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:132)
278 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:343)
279 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111)
280 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73)
281 org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)Error occured (UnsupportedOperationException): Can not transform pattern "ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.type"! Reason: Unknown constant type: class ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionType
282 hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.RelationDefinitionIndexer.transformPattern(RelationDefinitionIndexer.java:205)
283 hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.RelationDefinitionIndexer.generateRelationDefinitions(RelationDefinitionIndexer.java:66)
284 hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.PatternGenerator.transformBaseProperties(PatternGenerator.java:423)
285 hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.patterns.PatternProvider.generateQueries(PatternProvider.java:59)
286 hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.ModelGenerationMethodProvider.createModelGenerationMethod(ModelGenerationMethodProvider.java:57)
287 hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.ViatraReasoner.solve(ViatraReasoner.java:96)
288 hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:316)
289 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:132)
290 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:343)
291 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111)
292 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73)
293 org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)Error occured (IllegalArgumentException): Unable to translate query "ca.mcgill.ecse.dslreasoner.standalone.test.ecore.queries.oppositeDifferentClass".
294Reason: IllegalArgumentException, Inconsistent types: [EStructuralFeature class, EModelElement class, ENamedElement class, EReference class, EObject class, ETypedElement class]
295 hu.bme.mit.inf.dslreasoner.viatra2logic.Viatra2Logic.transformQueries(Viatra2Logic.java:166)
296 hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:196)
297 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:132)
298 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:343)
299 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111)
300 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73)
301 org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)Error occured (IllegalArgumentException): Unable to translate query "ca.mcgill.ecse.dslreasoner.standalone.test.ecore.queries.oppositeDifferentClass".
302Reason: IllegalArgumentException, Inconsistent types: [EStructuralFeature class, EModelElement class, ENamedElement class, EReference class, EObject class, ETypedElement class]
303 hu.bme.mit.inf.dslreasoner.viatra2logic.Viatra2Logic.transformQueries(Viatra2Logic.java:166)
304 hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:196)
305 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:132)
306 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:343)
307 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111)
308 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 309 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
index 88497c64..f02c64b0 100644
--- 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
@@ -31731,3 +31731,32525 @@ pattern refineRelation_value_attribute_EStringToStringMapEntry(
31731 find mayInRelationvalue_attribute_EStringToStringMapEntry(problem,interpretation,from,to); 31731 find mayInRelationvalue_attribute_EStringToStringMapEntry(problem,interpretation,from,to);
31732 neg find mustInRelationvalue_attribute_EStringToStringMapEntry(problem,interpretation,from,to); 31732 neg find mustInRelationvalue_attribute_EStringToStringMapEntry(problem,interpretation,from,to);
31733} 31733}
31734import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage"
31735import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem"
31736import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language"
31737
31738//////////
31739// 0. Util
31740//////////
31741private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) {
31742 PartialInterpretation.problem(interpretation,problem);
31743}
31744
31745/////////////////////////
31746// 0.1 Existence
31747/////////////////////////
31748private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
31749 find interpretation(problem,interpretation);
31750 LogicProblem.elements(problem,element);
31751} or {
31752 find interpretation(problem,interpretation);
31753 PartialInterpretation.newElements(interpretation,element);
31754}
31755
31756private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
31757 find mustExist(problem,interpretation,element);
31758} or {
31759 find interpretation(problem,interpretation);
31760 neg find elementCloseWorld(element);
31761 PartialInterpretation.openWorldElements(interpretation,element);
31762}
31763
31764private pattern elementCloseWorld(element:DefinedElement) {
31765 PartialInterpretation.openWorldElements(i,element);
31766 PartialInterpretation.maxNewElements(i,0);
31767} or {
31768 Scope.targetTypeInterpretation(scope,interpretation);
31769 PartialTypeInterpratation.elements(interpretation,element);
31770 Scope.maxNewElements(scope,0);
31771}
31772
31773////////////////////////
31774// 0.2 Equivalence
31775////////////////////////
31776pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) {
31777 find mayExist(problem,interpretation,a);
31778 find mayExist(problem,interpretation,b);
31779 a == b;
31780}
31781
31782////////////////////////
31783// 0.3 Required Patterns by TypeIndexer
31784////////////////////////
31785private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) {
31786 find interpretation(problem,interpretation);
31787 LogicProblem.types(problem,type);
31788 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
31789 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
31790}
31791
31792private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) {
31793 find interpretation(problem,interpretation);
31794 LogicProblem.types(problem,type);
31795 TypeDefinition.elements(type,element);
31796} or {
31797 find interpretation(problem,interpretation);
31798 find typeInterpretation(problem,interpretation,type,typeInterpretation);
31799 PartialComplexTypeInterpretation.elements(typeInterpretation,element);
31800}
31801
31802private pattern isPrimitive(element: PrimitiveElement) {
31803 PrimitiveElement(element);
31804}
31805
31806//////////
31807// 1. Problem-Specific Base Indexers
31808//////////
31809// 1.1 Type Indexers
31810//////////
31811// 1.1.1 primitive Type Indexers
31812//////////
31813
31814//////////
31815// 1.1.2 domain-specific Type Indexers
31816//////////
31817/**
31818 * An element must be an instance of type "FunctionalElement class".
31819 */
31820private pattern mustInstanceOfFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
31821 Type.name(type,"FunctionalElement class");
31822 find directInstanceOf(problem,interpretation,element,type);
31823}
31824private pattern scopeDisallowsNewFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation) {
31825 find interpretation(problem,interpretation);
31826 PartialInterpretation.scopes(interpretation,scope);
31827 Scope.targetTypeInterpretation(scope,typeInterpretation);
31828 Scope.maxNewElements(scope,0);
31829 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
31830 Type.name(type,"FunctionalElement class");
31831}
31832
31833/**
31834 * An element may be an instance of type "FunctionalElement class".
31835 */
31836private pattern mayInstanceOfFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
31837{
31838 find interpretation(problem,interpretation);
31839 PartialInterpretation.newElements(interpretation,element);
31840 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
31841 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
31842 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
31843 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
31844 neg find mustInstanceOfFunction_class(problem,interpretation,element);
31845 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
31846 neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation);
31847 neg find isPrimitive(element);
31848} or {
31849 find interpretation(problem,interpretation);
31850 PartialInterpretation.openWorldElements(interpretation,element);
31851 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
31852 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
31853 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
31854 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
31855 neg find mustInstanceOfFunction_class(problem,interpretation,element);
31856 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
31857 neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation);
31858 neg find isPrimitive(element);
31859} or
31860{ find mustInstanceOfFunctionalElement_class(problem,interpretation,element); }
31861/**
31862 * An element must be an instance of type "FunctionalArchitectureModel class".
31863 */
31864private pattern mustInstanceOfFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
31865 Type.name(type,"FunctionalArchitectureModel class");
31866 find directInstanceOf(problem,interpretation,element,type);
31867}
31868private pattern scopeDisallowsNewFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation) {
31869 find interpretation(problem,interpretation);
31870 PartialInterpretation.scopes(interpretation,scope);
31871 Scope.targetTypeInterpretation(scope,typeInterpretation);
31872 Scope.maxNewElements(scope,0);
31873 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
31874 Type.name(type,"FunctionalArchitectureModel class");
31875}
31876
31877/**
31878 * An element may be an instance of type "FunctionalArchitectureModel class".
31879 */
31880private pattern mayInstanceOfFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
31881{
31882 find interpretation(problem,interpretation);
31883 PartialInterpretation.newElements(interpretation,element);
31884 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
31885 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
31886 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
31887 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
31888 neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element);
31889 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
31890 neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation);
31891 neg find isPrimitive(element);
31892} or {
31893 find interpretation(problem,interpretation);
31894 PartialInterpretation.openWorldElements(interpretation,element);
31895 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
31896 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
31897 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
31898 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
31899 neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element);
31900 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
31901 neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation);
31902 neg find isPrimitive(element);
31903} or
31904{ find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); }
31905/**
31906 * An element must be an instance of type "Function class".
31907 */
31908private pattern mustInstanceOfFunction_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
31909 Type.name(type,"Function class");
31910 find directInstanceOf(problem,interpretation,element,type);
31911}
31912private pattern scopeDisallowsNewFunction_class(problem:LogicProblem, interpretation:PartialInterpretation) {
31913 find interpretation(problem,interpretation);
31914 PartialInterpretation.scopes(interpretation,scope);
31915 Scope.targetTypeInterpretation(scope,typeInterpretation);
31916 Scope.maxNewElements(scope,0);
31917 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
31918 Type.name(type,"Function class");
31919}
31920
31921/**
31922 * An element may be an instance of type "Function class".
31923 */
31924private pattern mayInstanceOfFunction_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
31925{
31926 find interpretation(problem,interpretation);
31927 PartialInterpretation.newElements(interpretation,element);
31928 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
31929 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
31930 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
31931 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
31932 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
31933 neg find scopeDisallowsNewFunction_class(problem, interpretation);
31934 neg find isPrimitive(element);
31935} or {
31936 find interpretation(problem,interpretation);
31937 PartialInterpretation.openWorldElements(interpretation,element);
31938 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
31939 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
31940 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
31941 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
31942 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
31943 neg find scopeDisallowsNewFunction_class(problem, interpretation);
31944 neg find isPrimitive(element);
31945} or
31946{ find mustInstanceOfFunction_class(problem,interpretation,element); }
31947/**
31948 * An element must be an instance of type "FAMTerminator class".
31949 */
31950private pattern mustInstanceOfFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
31951 Type.name(type,"FAMTerminator class");
31952 find directInstanceOf(problem,interpretation,element,type);
31953}
31954private pattern scopeDisallowsNewFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation) {
31955 find interpretation(problem,interpretation);
31956 PartialInterpretation.scopes(interpretation,scope);
31957 Scope.targetTypeInterpretation(scope,typeInterpretation);
31958 Scope.maxNewElements(scope,0);
31959 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
31960 Type.name(type,"FAMTerminator class");
31961}
31962
31963/**
31964 * An element may be an instance of type "FAMTerminator class".
31965 */
31966private pattern mayInstanceOfFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
31967{
31968 find interpretation(problem,interpretation);
31969 PartialInterpretation.newElements(interpretation,element);
31970 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
31971 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
31972 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
31973 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
31974 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
31975 neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation);
31976 neg find isPrimitive(element);
31977} or {
31978 find interpretation(problem,interpretation);
31979 PartialInterpretation.openWorldElements(interpretation,element);
31980 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
31981 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
31982 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
31983 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
31984 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
31985 neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation);
31986 neg find isPrimitive(element);
31987} or
31988{ find mustInstanceOfFAMTerminator_class(problem,interpretation,element); }
31989/**
31990 * An element must be an instance of type "InformationLink class".
31991 */
31992private pattern mustInstanceOfInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
31993 Type.name(type,"InformationLink class");
31994 find directInstanceOf(problem,interpretation,element,type);
31995}
31996private pattern scopeDisallowsNewInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation) {
31997 find interpretation(problem,interpretation);
31998 PartialInterpretation.scopes(interpretation,scope);
31999 Scope.targetTypeInterpretation(scope,typeInterpretation);
32000 Scope.maxNewElements(scope,0);
32001 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
32002 Type.name(type,"InformationLink class");
32003}
32004
32005/**
32006 * An element may be an instance of type "InformationLink class".
32007 */
32008private pattern mayInstanceOfInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
32009{
32010 find interpretation(problem,interpretation);
32011 PartialInterpretation.newElements(interpretation,element);
32012 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
32013 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
32014 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
32015 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
32016 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
32017 neg find scopeDisallowsNewInformationLink_class(problem, interpretation);
32018 neg find isPrimitive(element);
32019} or {
32020 find interpretation(problem,interpretation);
32021 PartialInterpretation.openWorldElements(interpretation,element);
32022 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
32023 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
32024 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
32025 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
32026 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
32027 neg find scopeDisallowsNewInformationLink_class(problem, interpretation);
32028 neg find isPrimitive(element);
32029} or
32030{ find mustInstanceOfInformationLink_class(problem,interpretation,element); }
32031/**
32032 * An element must be an instance of type "FunctionalInterface class".
32033 */
32034private pattern mustInstanceOfFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
32035 Type.name(type,"FunctionalInterface class");
32036 find directInstanceOf(problem,interpretation,element,type);
32037}
32038private pattern scopeDisallowsNewFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation) {
32039 find interpretation(problem,interpretation);
32040 PartialInterpretation.scopes(interpretation,scope);
32041 Scope.targetTypeInterpretation(scope,typeInterpretation);
32042 Scope.maxNewElements(scope,0);
32043 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
32044 Type.name(type,"FunctionalInterface class");
32045}
32046
32047/**
32048 * An element may be an instance of type "FunctionalInterface class".
32049 */
32050private pattern mayInstanceOfFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
32051{
32052 find interpretation(problem,interpretation);
32053 PartialInterpretation.newElements(interpretation,element);
32054 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
32055 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
32056 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
32057 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
32058 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
32059 neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation);
32060 neg find isPrimitive(element);
32061} or {
32062 find interpretation(problem,interpretation);
32063 PartialInterpretation.openWorldElements(interpretation,element);
32064 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
32065 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
32066 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
32067 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
32068 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
32069 neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation);
32070 neg find isPrimitive(element);
32071} or
32072{ find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); }
32073/**
32074 * An element must be an instance of type "FunctionalInput class".
32075 */
32076private pattern mustInstanceOfFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
32077 Type.name(type,"FunctionalInput class");
32078 find directInstanceOf(problem,interpretation,element,type);
32079}
32080private pattern scopeDisallowsNewFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation) {
32081 find interpretation(problem,interpretation);
32082 PartialInterpretation.scopes(interpretation,scope);
32083 Scope.targetTypeInterpretation(scope,typeInterpretation);
32084 Scope.maxNewElements(scope,0);
32085 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
32086 Type.name(type,"FunctionalInput class");
32087}
32088
32089/**
32090 * An element may be an instance of type "FunctionalInput class".
32091 */
32092private pattern mayInstanceOfFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
32093{
32094 find interpretation(problem,interpretation);
32095 PartialInterpretation.newElements(interpretation,element);
32096 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
32097 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
32098 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
32099 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
32100 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
32101 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
32102 neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation);
32103 neg find isPrimitive(element);
32104} or {
32105 find interpretation(problem,interpretation);
32106 PartialInterpretation.openWorldElements(interpretation,element);
32107 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
32108 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
32109 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
32110 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
32111 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
32112 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
32113 neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation);
32114 neg find isPrimitive(element);
32115} or
32116{ find mustInstanceOfFunctionalInput_class(problem,interpretation,element); }
32117/**
32118 * An element must be an instance of type "FunctionalOutput class".
32119 */
32120private pattern mustInstanceOfFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
32121 Type.name(type,"FunctionalOutput class");
32122 find directInstanceOf(problem,interpretation,element,type);
32123}
32124private pattern scopeDisallowsNewFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation) {
32125 find interpretation(problem,interpretation);
32126 PartialInterpretation.scopes(interpretation,scope);
32127 Scope.targetTypeInterpretation(scope,typeInterpretation);
32128 Scope.maxNewElements(scope,0);
32129 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
32130 Type.name(type,"FunctionalOutput class");
32131}
32132
32133/**
32134 * An element may be an instance of type "FunctionalOutput class".
32135 */
32136private pattern mayInstanceOfFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
32137{
32138 find interpretation(problem,interpretation);
32139 PartialInterpretation.newElements(interpretation,element);
32140 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
32141 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
32142 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
32143 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
32144 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
32145 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
32146 neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation);
32147 neg find isPrimitive(element);
32148} or {
32149 find interpretation(problem,interpretation);
32150 PartialInterpretation.openWorldElements(interpretation,element);
32151 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
32152 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
32153 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
32154 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
32155 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
32156 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
32157 neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation);
32158 neg find isPrimitive(element);
32159} or
32160{ find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); }
32161/**
32162 * An element must be an instance of type "FunctionalData class".
32163 */
32164private pattern mustInstanceOfFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
32165 Type.name(type,"FunctionalData class");
32166 find directInstanceOf(problem,interpretation,element,type);
32167}
32168private pattern scopeDisallowsNewFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation) {
32169 find interpretation(problem,interpretation);
32170 PartialInterpretation.scopes(interpretation,scope);
32171 Scope.targetTypeInterpretation(scope,typeInterpretation);
32172 Scope.maxNewElements(scope,0);
32173 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
32174 Type.name(type,"FunctionalData class");
32175}
32176
32177/**
32178 * An element may be an instance of type "FunctionalData class".
32179 */
32180private pattern mayInstanceOfFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
32181{
32182 find interpretation(problem,interpretation);
32183 PartialInterpretation.newElements(interpretation,element);
32184 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
32185 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
32186 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
32187 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
32188 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
32189 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
32190 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
32191 neg find scopeDisallowsNewFunctionalData_class(problem, interpretation);
32192 neg find isPrimitive(element);
32193} or {
32194 find interpretation(problem,interpretation);
32195 PartialInterpretation.openWorldElements(interpretation,element);
32196 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
32197 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
32198 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
32199 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
32200 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
32201 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
32202 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
32203 neg find scopeDisallowsNewFunctionalData_class(problem, interpretation);
32204 neg find isPrimitive(element);
32205} or
32206{ find mustInstanceOfFunctionalData_class(problem,interpretation,element); }
32207/**
32208 * An element must be an instance of type "FunctionType enum".
32209 */
32210private pattern mustInstanceOfFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
32211 Type.name(type,"FunctionType enum");
32212 find directInstanceOf(problem,interpretation,element,type);
32213}
32214private pattern scopeDisallowsNewFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation) {
32215 find interpretation(problem,interpretation);
32216 PartialInterpretation.scopes(interpretation,scope);
32217 Scope.targetTypeInterpretation(scope,typeInterpretation);
32218 Scope.maxNewElements(scope,0);
32219 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
32220 Type.name(type,"FunctionType enum");
32221}
32222
32223/**
32224 * An element may be an instance of type "FunctionType enum".
32225 */
32226private pattern mayInstanceOfFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
32227{ find mustInstanceOfFunctionType_enum(problem,interpretation,element); }
32228/**
32229 * An element must be an instance of type "FunctionalArchitectureModel class DefinedPart".
32230 */
32231private pattern mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
32232 Type.name(type,"FunctionalArchitectureModel class DefinedPart");
32233 find directInstanceOf(problem,interpretation,element,type);
32234}
32235private pattern scopeDisallowsNewFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
32236 find interpretation(problem,interpretation);
32237 PartialInterpretation.scopes(interpretation,scope);
32238 Scope.targetTypeInterpretation(scope,typeInterpretation);
32239 Scope.maxNewElements(scope,0);
32240 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
32241 Type.name(type,"FunctionalArchitectureModel class DefinedPart");
32242}
32243
32244/**
32245 * An element may be an instance of type "FunctionalArchitectureModel class DefinedPart".
32246 */
32247private pattern mayInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
32248{ find mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem,interpretation,element); }
32249/**
32250 * An element must be an instance of type "FunctionalArchitectureModel class UndefinedPart".
32251 */
32252private pattern mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
32253 Type.name(type,"FunctionalArchitectureModel class UndefinedPart");
32254 find directInstanceOf(problem,interpretation,element,type);
32255}
32256private pattern scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
32257 find interpretation(problem,interpretation);
32258 PartialInterpretation.scopes(interpretation,scope);
32259 Scope.targetTypeInterpretation(scope,typeInterpretation);
32260 Scope.maxNewElements(scope,0);
32261 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
32262 Type.name(type,"FunctionalArchitectureModel class UndefinedPart");
32263}
32264
32265/**
32266 * An element may be an instance of type "FunctionalArchitectureModel class UndefinedPart".
32267 */
32268private pattern mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
32269{
32270 find interpretation(problem,interpretation);
32271 PartialInterpretation.newElements(interpretation,element);
32272 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
32273 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
32274 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
32275 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
32276 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
32277 neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation);
32278 neg find isPrimitive(element);
32279} or {
32280 find interpretation(problem,interpretation);
32281 PartialInterpretation.openWorldElements(interpretation,element);
32282 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
32283 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
32284 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
32285 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
32286 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
32287 neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation);
32288 neg find isPrimitive(element);
32289} or
32290{ find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); }
32291
32292//////////
32293// 1.2 Relation Declaration Indexers
32294//////////
32295/**
32296 * Matcher for detecting tuples t where []interface reference FunctionalElement(source,target)
32297 */
32298private pattern mustInRelationinterface_reference_FunctionalElement(
32299 problem:LogicProblem, interpretation:PartialInterpretation,
32300 source: DefinedElement, target:DefinedElement)
32301{
32302 find interpretation(problem,interpretation);
32303 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
32304 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface reference FunctionalElement");
32305 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
32306 BinaryElementRelationLink.param1(link,source);
32307 BinaryElementRelationLink.param2(link,target);
32308}
32309/**
32310 * Matcher for detecting tuples t where <>interface reference FunctionalElement(source,target)
32311 */
32312private pattern mayInRelationinterface_reference_FunctionalElement(
32313 problem:LogicProblem, interpretation:PartialInterpretation,
32314 source: DefinedElement, target:DefinedElement)
32315{
32316 find interpretation(problem,interpretation);
32317 // The two endpoint of the link have to exist
32318 find mayExist(problem, interpretation, source);
32319 find mayExist(problem, interpretation, target);
32320 // Type consistency
32321 find mayInstanceOfFunctionalElement_class(problem,interpretation,source);
32322 find mayInstanceOfFunctionalInterface_class(problem,interpretation,target);
32323 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
32324 // the upper bound of the multiplicity should be considered.
32325 numberOfExistingReferences == count find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,_);
32326 check(numberOfExistingReferences < 1);
32327 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
32328 // the upper bound of the opposite reference multiplicity should be considered.
32329 numberOfExistingOppositeReferences == count find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,target,_);
32330 check(numberOfExistingOppositeReferences < 1);
32331 // The reference is containment, then a new reference cannot be create if:
32332 // 1. Multiple parents
32333 neg find mustContains4(problem,interpretation,_,target);
32334 // 2. Circle in the containment hierarchy
32335 neg find mustTransitiveContains(source,target);
32336} or {
32337 find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,target);
32338}
32339/**
32340 * Matcher for detecting tuples t where []model reference FunctionalElement(source,target)
32341 */
32342private pattern mustInRelationmodel_reference_FunctionalElement(
32343 problem:LogicProblem, interpretation:PartialInterpretation,
32344 source: DefinedElement, target:DefinedElement)
32345{
32346 find interpretation(problem,interpretation);
32347 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
32348 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement");
32349 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
32350 BinaryElementRelationLink.param1(link,source);
32351 BinaryElementRelationLink.param2(link,target);
32352}
32353/**
32354 * Matcher for detecting tuples t where <>model reference FunctionalElement(source,target)
32355 */
32356private pattern mayInRelationmodel_reference_FunctionalElement(
32357 problem:LogicProblem, interpretation:PartialInterpretation,
32358 source: DefinedElement, target:DefinedElement)
32359{
32360 find interpretation(problem,interpretation);
32361 // The two endpoint of the link have to exist
32362 find mayExist(problem, interpretation, source);
32363 find mayExist(problem, interpretation, target);
32364 // Type consistency
32365 find mayInstanceOfFunctionalElement_class(problem,interpretation,source);
32366 find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,target);
32367 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
32368 // the upper bound of the multiplicity should be considered.
32369 numberOfExistingReferences == count find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,source,_);
32370 check(numberOfExistingReferences < 1);
32371} or {
32372 find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,source,target);
32373}
32374/**
32375 * Matcher for detecting tuples t where []parent reference FunctionalElement(source,target)
32376 */
32377private pattern mustInRelationparent_reference_FunctionalElement(
32378 problem:LogicProblem, interpretation:PartialInterpretation,
32379 source: DefinedElement, target:DefinedElement)
32380{
32381 find interpretation(problem,interpretation);
32382 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
32383 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"parent reference FunctionalElement");
32384 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
32385 BinaryElementRelationLink.param1(link,source);
32386 BinaryElementRelationLink.param2(link,target);
32387}
32388/**
32389 * Matcher for detecting tuples t where <>parent reference FunctionalElement(source,target)
32390 */
32391private pattern mayInRelationparent_reference_FunctionalElement(
32392 problem:LogicProblem, interpretation:PartialInterpretation,
32393 source: DefinedElement, target:DefinedElement)
32394{
32395 find interpretation(problem,interpretation);
32396 // The two endpoint of the link have to exist
32397 find mayExist(problem, interpretation, source);
32398 find mayExist(problem, interpretation, target);
32399 // Type consistency
32400 find mayInstanceOfFunctionalElement_class(problem,interpretation,source);
32401 find mayInstanceOfFunction_class(problem,interpretation,target);
32402 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
32403 // the upper bound of the multiplicity should be considered.
32404 numberOfExistingReferences == count find mustInRelationparent_reference_FunctionalElement(problem,interpretation,source,_);
32405 check(numberOfExistingReferences < 1);
32406 // The eOpposite of the reference is containment, then a referene cannot be created if
32407 // 1. Multiple parents
32408 neg find mustContains4(problem,interpretation,source,_);
32409 // 2. Circle in the containment hierarchy
32410 neg find mustTransitiveContains(source,target);
32411} or {
32412 find mustInRelationparent_reference_FunctionalElement(problem,interpretation,source,target);
32413}
32414/**
32415 * Matcher for detecting tuples t where []rootElements reference FunctionalArchitectureModel(source,target)
32416 */
32417private pattern mustInRelationrootElements_reference_FunctionalArchitectureModel(
32418 problem:LogicProblem, interpretation:PartialInterpretation,
32419 source: DefinedElement, target:DefinedElement)
32420{
32421 find interpretation(problem,interpretation);
32422 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
32423 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"rootElements reference FunctionalArchitectureModel");
32424 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
32425 BinaryElementRelationLink.param1(link,source);
32426 BinaryElementRelationLink.param2(link,target);
32427}
32428/**
32429 * Matcher for detecting tuples t where <>rootElements reference FunctionalArchitectureModel(source,target)
32430 */
32431private pattern mayInRelationrootElements_reference_FunctionalArchitectureModel(
32432 problem:LogicProblem, interpretation:PartialInterpretation,
32433 source: DefinedElement, target:DefinedElement)
32434{
32435 find interpretation(problem,interpretation);
32436 // The two endpoint of the link have to exist
32437 find mayExist(problem, interpretation, source);
32438 find mayExist(problem, interpretation, target);
32439 // Type consistency
32440 find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,source);
32441 find mayInstanceOfFunctionalElement_class(problem,interpretation,target);
32442 // The reference is containment, then a new reference cannot be create if:
32443 // 1. Multiple parents
32444 neg find mustContains4(problem,interpretation,_,target);
32445 // 2. Circle in the containment hierarchy
32446 neg find mustTransitiveContains(source,target);
32447} or {
32448 find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,source,target);
32449}
32450/**
32451 * Matcher for detecting tuples t where []subElements reference Function(source,target)
32452 */
32453private pattern mustInRelationsubElements_reference_Function(
32454 problem:LogicProblem, interpretation:PartialInterpretation,
32455 source: DefinedElement, target:DefinedElement)
32456{
32457 find interpretation(problem,interpretation);
32458 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
32459 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"subElements reference Function");
32460 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
32461 BinaryElementRelationLink.param1(link,source);
32462 BinaryElementRelationLink.param2(link,target);
32463}
32464/**
32465 * Matcher for detecting tuples t where <>subElements reference Function(source,target)
32466 */
32467private pattern mayInRelationsubElements_reference_Function(
32468 problem:LogicProblem, interpretation:PartialInterpretation,
32469 source: DefinedElement, target:DefinedElement)
32470{
32471 find interpretation(problem,interpretation);
32472 // The two endpoint of the link have to exist
32473 find mayExist(problem, interpretation, source);
32474 find mayExist(problem, interpretation, target);
32475 // Type consistency
32476 find mayInstanceOfFunction_class(problem,interpretation,source);
32477 find mayInstanceOfFunctionalElement_class(problem,interpretation,target);
32478 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
32479 // the upper bound of the opposite reference multiplicity should be considered.
32480 numberOfExistingOppositeReferences == count find mustInRelationparent_reference_FunctionalElement(problem,interpretation,target,_);
32481 check(numberOfExistingOppositeReferences < 1);
32482 // The reference is containment, then a new reference cannot be create if:
32483 // 1. Multiple parents
32484 neg find mustContains4(problem,interpretation,_,target);
32485 // 2. Circle in the containment hierarchy
32486 neg find mustTransitiveContains(source,target);
32487} or {
32488 find mustInRelationsubElements_reference_Function(problem,interpretation,source,target);
32489}
32490/**
32491 * Matcher for detecting tuples t where []data reference FAMTerminator(source,target)
32492 */
32493private pattern mustInRelationdata_reference_FAMTerminator(
32494 problem:LogicProblem, interpretation:PartialInterpretation,
32495 source: DefinedElement, target:DefinedElement)
32496{
32497 find interpretation(problem,interpretation);
32498 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
32499 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"data reference FAMTerminator");
32500 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
32501 BinaryElementRelationLink.param1(link,source);
32502 BinaryElementRelationLink.param2(link,target);
32503}
32504/**
32505 * Matcher for detecting tuples t where <>data reference FAMTerminator(source,target)
32506 */
32507private pattern mayInRelationdata_reference_FAMTerminator(
32508 problem:LogicProblem, interpretation:PartialInterpretation,
32509 source: DefinedElement, target:DefinedElement)
32510{
32511 find interpretation(problem,interpretation);
32512 // The two endpoint of the link have to exist
32513 find mayExist(problem, interpretation, source);
32514 find mayExist(problem, interpretation, target);
32515 // Type consistency
32516 find mayInstanceOfFAMTerminator_class(problem,interpretation,source);
32517 find mayInstanceOfFunctionalData_class(problem,interpretation,target);
32518 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
32519 // the upper bound of the multiplicity should be considered.
32520 numberOfExistingReferences == count find mustInRelationdata_reference_FAMTerminator(problem,interpretation,source,_);
32521 check(numberOfExistingReferences < 1);
32522 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
32523 // the upper bound of the opposite reference multiplicity should be considered.
32524 numberOfExistingOppositeReferences == count find mustInRelationterminator_reference_FunctionalData(problem,interpretation,target,_);
32525 check(numberOfExistingOppositeReferences < 1);
32526 // The eOpposite of the reference is containment, then a referene cannot be created if
32527 // 1. Multiple parents
32528 neg find mustContains4(problem,interpretation,source,_);
32529 // 2. Circle in the containment hierarchy
32530 neg find mustTransitiveContains(source,target);
32531} or {
32532 find mustInRelationdata_reference_FAMTerminator(problem,interpretation,source,target);
32533}
32534/**
32535 * Matcher for detecting tuples t where []from reference InformationLink(source,target)
32536 */
32537private pattern mustInRelationfrom_reference_InformationLink(
32538 problem:LogicProblem, interpretation:PartialInterpretation,
32539 source: DefinedElement, target:DefinedElement)
32540{
32541 find interpretation(problem,interpretation);
32542 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
32543 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"from reference InformationLink");
32544 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
32545 BinaryElementRelationLink.param1(link,source);
32546 BinaryElementRelationLink.param2(link,target);
32547}
32548/**
32549 * Matcher for detecting tuples t where <>from reference InformationLink(source,target)
32550 */
32551private pattern mayInRelationfrom_reference_InformationLink(
32552 problem:LogicProblem, interpretation:PartialInterpretation,
32553 source: DefinedElement, target:DefinedElement)
32554{
32555 find interpretation(problem,interpretation);
32556 // The two endpoint of the link have to exist
32557 find mayExist(problem, interpretation, source);
32558 find mayExist(problem, interpretation, target);
32559 // Type consistency
32560 find mayInstanceOfInformationLink_class(problem,interpretation,source);
32561 find mayInstanceOfFunctionalOutput_class(problem,interpretation,target);
32562 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
32563 // the upper bound of the multiplicity should be considered.
32564 numberOfExistingReferences == count find mustInRelationfrom_reference_InformationLink(problem,interpretation,source,_);
32565 check(numberOfExistingReferences < 1);
32566 // The eOpposite of the reference is containment, then a referene cannot be created if
32567 // 1. Multiple parents
32568 neg find mustContains4(problem,interpretation,source,_);
32569 // 2. Circle in the containment hierarchy
32570 neg find mustTransitiveContains(source,target);
32571} or {
32572 find mustInRelationfrom_reference_InformationLink(problem,interpretation,source,target);
32573}
32574/**
32575 * Matcher for detecting tuples t where []to reference InformationLink(source,target)
32576 */
32577private pattern mustInRelationto_reference_InformationLink(
32578 problem:LogicProblem, interpretation:PartialInterpretation,
32579 source: DefinedElement, target:DefinedElement)
32580{
32581 find interpretation(problem,interpretation);
32582 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
32583 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"to reference InformationLink");
32584 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
32585 BinaryElementRelationLink.param1(link,source);
32586 BinaryElementRelationLink.param2(link,target);
32587}
32588/**
32589 * Matcher for detecting tuples t where <>to reference InformationLink(source,target)
32590 */
32591private pattern mayInRelationto_reference_InformationLink(
32592 problem:LogicProblem, interpretation:PartialInterpretation,
32593 source: DefinedElement, target:DefinedElement)
32594{
32595 find interpretation(problem,interpretation);
32596 // The two endpoint of the link have to exist
32597 find mayExist(problem, interpretation, source);
32598 find mayExist(problem, interpretation, target);
32599 // Type consistency
32600 find mayInstanceOfInformationLink_class(problem,interpretation,source);
32601 find mayInstanceOfFunctionalInput_class(problem,interpretation,target);
32602 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
32603 // the upper bound of the multiplicity should be considered.
32604 numberOfExistingReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,source,_);
32605 check(numberOfExistingReferences < 1);
32606} or {
32607 find mustInRelationto_reference_InformationLink(problem,interpretation,source,target);
32608}
32609/**
32610 * Matcher for detecting tuples t where []data reference FunctionalInterface(source,target)
32611 */
32612private pattern mustInRelationdata_reference_FunctionalInterface(
32613 problem:LogicProblem, interpretation:PartialInterpretation,
32614 source: DefinedElement, target:DefinedElement)
32615{
32616 find interpretation(problem,interpretation);
32617 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
32618 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"data reference FunctionalInterface");
32619 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
32620 BinaryElementRelationLink.param1(link,source);
32621 BinaryElementRelationLink.param2(link,target);
32622}
32623/**
32624 * Matcher for detecting tuples t where <>data reference FunctionalInterface(source,target)
32625 */
32626private pattern mayInRelationdata_reference_FunctionalInterface(
32627 problem:LogicProblem, interpretation:PartialInterpretation,
32628 source: DefinedElement, target:DefinedElement)
32629{
32630 find interpretation(problem,interpretation);
32631 // The two endpoint of the link have to exist
32632 find mayExist(problem, interpretation, source);
32633 find mayExist(problem, interpretation, target);
32634 // Type consistency
32635 find mayInstanceOfFunctionalInterface_class(problem,interpretation,source);
32636 find mayInstanceOfFunctionalData_class(problem,interpretation,target);
32637 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
32638 // the upper bound of the opposite reference multiplicity should be considered.
32639 numberOfExistingOppositeReferences == count find mustInRelationinterface_reference_FunctionalData(problem,interpretation,target,_);
32640 check(numberOfExistingOppositeReferences < 1);
32641 // The reference is containment, then a new reference cannot be create if:
32642 // 1. Multiple parents
32643 neg find mustContains4(problem,interpretation,_,target);
32644 // 2. Circle in the containment hierarchy
32645 neg find mustTransitiveContains(source,target);
32646} or {
32647 find mustInRelationdata_reference_FunctionalInterface(problem,interpretation,source,target);
32648}
32649/**
32650 * Matcher for detecting tuples t where []element reference FunctionalInterface(source,target)
32651 */
32652private pattern mustInRelationelement_reference_FunctionalInterface(
32653 problem:LogicProblem, interpretation:PartialInterpretation,
32654 source: DefinedElement, target:DefinedElement)
32655{
32656 find interpretation(problem,interpretation);
32657 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
32658 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"element reference FunctionalInterface");
32659 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
32660 BinaryElementRelationLink.param1(link,source);
32661 BinaryElementRelationLink.param2(link,target);
32662}
32663/**
32664 * Matcher for detecting tuples t where <>element reference FunctionalInterface(source,target)
32665 */
32666private pattern mayInRelationelement_reference_FunctionalInterface(
32667 problem:LogicProblem, interpretation:PartialInterpretation,
32668 source: DefinedElement, target:DefinedElement)
32669{
32670 find interpretation(problem,interpretation);
32671 // The two endpoint of the link have to exist
32672 find mayExist(problem, interpretation, source);
32673 find mayExist(problem, interpretation, target);
32674 // Type consistency
32675 find mayInstanceOfFunctionalInterface_class(problem,interpretation,source);
32676 find mayInstanceOfFunctionalElement_class(problem,interpretation,target);
32677 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
32678 // the upper bound of the multiplicity should be considered.
32679 numberOfExistingReferences == count find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,source,_);
32680 check(numberOfExistingReferences < 1);
32681 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
32682 // the upper bound of the opposite reference multiplicity should be considered.
32683 numberOfExistingOppositeReferences == count find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,target,_);
32684 check(numberOfExistingOppositeReferences < 1);
32685 // The eOpposite of the reference is containment, then a referene cannot be created if
32686 // 1. Multiple parents
32687 neg find mustContains4(problem,interpretation,source,_);
32688 // 2. Circle in the containment hierarchy
32689 neg find mustTransitiveContains(source,target);
32690} or {
32691 find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,source,target);
32692}
32693/**
32694 * Matcher for detecting tuples t where []IncomingLinks reference FunctionalInput(source,target)
32695 */
32696private pattern mustInRelationIncomingLinks_reference_FunctionalInput(
32697 problem:LogicProblem, interpretation:PartialInterpretation,
32698 source: DefinedElement, target:DefinedElement)
32699{
32700 find interpretation(problem,interpretation);
32701 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
32702 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"IncomingLinks reference FunctionalInput");
32703 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
32704 BinaryElementRelationLink.param1(link,source);
32705 BinaryElementRelationLink.param2(link,target);
32706}
32707/**
32708 * Matcher for detecting tuples t where <>IncomingLinks reference FunctionalInput(source,target)
32709 */
32710private pattern mayInRelationIncomingLinks_reference_FunctionalInput(
32711 problem:LogicProblem, interpretation:PartialInterpretation,
32712 source: DefinedElement, target:DefinedElement)
32713{
32714 find interpretation(problem,interpretation);
32715 // The two endpoint of the link have to exist
32716 find mayExist(problem, interpretation, source);
32717 find mayExist(problem, interpretation, target);
32718 // Type consistency
32719 find mayInstanceOfFunctionalInput_class(problem,interpretation,source);
32720 find mayInstanceOfInformationLink_class(problem,interpretation,target);
32721 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
32722 // the upper bound of the opposite reference multiplicity should be considered.
32723 numberOfExistingOppositeReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,target,_);
32724 check(numberOfExistingOppositeReferences < 1);
32725} or {
32726 find mustInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,source,target);
32727}
32728/**
32729 * Matcher for detecting tuples t where []outgoingLinks reference FunctionalOutput(source,target)
32730 */
32731private pattern mustInRelationoutgoingLinks_reference_FunctionalOutput(
32732 problem:LogicProblem, interpretation:PartialInterpretation,
32733 source: DefinedElement, target:DefinedElement)
32734{
32735 find interpretation(problem,interpretation);
32736 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
32737 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"outgoingLinks reference FunctionalOutput");
32738 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
32739 BinaryElementRelationLink.param1(link,source);
32740 BinaryElementRelationLink.param2(link,target);
32741}
32742/**
32743 * Matcher for detecting tuples t where <>outgoingLinks reference FunctionalOutput(source,target)
32744 */
32745private pattern mayInRelationoutgoingLinks_reference_FunctionalOutput(
32746 problem:LogicProblem, interpretation:PartialInterpretation,
32747 source: DefinedElement, target:DefinedElement)
32748{
32749 find interpretation(problem,interpretation);
32750 // The two endpoint of the link have to exist
32751 find mayExist(problem, interpretation, source);
32752 find mayExist(problem, interpretation, target);
32753 // Type consistency
32754 find mayInstanceOfFunctionalOutput_class(problem,interpretation,source);
32755 find mayInstanceOfInformationLink_class(problem,interpretation,target);
32756 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
32757 // the upper bound of the opposite reference multiplicity should be considered.
32758 numberOfExistingOppositeReferences == count find mustInRelationfrom_reference_InformationLink(problem,interpretation,target,_);
32759 check(numberOfExistingOppositeReferences < 1);
32760 // The reference is containment, then a new reference cannot be create if:
32761 // 1. Multiple parents
32762 neg find mustContains4(problem,interpretation,_,target);
32763 // 2. Circle in the containment hierarchy
32764 neg find mustTransitiveContains(source,target);
32765} or {
32766 find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,source,target);
32767}
32768/**
32769 * Matcher for detecting tuples t where []terminator reference FunctionalData(source,target)
32770 */
32771private pattern mustInRelationterminator_reference_FunctionalData(
32772 problem:LogicProblem, interpretation:PartialInterpretation,
32773 source: DefinedElement, target:DefinedElement)
32774{
32775 find interpretation(problem,interpretation);
32776 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
32777 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"terminator reference FunctionalData");
32778 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
32779 BinaryElementRelationLink.param1(link,source);
32780 BinaryElementRelationLink.param2(link,target);
32781}
32782/**
32783 * Matcher for detecting tuples t where <>terminator reference FunctionalData(source,target)
32784 */
32785private pattern mayInRelationterminator_reference_FunctionalData(
32786 problem:LogicProblem, interpretation:PartialInterpretation,
32787 source: DefinedElement, target:DefinedElement)
32788{
32789 find interpretation(problem,interpretation);
32790 // The two endpoint of the link have to exist
32791 find mayExist(problem, interpretation, source);
32792 find mayExist(problem, interpretation, target);
32793 // Type consistency
32794 find mayInstanceOfFunctionalData_class(problem,interpretation,source);
32795 find mayInstanceOfFAMTerminator_class(problem,interpretation,target);
32796 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
32797 // the upper bound of the multiplicity should be considered.
32798 numberOfExistingReferences == count find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,_);
32799 check(numberOfExistingReferences < 1);
32800 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
32801 // the upper bound of the opposite reference multiplicity should be considered.
32802 numberOfExistingOppositeReferences == count find mustInRelationdata_reference_FAMTerminator(problem,interpretation,target,_);
32803 check(numberOfExistingOppositeReferences < 1);
32804 // The reference is containment, then a new reference cannot be create if:
32805 // 1. Multiple parents
32806 neg find mustContains4(problem,interpretation,_,target);
32807 // 2. Circle in the containment hierarchy
32808 neg find mustTransitiveContains(source,target);
32809} or {
32810 find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,target);
32811}
32812/**
32813 * Matcher for detecting tuples t where []interface reference FunctionalData(source,target)
32814 */
32815private pattern mustInRelationinterface_reference_FunctionalData(
32816 problem:LogicProblem, interpretation:PartialInterpretation,
32817 source: DefinedElement, target:DefinedElement)
32818{
32819 find interpretation(problem,interpretation);
32820 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
32821 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface reference FunctionalData");
32822 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
32823 BinaryElementRelationLink.param1(link,source);
32824 BinaryElementRelationLink.param2(link,target);
32825}
32826/**
32827 * Matcher for detecting tuples t where <>interface reference FunctionalData(source,target)
32828 */
32829private pattern mayInRelationinterface_reference_FunctionalData(
32830 problem:LogicProblem, interpretation:PartialInterpretation,
32831 source: DefinedElement, target:DefinedElement)
32832{
32833 find interpretation(problem,interpretation);
32834 // The two endpoint of the link have to exist
32835 find mayExist(problem, interpretation, source);
32836 find mayExist(problem, interpretation, target);
32837 // Type consistency
32838 find mayInstanceOfFunctionalData_class(problem,interpretation,source);
32839 find mayInstanceOfFunctionalInterface_class(problem,interpretation,target);
32840 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
32841 // the upper bound of the multiplicity should be considered.
32842 numberOfExistingReferences == count find mustInRelationinterface_reference_FunctionalData(problem,interpretation,source,_);
32843 check(numberOfExistingReferences < 1);
32844 // The eOpposite of the reference is containment, then a referene cannot be created if
32845 // 1. Multiple parents
32846 neg find mustContains4(problem,interpretation,source,_);
32847 // 2. Circle in the containment hierarchy
32848 neg find mustTransitiveContains(source,target);
32849} or {
32850 find mustInRelationinterface_reference_FunctionalData(problem,interpretation,source,target);
32851}
32852/**
32853 * Matcher for detecting tuples t where []type attribute Function(source,target)
32854 */
32855private pattern mustInRelationtype_attribute_Function(
32856 problem:LogicProblem, interpretation:PartialInterpretation,
32857 source: DefinedElement, target:DefinedElement)
32858{
32859 find interpretation(problem,interpretation);
32860 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
32861 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function");
32862 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
32863 BinaryElementRelationLink.param1(link,source);
32864 BinaryElementRelationLink.param2(link,target);
32865}
32866/**
32867 * Matcher for detecting tuples t where <>type attribute Function(source,target)
32868 */
32869private pattern mayInRelationtype_attribute_Function(
32870 problem:LogicProblem, interpretation:PartialInterpretation,
32871 source: DefinedElement, target:DefinedElement)
32872{
32873 find interpretation(problem,interpretation);
32874 // The two endpoint of the link have to exist
32875 find mayExist(problem, interpretation, source);
32876 find mayExist(problem, interpretation, target);
32877 // Type consistency
32878 find mayInstanceOfFunction_class(problem,interpretation,source);
32879 find mayInstanceOfFunctionType_enum(problem,interpretation,target);
32880 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
32881 // the upper bound of the multiplicity should be considered.
32882 numberOfExistingReferences == count find mustInRelationtype_attribute_Function(problem,interpretation,source,_);
32883 check(numberOfExistingReferences < 1);
32884} or {
32885 find mustInRelationtype_attribute_Function(problem,interpretation,source,target);
32886}
32887
32888//////////
32889// 1.3 Relation Definition Indexers
32890//////////
32891
32892//////////
32893// 1.4 Containment Indexer
32894//////////
32895private pattern mustContains2(source: DefinedElement, target: DefinedElement) {
32896 find mustContains4(_,_,source,target);
32897}
32898
32899private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation,
32900 source: DefinedElement, target: DefinedElement)
32901 { find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,target); }or
32902
32903 { find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,source,target); }or
32904
32905 { find mustInRelationsubElements_reference_Function(problem,interpretation,source,target); }or
32906
32907 { find mustInRelationdata_reference_FunctionalInterface(problem,interpretation,source,target); }or
32908
32909 { find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,source,target); }or
32910
32911 { find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,target); }
32912
32913private pattern mustTransitiveContains(source,target) {
32914 find mustContains2+(source,target);
32915}
32916
32917//////////
32918// 2. Invalidation Indexers
32919//////////
32920// 2.1 Invalidated by WF Queries
32921//////////
32922
32923//////////
32924// 3. Unfinishedness Indexers
32925//////////
32926// 3.1 Unfinishedness Measured by Multiplicity
32927//////////
32928pattern unfinishedLowerMultiplicity_model_reference_FunctionalElement(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) {
32929 find interpretation(problem,interpretation);
32930 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
32931 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement");
32932 find mustInstanceOfFunctionalElement_class(problem,interpretation,object);
32933 numberOfExistingReferences == count find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,object,_);
32934 check(numberOfExistingReferences < 1);
32935 missingMultiplicity == eval(1-numberOfExistingReferences);
32936}
32937pattern unfinishedLowerMultiplicity_to_reference_InformationLink(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) {
32938 find interpretation(problem,interpretation);
32939 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
32940 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"to reference InformationLink");
32941 find mustInstanceOfInformationLink_class(problem,interpretation,object);
32942 numberOfExistingReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,object,_);
32943 check(numberOfExistingReferences < 1);
32944 missingMultiplicity == eval(1-numberOfExistingReferences);
32945}
32946pattern unfinishedLowerMultiplicity_type_attribute_Function(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) {
32947 find interpretation(problem,interpretation);
32948 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
32949 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function");
32950 find mustInstanceOfFunction_class(problem,interpretation,object);
32951 numberOfExistingReferences == count find mustInRelationtype_attribute_Function(problem,interpretation,object,_);
32952 check(numberOfExistingReferences < 1);
32953 missingMultiplicity == eval(1-numberOfExistingReferences);
32954}
32955
32956//////////
32957// 3.2 Unfinishedness Measured by WF Queries
32958//////////
32959
32960//////////
32961// 4. Refinement Indexers
32962//////////
32963// 4.1 Object constructors
32964//////////
32965private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation)
32966{
32967 find interpretation(problem,interpretation);
32968 find mustInstanceOfFunctionalInput_class(problem,interpretation,root);
32969 find mustExist(problem, interpretation, root);
32970}or{
32971 find interpretation(problem,interpretation);
32972 find mustInstanceOfFAMTerminator_class(problem,interpretation,root);
32973 find mustExist(problem, interpretation, root);
32974}or{
32975 find interpretation(problem,interpretation);
32976 find mustInstanceOfFunction_class(problem,interpretation,root);
32977 find mustExist(problem, interpretation, root);
32978}or{
32979 find interpretation(problem,interpretation);
32980 find mustInstanceOfInformationLink_class(problem,interpretation,root);
32981 find mustExist(problem, interpretation, root);
32982}or{
32983 find interpretation(problem,interpretation);
32984 find mustInstanceOfFunctionalElement_class(problem,interpretation,root);
32985 find mustExist(problem, interpretation, root);
32986}or{
32987 find interpretation(problem,interpretation);
32988 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,root);
32989 find mustExist(problem, interpretation, root);
32990}or{
32991 find interpretation(problem,interpretation);
32992 find mustInstanceOfFunctionalOutput_class(problem,interpretation,root);
32993 find mustExist(problem, interpretation, root);
32994}or{
32995 find interpretation(problem,interpretation);
32996 find mustInstanceOfFunctionalData_class(problem,interpretation,root);
32997 find mustExist(problem, interpretation, root);
32998}or{
32999 find interpretation(problem,interpretation);
33000 find mustInstanceOfFunctionalInterface_class(problem,interpretation,root);
33001 find mustExist(problem, interpretation, root);
33002}or{
33003 find interpretation(problem,interpretation);
33004 find mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem,interpretation,root);
33005 find mustExist(problem, interpretation, root);
33006}or{
33007 find interpretation(problem,interpretation);
33008 find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,root);
33009 find mustExist(problem, interpretation, root);
33010}
33011pattern createObject_FunctionalInterface_class_by_interface_reference_FunctionalElement_with_element_reference_FunctionalInterface(
33012 problem:LogicProblem, interpretation:PartialInterpretation,
33013 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
33014 container:DefinedElement)
33015{
33016 find interpretation(problem,interpretation);
33017 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
33018 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class");
33019 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
33020 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"interface reference FunctionalElement");
33021 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
33022 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"element reference FunctionalInterface");
33023 find mustInstanceOfFunctionalElement_class(problem,interpretation,container);
33024 find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject);
33025 find mayInRelationinterface_reference_FunctionalElement(problem,interpretation,container,newObject);
33026 find mustExist(problem, interpretation, container);
33027 neg find mustExist(problem, interpretation, newObject);
33028}
33029pattern createObject_FunctionalInterface_class(
33030 problem:LogicProblem, interpretation:PartialInterpretation,
33031 typeInterpretation:PartialComplexTypeInterpretation)
33032{
33033 find interpretation(problem,interpretation);
33034 neg find hasElementInContainment(problem,interpretation);
33035 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
33036 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class");
33037 find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject);
33038 find mayExist(problem, interpretation, newObject);
33039 neg find mustExist(problem, interpretation, newObject);
33040}
33041pattern createObject_InformationLink_class_by_outgoingLinks_reference_FunctionalOutput_with_from_reference_InformationLink(
33042 problem:LogicProblem, interpretation:PartialInterpretation,
33043 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
33044 container:DefinedElement)
33045{
33046 find interpretation(problem,interpretation);
33047 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
33048 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class");
33049 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
33050 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingLinks reference FunctionalOutput");
33051 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
33052 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"from reference InformationLink");
33053 find mustInstanceOfFunctionalOutput_class(problem,interpretation,container);
33054 find mayInstanceOfInformationLink_class(problem,interpretation,newObject);
33055 find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,container,newObject);
33056 find mustExist(problem, interpretation, container);
33057 neg find mustExist(problem, interpretation, newObject);
33058}
33059pattern createObject_InformationLink_class(
33060 problem:LogicProblem, interpretation:PartialInterpretation,
33061 typeInterpretation:PartialComplexTypeInterpretation)
33062{
33063 find interpretation(problem,interpretation);
33064 neg find hasElementInContainment(problem,interpretation);
33065 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
33066 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class");
33067 find mayInstanceOfInformationLink_class(problem,interpretation,newObject);
33068 find mayExist(problem, interpretation, newObject);
33069 neg find mustExist(problem, interpretation, newObject);
33070}
33071pattern createObject_FAMTerminator_class_by_terminator_reference_FunctionalData_with_data_reference_FAMTerminator(
33072 problem:LogicProblem, interpretation:PartialInterpretation,
33073 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
33074 container:DefinedElement)
33075{
33076 find interpretation(problem,interpretation);
33077 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
33078 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class");
33079 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
33080 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"terminator reference FunctionalData");
33081 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
33082 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"data reference FAMTerminator");
33083 find mustInstanceOfFunctionalData_class(problem,interpretation,container);
33084 find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject);
33085 find mayInRelationterminator_reference_FunctionalData(problem,interpretation,container,newObject);
33086 find mustExist(problem, interpretation, container);
33087 neg find mustExist(problem, interpretation, newObject);
33088}
33089pattern createObject_FAMTerminator_class(
33090 problem:LogicProblem, interpretation:PartialInterpretation,
33091 typeInterpretation:PartialComplexTypeInterpretation)
33092{
33093 find interpretation(problem,interpretation);
33094 neg find hasElementInContainment(problem,interpretation);
33095 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
33096 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class");
33097 find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject);
33098 find mayExist(problem, interpretation, newObject);
33099 neg find mustExist(problem, interpretation, newObject);
33100}
33101pattern createObject_FunctionalInput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData(
33102 problem:LogicProblem, interpretation:PartialInterpretation,
33103 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
33104 container:DefinedElement)
33105{
33106 find interpretation(problem,interpretation);
33107 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
33108 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class");
33109 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
33110 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface");
33111 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
33112 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData");
33113 find mustInstanceOfFunctionalInterface_class(problem,interpretation,container);
33114 find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject);
33115 find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject);
33116 find mustExist(problem, interpretation, container);
33117 neg find mustExist(problem, interpretation, newObject);
33118}
33119pattern createObject_FunctionalInput_class(
33120 problem:LogicProblem, interpretation:PartialInterpretation,
33121 typeInterpretation:PartialComplexTypeInterpretation)
33122{
33123 find interpretation(problem,interpretation);
33124 neg find hasElementInContainment(problem,interpretation);
33125 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
33126 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class");
33127 find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject);
33128 find mayExist(problem, interpretation, newObject);
33129 neg find mustExist(problem, interpretation, newObject);
33130}
33131pattern createObject_FunctionalArchitectureModel_class_UndefinedPart(
33132 problem:LogicProblem, interpretation:PartialInterpretation,
33133 typeInterpretation:PartialComplexTypeInterpretation)
33134{
33135 find interpretation(problem,interpretation);
33136 neg find hasElementInContainment(problem,interpretation);
33137 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
33138 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalArchitectureModel class UndefinedPart");
33139 find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,newObject);
33140 find mayExist(problem, interpretation, newObject);
33141 neg find mustExist(problem, interpretation, newObject);
33142}
33143pattern createObject_Function_class_by_rootElements_reference_FunctionalArchitectureModel(
33144 problem:LogicProblem, interpretation:PartialInterpretation,
33145 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
33146 container:DefinedElement)
33147{
33148 find interpretation(problem,interpretation);
33149 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
33150 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class");
33151 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
33152 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"rootElements reference FunctionalArchitectureModel");
33153 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,container);
33154 find mayInstanceOfFunction_class(problem,interpretation,newObject);
33155 find mayInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,container,newObject);
33156 find mustExist(problem, interpretation, container);
33157 neg find mustExist(problem, interpretation, newObject);
33158}
33159pattern createObject_Function_class_by_subElements_reference_Function_with_parent_reference_FunctionalElement(
33160 problem:LogicProblem, interpretation:PartialInterpretation,
33161 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
33162 container:DefinedElement)
33163{
33164 find interpretation(problem,interpretation);
33165 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
33166 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class");
33167 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
33168 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"subElements reference Function");
33169 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
33170 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FunctionalElement");
33171 find mustInstanceOfFunction_class(problem,interpretation,container);
33172 find mayInstanceOfFunction_class(problem,interpretation,newObject);
33173 find mayInRelationsubElements_reference_Function(problem,interpretation,container,newObject);
33174 find mustExist(problem, interpretation, container);
33175 neg find mustExist(problem, interpretation, newObject);
33176}
33177pattern createObject_Function_class(
33178 problem:LogicProblem, interpretation:PartialInterpretation,
33179 typeInterpretation:PartialComplexTypeInterpretation)
33180{
33181 find interpretation(problem,interpretation);
33182 neg find hasElementInContainment(problem,interpretation);
33183 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
33184 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class");
33185 find mayInstanceOfFunction_class(problem,interpretation,newObject);
33186 find mayExist(problem, interpretation, newObject);
33187 neg find mustExist(problem, interpretation, newObject);
33188}
33189pattern createObject_FunctionalOutput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData(
33190 problem:LogicProblem, interpretation:PartialInterpretation,
33191 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
33192 container:DefinedElement)
33193{
33194 find interpretation(problem,interpretation);
33195 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
33196 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class");
33197 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
33198 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface");
33199 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
33200 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData");
33201 find mustInstanceOfFunctionalInterface_class(problem,interpretation,container);
33202 find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject);
33203 find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject);
33204 find mustExist(problem, interpretation, container);
33205 neg find mustExist(problem, interpretation, newObject);
33206}
33207pattern createObject_FunctionalOutput_class(
33208 problem:LogicProblem, interpretation:PartialInterpretation,
33209 typeInterpretation:PartialComplexTypeInterpretation)
33210{
33211 find interpretation(problem,interpretation);
33212 neg find hasElementInContainment(problem,interpretation);
33213 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
33214 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class");
33215 find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject);
33216 find mayExist(problem, interpretation, newObject);
33217 neg find mustExist(problem, interpretation, newObject);
33218}
33219
33220//////////
33221// 4.2 Type refinement
33222//////////
33223pattern refineTypeTo_FunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
33224 find interpretation(problem,interpretation);
33225 PartialInterpretation.newElements(interpretation,element);
33226 find mayInstanceOfFunctionalInterface_class(problem,interpretation,element);
33227 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
33228 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
33229 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
33230 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
33231 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
33232 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
33233}
33234pattern refineTypeTo_InformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
33235 find interpretation(problem,interpretation);
33236 PartialInterpretation.newElements(interpretation,element);
33237 find mayInstanceOfInformationLink_class(problem,interpretation,element);
33238 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
33239 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
33240 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
33241 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
33242 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
33243 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
33244}
33245pattern refineTypeTo_FAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
33246 find interpretation(problem,interpretation);
33247 PartialInterpretation.newElements(interpretation,element);
33248 find mayInstanceOfFAMTerminator_class(problem,interpretation,element);
33249 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
33250 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
33251 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
33252 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
33253 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
33254 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
33255}
33256pattern refineTypeTo_FunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
33257 find interpretation(problem,interpretation);
33258 PartialInterpretation.newElements(interpretation,element);
33259 find mayInstanceOfFunctionalInput_class(problem,interpretation,element);
33260 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
33261 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
33262 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
33263 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
33264 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
33265 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
33266 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
33267}
33268pattern refineTypeTo_FunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
33269 find interpretation(problem,interpretation);
33270 PartialInterpretation.newElements(interpretation,element);
33271 find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element);
33272 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
33273 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
33274 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
33275 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
33276 neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element);
33277 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
33278}
33279pattern refineTypeTo_Function_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
33280 find interpretation(problem,interpretation);
33281 PartialInterpretation.newElements(interpretation,element);
33282 find mayInstanceOfFunction_class(problem,interpretation,element);
33283 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
33284 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
33285 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
33286 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
33287 neg find mustInstanceOfFunction_class(problem,interpretation,element);
33288 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
33289}
33290pattern refineTypeTo_FunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
33291 find interpretation(problem,interpretation);
33292 PartialInterpretation.newElements(interpretation,element);
33293 find mayInstanceOfFunctionalOutput_class(problem,interpretation,element);
33294 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
33295 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
33296 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
33297 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
33298 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
33299 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
33300 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
33301}
33302
33303//////////
33304// 4.3 Relation refinement
33305//////////
33306pattern refineRelation_model_reference_FunctionalElement(
33307 problem:LogicProblem, interpretation:PartialInterpretation,
33308 relationIterpretation:PartialRelationInterpretation,
33309 from: DefinedElement, to: DefinedElement)
33310{
33311 find interpretation(problem,interpretation);
33312 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
33313 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement");
33314 find mustExist(problem, interpretation, from);
33315 find mustExist(problem, interpretation, to);
33316 find mustInstanceOfFunctionalElement_class(problem,interpretation,from);
33317 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,to);
33318 find mayInRelationmodel_reference_FunctionalElement(problem,interpretation,from,to);
33319 neg find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,from,to);
33320}
33321pattern refineRelation_IncomingLinks_reference_FunctionalInput_and_to_reference_InformationLink(
33322 problem:LogicProblem, interpretation:PartialInterpretation,
33323 relationIterpretation:PartialRelationInterpretation, oppositeInterpretation:PartialRelationInterpretation,
33324 from: DefinedElement, to: DefinedElement)
33325{
33326 find interpretation(problem,interpretation);
33327 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
33328 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"IncomingLinks reference FunctionalInput");
33329 PartialInterpretation.partialrelationinterpretation(interpretation,oppositeInterpretation);
33330 PartialRelationInterpretation.interpretationOf.name(oppositeInterpretation,"to reference InformationLink");
33331 find mustExist(problem, interpretation, from);
33332 find mustExist(problem, interpretation, to);
33333 find mustInstanceOfFunctionalInput_class(problem,interpretation,from);
33334 find mustInstanceOfInformationLink_class(problem,interpretation,to);
33335 find mayInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,from,to);
33336 neg find mustInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,from,to);
33337}
33338pattern refineRelation_type_attribute_Function(
33339 problem:LogicProblem, interpretation:PartialInterpretation,
33340 relationIterpretation:PartialRelationInterpretation,
33341 from: DefinedElement, to: DefinedElement)
33342{
33343 find interpretation(problem,interpretation);
33344 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
33345 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function");
33346 find mustExist(problem, interpretation, from);
33347 find mustExist(problem, interpretation, to);
33348 find mustInstanceOfFunction_class(problem,interpretation,from);
33349 find mustInstanceOfFunctionType_enum(problem,interpretation,to);
33350 find mayInRelationtype_attribute_Function(problem,interpretation,from,to);
33351 neg find mustInRelationtype_attribute_Function(problem,interpretation,from,to);
33352}
33353import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage"
33354import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem"
33355import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language"
33356
33357//////////
33358// 0. Util
33359//////////
33360private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) {
33361 PartialInterpretation.problem(interpretation,problem);
33362}
33363
33364/////////////////////////
33365// 0.1 Existence
33366/////////////////////////
33367private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
33368 find interpretation(problem,interpretation);
33369 LogicProblem.elements(problem,element);
33370} or {
33371 find interpretation(problem,interpretation);
33372 PartialInterpretation.newElements(interpretation,element);
33373}
33374
33375private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
33376 find mustExist(problem,interpretation,element);
33377} or {
33378 find interpretation(problem,interpretation);
33379 neg find elementCloseWorld(element);
33380 PartialInterpretation.openWorldElements(interpretation,element);
33381}
33382
33383private pattern elementCloseWorld(element:DefinedElement) {
33384 PartialInterpretation.openWorldElements(i,element);
33385 PartialInterpretation.maxNewElements(i,0);
33386} or {
33387 Scope.targetTypeInterpretation(scope,interpretation);
33388 PartialTypeInterpratation.elements(interpretation,element);
33389 Scope.maxNewElements(scope,0);
33390}
33391
33392////////////////////////
33393// 0.2 Equivalence
33394////////////////////////
33395pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) {
33396 find mayExist(problem,interpretation,a);
33397 find mayExist(problem,interpretation,b);
33398 a == b;
33399}
33400
33401////////////////////////
33402// 0.3 Required Patterns by TypeIndexer
33403////////////////////////
33404private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) {
33405 find interpretation(problem,interpretation);
33406 LogicProblem.types(problem,type);
33407 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
33408 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
33409}
33410
33411private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) {
33412 find interpretation(problem,interpretation);
33413 LogicProblem.types(problem,type);
33414 TypeDefinition.elements(type,element);
33415} or {
33416 find interpretation(problem,interpretation);
33417 find typeInterpretation(problem,interpretation,type,typeInterpretation);
33418 PartialComplexTypeInterpretation.elements(typeInterpretation,element);
33419}
33420
33421private pattern isPrimitive(element: PrimitiveElement) {
33422 PrimitiveElement(element);
33423}
33424
33425//////////
33426// 1. Problem-Specific Base Indexers
33427//////////
33428// 1.1 Type Indexers
33429//////////
33430// 1.1.1 primitive Type Indexers
33431//////////
33432
33433//////////
33434// 1.1.2 domain-specific Type Indexers
33435//////////
33436/**
33437 * An element must be an instance of type "FunctionalElement class".
33438 */
33439private pattern mustInstanceOfFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
33440 Type.name(type,"FunctionalElement class");
33441 find directInstanceOf(problem,interpretation,element,type);
33442}
33443private pattern scopeDisallowsNewFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation) {
33444 find interpretation(problem,interpretation);
33445 PartialInterpretation.scopes(interpretation,scope);
33446 Scope.targetTypeInterpretation(scope,typeInterpretation);
33447 Scope.maxNewElements(scope,0);
33448 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
33449 Type.name(type,"FunctionalElement class");
33450}
33451
33452/**
33453 * An element may be an instance of type "FunctionalElement class".
33454 */
33455private pattern mayInstanceOfFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
33456{
33457 find interpretation(problem,interpretation);
33458 PartialInterpretation.newElements(interpretation,element);
33459 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
33460 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
33461 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
33462 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
33463 neg find mustInstanceOfFunction_class(problem,interpretation,element);
33464 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
33465 neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation);
33466 neg find isPrimitive(element);
33467} or {
33468 find interpretation(problem,interpretation);
33469 PartialInterpretation.openWorldElements(interpretation,element);
33470 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
33471 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
33472 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
33473 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
33474 neg find mustInstanceOfFunction_class(problem,interpretation,element);
33475 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
33476 neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation);
33477 neg find isPrimitive(element);
33478} or
33479{ find mustInstanceOfFunctionalElement_class(problem,interpretation,element); }
33480/**
33481 * An element must be an instance of type "FunctionalArchitectureModel class".
33482 */
33483private pattern mustInstanceOfFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
33484 Type.name(type,"FunctionalArchitectureModel class");
33485 find directInstanceOf(problem,interpretation,element,type);
33486}
33487private pattern scopeDisallowsNewFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation) {
33488 find interpretation(problem,interpretation);
33489 PartialInterpretation.scopes(interpretation,scope);
33490 Scope.targetTypeInterpretation(scope,typeInterpretation);
33491 Scope.maxNewElements(scope,0);
33492 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
33493 Type.name(type,"FunctionalArchitectureModel class");
33494}
33495
33496/**
33497 * An element may be an instance of type "FunctionalArchitectureModel class".
33498 */
33499private pattern mayInstanceOfFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
33500{
33501 find interpretation(problem,interpretation);
33502 PartialInterpretation.newElements(interpretation,element);
33503 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
33504 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
33505 neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element);
33506 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
33507 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
33508 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
33509 neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation);
33510 neg find isPrimitive(element);
33511} or {
33512 find interpretation(problem,interpretation);
33513 PartialInterpretation.openWorldElements(interpretation,element);
33514 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
33515 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
33516 neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element);
33517 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
33518 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
33519 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
33520 neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation);
33521 neg find isPrimitive(element);
33522} or
33523{ find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); }
33524/**
33525 * An element must be an instance of type "Function class".
33526 */
33527private pattern mustInstanceOfFunction_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
33528 Type.name(type,"Function class");
33529 find directInstanceOf(problem,interpretation,element,type);
33530}
33531private pattern scopeDisallowsNewFunction_class(problem:LogicProblem, interpretation:PartialInterpretation) {
33532 find interpretation(problem,interpretation);
33533 PartialInterpretation.scopes(interpretation,scope);
33534 Scope.targetTypeInterpretation(scope,typeInterpretation);
33535 Scope.maxNewElements(scope,0);
33536 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
33537 Type.name(type,"Function class");
33538}
33539
33540/**
33541 * An element may be an instance of type "Function class".
33542 */
33543private pattern mayInstanceOfFunction_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
33544{
33545 find interpretation(problem,interpretation);
33546 PartialInterpretation.newElements(interpretation,element);
33547 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
33548 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
33549 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
33550 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
33551 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
33552 neg find scopeDisallowsNewFunction_class(problem, interpretation);
33553 neg find isPrimitive(element);
33554} or {
33555 find interpretation(problem,interpretation);
33556 PartialInterpretation.openWorldElements(interpretation,element);
33557 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
33558 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
33559 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
33560 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
33561 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
33562 neg find scopeDisallowsNewFunction_class(problem, interpretation);
33563 neg find isPrimitive(element);
33564} or
33565{ find mustInstanceOfFunction_class(problem,interpretation,element); }
33566/**
33567 * An element must be an instance of type "FAMTerminator class".
33568 */
33569private pattern mustInstanceOfFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
33570 Type.name(type,"FAMTerminator class");
33571 find directInstanceOf(problem,interpretation,element,type);
33572}
33573private pattern scopeDisallowsNewFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation) {
33574 find interpretation(problem,interpretation);
33575 PartialInterpretation.scopes(interpretation,scope);
33576 Scope.targetTypeInterpretation(scope,typeInterpretation);
33577 Scope.maxNewElements(scope,0);
33578 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
33579 Type.name(type,"FAMTerminator class");
33580}
33581
33582/**
33583 * An element may be an instance of type "FAMTerminator class".
33584 */
33585private pattern mayInstanceOfFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
33586{
33587 find interpretation(problem,interpretation);
33588 PartialInterpretation.newElements(interpretation,element);
33589 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
33590 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
33591 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
33592 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
33593 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
33594 neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation);
33595 neg find isPrimitive(element);
33596} or {
33597 find interpretation(problem,interpretation);
33598 PartialInterpretation.openWorldElements(interpretation,element);
33599 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
33600 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
33601 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
33602 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
33603 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
33604 neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation);
33605 neg find isPrimitive(element);
33606} or
33607{ find mustInstanceOfFAMTerminator_class(problem,interpretation,element); }
33608/**
33609 * An element must be an instance of type "InformationLink class".
33610 */
33611private pattern mustInstanceOfInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
33612 Type.name(type,"InformationLink class");
33613 find directInstanceOf(problem,interpretation,element,type);
33614}
33615private pattern scopeDisallowsNewInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation) {
33616 find interpretation(problem,interpretation);
33617 PartialInterpretation.scopes(interpretation,scope);
33618 Scope.targetTypeInterpretation(scope,typeInterpretation);
33619 Scope.maxNewElements(scope,0);
33620 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
33621 Type.name(type,"InformationLink class");
33622}
33623
33624/**
33625 * An element may be an instance of type "InformationLink class".
33626 */
33627private pattern mayInstanceOfInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
33628{
33629 find interpretation(problem,interpretation);
33630 PartialInterpretation.newElements(interpretation,element);
33631 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
33632 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
33633 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
33634 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
33635 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
33636 neg find scopeDisallowsNewInformationLink_class(problem, interpretation);
33637 neg find isPrimitive(element);
33638} or {
33639 find interpretation(problem,interpretation);
33640 PartialInterpretation.openWorldElements(interpretation,element);
33641 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
33642 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
33643 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
33644 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
33645 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
33646 neg find scopeDisallowsNewInformationLink_class(problem, interpretation);
33647 neg find isPrimitive(element);
33648} or
33649{ find mustInstanceOfInformationLink_class(problem,interpretation,element); }
33650/**
33651 * An element must be an instance of type "FunctionalInterface class".
33652 */
33653private pattern mustInstanceOfFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
33654 Type.name(type,"FunctionalInterface class");
33655 find directInstanceOf(problem,interpretation,element,type);
33656}
33657private pattern scopeDisallowsNewFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation) {
33658 find interpretation(problem,interpretation);
33659 PartialInterpretation.scopes(interpretation,scope);
33660 Scope.targetTypeInterpretation(scope,typeInterpretation);
33661 Scope.maxNewElements(scope,0);
33662 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
33663 Type.name(type,"FunctionalInterface class");
33664}
33665
33666/**
33667 * An element may be an instance of type "FunctionalInterface class".
33668 */
33669private pattern mayInstanceOfFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
33670{
33671 find interpretation(problem,interpretation);
33672 PartialInterpretation.newElements(interpretation,element);
33673 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
33674 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
33675 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
33676 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
33677 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
33678 neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation);
33679 neg find isPrimitive(element);
33680} or {
33681 find interpretation(problem,interpretation);
33682 PartialInterpretation.openWorldElements(interpretation,element);
33683 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
33684 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
33685 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
33686 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
33687 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
33688 neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation);
33689 neg find isPrimitive(element);
33690} or
33691{ find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); }
33692/**
33693 * An element must be an instance of type "FunctionalInput class".
33694 */
33695private pattern mustInstanceOfFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
33696 Type.name(type,"FunctionalInput class");
33697 find directInstanceOf(problem,interpretation,element,type);
33698}
33699private pattern scopeDisallowsNewFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation) {
33700 find interpretation(problem,interpretation);
33701 PartialInterpretation.scopes(interpretation,scope);
33702 Scope.targetTypeInterpretation(scope,typeInterpretation);
33703 Scope.maxNewElements(scope,0);
33704 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
33705 Type.name(type,"FunctionalInput class");
33706}
33707
33708/**
33709 * An element may be an instance of type "FunctionalInput class".
33710 */
33711private pattern mayInstanceOfFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
33712{
33713 find interpretation(problem,interpretation);
33714 PartialInterpretation.newElements(interpretation,element);
33715 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
33716 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
33717 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
33718 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
33719 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
33720 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
33721 neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation);
33722 neg find isPrimitive(element);
33723} or {
33724 find interpretation(problem,interpretation);
33725 PartialInterpretation.openWorldElements(interpretation,element);
33726 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
33727 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
33728 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
33729 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
33730 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
33731 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
33732 neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation);
33733 neg find isPrimitive(element);
33734} or
33735{ find mustInstanceOfFunctionalInput_class(problem,interpretation,element); }
33736/**
33737 * An element must be an instance of type "FunctionalOutput class".
33738 */
33739private pattern mustInstanceOfFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
33740 Type.name(type,"FunctionalOutput class");
33741 find directInstanceOf(problem,interpretation,element,type);
33742}
33743private pattern scopeDisallowsNewFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation) {
33744 find interpretation(problem,interpretation);
33745 PartialInterpretation.scopes(interpretation,scope);
33746 Scope.targetTypeInterpretation(scope,typeInterpretation);
33747 Scope.maxNewElements(scope,0);
33748 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
33749 Type.name(type,"FunctionalOutput class");
33750}
33751
33752/**
33753 * An element may be an instance of type "FunctionalOutput class".
33754 */
33755private pattern mayInstanceOfFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
33756{
33757 find interpretation(problem,interpretation);
33758 PartialInterpretation.newElements(interpretation,element);
33759 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
33760 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
33761 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
33762 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
33763 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
33764 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
33765 neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation);
33766 neg find isPrimitive(element);
33767} or {
33768 find interpretation(problem,interpretation);
33769 PartialInterpretation.openWorldElements(interpretation,element);
33770 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
33771 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
33772 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
33773 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
33774 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
33775 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
33776 neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation);
33777 neg find isPrimitive(element);
33778} or
33779{ find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); }
33780/**
33781 * An element must be an instance of type "FunctionalData class".
33782 */
33783private pattern mustInstanceOfFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
33784 Type.name(type,"FunctionalData class");
33785 find directInstanceOf(problem,interpretation,element,type);
33786}
33787private pattern scopeDisallowsNewFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation) {
33788 find interpretation(problem,interpretation);
33789 PartialInterpretation.scopes(interpretation,scope);
33790 Scope.targetTypeInterpretation(scope,typeInterpretation);
33791 Scope.maxNewElements(scope,0);
33792 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
33793 Type.name(type,"FunctionalData class");
33794}
33795
33796/**
33797 * An element may be an instance of type "FunctionalData class".
33798 */
33799private pattern mayInstanceOfFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
33800{
33801 find interpretation(problem,interpretation);
33802 PartialInterpretation.newElements(interpretation,element);
33803 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
33804 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
33805 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
33806 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
33807 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
33808 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
33809 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
33810 neg find scopeDisallowsNewFunctionalData_class(problem, interpretation);
33811 neg find isPrimitive(element);
33812} or {
33813 find interpretation(problem,interpretation);
33814 PartialInterpretation.openWorldElements(interpretation,element);
33815 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
33816 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
33817 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
33818 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
33819 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
33820 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
33821 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
33822 neg find scopeDisallowsNewFunctionalData_class(problem, interpretation);
33823 neg find isPrimitive(element);
33824} or
33825{ find mustInstanceOfFunctionalData_class(problem,interpretation,element); }
33826/**
33827 * An element must be an instance of type "FunctionType enum".
33828 */
33829private pattern mustInstanceOfFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
33830 Type.name(type,"FunctionType enum");
33831 find directInstanceOf(problem,interpretation,element,type);
33832}
33833private pattern scopeDisallowsNewFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation) {
33834 find interpretation(problem,interpretation);
33835 PartialInterpretation.scopes(interpretation,scope);
33836 Scope.targetTypeInterpretation(scope,typeInterpretation);
33837 Scope.maxNewElements(scope,0);
33838 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
33839 Type.name(type,"FunctionType enum");
33840}
33841
33842/**
33843 * An element may be an instance of type "FunctionType enum".
33844 */
33845private pattern mayInstanceOfFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
33846{ find mustInstanceOfFunctionType_enum(problem,interpretation,element); }
33847/**
33848 * An element must be an instance of type "FunctionalArchitectureModel class DefinedPart".
33849 */
33850private pattern mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
33851 Type.name(type,"FunctionalArchitectureModel class DefinedPart");
33852 find directInstanceOf(problem,interpretation,element,type);
33853}
33854private pattern scopeDisallowsNewFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
33855 find interpretation(problem,interpretation);
33856 PartialInterpretation.scopes(interpretation,scope);
33857 Scope.targetTypeInterpretation(scope,typeInterpretation);
33858 Scope.maxNewElements(scope,0);
33859 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
33860 Type.name(type,"FunctionalArchitectureModel class DefinedPart");
33861}
33862
33863/**
33864 * An element may be an instance of type "FunctionalArchitectureModel class DefinedPart".
33865 */
33866private pattern mayInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
33867{ find mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem,interpretation,element); }
33868/**
33869 * An element must be an instance of type "FunctionalArchitectureModel class UndefinedPart".
33870 */
33871private pattern mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
33872 Type.name(type,"FunctionalArchitectureModel class UndefinedPart");
33873 find directInstanceOf(problem,interpretation,element,type);
33874}
33875private pattern scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
33876 find interpretation(problem,interpretation);
33877 PartialInterpretation.scopes(interpretation,scope);
33878 Scope.targetTypeInterpretation(scope,typeInterpretation);
33879 Scope.maxNewElements(scope,0);
33880 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
33881 Type.name(type,"FunctionalArchitectureModel class UndefinedPart");
33882}
33883
33884/**
33885 * An element may be an instance of type "FunctionalArchitectureModel class UndefinedPart".
33886 */
33887private pattern mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
33888{
33889 find interpretation(problem,interpretation);
33890 PartialInterpretation.newElements(interpretation,element);
33891 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
33892 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
33893 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
33894 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
33895 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
33896 neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation);
33897 neg find isPrimitive(element);
33898} or {
33899 find interpretation(problem,interpretation);
33900 PartialInterpretation.openWorldElements(interpretation,element);
33901 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
33902 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
33903 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
33904 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
33905 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
33906 neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation);
33907 neg find isPrimitive(element);
33908} or
33909{ find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); }
33910
33911//////////
33912// 1.2 Relation Declaration Indexers
33913//////////
33914/**
33915 * Matcher for detecting tuples t where []interface reference FunctionalElement(source,target)
33916 */
33917private pattern mustInRelationinterface_reference_FunctionalElement(
33918 problem:LogicProblem, interpretation:PartialInterpretation,
33919 source: DefinedElement, target:DefinedElement)
33920{
33921 find interpretation(problem,interpretation);
33922 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
33923 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface reference FunctionalElement");
33924 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
33925 BinaryElementRelationLink.param1(link,source);
33926 BinaryElementRelationLink.param2(link,target);
33927}
33928/**
33929 * Matcher for detecting tuples t where <>interface reference FunctionalElement(source,target)
33930 */
33931private pattern mayInRelationinterface_reference_FunctionalElement(
33932 problem:LogicProblem, interpretation:PartialInterpretation,
33933 source: DefinedElement, target:DefinedElement)
33934{
33935 find interpretation(problem,interpretation);
33936 // The two endpoint of the link have to exist
33937 find mayExist(problem, interpretation, source);
33938 find mayExist(problem, interpretation, target);
33939 // Type consistency
33940 find mayInstanceOfFunctionalElement_class(problem,interpretation,source);
33941 find mayInstanceOfFunctionalInterface_class(problem,interpretation,target);
33942 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
33943 // the upper bound of the multiplicity should be considered.
33944 numberOfExistingReferences == count find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,_);
33945 check(numberOfExistingReferences < 1);
33946 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
33947 // the upper bound of the opposite reference multiplicity should be considered.
33948 numberOfExistingOppositeReferences == count find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,target,_);
33949 check(numberOfExistingOppositeReferences < 1);
33950 // The reference is containment, then a new reference cannot be create if:
33951 // 1. Multiple parents
33952 neg find mustContains4(problem,interpretation,_,target);
33953 // 2. Circle in the containment hierarchy
33954 neg find mustTransitiveContains(source,target);
33955} or {
33956 find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,target);
33957}
33958/**
33959 * Matcher for detecting tuples t where []model reference FunctionalElement(source,target)
33960 */
33961private pattern mustInRelationmodel_reference_FunctionalElement(
33962 problem:LogicProblem, interpretation:PartialInterpretation,
33963 source: DefinedElement, target:DefinedElement)
33964{
33965 find interpretation(problem,interpretation);
33966 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
33967 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement");
33968 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
33969 BinaryElementRelationLink.param1(link,source);
33970 BinaryElementRelationLink.param2(link,target);
33971}
33972/**
33973 * Matcher for detecting tuples t where <>model reference FunctionalElement(source,target)
33974 */
33975private pattern mayInRelationmodel_reference_FunctionalElement(
33976 problem:LogicProblem, interpretation:PartialInterpretation,
33977 source: DefinedElement, target:DefinedElement)
33978{
33979 find interpretation(problem,interpretation);
33980 // The two endpoint of the link have to exist
33981 find mayExist(problem, interpretation, source);
33982 find mayExist(problem, interpretation, target);
33983 // Type consistency
33984 find mayInstanceOfFunctionalElement_class(problem,interpretation,source);
33985 find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,target);
33986 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
33987 // the upper bound of the multiplicity should be considered.
33988 numberOfExistingReferences == count find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,source,_);
33989 check(numberOfExistingReferences < 1);
33990} or {
33991 find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,source,target);
33992}
33993/**
33994 * Matcher for detecting tuples t where []parent reference FunctionalElement(source,target)
33995 */
33996private pattern mustInRelationparent_reference_FunctionalElement(
33997 problem:LogicProblem, interpretation:PartialInterpretation,
33998 source: DefinedElement, target:DefinedElement)
33999{
34000 find interpretation(problem,interpretation);
34001 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
34002 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"parent reference FunctionalElement");
34003 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
34004 BinaryElementRelationLink.param1(link,source);
34005 BinaryElementRelationLink.param2(link,target);
34006}
34007/**
34008 * Matcher for detecting tuples t where <>parent reference FunctionalElement(source,target)
34009 */
34010private pattern mayInRelationparent_reference_FunctionalElement(
34011 problem:LogicProblem, interpretation:PartialInterpretation,
34012 source: DefinedElement, target:DefinedElement)
34013{
34014 find interpretation(problem,interpretation);
34015 // The two endpoint of the link have to exist
34016 find mayExist(problem, interpretation, source);
34017 find mayExist(problem, interpretation, target);
34018 // Type consistency
34019 find mayInstanceOfFunctionalElement_class(problem,interpretation,source);
34020 find mayInstanceOfFunction_class(problem,interpretation,target);
34021 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
34022 // the upper bound of the multiplicity should be considered.
34023 numberOfExistingReferences == count find mustInRelationparent_reference_FunctionalElement(problem,interpretation,source,_);
34024 check(numberOfExistingReferences < 1);
34025 // The eOpposite of the reference is containment, then a referene cannot be created if
34026 // 1. Multiple parents
34027 neg find mustContains4(problem,interpretation,source,_);
34028 // 2. Circle in the containment hierarchy
34029 neg find mustTransitiveContains(source,target);
34030} or {
34031 find mustInRelationparent_reference_FunctionalElement(problem,interpretation,source,target);
34032}
34033/**
34034 * Matcher for detecting tuples t where []rootElements reference FunctionalArchitectureModel(source,target)
34035 */
34036private pattern mustInRelationrootElements_reference_FunctionalArchitectureModel(
34037 problem:LogicProblem, interpretation:PartialInterpretation,
34038 source: DefinedElement, target:DefinedElement)
34039{
34040 find interpretation(problem,interpretation);
34041 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
34042 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"rootElements reference FunctionalArchitectureModel");
34043 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
34044 BinaryElementRelationLink.param1(link,source);
34045 BinaryElementRelationLink.param2(link,target);
34046}
34047/**
34048 * Matcher for detecting tuples t where <>rootElements reference FunctionalArchitectureModel(source,target)
34049 */
34050private pattern mayInRelationrootElements_reference_FunctionalArchitectureModel(
34051 problem:LogicProblem, interpretation:PartialInterpretation,
34052 source: DefinedElement, target:DefinedElement)
34053{
34054 find interpretation(problem,interpretation);
34055 // The two endpoint of the link have to exist
34056 find mayExist(problem, interpretation, source);
34057 find mayExist(problem, interpretation, target);
34058 // Type consistency
34059 find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,source);
34060 find mayInstanceOfFunctionalElement_class(problem,interpretation,target);
34061 // The reference is containment, then a new reference cannot be create if:
34062 // 1. Multiple parents
34063 neg find mustContains4(problem,interpretation,_,target);
34064 // 2. Circle in the containment hierarchy
34065 neg find mustTransitiveContains(source,target);
34066} or {
34067 find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,source,target);
34068}
34069/**
34070 * Matcher for detecting tuples t where []subElements reference Function(source,target)
34071 */
34072private pattern mustInRelationsubElements_reference_Function(
34073 problem:LogicProblem, interpretation:PartialInterpretation,
34074 source: DefinedElement, target:DefinedElement)
34075{
34076 find interpretation(problem,interpretation);
34077 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
34078 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"subElements reference Function");
34079 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
34080 BinaryElementRelationLink.param1(link,source);
34081 BinaryElementRelationLink.param2(link,target);
34082}
34083/**
34084 * Matcher for detecting tuples t where <>subElements reference Function(source,target)
34085 */
34086private pattern mayInRelationsubElements_reference_Function(
34087 problem:LogicProblem, interpretation:PartialInterpretation,
34088 source: DefinedElement, target:DefinedElement)
34089{
34090 find interpretation(problem,interpretation);
34091 // The two endpoint of the link have to exist
34092 find mayExist(problem, interpretation, source);
34093 find mayExist(problem, interpretation, target);
34094 // Type consistency
34095 find mayInstanceOfFunction_class(problem,interpretation,source);
34096 find mayInstanceOfFunctionalElement_class(problem,interpretation,target);
34097 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
34098 // the upper bound of the opposite reference multiplicity should be considered.
34099 numberOfExistingOppositeReferences == count find mustInRelationparent_reference_FunctionalElement(problem,interpretation,target,_);
34100 check(numberOfExistingOppositeReferences < 1);
34101 // The reference is containment, then a new reference cannot be create if:
34102 // 1. Multiple parents
34103 neg find mustContains4(problem,interpretation,_,target);
34104 // 2. Circle in the containment hierarchy
34105 neg find mustTransitiveContains(source,target);
34106} or {
34107 find mustInRelationsubElements_reference_Function(problem,interpretation,source,target);
34108}
34109/**
34110 * Matcher for detecting tuples t where []data reference FAMTerminator(source,target)
34111 */
34112private pattern mustInRelationdata_reference_FAMTerminator(
34113 problem:LogicProblem, interpretation:PartialInterpretation,
34114 source: DefinedElement, target:DefinedElement)
34115{
34116 find interpretation(problem,interpretation);
34117 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
34118 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"data reference FAMTerminator");
34119 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
34120 BinaryElementRelationLink.param1(link,source);
34121 BinaryElementRelationLink.param2(link,target);
34122}
34123/**
34124 * Matcher for detecting tuples t where <>data reference FAMTerminator(source,target)
34125 */
34126private pattern mayInRelationdata_reference_FAMTerminator(
34127 problem:LogicProblem, interpretation:PartialInterpretation,
34128 source: DefinedElement, target:DefinedElement)
34129{
34130 find interpretation(problem,interpretation);
34131 // The two endpoint of the link have to exist
34132 find mayExist(problem, interpretation, source);
34133 find mayExist(problem, interpretation, target);
34134 // Type consistency
34135 find mayInstanceOfFAMTerminator_class(problem,interpretation,source);
34136 find mayInstanceOfFunctionalData_class(problem,interpretation,target);
34137 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
34138 // the upper bound of the multiplicity should be considered.
34139 numberOfExistingReferences == count find mustInRelationdata_reference_FAMTerminator(problem,interpretation,source,_);
34140 check(numberOfExistingReferences < 1);
34141 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
34142 // the upper bound of the opposite reference multiplicity should be considered.
34143 numberOfExistingOppositeReferences == count find mustInRelationterminator_reference_FunctionalData(problem,interpretation,target,_);
34144 check(numberOfExistingOppositeReferences < 1);
34145 // The eOpposite of the reference is containment, then a referene cannot be created if
34146 // 1. Multiple parents
34147 neg find mustContains4(problem,interpretation,source,_);
34148 // 2. Circle in the containment hierarchy
34149 neg find mustTransitiveContains(source,target);
34150} or {
34151 find mustInRelationdata_reference_FAMTerminator(problem,interpretation,source,target);
34152}
34153/**
34154 * Matcher for detecting tuples t where []from reference InformationLink(source,target)
34155 */
34156private pattern mustInRelationfrom_reference_InformationLink(
34157 problem:LogicProblem, interpretation:PartialInterpretation,
34158 source: DefinedElement, target:DefinedElement)
34159{
34160 find interpretation(problem,interpretation);
34161 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
34162 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"from reference InformationLink");
34163 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
34164 BinaryElementRelationLink.param1(link,source);
34165 BinaryElementRelationLink.param2(link,target);
34166}
34167/**
34168 * Matcher for detecting tuples t where <>from reference InformationLink(source,target)
34169 */
34170private pattern mayInRelationfrom_reference_InformationLink(
34171 problem:LogicProblem, interpretation:PartialInterpretation,
34172 source: DefinedElement, target:DefinedElement)
34173{
34174 find interpretation(problem,interpretation);
34175 // The two endpoint of the link have to exist
34176 find mayExist(problem, interpretation, source);
34177 find mayExist(problem, interpretation, target);
34178 // Type consistency
34179 find mayInstanceOfInformationLink_class(problem,interpretation,source);
34180 find mayInstanceOfFunctionalOutput_class(problem,interpretation,target);
34181 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
34182 // the upper bound of the multiplicity should be considered.
34183 numberOfExistingReferences == count find mustInRelationfrom_reference_InformationLink(problem,interpretation,source,_);
34184 check(numberOfExistingReferences < 1);
34185 // The eOpposite of the reference is containment, then a referene cannot be created if
34186 // 1. Multiple parents
34187 neg find mustContains4(problem,interpretation,source,_);
34188 // 2. Circle in the containment hierarchy
34189 neg find mustTransitiveContains(source,target);
34190} or {
34191 find mustInRelationfrom_reference_InformationLink(problem,interpretation,source,target);
34192}
34193/**
34194 * Matcher for detecting tuples t where []to reference InformationLink(source,target)
34195 */
34196private pattern mustInRelationto_reference_InformationLink(
34197 problem:LogicProblem, interpretation:PartialInterpretation,
34198 source: DefinedElement, target:DefinedElement)
34199{
34200 find interpretation(problem,interpretation);
34201 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
34202 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"to reference InformationLink");
34203 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
34204 BinaryElementRelationLink.param1(link,source);
34205 BinaryElementRelationLink.param2(link,target);
34206}
34207/**
34208 * Matcher for detecting tuples t where <>to reference InformationLink(source,target)
34209 */
34210private pattern mayInRelationto_reference_InformationLink(
34211 problem:LogicProblem, interpretation:PartialInterpretation,
34212 source: DefinedElement, target:DefinedElement)
34213{
34214 find interpretation(problem,interpretation);
34215 // The two endpoint of the link have to exist
34216 find mayExist(problem, interpretation, source);
34217 find mayExist(problem, interpretation, target);
34218 // Type consistency
34219 find mayInstanceOfInformationLink_class(problem,interpretation,source);
34220 find mayInstanceOfFunctionalInput_class(problem,interpretation,target);
34221 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
34222 // the upper bound of the multiplicity should be considered.
34223 numberOfExistingReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,source,_);
34224 check(numberOfExistingReferences < 1);
34225} or {
34226 find mustInRelationto_reference_InformationLink(problem,interpretation,source,target);
34227}
34228/**
34229 * Matcher for detecting tuples t where []data reference FunctionalInterface(source,target)
34230 */
34231private pattern mustInRelationdata_reference_FunctionalInterface(
34232 problem:LogicProblem, interpretation:PartialInterpretation,
34233 source: DefinedElement, target:DefinedElement)
34234{
34235 find interpretation(problem,interpretation);
34236 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
34237 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"data reference FunctionalInterface");
34238 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
34239 BinaryElementRelationLink.param1(link,source);
34240 BinaryElementRelationLink.param2(link,target);
34241}
34242/**
34243 * Matcher for detecting tuples t where <>data reference FunctionalInterface(source,target)
34244 */
34245private pattern mayInRelationdata_reference_FunctionalInterface(
34246 problem:LogicProblem, interpretation:PartialInterpretation,
34247 source: DefinedElement, target:DefinedElement)
34248{
34249 find interpretation(problem,interpretation);
34250 // The two endpoint of the link have to exist
34251 find mayExist(problem, interpretation, source);
34252 find mayExist(problem, interpretation, target);
34253 // Type consistency
34254 find mayInstanceOfFunctionalInterface_class(problem,interpretation,source);
34255 find mayInstanceOfFunctionalData_class(problem,interpretation,target);
34256 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
34257 // the upper bound of the opposite reference multiplicity should be considered.
34258 numberOfExistingOppositeReferences == count find mustInRelationinterface_reference_FunctionalData(problem,interpretation,target,_);
34259 check(numberOfExistingOppositeReferences < 1);
34260 // The reference is containment, then a new reference cannot be create if:
34261 // 1. Multiple parents
34262 neg find mustContains4(problem,interpretation,_,target);
34263 // 2. Circle in the containment hierarchy
34264 neg find mustTransitiveContains(source,target);
34265} or {
34266 find mustInRelationdata_reference_FunctionalInterface(problem,interpretation,source,target);
34267}
34268/**
34269 * Matcher for detecting tuples t where []element reference FunctionalInterface(source,target)
34270 */
34271private pattern mustInRelationelement_reference_FunctionalInterface(
34272 problem:LogicProblem, interpretation:PartialInterpretation,
34273 source: DefinedElement, target:DefinedElement)
34274{
34275 find interpretation(problem,interpretation);
34276 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
34277 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"element reference FunctionalInterface");
34278 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
34279 BinaryElementRelationLink.param1(link,source);
34280 BinaryElementRelationLink.param2(link,target);
34281}
34282/**
34283 * Matcher for detecting tuples t where <>element reference FunctionalInterface(source,target)
34284 */
34285private pattern mayInRelationelement_reference_FunctionalInterface(
34286 problem:LogicProblem, interpretation:PartialInterpretation,
34287 source: DefinedElement, target:DefinedElement)
34288{
34289 find interpretation(problem,interpretation);
34290 // The two endpoint of the link have to exist
34291 find mayExist(problem, interpretation, source);
34292 find mayExist(problem, interpretation, target);
34293 // Type consistency
34294 find mayInstanceOfFunctionalInterface_class(problem,interpretation,source);
34295 find mayInstanceOfFunctionalElement_class(problem,interpretation,target);
34296 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
34297 // the upper bound of the multiplicity should be considered.
34298 numberOfExistingReferences == count find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,source,_);
34299 check(numberOfExistingReferences < 1);
34300 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
34301 // the upper bound of the opposite reference multiplicity should be considered.
34302 numberOfExistingOppositeReferences == count find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,target,_);
34303 check(numberOfExistingOppositeReferences < 1);
34304 // The eOpposite of the reference is containment, then a referene cannot be created if
34305 // 1. Multiple parents
34306 neg find mustContains4(problem,interpretation,source,_);
34307 // 2. Circle in the containment hierarchy
34308 neg find mustTransitiveContains(source,target);
34309} or {
34310 find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,source,target);
34311}
34312/**
34313 * Matcher for detecting tuples t where []IncomingLinks reference FunctionalInput(source,target)
34314 */
34315private pattern mustInRelationIncomingLinks_reference_FunctionalInput(
34316 problem:LogicProblem, interpretation:PartialInterpretation,
34317 source: DefinedElement, target:DefinedElement)
34318{
34319 find interpretation(problem,interpretation);
34320 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
34321 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"IncomingLinks reference FunctionalInput");
34322 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
34323 BinaryElementRelationLink.param1(link,source);
34324 BinaryElementRelationLink.param2(link,target);
34325}
34326/**
34327 * Matcher for detecting tuples t where <>IncomingLinks reference FunctionalInput(source,target)
34328 */
34329private pattern mayInRelationIncomingLinks_reference_FunctionalInput(
34330 problem:LogicProblem, interpretation:PartialInterpretation,
34331 source: DefinedElement, target:DefinedElement)
34332{
34333 find interpretation(problem,interpretation);
34334 // The two endpoint of the link have to exist
34335 find mayExist(problem, interpretation, source);
34336 find mayExist(problem, interpretation, target);
34337 // Type consistency
34338 find mayInstanceOfFunctionalInput_class(problem,interpretation,source);
34339 find mayInstanceOfInformationLink_class(problem,interpretation,target);
34340 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
34341 // the upper bound of the opposite reference multiplicity should be considered.
34342 numberOfExistingOppositeReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,target,_);
34343 check(numberOfExistingOppositeReferences < 1);
34344} or {
34345 find mustInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,source,target);
34346}
34347/**
34348 * Matcher for detecting tuples t where []outgoingLinks reference FunctionalOutput(source,target)
34349 */
34350private pattern mustInRelationoutgoingLinks_reference_FunctionalOutput(
34351 problem:LogicProblem, interpretation:PartialInterpretation,
34352 source: DefinedElement, target:DefinedElement)
34353{
34354 find interpretation(problem,interpretation);
34355 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
34356 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"outgoingLinks reference FunctionalOutput");
34357 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
34358 BinaryElementRelationLink.param1(link,source);
34359 BinaryElementRelationLink.param2(link,target);
34360}
34361/**
34362 * Matcher for detecting tuples t where <>outgoingLinks reference FunctionalOutput(source,target)
34363 */
34364private pattern mayInRelationoutgoingLinks_reference_FunctionalOutput(
34365 problem:LogicProblem, interpretation:PartialInterpretation,
34366 source: DefinedElement, target:DefinedElement)
34367{
34368 find interpretation(problem,interpretation);
34369 // The two endpoint of the link have to exist
34370 find mayExist(problem, interpretation, source);
34371 find mayExist(problem, interpretation, target);
34372 // Type consistency
34373 find mayInstanceOfFunctionalOutput_class(problem,interpretation,source);
34374 find mayInstanceOfInformationLink_class(problem,interpretation,target);
34375 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
34376 // the upper bound of the opposite reference multiplicity should be considered.
34377 numberOfExistingOppositeReferences == count find mustInRelationfrom_reference_InformationLink(problem,interpretation,target,_);
34378 check(numberOfExistingOppositeReferences < 1);
34379 // The reference is containment, then a new reference cannot be create if:
34380 // 1. Multiple parents
34381 neg find mustContains4(problem,interpretation,_,target);
34382 // 2. Circle in the containment hierarchy
34383 neg find mustTransitiveContains(source,target);
34384} or {
34385 find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,source,target);
34386}
34387/**
34388 * Matcher for detecting tuples t where []terminator reference FunctionalData(source,target)
34389 */
34390private pattern mustInRelationterminator_reference_FunctionalData(
34391 problem:LogicProblem, interpretation:PartialInterpretation,
34392 source: DefinedElement, target:DefinedElement)
34393{
34394 find interpretation(problem,interpretation);
34395 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
34396 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"terminator reference FunctionalData");
34397 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
34398 BinaryElementRelationLink.param1(link,source);
34399 BinaryElementRelationLink.param2(link,target);
34400}
34401/**
34402 * Matcher for detecting tuples t where <>terminator reference FunctionalData(source,target)
34403 */
34404private pattern mayInRelationterminator_reference_FunctionalData(
34405 problem:LogicProblem, interpretation:PartialInterpretation,
34406 source: DefinedElement, target:DefinedElement)
34407{
34408 find interpretation(problem,interpretation);
34409 // The two endpoint of the link have to exist
34410 find mayExist(problem, interpretation, source);
34411 find mayExist(problem, interpretation, target);
34412 // Type consistency
34413 find mayInstanceOfFunctionalData_class(problem,interpretation,source);
34414 find mayInstanceOfFAMTerminator_class(problem,interpretation,target);
34415 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
34416 // the upper bound of the multiplicity should be considered.
34417 numberOfExistingReferences == count find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,_);
34418 check(numberOfExistingReferences < 1);
34419 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
34420 // the upper bound of the opposite reference multiplicity should be considered.
34421 numberOfExistingOppositeReferences == count find mustInRelationdata_reference_FAMTerminator(problem,interpretation,target,_);
34422 check(numberOfExistingOppositeReferences < 1);
34423 // The reference is containment, then a new reference cannot be create if:
34424 // 1. Multiple parents
34425 neg find mustContains4(problem,interpretation,_,target);
34426 // 2. Circle in the containment hierarchy
34427 neg find mustTransitiveContains(source,target);
34428} or {
34429 find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,target);
34430}
34431/**
34432 * Matcher for detecting tuples t where []interface reference FunctionalData(source,target)
34433 */
34434private pattern mustInRelationinterface_reference_FunctionalData(
34435 problem:LogicProblem, interpretation:PartialInterpretation,
34436 source: DefinedElement, target:DefinedElement)
34437{
34438 find interpretation(problem,interpretation);
34439 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
34440 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface reference FunctionalData");
34441 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
34442 BinaryElementRelationLink.param1(link,source);
34443 BinaryElementRelationLink.param2(link,target);
34444}
34445/**
34446 * Matcher for detecting tuples t where <>interface reference FunctionalData(source,target)
34447 */
34448private pattern mayInRelationinterface_reference_FunctionalData(
34449 problem:LogicProblem, interpretation:PartialInterpretation,
34450 source: DefinedElement, target:DefinedElement)
34451{
34452 find interpretation(problem,interpretation);
34453 // The two endpoint of the link have to exist
34454 find mayExist(problem, interpretation, source);
34455 find mayExist(problem, interpretation, target);
34456 // Type consistency
34457 find mayInstanceOfFunctionalData_class(problem,interpretation,source);
34458 find mayInstanceOfFunctionalInterface_class(problem,interpretation,target);
34459 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
34460 // the upper bound of the multiplicity should be considered.
34461 numberOfExistingReferences == count find mustInRelationinterface_reference_FunctionalData(problem,interpretation,source,_);
34462 check(numberOfExistingReferences < 1);
34463 // The eOpposite of the reference is containment, then a referene cannot be created if
34464 // 1. Multiple parents
34465 neg find mustContains4(problem,interpretation,source,_);
34466 // 2. Circle in the containment hierarchy
34467 neg find mustTransitiveContains(source,target);
34468} or {
34469 find mustInRelationinterface_reference_FunctionalData(problem,interpretation,source,target);
34470}
34471/**
34472 * Matcher for detecting tuples t where []type attribute Function(source,target)
34473 */
34474private pattern mustInRelationtype_attribute_Function(
34475 problem:LogicProblem, interpretation:PartialInterpretation,
34476 source: DefinedElement, target:DefinedElement)
34477{
34478 find interpretation(problem,interpretation);
34479 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
34480 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function");
34481 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
34482 BinaryElementRelationLink.param1(link,source);
34483 BinaryElementRelationLink.param2(link,target);
34484}
34485/**
34486 * Matcher for detecting tuples t where <>type attribute Function(source,target)
34487 */
34488private pattern mayInRelationtype_attribute_Function(
34489 problem:LogicProblem, interpretation:PartialInterpretation,
34490 source: DefinedElement, target:DefinedElement)
34491{
34492 find interpretation(problem,interpretation);
34493 // The two endpoint of the link have to exist
34494 find mayExist(problem, interpretation, source);
34495 find mayExist(problem, interpretation, target);
34496 // Type consistency
34497 find mayInstanceOfFunction_class(problem,interpretation,source);
34498 find mayInstanceOfFunctionType_enum(problem,interpretation,target);
34499 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
34500 // the upper bound of the multiplicity should be considered.
34501 numberOfExistingReferences == count find mustInRelationtype_attribute_Function(problem,interpretation,source,_);
34502 check(numberOfExistingReferences < 1);
34503} or {
34504 find mustInRelationtype_attribute_Function(problem,interpretation,source,target);
34505}
34506
34507//////////
34508// 1.3 Relation Definition Indexers
34509//////////
34510
34511//////////
34512// 1.4 Containment Indexer
34513//////////
34514private pattern mustContains2(source: DefinedElement, target: DefinedElement) {
34515 find mustContains4(_,_,source,target);
34516}
34517
34518private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation,
34519 source: DefinedElement, target: DefinedElement)
34520 { find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,target); }or
34521
34522 { find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,source,target); }or
34523
34524 { find mustInRelationsubElements_reference_Function(problem,interpretation,source,target); }or
34525
34526 { find mustInRelationdata_reference_FunctionalInterface(problem,interpretation,source,target); }or
34527
34528 { find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,source,target); }or
34529
34530 { find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,target); }
34531
34532private pattern mustTransitiveContains(source,target) {
34533 find mustContains2+(source,target);
34534}
34535
34536//////////
34537// 2. Invalidation Indexers
34538//////////
34539// 2.1 Invalidated by WF Queries
34540//////////
34541
34542//////////
34543// 3. Unfinishedness Indexers
34544//////////
34545// 3.1 Unfinishedness Measured by Multiplicity
34546//////////
34547pattern unfinishedLowerMultiplicity_model_reference_FunctionalElement(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) {
34548 find interpretation(problem,interpretation);
34549 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
34550 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement");
34551 find mustInstanceOfFunctionalElement_class(problem,interpretation,object);
34552 numberOfExistingReferences == count find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,object,_);
34553 check(numberOfExistingReferences < 1);
34554 missingMultiplicity == eval(1-numberOfExistingReferences);
34555}
34556pattern unfinishedLowerMultiplicity_to_reference_InformationLink(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) {
34557 find interpretation(problem,interpretation);
34558 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
34559 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"to reference InformationLink");
34560 find mustInstanceOfInformationLink_class(problem,interpretation,object);
34561 numberOfExistingReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,object,_);
34562 check(numberOfExistingReferences < 1);
34563 missingMultiplicity == eval(1-numberOfExistingReferences);
34564}
34565pattern unfinishedLowerMultiplicity_type_attribute_Function(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) {
34566 find interpretation(problem,interpretation);
34567 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
34568 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function");
34569 find mustInstanceOfFunction_class(problem,interpretation,object);
34570 numberOfExistingReferences == count find mustInRelationtype_attribute_Function(problem,interpretation,object,_);
34571 check(numberOfExistingReferences < 1);
34572 missingMultiplicity == eval(1-numberOfExistingReferences);
34573}
34574
34575//////////
34576// 3.2 Unfinishedness Measured by WF Queries
34577//////////
34578
34579//////////
34580// 4. Refinement Indexers
34581//////////
34582// 4.1 Object constructors
34583//////////
34584private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation)
34585{
34586 find interpretation(problem,interpretation);
34587 find mustInstanceOfFunctionalInput_class(problem,interpretation,root);
34588 find mustExist(problem, interpretation, root);
34589}or{
34590 find interpretation(problem,interpretation);
34591 find mustInstanceOfFAMTerminator_class(problem,interpretation,root);
34592 find mustExist(problem, interpretation, root);
34593}or{
34594 find interpretation(problem,interpretation);
34595 find mustInstanceOfFunction_class(problem,interpretation,root);
34596 find mustExist(problem, interpretation, root);
34597}or{
34598 find interpretation(problem,interpretation);
34599 find mustInstanceOfInformationLink_class(problem,interpretation,root);
34600 find mustExist(problem, interpretation, root);
34601}or{
34602 find interpretation(problem,interpretation);
34603 find mustInstanceOfFunctionalElement_class(problem,interpretation,root);
34604 find mustExist(problem, interpretation, root);
34605}or{
34606 find interpretation(problem,interpretation);
34607 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,root);
34608 find mustExist(problem, interpretation, root);
34609}or{
34610 find interpretation(problem,interpretation);
34611 find mustInstanceOfFunctionalOutput_class(problem,interpretation,root);
34612 find mustExist(problem, interpretation, root);
34613}or{
34614 find interpretation(problem,interpretation);
34615 find mustInstanceOfFunctionalData_class(problem,interpretation,root);
34616 find mustExist(problem, interpretation, root);
34617}or{
34618 find interpretation(problem,interpretation);
34619 find mustInstanceOfFunctionalInterface_class(problem,interpretation,root);
34620 find mustExist(problem, interpretation, root);
34621}or{
34622 find interpretation(problem,interpretation);
34623 find mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem,interpretation,root);
34624 find mustExist(problem, interpretation, root);
34625}or{
34626 find interpretation(problem,interpretation);
34627 find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,root);
34628 find mustExist(problem, interpretation, root);
34629}
34630pattern createObject_FunctionalInterface_class_by_interface_reference_FunctionalElement_with_element_reference_FunctionalInterface(
34631 problem:LogicProblem, interpretation:PartialInterpretation,
34632 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
34633 container:DefinedElement)
34634{
34635 find interpretation(problem,interpretation);
34636 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
34637 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class");
34638 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
34639 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"interface reference FunctionalElement");
34640 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
34641 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"element reference FunctionalInterface");
34642 find mustInstanceOfFunctionalElement_class(problem,interpretation,container);
34643 find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject);
34644 find mayInRelationinterface_reference_FunctionalElement(problem,interpretation,container,newObject);
34645 find mustExist(problem, interpretation, container);
34646 neg find mustExist(problem, interpretation, newObject);
34647}
34648pattern createObject_FunctionalInterface_class(
34649 problem:LogicProblem, interpretation:PartialInterpretation,
34650 typeInterpretation:PartialComplexTypeInterpretation)
34651{
34652 find interpretation(problem,interpretation);
34653 neg find hasElementInContainment(problem,interpretation);
34654 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
34655 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class");
34656 find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject);
34657 find mayExist(problem, interpretation, newObject);
34658 neg find mustExist(problem, interpretation, newObject);
34659}
34660pattern createObject_FunctionalOutput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData(
34661 problem:LogicProblem, interpretation:PartialInterpretation,
34662 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
34663 container:DefinedElement)
34664{
34665 find interpretation(problem,interpretation);
34666 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
34667 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class");
34668 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
34669 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface");
34670 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
34671 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData");
34672 find mustInstanceOfFunctionalInterface_class(problem,interpretation,container);
34673 find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject);
34674 find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject);
34675 find mustExist(problem, interpretation, container);
34676 neg find mustExist(problem, interpretation, newObject);
34677}
34678pattern createObject_FunctionalOutput_class(
34679 problem:LogicProblem, interpretation:PartialInterpretation,
34680 typeInterpretation:PartialComplexTypeInterpretation)
34681{
34682 find interpretation(problem,interpretation);
34683 neg find hasElementInContainment(problem,interpretation);
34684 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
34685 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class");
34686 find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject);
34687 find mayExist(problem, interpretation, newObject);
34688 neg find mustExist(problem, interpretation, newObject);
34689}
34690pattern createObject_FunctionalArchitectureModel_class_UndefinedPart(
34691 problem:LogicProblem, interpretation:PartialInterpretation,
34692 typeInterpretation:PartialComplexTypeInterpretation)
34693{
34694 find interpretation(problem,interpretation);
34695 neg find hasElementInContainment(problem,interpretation);
34696 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
34697 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalArchitectureModel class UndefinedPart");
34698 find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,newObject);
34699 find mayExist(problem, interpretation, newObject);
34700 neg find mustExist(problem, interpretation, newObject);
34701}
34702pattern createObject_InformationLink_class_by_outgoingLinks_reference_FunctionalOutput_with_from_reference_InformationLink(
34703 problem:LogicProblem, interpretation:PartialInterpretation,
34704 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
34705 container:DefinedElement)
34706{
34707 find interpretation(problem,interpretation);
34708 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
34709 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class");
34710 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
34711 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingLinks reference FunctionalOutput");
34712 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
34713 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"from reference InformationLink");
34714 find mustInstanceOfFunctionalOutput_class(problem,interpretation,container);
34715 find mayInstanceOfInformationLink_class(problem,interpretation,newObject);
34716 find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,container,newObject);
34717 find mustExist(problem, interpretation, container);
34718 neg find mustExist(problem, interpretation, newObject);
34719}
34720pattern createObject_InformationLink_class(
34721 problem:LogicProblem, interpretation:PartialInterpretation,
34722 typeInterpretation:PartialComplexTypeInterpretation)
34723{
34724 find interpretation(problem,interpretation);
34725 neg find hasElementInContainment(problem,interpretation);
34726 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
34727 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class");
34728 find mayInstanceOfInformationLink_class(problem,interpretation,newObject);
34729 find mayExist(problem, interpretation, newObject);
34730 neg find mustExist(problem, interpretation, newObject);
34731}
34732pattern createObject_Function_class_by_rootElements_reference_FunctionalArchitectureModel(
34733 problem:LogicProblem, interpretation:PartialInterpretation,
34734 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
34735 container:DefinedElement)
34736{
34737 find interpretation(problem,interpretation);
34738 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
34739 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class");
34740 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
34741 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"rootElements reference FunctionalArchitectureModel");
34742 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,container);
34743 find mayInstanceOfFunction_class(problem,interpretation,newObject);
34744 find mayInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,container,newObject);
34745 find mustExist(problem, interpretation, container);
34746 neg find mustExist(problem, interpretation, newObject);
34747}
34748pattern createObject_Function_class_by_subElements_reference_Function_with_parent_reference_FunctionalElement(
34749 problem:LogicProblem, interpretation:PartialInterpretation,
34750 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
34751 container:DefinedElement)
34752{
34753 find interpretation(problem,interpretation);
34754 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
34755 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class");
34756 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
34757 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"subElements reference Function");
34758 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
34759 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FunctionalElement");
34760 find mustInstanceOfFunction_class(problem,interpretation,container);
34761 find mayInstanceOfFunction_class(problem,interpretation,newObject);
34762 find mayInRelationsubElements_reference_Function(problem,interpretation,container,newObject);
34763 find mustExist(problem, interpretation, container);
34764 neg find mustExist(problem, interpretation, newObject);
34765}
34766pattern createObject_Function_class(
34767 problem:LogicProblem, interpretation:PartialInterpretation,
34768 typeInterpretation:PartialComplexTypeInterpretation)
34769{
34770 find interpretation(problem,interpretation);
34771 neg find hasElementInContainment(problem,interpretation);
34772 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
34773 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class");
34774 find mayInstanceOfFunction_class(problem,interpretation,newObject);
34775 find mayExist(problem, interpretation, newObject);
34776 neg find mustExist(problem, interpretation, newObject);
34777}
34778pattern createObject_FunctionalInput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData(
34779 problem:LogicProblem, interpretation:PartialInterpretation,
34780 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
34781 container:DefinedElement)
34782{
34783 find interpretation(problem,interpretation);
34784 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
34785 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class");
34786 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
34787 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface");
34788 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
34789 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData");
34790 find mustInstanceOfFunctionalInterface_class(problem,interpretation,container);
34791 find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject);
34792 find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject);
34793 find mustExist(problem, interpretation, container);
34794 neg find mustExist(problem, interpretation, newObject);
34795}
34796pattern createObject_FunctionalInput_class(
34797 problem:LogicProblem, interpretation:PartialInterpretation,
34798 typeInterpretation:PartialComplexTypeInterpretation)
34799{
34800 find interpretation(problem,interpretation);
34801 neg find hasElementInContainment(problem,interpretation);
34802 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
34803 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class");
34804 find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject);
34805 find mayExist(problem, interpretation, newObject);
34806 neg find mustExist(problem, interpretation, newObject);
34807}
34808pattern createObject_FAMTerminator_class_by_terminator_reference_FunctionalData_with_data_reference_FAMTerminator(
34809 problem:LogicProblem, interpretation:PartialInterpretation,
34810 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
34811 container:DefinedElement)
34812{
34813 find interpretation(problem,interpretation);
34814 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
34815 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class");
34816 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
34817 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"terminator reference FunctionalData");
34818 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
34819 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"data reference FAMTerminator");
34820 find mustInstanceOfFunctionalData_class(problem,interpretation,container);
34821 find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject);
34822 find mayInRelationterminator_reference_FunctionalData(problem,interpretation,container,newObject);
34823 find mustExist(problem, interpretation, container);
34824 neg find mustExist(problem, interpretation, newObject);
34825}
34826pattern createObject_FAMTerminator_class(
34827 problem:LogicProblem, interpretation:PartialInterpretation,
34828 typeInterpretation:PartialComplexTypeInterpretation)
34829{
34830 find interpretation(problem,interpretation);
34831 neg find hasElementInContainment(problem,interpretation);
34832 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
34833 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class");
34834 find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject);
34835 find mayExist(problem, interpretation, newObject);
34836 neg find mustExist(problem, interpretation, newObject);
34837}
34838
34839//////////
34840// 4.2 Type refinement
34841//////////
34842pattern refineTypeTo_FunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
34843 find interpretation(problem,interpretation);
34844 PartialInterpretation.newElements(interpretation,element);
34845 find mayInstanceOfFunctionalInterface_class(problem,interpretation,element);
34846 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
34847 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
34848 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
34849 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
34850 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
34851 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
34852}
34853pattern refineTypeTo_FunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
34854 find interpretation(problem,interpretation);
34855 PartialInterpretation.newElements(interpretation,element);
34856 find mayInstanceOfFunctionalOutput_class(problem,interpretation,element);
34857 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
34858 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
34859 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
34860 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
34861 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
34862 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
34863 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
34864}
34865pattern refineTypeTo_FunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
34866 find interpretation(problem,interpretation);
34867 PartialInterpretation.newElements(interpretation,element);
34868 find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element);
34869 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
34870 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
34871 neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element);
34872 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
34873 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
34874 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
34875}
34876pattern refineTypeTo_InformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
34877 find interpretation(problem,interpretation);
34878 PartialInterpretation.newElements(interpretation,element);
34879 find mayInstanceOfInformationLink_class(problem,interpretation,element);
34880 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
34881 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
34882 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
34883 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
34884 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
34885 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
34886}
34887pattern refineTypeTo_Function_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
34888 find interpretation(problem,interpretation);
34889 PartialInterpretation.newElements(interpretation,element);
34890 find mayInstanceOfFunction_class(problem,interpretation,element);
34891 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
34892 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
34893 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
34894 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
34895 neg find mustInstanceOfFunction_class(problem,interpretation,element);
34896 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
34897}
34898pattern refineTypeTo_FunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
34899 find interpretation(problem,interpretation);
34900 PartialInterpretation.newElements(interpretation,element);
34901 find mayInstanceOfFunctionalInput_class(problem,interpretation,element);
34902 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
34903 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
34904 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
34905 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
34906 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
34907 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
34908 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
34909}
34910pattern refineTypeTo_FAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
34911 find interpretation(problem,interpretation);
34912 PartialInterpretation.newElements(interpretation,element);
34913 find mayInstanceOfFAMTerminator_class(problem,interpretation,element);
34914 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
34915 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
34916 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
34917 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
34918 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
34919 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
34920}
34921
34922//////////
34923// 4.3 Relation refinement
34924//////////
34925pattern refineRelation_model_reference_FunctionalElement(
34926 problem:LogicProblem, interpretation:PartialInterpretation,
34927 relationIterpretation:PartialRelationInterpretation,
34928 from: DefinedElement, to: DefinedElement)
34929{
34930 find interpretation(problem,interpretation);
34931 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
34932 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement");
34933 find mustExist(problem, interpretation, from);
34934 find mustExist(problem, interpretation, to);
34935 find mustInstanceOfFunctionalElement_class(problem,interpretation,from);
34936 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,to);
34937 find mayInRelationmodel_reference_FunctionalElement(problem,interpretation,from,to);
34938 neg find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,from,to);
34939}
34940pattern refineRelation_IncomingLinks_reference_FunctionalInput_and_to_reference_InformationLink(
34941 problem:LogicProblem, interpretation:PartialInterpretation,
34942 relationIterpretation:PartialRelationInterpretation, oppositeInterpretation:PartialRelationInterpretation,
34943 from: DefinedElement, to: DefinedElement)
34944{
34945 find interpretation(problem,interpretation);
34946 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
34947 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"IncomingLinks reference FunctionalInput");
34948 PartialInterpretation.partialrelationinterpretation(interpretation,oppositeInterpretation);
34949 PartialRelationInterpretation.interpretationOf.name(oppositeInterpretation,"to reference InformationLink");
34950 find mustExist(problem, interpretation, from);
34951 find mustExist(problem, interpretation, to);
34952 find mustInstanceOfFunctionalInput_class(problem,interpretation,from);
34953 find mustInstanceOfInformationLink_class(problem,interpretation,to);
34954 find mayInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,from,to);
34955 neg find mustInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,from,to);
34956}
34957pattern refineRelation_type_attribute_Function(
34958 problem:LogicProblem, interpretation:PartialInterpretation,
34959 relationIterpretation:PartialRelationInterpretation,
34960 from: DefinedElement, to: DefinedElement)
34961{
34962 find interpretation(problem,interpretation);
34963 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
34964 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function");
34965 find mustExist(problem, interpretation, from);
34966 find mustExist(problem, interpretation, to);
34967 find mustInstanceOfFunction_class(problem,interpretation,from);
34968 find mustInstanceOfFunctionType_enum(problem,interpretation,to);
34969 find mayInRelationtype_attribute_Function(problem,interpretation,from,to);
34970 neg find mustInRelationtype_attribute_Function(problem,interpretation,from,to);
34971}
34972import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage"
34973import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem"
34974import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language"
34975
34976//////////
34977// 0. Util
34978//////////
34979private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) {
34980 PartialInterpretation.problem(interpretation,problem);
34981}
34982
34983/////////////////////////
34984// 0.1 Existence
34985/////////////////////////
34986private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
34987 find interpretation(problem,interpretation);
34988 LogicProblem.elements(problem,element);
34989} or {
34990 find interpretation(problem,interpretation);
34991 PartialInterpretation.newElements(interpretation,element);
34992}
34993
34994private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
34995 find mustExist(problem,interpretation,element);
34996} or {
34997 find interpretation(problem,interpretation);
34998 neg find elementCloseWorld(element);
34999 PartialInterpretation.openWorldElements(interpretation,element);
35000}
35001
35002private pattern elementCloseWorld(element:DefinedElement) {
35003 PartialInterpretation.openWorldElements(i,element);
35004 PartialInterpretation.maxNewElements(i,0);
35005} or {
35006 Scope.targetTypeInterpretation(scope,interpretation);
35007 PartialTypeInterpratation.elements(interpretation,element);
35008 Scope.maxNewElements(scope,0);
35009}
35010
35011////////////////////////
35012// 0.2 Equivalence
35013////////////////////////
35014pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) {
35015 find mayExist(problem,interpretation,a);
35016 find mayExist(problem,interpretation,b);
35017 a == b;
35018}
35019
35020////////////////////////
35021// 0.3 Required Patterns by TypeIndexer
35022////////////////////////
35023private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) {
35024 find interpretation(problem,interpretation);
35025 LogicProblem.types(problem,type);
35026 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
35027 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
35028}
35029
35030private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) {
35031 find interpretation(problem,interpretation);
35032 LogicProblem.types(problem,type);
35033 TypeDefinition.elements(type,element);
35034} or {
35035 find interpretation(problem,interpretation);
35036 find typeInterpretation(problem,interpretation,type,typeInterpretation);
35037 PartialComplexTypeInterpretation.elements(typeInterpretation,element);
35038}
35039
35040private pattern isPrimitive(element: PrimitiveElement) {
35041 PrimitiveElement(element);
35042}
35043
35044//////////
35045// 1. Problem-Specific Base Indexers
35046//////////
35047// 1.1 Type Indexers
35048//////////
35049// 1.1.1 primitive Type Indexers
35050//////////
35051
35052//////////
35053// 1.1.2 domain-specific Type Indexers
35054//////////
35055/**
35056 * An element must be an instance of type "EAttribute class".
35057 */
35058private pattern mustInstanceOfEAttribute_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
35059 Type.name(type,"EAttribute class");
35060 find directInstanceOf(problem,interpretation,element,type);
35061}
35062private pattern scopeDisallowsNewEAttribute_class(problem:LogicProblem, interpretation:PartialInterpretation) {
35063 find interpretation(problem,interpretation);
35064 PartialInterpretation.scopes(interpretation,scope);
35065 Scope.targetTypeInterpretation(scope,typeInterpretation);
35066 Scope.maxNewElements(scope,0);
35067 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
35068 Type.name(type,"EAttribute class");
35069}
35070
35071/**
35072 * An element may be an instance of type "EAttribute class".
35073 */
35074private pattern mayInstanceOfEAttribute_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
35075{
35076 find interpretation(problem,interpretation);
35077 PartialInterpretation.newElements(interpretation,element);
35078 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
35079 neg find mustInstanceOfEObject_class(problem,interpretation,element);
35080 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
35081 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
35082 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
35083 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
35084 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
35085 neg find mustInstanceOfEReference_class(problem,interpretation,element);
35086 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
35087 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
35088 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
35089 neg find scopeDisallowsNewEAttribute_class(problem, interpretation);
35090 neg find isPrimitive(element);
35091} or {
35092 find interpretation(problem,interpretation);
35093 PartialInterpretation.openWorldElements(interpretation,element);
35094 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
35095 neg find mustInstanceOfEObject_class(problem,interpretation,element);
35096 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
35097 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
35098 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
35099 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
35100 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
35101 neg find mustInstanceOfEReference_class(problem,interpretation,element);
35102 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
35103 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
35104 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
35105 neg find scopeDisallowsNewEAttribute_class(problem, interpretation);
35106 neg find isPrimitive(element);
35107} or
35108{ find mustInstanceOfEAttribute_class(problem,interpretation,element); }
35109/**
35110 * An element must be an instance of type "EAnnotation class".
35111 */
35112private pattern mustInstanceOfEAnnotation_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
35113 Type.name(type,"EAnnotation class");
35114 find directInstanceOf(problem,interpretation,element,type);
35115}
35116private pattern scopeDisallowsNewEAnnotation_class(problem:LogicProblem, interpretation:PartialInterpretation) {
35117 find interpretation(problem,interpretation);
35118 PartialInterpretation.scopes(interpretation,scope);
35119 Scope.targetTypeInterpretation(scope,typeInterpretation);
35120 Scope.maxNewElements(scope,0);
35121 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
35122 Type.name(type,"EAnnotation class");
35123}
35124
35125/**
35126 * An element may be an instance of type "EAnnotation class".
35127 */
35128private pattern mayInstanceOfEAnnotation_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
35129{
35130 find interpretation(problem,interpretation);
35131 PartialInterpretation.newElements(interpretation,element);
35132 neg find mustInstanceOfEObject_class(problem,interpretation,element);
35133 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
35134 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
35135 neg find mustInstanceOfENamedElement_class(problem,interpretation,element);
35136 neg find scopeDisallowsNewEAnnotation_class(problem, interpretation);
35137 neg find isPrimitive(element);
35138} or {
35139 find interpretation(problem,interpretation);
35140 PartialInterpretation.openWorldElements(interpretation,element);
35141 neg find mustInstanceOfEObject_class(problem,interpretation,element);
35142 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
35143 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
35144 neg find mustInstanceOfENamedElement_class(problem,interpretation,element);
35145 neg find scopeDisallowsNewEAnnotation_class(problem, interpretation);
35146 neg find isPrimitive(element);
35147} or
35148{ find mustInstanceOfEAnnotation_class(problem,interpretation,element); }
35149/**
35150 * An element must be an instance of type "EClass class".
35151 */
35152private pattern mustInstanceOfEClass_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
35153 Type.name(type,"EClass class");
35154 find directInstanceOf(problem,interpretation,element,type);
35155}
35156private pattern scopeDisallowsNewEClass_class(problem:LogicProblem, interpretation:PartialInterpretation) {
35157 find interpretation(problem,interpretation);
35158 PartialInterpretation.scopes(interpretation,scope);
35159 Scope.targetTypeInterpretation(scope,typeInterpretation);
35160 Scope.maxNewElements(scope,0);
35161 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
35162 Type.name(type,"EClass class");
35163}
35164
35165/**
35166 * An element may be an instance of type "EClass class".
35167 */
35168private pattern mayInstanceOfEClass_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
35169{
35170 find interpretation(problem,interpretation);
35171 PartialInterpretation.newElements(interpretation,element);
35172 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
35173 neg find mustInstanceOfEObject_class(problem,interpretation,element);
35174 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
35175 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
35176 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
35177 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
35178 neg find mustInstanceOfEDataType_class(problem,interpretation,element);
35179 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
35180 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
35181 neg find scopeDisallowsNewEClass_class(problem, interpretation);
35182 neg find isPrimitive(element);
35183} or {
35184 find interpretation(problem,interpretation);
35185 PartialInterpretation.openWorldElements(interpretation,element);
35186 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
35187 neg find mustInstanceOfEObject_class(problem,interpretation,element);
35188 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
35189 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
35190 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
35191 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
35192 neg find mustInstanceOfEDataType_class(problem,interpretation,element);
35193 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
35194 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
35195 neg find scopeDisallowsNewEClass_class(problem, interpretation);
35196 neg find isPrimitive(element);
35197} or
35198{ find mustInstanceOfEClass_class(problem,interpretation,element); }
35199/**
35200 * An element must be an instance of type "EClassifier class".
35201 */
35202private pattern mustInstanceOfEClassifier_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
35203 Type.name(type,"EClassifier class");
35204 find directInstanceOf(problem,interpretation,element,type);
35205}
35206private pattern scopeDisallowsNewEClassifier_class(problem:LogicProblem, interpretation:PartialInterpretation) {
35207 find interpretation(problem,interpretation);
35208 PartialInterpretation.scopes(interpretation,scope);
35209 Scope.targetTypeInterpretation(scope,typeInterpretation);
35210 Scope.maxNewElements(scope,0);
35211 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
35212 Type.name(type,"EClassifier class");
35213}
35214
35215/**
35216 * An element may be an instance of type "EClassifier class".
35217 */
35218private pattern mayInstanceOfEClassifier_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
35219{
35220 find interpretation(problem,interpretation);
35221 PartialInterpretation.newElements(interpretation,element);
35222 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
35223 neg find mustInstanceOfEObject_class(problem,interpretation,element);
35224 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
35225 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
35226 neg find mustInstanceOfEClass_class(problem,interpretation,element);
35227 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
35228 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
35229 neg find mustInstanceOfEDataType_class(problem,interpretation,element);
35230 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
35231 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
35232 neg find scopeDisallowsNewEClassifier_class(problem, interpretation);
35233 neg find isPrimitive(element);
35234} or {
35235 find interpretation(problem,interpretation);
35236 PartialInterpretation.openWorldElements(interpretation,element);
35237 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
35238 neg find mustInstanceOfEObject_class(problem,interpretation,element);
35239 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
35240 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
35241 neg find mustInstanceOfEClass_class(problem,interpretation,element);
35242 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
35243 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
35244 neg find mustInstanceOfEDataType_class(problem,interpretation,element);
35245 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
35246 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
35247 neg find scopeDisallowsNewEClassifier_class(problem, interpretation);
35248 neg find isPrimitive(element);
35249} or
35250{ find mustInstanceOfEClassifier_class(problem,interpretation,element); }
35251/**
35252 * An element must be an instance of type "EDataType class".
35253 */
35254private pattern mustInstanceOfEDataType_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
35255 Type.name(type,"EDataType class");
35256 find directInstanceOf(problem,interpretation,element,type);
35257}
35258private pattern scopeDisallowsNewEDataType_class(problem:LogicProblem, interpretation:PartialInterpretation) {
35259 find interpretation(problem,interpretation);
35260 PartialInterpretation.scopes(interpretation,scope);
35261 Scope.targetTypeInterpretation(scope,typeInterpretation);
35262 Scope.maxNewElements(scope,0);
35263 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
35264 Type.name(type,"EDataType class");
35265}
35266
35267/**
35268 * An element may be an instance of type "EDataType class".
35269 */
35270private pattern mayInstanceOfEDataType_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
35271{
35272 find interpretation(problem,interpretation);
35273 PartialInterpretation.newElements(interpretation,element);
35274 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
35275 neg find mustInstanceOfEObject_class(problem,interpretation,element);
35276 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
35277 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
35278 neg find mustInstanceOfEClass_class(problem,interpretation,element);
35279 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
35280 neg find mustInstanceOfEEnum_class(problem,interpretation,element);
35281 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
35282 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
35283 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
35284 neg find scopeDisallowsNewEDataType_class(problem, interpretation);
35285 neg find isPrimitive(element);
35286} or {
35287 find interpretation(problem,interpretation);
35288 PartialInterpretation.openWorldElements(interpretation,element);
35289 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
35290 neg find mustInstanceOfEObject_class(problem,interpretation,element);
35291 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
35292 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
35293 neg find mustInstanceOfEClass_class(problem,interpretation,element);
35294 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
35295 neg find mustInstanceOfEEnum_class(problem,interpretation,element);
35296 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
35297 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
35298 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
35299 neg find scopeDisallowsNewEDataType_class(problem, interpretation);
35300 neg find isPrimitive(element);
35301} or
35302{ find mustInstanceOfEDataType_class(problem,interpretation,element); }
35303/**
35304 * An element must be an instance of type "EEnum class".
35305 */
35306private pattern mustInstanceOfEEnum_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
35307 Type.name(type,"EEnum class");
35308 find directInstanceOf(problem,interpretation,element,type);
35309}
35310private pattern scopeDisallowsNewEEnum_class(problem:LogicProblem, interpretation:PartialInterpretation) {
35311 find interpretation(problem,interpretation);
35312 PartialInterpretation.scopes(interpretation,scope);
35313 Scope.targetTypeInterpretation(scope,typeInterpretation);
35314 Scope.maxNewElements(scope,0);
35315 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
35316 Type.name(type,"EEnum class");
35317}
35318
35319/**
35320 * An element may be an instance of type "EEnum class".
35321 */
35322private pattern mayInstanceOfEEnum_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
35323{
35324 find interpretation(problem,interpretation);
35325 PartialInterpretation.newElements(interpretation,element);
35326 neg find mustInstanceOfEObject_class(problem,interpretation,element);
35327 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
35328 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
35329 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
35330 neg find mustInstanceOfEClass_class(problem,interpretation,element);
35331 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
35332 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
35333 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
35334 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
35335 neg find scopeDisallowsNewEEnum_class(problem, interpretation);
35336 neg find isPrimitive(element);
35337} or {
35338 find interpretation(problem,interpretation);
35339 PartialInterpretation.openWorldElements(interpretation,element);
35340 neg find mustInstanceOfEObject_class(problem,interpretation,element);
35341 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
35342 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
35343 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
35344 neg find mustInstanceOfEClass_class(problem,interpretation,element);
35345 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
35346 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
35347 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
35348 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
35349 neg find scopeDisallowsNewEEnum_class(problem, interpretation);
35350 neg find isPrimitive(element);
35351} or
35352{ find mustInstanceOfEEnum_class(problem,interpretation,element); }
35353/**
35354 * An element must be an instance of type "EEnumLiteral class".
35355 */
35356private pattern mustInstanceOfEEnumLiteral_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
35357 Type.name(type,"EEnumLiteral class");
35358 find directInstanceOf(problem,interpretation,element,type);
35359}
35360private pattern scopeDisallowsNewEEnumLiteral_class(problem:LogicProblem, interpretation:PartialInterpretation) {
35361 find interpretation(problem,interpretation);
35362 PartialInterpretation.scopes(interpretation,scope);
35363 Scope.targetTypeInterpretation(scope,typeInterpretation);
35364 Scope.maxNewElements(scope,0);
35365 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
35366 Type.name(type,"EEnumLiteral class");
35367}
35368
35369/**
35370 * An element may be an instance of type "EEnumLiteral class".
35371 */
35372private pattern mayInstanceOfEEnumLiteral_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
35373{
35374 find interpretation(problem,interpretation);
35375 PartialInterpretation.newElements(interpretation,element);
35376 neg find mustInstanceOfEObject_class(problem,interpretation,element);
35377 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
35378 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
35379 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
35380 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
35381 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
35382 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
35383 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
35384 neg find scopeDisallowsNewEEnumLiteral_class(problem, interpretation);
35385 neg find isPrimitive(element);
35386} or {
35387 find interpretation(problem,interpretation);
35388 PartialInterpretation.openWorldElements(interpretation,element);
35389 neg find mustInstanceOfEObject_class(problem,interpretation,element);
35390 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
35391 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
35392 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
35393 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
35394 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
35395 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
35396 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
35397 neg find scopeDisallowsNewEEnumLiteral_class(problem, interpretation);
35398 neg find isPrimitive(element);
35399} or
35400{ find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); }
35401/**
35402 * An element must be an instance of type "EModelElement class".
35403 */
35404private pattern mustInstanceOfEModelElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
35405 Type.name(type,"EModelElement class");
35406 find directInstanceOf(problem,interpretation,element,type);
35407}
35408private pattern scopeDisallowsNewEModelElement_class(problem:LogicProblem, interpretation:PartialInterpretation) {
35409 find interpretation(problem,interpretation);
35410 PartialInterpretation.scopes(interpretation,scope);
35411 Scope.targetTypeInterpretation(scope,typeInterpretation);
35412 Scope.maxNewElements(scope,0);
35413 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
35414 Type.name(type,"EModelElement class");
35415}
35416
35417/**
35418 * An element may be an instance of type "EModelElement class".
35419 */
35420private pattern mayInstanceOfEModelElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
35421{
35422 find interpretation(problem,interpretation);
35423 PartialInterpretation.newElements(interpretation,element);
35424 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
35425 neg find mustInstanceOfEObject_class(problem,interpretation,element);
35426 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
35427 neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element);
35428 neg find mustInstanceOfENamedElement_class(problem,interpretation,element);
35429 neg find scopeDisallowsNewEModelElement_class(problem, interpretation);
35430 neg find isPrimitive(element);
35431} or {
35432 find interpretation(problem,interpretation);
35433 PartialInterpretation.openWorldElements(interpretation,element);
35434 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
35435 neg find mustInstanceOfEObject_class(problem,interpretation,element);
35436 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
35437 neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element);
35438 neg find mustInstanceOfENamedElement_class(problem,interpretation,element);
35439 neg find scopeDisallowsNewEModelElement_class(problem, interpretation);
35440 neg find isPrimitive(element);
35441} or
35442{ find mustInstanceOfEModelElement_class(problem,interpretation,element); }
35443/**
35444 * An element must be an instance of type "ENamedElement class".
35445 */
35446private pattern mustInstanceOfENamedElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
35447 Type.name(type,"ENamedElement class");
35448 find directInstanceOf(problem,interpretation,element,type);
35449}
35450private pattern scopeDisallowsNewENamedElement_class(problem:LogicProblem, interpretation:PartialInterpretation) {
35451 find interpretation(problem,interpretation);
35452 PartialInterpretation.scopes(interpretation,scope);
35453 Scope.targetTypeInterpretation(scope,typeInterpretation);
35454 Scope.maxNewElements(scope,0);
35455 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
35456 Type.name(type,"ENamedElement class");
35457}
35458
35459/**
35460 * An element may be an instance of type "ENamedElement class".
35461 */
35462private pattern mayInstanceOfENamedElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
35463{
35464 find interpretation(problem,interpretation);
35465 PartialInterpretation.newElements(interpretation,element);
35466 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
35467 neg find mustInstanceOfEObject_class(problem,interpretation,element);
35468 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
35469 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
35470 neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element);
35471 neg find scopeDisallowsNewENamedElement_class(problem, interpretation);
35472 neg find isPrimitive(element);
35473} or {
35474 find interpretation(problem,interpretation);
35475 PartialInterpretation.openWorldElements(interpretation,element);
35476 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
35477 neg find mustInstanceOfEObject_class(problem,interpretation,element);
35478 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
35479 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
35480 neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element);
35481 neg find scopeDisallowsNewENamedElement_class(problem, interpretation);
35482 neg find isPrimitive(element);
35483} or
35484{ find mustInstanceOfENamedElement_class(problem,interpretation,element); }
35485/**
35486 * An element must be an instance of type "EObject class".
35487 */
35488private pattern mustInstanceOfEObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
35489 Type.name(type,"EObject class");
35490 find directInstanceOf(problem,interpretation,element,type);
35491}
35492private pattern scopeDisallowsNewEObject_class(problem:LogicProblem, interpretation:PartialInterpretation) {
35493 find interpretation(problem,interpretation);
35494 PartialInterpretation.scopes(interpretation,scope);
35495 Scope.targetTypeInterpretation(scope,typeInterpretation);
35496 Scope.maxNewElements(scope,0);
35497 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
35498 Type.name(type,"EObject class");
35499}
35500
35501/**
35502 * An element may be an instance of type "EObject class".
35503 */
35504private pattern mayInstanceOfEObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
35505{
35506 find interpretation(problem,interpretation);
35507 PartialInterpretation.newElements(interpretation,element);
35508 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
35509 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
35510 neg find mustInstanceOfEModelElement_class(problem,interpretation,element);
35511 neg find scopeDisallowsNewEObject_class(problem, interpretation);
35512 neg find isPrimitive(element);
35513} or {
35514 find interpretation(problem,interpretation);
35515 PartialInterpretation.openWorldElements(interpretation,element);
35516 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
35517 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
35518 neg find mustInstanceOfEModelElement_class(problem,interpretation,element);
35519 neg find scopeDisallowsNewEObject_class(problem, interpretation);
35520 neg find isPrimitive(element);
35521} or
35522{ find mustInstanceOfEObject_class(problem,interpretation,element); }
35523/**
35524 * An element must be an instance of type "EOperation class".
35525 */
35526private pattern mustInstanceOfEOperation_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
35527 Type.name(type,"EOperation class");
35528 find directInstanceOf(problem,interpretation,element,type);
35529}
35530private pattern scopeDisallowsNewEOperation_class(problem:LogicProblem, interpretation:PartialInterpretation) {
35531 find interpretation(problem,interpretation);
35532 PartialInterpretation.scopes(interpretation,scope);
35533 Scope.targetTypeInterpretation(scope,typeInterpretation);
35534 Scope.maxNewElements(scope,0);
35535 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
35536 Type.name(type,"EOperation class");
35537}
35538
35539/**
35540 * An element may be an instance of type "EOperation class".
35541 */
35542private pattern mayInstanceOfEOperation_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
35543{
35544 find interpretation(problem,interpretation);
35545 PartialInterpretation.newElements(interpretation,element);
35546 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
35547 neg find mustInstanceOfEObject_class(problem,interpretation,element);
35548 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
35549 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
35550 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
35551 neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element);
35552 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
35553 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
35554 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
35555 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
35556 neg find scopeDisallowsNewEOperation_class(problem, interpretation);
35557 neg find isPrimitive(element);
35558} or {
35559 find interpretation(problem,interpretation);
35560 PartialInterpretation.openWorldElements(interpretation,element);
35561 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
35562 neg find mustInstanceOfEObject_class(problem,interpretation,element);
35563 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
35564 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
35565 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
35566 neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element);
35567 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
35568 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
35569 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
35570 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
35571 neg find scopeDisallowsNewEOperation_class(problem, interpretation);
35572 neg find isPrimitive(element);
35573} or
35574{ find mustInstanceOfEOperation_class(problem,interpretation,element); }
35575/**
35576 * An element must be an instance of type "EPackage class".
35577 */
35578private pattern mustInstanceOfEPackage_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
35579 Type.name(type,"EPackage class");
35580 find directInstanceOf(problem,interpretation,element,type);
35581}
35582private pattern scopeDisallowsNewEPackage_class(problem:LogicProblem, interpretation:PartialInterpretation) {
35583 find interpretation(problem,interpretation);
35584 PartialInterpretation.scopes(interpretation,scope);
35585 Scope.targetTypeInterpretation(scope,typeInterpretation);
35586 Scope.maxNewElements(scope,0);
35587 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
35588 Type.name(type,"EPackage class");
35589}
35590
35591/**
35592 * An element may be an instance of type "EPackage class".
35593 */
35594private pattern mayInstanceOfEPackage_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
35595{
35596 find interpretation(problem,interpretation);
35597 PartialInterpretation.newElements(interpretation,element);
35598 neg find mustInstanceOfEObject_class(problem,interpretation,element);
35599 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
35600 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
35601 neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element);
35602 neg find scopeDisallowsNewEPackage_class(problem, interpretation);
35603 neg find isPrimitive(element);
35604} or {
35605 find interpretation(problem,interpretation);
35606 PartialInterpretation.openWorldElements(interpretation,element);
35607 neg find mustInstanceOfEObject_class(problem,interpretation,element);
35608 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
35609 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
35610 neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element);
35611 neg find scopeDisallowsNewEPackage_class(problem, interpretation);
35612 neg find isPrimitive(element);
35613} or
35614{ find mustInstanceOfEPackage_class(problem,interpretation,element); }
35615/**
35616 * An element must be an instance of type "EParameter class".
35617 */
35618private pattern mustInstanceOfEParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
35619 Type.name(type,"EParameter class");
35620 find directInstanceOf(problem,interpretation,element,type);
35621}
35622private pattern scopeDisallowsNewEParameter_class(problem:LogicProblem, interpretation:PartialInterpretation) {
35623 find interpretation(problem,interpretation);
35624 PartialInterpretation.scopes(interpretation,scope);
35625 Scope.targetTypeInterpretation(scope,typeInterpretation);
35626 Scope.maxNewElements(scope,0);
35627 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
35628 Type.name(type,"EParameter class");
35629}
35630
35631/**
35632 * An element may be an instance of type "EParameter class".
35633 */
35634private pattern mayInstanceOfEParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
35635{
35636 find interpretation(problem,interpretation);
35637 PartialInterpretation.newElements(interpretation,element);
35638 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
35639 neg find mustInstanceOfEObject_class(problem,interpretation,element);
35640 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
35641 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
35642 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
35643 neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element);
35644 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
35645 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
35646 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
35647 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
35648 neg find scopeDisallowsNewEParameter_class(problem, interpretation);
35649 neg find isPrimitive(element);
35650} or {
35651 find interpretation(problem,interpretation);
35652 PartialInterpretation.openWorldElements(interpretation,element);
35653 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
35654 neg find mustInstanceOfEObject_class(problem,interpretation,element);
35655 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
35656 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
35657 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
35658 neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element);
35659 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
35660 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
35661 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
35662 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
35663 neg find scopeDisallowsNewEParameter_class(problem, interpretation);
35664 neg find isPrimitive(element);
35665} or
35666{ find mustInstanceOfEParameter_class(problem,interpretation,element); }
35667/**
35668 * An element must be an instance of type "EReference class".
35669 */
35670private pattern mustInstanceOfEReference_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
35671 Type.name(type,"EReference class");
35672 find directInstanceOf(problem,interpretation,element,type);
35673}
35674private pattern scopeDisallowsNewEReference_class(problem:LogicProblem, interpretation:PartialInterpretation) {
35675 find interpretation(problem,interpretation);
35676 PartialInterpretation.scopes(interpretation,scope);
35677 Scope.targetTypeInterpretation(scope,typeInterpretation);
35678 Scope.maxNewElements(scope,0);
35679 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
35680 Type.name(type,"EReference class");
35681}
35682
35683/**
35684 * An element may be an instance of type "EReference class".
35685 */
35686private pattern mayInstanceOfEReference_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
35687{
35688 find interpretation(problem,interpretation);
35689 PartialInterpretation.newElements(interpretation,element);
35690 neg find mustInstanceOfEObject_class(problem,interpretation,element);
35691 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
35692 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
35693 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
35694 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
35695 neg find mustInstanceOfEAttribute_class(problem,interpretation,element);
35696 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
35697 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
35698 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
35699 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
35700 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
35701 neg find scopeDisallowsNewEReference_class(problem, interpretation);
35702 neg find isPrimitive(element);
35703} or {
35704 find interpretation(problem,interpretation);
35705 PartialInterpretation.openWorldElements(interpretation,element);
35706 neg find mustInstanceOfEObject_class(problem,interpretation,element);
35707 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
35708 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
35709 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
35710 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
35711 neg find mustInstanceOfEAttribute_class(problem,interpretation,element);
35712 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
35713 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
35714 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
35715 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
35716 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
35717 neg find scopeDisallowsNewEReference_class(problem, interpretation);
35718 neg find isPrimitive(element);
35719} or
35720{ find mustInstanceOfEReference_class(problem,interpretation,element); }
35721/**
35722 * An element must be an instance of type "EStructuralFeature class".
35723 */
35724private pattern mustInstanceOfEStructuralFeature_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
35725 Type.name(type,"EStructuralFeature class");
35726 find directInstanceOf(problem,interpretation,element,type);
35727}
35728private pattern scopeDisallowsNewEStructuralFeature_class(problem:LogicProblem, interpretation:PartialInterpretation) {
35729 find interpretation(problem,interpretation);
35730 PartialInterpretation.scopes(interpretation,scope);
35731 Scope.targetTypeInterpretation(scope,typeInterpretation);
35732 Scope.maxNewElements(scope,0);
35733 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
35734 Type.name(type,"EStructuralFeature class");
35735}
35736
35737/**
35738 * An element may be an instance of type "EStructuralFeature class".
35739 */
35740private pattern mayInstanceOfEStructuralFeature_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
35741{
35742 find interpretation(problem,interpretation);
35743 PartialInterpretation.newElements(interpretation,element);
35744 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
35745 neg find mustInstanceOfEObject_class(problem,interpretation,element);
35746 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
35747 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
35748 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
35749 neg find mustInstanceOfEAttribute_class(problem,interpretation,element);
35750 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
35751 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
35752 neg find mustInstanceOfEReference_class(problem,interpretation,element);
35753 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
35754 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
35755 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
35756 neg find scopeDisallowsNewEStructuralFeature_class(problem, interpretation);
35757 neg find isPrimitive(element);
35758} or {
35759 find interpretation(problem,interpretation);
35760 PartialInterpretation.openWorldElements(interpretation,element);
35761 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
35762 neg find mustInstanceOfEObject_class(problem,interpretation,element);
35763 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
35764 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
35765 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
35766 neg find mustInstanceOfEAttribute_class(problem,interpretation,element);
35767 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
35768 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
35769 neg find mustInstanceOfEReference_class(problem,interpretation,element);
35770 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
35771 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
35772 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
35773 neg find scopeDisallowsNewEStructuralFeature_class(problem, interpretation);
35774 neg find isPrimitive(element);
35775} or
35776{ find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); }
35777/**
35778 * An element must be an instance of type "ETypedElement class".
35779 */
35780private pattern mustInstanceOfETypedElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
35781 Type.name(type,"ETypedElement class");
35782 find directInstanceOf(problem,interpretation,element,type);
35783}
35784private pattern scopeDisallowsNewETypedElement_class(problem:LogicProblem, interpretation:PartialInterpretation) {
35785 find interpretation(problem,interpretation);
35786 PartialInterpretation.scopes(interpretation,scope);
35787 Scope.targetTypeInterpretation(scope,typeInterpretation);
35788 Scope.maxNewElements(scope,0);
35789 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
35790 Type.name(type,"ETypedElement class");
35791}
35792
35793/**
35794 * An element may be an instance of type "ETypedElement class".
35795 */
35796private pattern mayInstanceOfETypedElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
35797{
35798 find interpretation(problem,interpretation);
35799 PartialInterpretation.newElements(interpretation,element);
35800 neg find mustInstanceOfEObject_class(problem,interpretation,element);
35801 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
35802 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
35803 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
35804 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
35805 neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element);
35806 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
35807 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
35808 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
35809 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
35810 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
35811 neg find scopeDisallowsNewETypedElement_class(problem, interpretation);
35812 neg find isPrimitive(element);
35813} or {
35814 find interpretation(problem,interpretation);
35815 PartialInterpretation.openWorldElements(interpretation,element);
35816 neg find mustInstanceOfEObject_class(problem,interpretation,element);
35817 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
35818 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
35819 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
35820 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
35821 neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element);
35822 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
35823 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
35824 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
35825 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
35826 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
35827 neg find scopeDisallowsNewETypedElement_class(problem, interpretation);
35828 neg find isPrimitive(element);
35829} or
35830{ find mustInstanceOfETypedElement_class(problem,interpretation,element); }
35831/**
35832 * An element must be an instance of type "EStringToStringMapEntry class".
35833 */
35834private pattern mustInstanceOfEStringToStringMapEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
35835 Type.name(type,"EStringToStringMapEntry class");
35836 find directInstanceOf(problem,interpretation,element,type);
35837}
35838private pattern scopeDisallowsNewEStringToStringMapEntry_class(problem:LogicProblem, interpretation:PartialInterpretation) {
35839 find interpretation(problem,interpretation);
35840 PartialInterpretation.scopes(interpretation,scope);
35841 Scope.targetTypeInterpretation(scope,typeInterpretation);
35842 Scope.maxNewElements(scope,0);
35843 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
35844 Type.name(type,"EStringToStringMapEntry class");
35845}
35846
35847/**
35848 * An element may be an instance of type "EStringToStringMapEntry class".
35849 */
35850private pattern mayInstanceOfEStringToStringMapEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
35851{
35852 find interpretation(problem,interpretation);
35853 PartialInterpretation.newElements(interpretation,element);
35854 neg find mustInstanceOfEObject_class(problem,interpretation,element);
35855 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
35856 neg find mustInstanceOfEModelElement_class(problem,interpretation,element);
35857 neg find scopeDisallowsNewEStringToStringMapEntry_class(problem, interpretation);
35858 neg find isPrimitive(element);
35859} or {
35860 find interpretation(problem,interpretation);
35861 PartialInterpretation.openWorldElements(interpretation,element);
35862 neg find mustInstanceOfEObject_class(problem,interpretation,element);
35863 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
35864 neg find mustInstanceOfEModelElement_class(problem,interpretation,element);
35865 neg find scopeDisallowsNewEStringToStringMapEntry_class(problem, interpretation);
35866 neg find isPrimitive(element);
35867} or
35868{ find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); }
35869/**
35870 * An element must be an instance of type "EGenericType class".
35871 */
35872private pattern mustInstanceOfEGenericType_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
35873 Type.name(type,"EGenericType class");
35874 find directInstanceOf(problem,interpretation,element,type);
35875}
35876private pattern scopeDisallowsNewEGenericType_class(problem:LogicProblem, interpretation:PartialInterpretation) {
35877 find interpretation(problem,interpretation);
35878 PartialInterpretation.scopes(interpretation,scope);
35879 Scope.targetTypeInterpretation(scope,typeInterpretation);
35880 Scope.maxNewElements(scope,0);
35881 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
35882 Type.name(type,"EGenericType class");
35883}
35884
35885/**
35886 * An element may be an instance of type "EGenericType class".
35887 */
35888private pattern mayInstanceOfEGenericType_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
35889{
35890 find interpretation(problem,interpretation);
35891 PartialInterpretation.newElements(interpretation,element);
35892 neg find mustInstanceOfEObject_class(problem,interpretation,element);
35893 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
35894 neg find mustInstanceOfEModelElement_class(problem,interpretation,element);
35895 neg find scopeDisallowsNewEGenericType_class(problem, interpretation);
35896 neg find isPrimitive(element);
35897} or {
35898 find interpretation(problem,interpretation);
35899 PartialInterpretation.openWorldElements(interpretation,element);
35900 neg find mustInstanceOfEObject_class(problem,interpretation,element);
35901 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
35902 neg find mustInstanceOfEModelElement_class(problem,interpretation,element);
35903 neg find scopeDisallowsNewEGenericType_class(problem, interpretation);
35904 neg find isPrimitive(element);
35905} or
35906{ find mustInstanceOfEGenericType_class(problem,interpretation,element); }
35907/**
35908 * An element must be an instance of type "ETypeParameter class".
35909 */
35910private pattern mustInstanceOfETypeParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
35911 Type.name(type,"ETypeParameter class");
35912 find directInstanceOf(problem,interpretation,element,type);
35913}
35914private pattern scopeDisallowsNewETypeParameter_class(problem:LogicProblem, interpretation:PartialInterpretation) {
35915 find interpretation(problem,interpretation);
35916 PartialInterpretation.scopes(interpretation,scope);
35917 Scope.targetTypeInterpretation(scope,typeInterpretation);
35918 Scope.maxNewElements(scope,0);
35919 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
35920 Type.name(type,"ETypeParameter class");
35921}
35922
35923/**
35924 * An element may be an instance of type "ETypeParameter class".
35925 */
35926private pattern mayInstanceOfETypeParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
35927{
35928 find interpretation(problem,interpretation);
35929 PartialInterpretation.newElements(interpretation,element);
35930 neg find mustInstanceOfEObject_class(problem,interpretation,element);
35931 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
35932 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
35933 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
35934 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
35935 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
35936 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
35937 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
35938 neg find scopeDisallowsNewETypeParameter_class(problem, interpretation);
35939 neg find isPrimitive(element);
35940} or {
35941 find interpretation(problem,interpretation);
35942 PartialInterpretation.openWorldElements(interpretation,element);
35943 neg find mustInstanceOfEObject_class(problem,interpretation,element);
35944 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
35945 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
35946 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
35947 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
35948 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
35949 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
35950 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
35951 neg find scopeDisallowsNewETypeParameter_class(problem, interpretation);
35952 neg find isPrimitive(element);
35953} or
35954{ find mustInstanceOfETypeParameter_class(problem,interpretation,element); }
35955/**
35956 * An element must be an instance of type "EModelElement class DefinedPart".
35957 */
35958private pattern mustInstanceOfEModelElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
35959 Type.name(type,"EModelElement class DefinedPart");
35960 find directInstanceOf(problem,interpretation,element,type);
35961}
35962private pattern scopeDisallowsNewEModelElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
35963 find interpretation(problem,interpretation);
35964 PartialInterpretation.scopes(interpretation,scope);
35965 Scope.targetTypeInterpretation(scope,typeInterpretation);
35966 Scope.maxNewElements(scope,0);
35967 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
35968 Type.name(type,"EModelElement class DefinedPart");
35969}
35970
35971/**
35972 * An element may be an instance of type "EModelElement class DefinedPart".
35973 */
35974private pattern mayInstanceOfEModelElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
35975{ find mustInstanceOfEModelElement_class_DefinedPart(problem,interpretation,element); }
35976/**
35977 * An element must be an instance of type "EModelElement class UndefinedPart".
35978 */
35979private pattern mustInstanceOfEModelElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
35980 Type.name(type,"EModelElement class UndefinedPart");
35981 find directInstanceOf(problem,interpretation,element,type);
35982}
35983private pattern scopeDisallowsNewEModelElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
35984 find interpretation(problem,interpretation);
35985 PartialInterpretation.scopes(interpretation,scope);
35986 Scope.targetTypeInterpretation(scope,typeInterpretation);
35987 Scope.maxNewElements(scope,0);
35988 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
35989 Type.name(type,"EModelElement class UndefinedPart");
35990}
35991
35992/**
35993 * An element may be an instance of type "EModelElement class UndefinedPart".
35994 */
35995private pattern mayInstanceOfEModelElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
35996{
35997 find interpretation(problem,interpretation);
35998 PartialInterpretation.newElements(interpretation,element);
35999 neg find mustInstanceOfEObject_class(problem,interpretation,element);
36000 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
36001 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
36002 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
36003 neg find mustInstanceOfENamedElement_class(problem,interpretation,element);
36004 neg find scopeDisallowsNewEModelElement_class_UndefinedPart(problem, interpretation);
36005 neg find isPrimitive(element);
36006} or {
36007 find interpretation(problem,interpretation);
36008 PartialInterpretation.openWorldElements(interpretation,element);
36009 neg find mustInstanceOfEObject_class(problem,interpretation,element);
36010 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
36011 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
36012 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
36013 neg find mustInstanceOfENamedElement_class(problem,interpretation,element);
36014 neg find scopeDisallowsNewEModelElement_class_UndefinedPart(problem, interpretation);
36015 neg find isPrimitive(element);
36016} or
36017{ find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); }
36018/**
36019 * An element must be an instance of type "ENamedElement class DefinedPart".
36020 */
36021private pattern mustInstanceOfENamedElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
36022 Type.name(type,"ENamedElement class DefinedPart");
36023 find directInstanceOf(problem,interpretation,element,type);
36024}
36025private pattern scopeDisallowsNewENamedElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
36026 find interpretation(problem,interpretation);
36027 PartialInterpretation.scopes(interpretation,scope);
36028 Scope.targetTypeInterpretation(scope,typeInterpretation);
36029 Scope.maxNewElements(scope,0);
36030 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
36031 Type.name(type,"ENamedElement class DefinedPart");
36032}
36033
36034/**
36035 * An element may be an instance of type "ENamedElement class DefinedPart".
36036 */
36037private pattern mayInstanceOfENamedElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
36038{ find mustInstanceOfENamedElement_class_DefinedPart(problem,interpretation,element); }
36039/**
36040 * An element must be an instance of type "ENamedElement class UndefinedPart".
36041 */
36042private pattern mustInstanceOfENamedElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
36043 Type.name(type,"ENamedElement class UndefinedPart");
36044 find directInstanceOf(problem,interpretation,element,type);
36045}
36046private pattern scopeDisallowsNewENamedElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
36047 find interpretation(problem,interpretation);
36048 PartialInterpretation.scopes(interpretation,scope);
36049 Scope.targetTypeInterpretation(scope,typeInterpretation);
36050 Scope.maxNewElements(scope,0);
36051 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
36052 Type.name(type,"ENamedElement class UndefinedPart");
36053}
36054
36055/**
36056 * An element may be an instance of type "ENamedElement class UndefinedPart".
36057 */
36058private pattern mayInstanceOfENamedElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
36059{
36060 find interpretation(problem,interpretation);
36061 PartialInterpretation.newElements(interpretation,element);
36062 neg find mustInstanceOfEObject_class(problem,interpretation,element);
36063 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
36064 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
36065 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
36066 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
36067 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
36068 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
36069 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
36070 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
36071 neg find scopeDisallowsNewENamedElement_class_UndefinedPart(problem, interpretation);
36072 neg find isPrimitive(element);
36073} or {
36074 find interpretation(problem,interpretation);
36075 PartialInterpretation.openWorldElements(interpretation,element);
36076 neg find mustInstanceOfEObject_class(problem,interpretation,element);
36077 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
36078 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
36079 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
36080 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
36081 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
36082 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
36083 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
36084 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
36085 neg find scopeDisallowsNewENamedElement_class_UndefinedPart(problem, interpretation);
36086 neg find isPrimitive(element);
36087} or
36088{ find mustInstanceOfENamedElement_class_UndefinedPart(problem,interpretation,element); }
36089/**
36090 * An element must be an instance of type "EPackage class DefinedPart".
36091 */
36092private pattern mustInstanceOfEPackage_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
36093 Type.name(type,"EPackage class DefinedPart");
36094 find directInstanceOf(problem,interpretation,element,type);
36095}
36096private pattern scopeDisallowsNewEPackage_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
36097 find interpretation(problem,interpretation);
36098 PartialInterpretation.scopes(interpretation,scope);
36099 Scope.targetTypeInterpretation(scope,typeInterpretation);
36100 Scope.maxNewElements(scope,0);
36101 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
36102 Type.name(type,"EPackage class DefinedPart");
36103}
36104
36105/**
36106 * An element may be an instance of type "EPackage class DefinedPart".
36107 */
36108private pattern mayInstanceOfEPackage_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
36109{ find mustInstanceOfEPackage_class_DefinedPart(problem,interpretation,element); }
36110/**
36111 * An element must be an instance of type "EPackage class UndefinedPart".
36112 */
36113private pattern mustInstanceOfEPackage_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
36114 Type.name(type,"EPackage class UndefinedPart");
36115 find directInstanceOf(problem,interpretation,element,type);
36116}
36117private pattern scopeDisallowsNewEPackage_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
36118 find interpretation(problem,interpretation);
36119 PartialInterpretation.scopes(interpretation,scope);
36120 Scope.targetTypeInterpretation(scope,typeInterpretation);
36121 Scope.maxNewElements(scope,0);
36122 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
36123 Type.name(type,"EPackage class UndefinedPart");
36124}
36125
36126/**
36127 * An element may be an instance of type "EPackage class UndefinedPart".
36128 */
36129private pattern mayInstanceOfEPackage_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
36130{
36131 find interpretation(problem,interpretation);
36132 PartialInterpretation.newElements(interpretation,element);
36133 neg find mustInstanceOfEObject_class(problem,interpretation,element);
36134 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
36135 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
36136 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
36137 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
36138 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
36139 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
36140 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
36141 neg find scopeDisallowsNewEPackage_class_UndefinedPart(problem, interpretation);
36142 neg find isPrimitive(element);
36143} or {
36144 find interpretation(problem,interpretation);
36145 PartialInterpretation.openWorldElements(interpretation,element);
36146 neg find mustInstanceOfEObject_class(problem,interpretation,element);
36147 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
36148 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
36149 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
36150 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
36151 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
36152 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
36153 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
36154 neg find scopeDisallowsNewEPackage_class_UndefinedPart(problem, interpretation);
36155 neg find isPrimitive(element);
36156} or
36157{ find mustInstanceOfEPackage_class_UndefinedPart(problem,interpretation,element); }
36158
36159//////////
36160// 1.2 Relation Declaration Indexers
36161//////////
36162/**
36163 * Matcher for detecting tuples t where []eAttributeType reference EAttribute(source,target)
36164 */
36165private pattern mustInRelationeAttributeType_reference_EAttribute(
36166 problem:LogicProblem, interpretation:PartialInterpretation,
36167 source: DefinedElement, target:DefinedElement)
36168{
36169 find interpretation(problem,interpretation);
36170 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
36171 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributeType reference EAttribute");
36172 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
36173 BinaryElementRelationLink.param1(link,source);
36174 BinaryElementRelationLink.param2(link,target);
36175}
36176/**
36177 * Matcher for detecting tuples t where <>eAttributeType reference EAttribute(source,target)
36178 */
36179private pattern mayInRelationeAttributeType_reference_EAttribute(
36180 problem:LogicProblem, interpretation:PartialInterpretation,
36181 source: DefinedElement, target:DefinedElement)
36182{
36183 find interpretation(problem,interpretation);
36184 // The two endpoint of the link have to exist
36185 find mayExist(problem, interpretation, source);
36186 find mayExist(problem, interpretation, target);
36187 // Type consistency
36188 find mayInstanceOfEAttribute_class(problem,interpretation,source);
36189 find mayInstanceOfEDataType_class(problem,interpretation,target);
36190 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
36191 // the upper bound of the multiplicity should be considered.
36192 numberOfExistingReferences == count find mustInRelationeAttributeType_reference_EAttribute(problem,interpretation,source,_);
36193 check(numberOfExistingReferences < 1);
36194} or {
36195 find mustInRelationeAttributeType_reference_EAttribute(problem,interpretation,source,target);
36196}
36197/**
36198 * Matcher for detecting tuples t where []details reference EAnnotation(source,target)
36199 */
36200private pattern mustInRelationdetails_reference_EAnnotation(
36201 problem:LogicProblem, interpretation:PartialInterpretation,
36202 source: DefinedElement, target:DefinedElement)
36203{
36204 find interpretation(problem,interpretation);
36205 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
36206 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"details reference EAnnotation");
36207 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
36208 BinaryElementRelationLink.param1(link,source);
36209 BinaryElementRelationLink.param2(link,target);
36210}
36211/**
36212 * Matcher for detecting tuples t where <>details reference EAnnotation(source,target)
36213 */
36214private pattern mayInRelationdetails_reference_EAnnotation(
36215 problem:LogicProblem, interpretation:PartialInterpretation,
36216 source: DefinedElement, target:DefinedElement)
36217{
36218 find interpretation(problem,interpretation);
36219 // The two endpoint of the link have to exist
36220 find mayExist(problem, interpretation, source);
36221 find mayExist(problem, interpretation, target);
36222 // Type consistency
36223 find mayInstanceOfEAnnotation_class(problem,interpretation,source);
36224 find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,target);
36225 // The reference is containment, then a new reference cannot be create if:
36226 // 1. Multiple parents
36227 neg find mustContains4(problem,interpretation,_,target);
36228 // 2. Circle in the containment hierarchy
36229 neg find mustTransitiveContains(source,target);
36230} or {
36231 find mustInRelationdetails_reference_EAnnotation(problem,interpretation,source,target);
36232}
36233/**
36234 * Matcher for detecting tuples t where []eModelElement reference EAnnotation(source,target)
36235 */
36236private pattern mustInRelationeModelElement_reference_EAnnotation(
36237 problem:LogicProblem, interpretation:PartialInterpretation,
36238 source: DefinedElement, target:DefinedElement)
36239{
36240 find interpretation(problem,interpretation);
36241 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
36242 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eModelElement reference EAnnotation");
36243 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
36244 BinaryElementRelationLink.param1(link,source);
36245 BinaryElementRelationLink.param2(link,target);
36246}
36247/**
36248 * Matcher for detecting tuples t where <>eModelElement reference EAnnotation(source,target)
36249 */
36250private pattern mayInRelationeModelElement_reference_EAnnotation(
36251 problem:LogicProblem, interpretation:PartialInterpretation,
36252 source: DefinedElement, target:DefinedElement)
36253{
36254 find interpretation(problem,interpretation);
36255 // The two endpoint of the link have to exist
36256 find mayExist(problem, interpretation, source);
36257 find mayExist(problem, interpretation, target);
36258 // Type consistency
36259 find mayInstanceOfEAnnotation_class(problem,interpretation,source);
36260 find mayInstanceOfEModelElement_class(problem,interpretation,target);
36261 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
36262 // the upper bound of the multiplicity should be considered.
36263 numberOfExistingReferences == count find mustInRelationeModelElement_reference_EAnnotation(problem,interpretation,source,_);
36264 check(numberOfExistingReferences < 1);
36265 // The eOpposite of the reference is containment, then a referene cannot be created if
36266 // 1. Multiple parents
36267 neg find mustContains4(problem,interpretation,source,_);
36268 // 2. Circle in the containment hierarchy
36269 neg find mustTransitiveContains(source,target);
36270} or {
36271 find mustInRelationeModelElement_reference_EAnnotation(problem,interpretation,source,target);
36272}
36273/**
36274 * Matcher for detecting tuples t where []contents reference EAnnotation(source,target)
36275 */
36276private pattern mustInRelationcontents_reference_EAnnotation(
36277 problem:LogicProblem, interpretation:PartialInterpretation,
36278 source: DefinedElement, target:DefinedElement)
36279{
36280 find interpretation(problem,interpretation);
36281 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
36282 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"contents reference EAnnotation");
36283 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
36284 BinaryElementRelationLink.param1(link,source);
36285 BinaryElementRelationLink.param2(link,target);
36286}
36287/**
36288 * Matcher for detecting tuples t where <>contents reference EAnnotation(source,target)
36289 */
36290private pattern mayInRelationcontents_reference_EAnnotation(
36291 problem:LogicProblem, interpretation:PartialInterpretation,
36292 source: DefinedElement, target:DefinedElement)
36293{
36294 find interpretation(problem,interpretation);
36295 // The two endpoint of the link have to exist
36296 find mayExist(problem, interpretation, source);
36297 find mayExist(problem, interpretation, target);
36298 // Type consistency
36299 find mayInstanceOfEAnnotation_class(problem,interpretation,source);
36300 find mayInstanceOfEObject_class(problem,interpretation,target);
36301 // The reference is containment, then a new reference cannot be create if:
36302 // 1. Multiple parents
36303 neg find mustContains4(problem,interpretation,_,target);
36304 // 2. Circle in the containment hierarchy
36305 neg find mustTransitiveContains(source,target);
36306} or {
36307 find mustInRelationcontents_reference_EAnnotation(problem,interpretation,source,target);
36308}
36309/**
36310 * Matcher for detecting tuples t where []references reference EAnnotation(source,target)
36311 */
36312private pattern mustInRelationreferences_reference_EAnnotation(
36313 problem:LogicProblem, interpretation:PartialInterpretation,
36314 source: DefinedElement, target:DefinedElement)
36315{
36316 find interpretation(problem,interpretation);
36317 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
36318 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"references reference EAnnotation");
36319 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
36320 BinaryElementRelationLink.param1(link,source);
36321 BinaryElementRelationLink.param2(link,target);
36322}
36323/**
36324 * Matcher for detecting tuples t where <>references reference EAnnotation(source,target)
36325 */
36326private pattern mayInRelationreferences_reference_EAnnotation(
36327 problem:LogicProblem, interpretation:PartialInterpretation,
36328 source: DefinedElement, target:DefinedElement)
36329{
36330 find interpretation(problem,interpretation);
36331 // The two endpoint of the link have to exist
36332 find mayExist(problem, interpretation, source);
36333 find mayExist(problem, interpretation, target);
36334 // Type consistency
36335 find mayInstanceOfEAnnotation_class(problem,interpretation,source);
36336 find mayInstanceOfEObject_class(problem,interpretation,target);
36337} or {
36338 find mustInRelationreferences_reference_EAnnotation(problem,interpretation,source,target);
36339}
36340/**
36341 * Matcher for detecting tuples t where []eSuperTypes reference EClass(source,target)
36342 */
36343private pattern mustInRelationeSuperTypes_reference_EClass(
36344 problem:LogicProblem, interpretation:PartialInterpretation,
36345 source: DefinedElement, target:DefinedElement)
36346{
36347 find interpretation(problem,interpretation);
36348 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
36349 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eSuperTypes reference EClass");
36350 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
36351 BinaryElementRelationLink.param1(link,source);
36352 BinaryElementRelationLink.param2(link,target);
36353}
36354/**
36355 * Matcher for detecting tuples t where <>eSuperTypes reference EClass(source,target)
36356 */
36357private pattern mayInRelationeSuperTypes_reference_EClass(
36358 problem:LogicProblem, interpretation:PartialInterpretation,
36359 source: DefinedElement, target:DefinedElement)
36360{
36361 find interpretation(problem,interpretation);
36362 // The two endpoint of the link have to exist
36363 find mayExist(problem, interpretation, source);
36364 find mayExist(problem, interpretation, target);
36365 // Type consistency
36366 find mayInstanceOfEClass_class(problem,interpretation,source);
36367 find mayInstanceOfEClass_class(problem,interpretation,target);
36368} or {
36369 find mustInRelationeSuperTypes_reference_EClass(problem,interpretation,source,target);
36370}
36371/**
36372 * Matcher for detecting tuples t where []eOperations reference EClass(source,target)
36373 */
36374private pattern mustInRelationeOperations_reference_EClass(
36375 problem:LogicProblem, interpretation:PartialInterpretation,
36376 source: DefinedElement, target:DefinedElement)
36377{
36378 find interpretation(problem,interpretation);
36379 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
36380 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eOperations reference EClass");
36381 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
36382 BinaryElementRelationLink.param1(link,source);
36383 BinaryElementRelationLink.param2(link,target);
36384}
36385/**
36386 * Matcher for detecting tuples t where <>eOperations reference EClass(source,target)
36387 */
36388private pattern mayInRelationeOperations_reference_EClass(
36389 problem:LogicProblem, interpretation:PartialInterpretation,
36390 source: DefinedElement, target:DefinedElement)
36391{
36392 find interpretation(problem,interpretation);
36393 // The two endpoint of the link have to exist
36394 find mayExist(problem, interpretation, source);
36395 find mayExist(problem, interpretation, target);
36396 // Type consistency
36397 find mayInstanceOfEClass_class(problem,interpretation,source);
36398 find mayInstanceOfEOperation_class(problem,interpretation,target);
36399 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
36400 // the upper bound of the opposite reference multiplicity should be considered.
36401 numberOfExistingOppositeReferences == count find mustInRelationeContainingClass_reference_EOperation(problem,interpretation,target,_);
36402 check(numberOfExistingOppositeReferences < 1);
36403 // The reference is containment, then a new reference cannot be create if:
36404 // 1. Multiple parents
36405 neg find mustContains4(problem,interpretation,_,target);
36406 // 2. Circle in the containment hierarchy
36407 neg find mustTransitiveContains(source,target);
36408} or {
36409 find mustInRelationeOperations_reference_EClass(problem,interpretation,source,target);
36410}
36411/**
36412 * Matcher for detecting tuples t where []eAllAttributes reference EClass(source,target)
36413 */
36414private pattern mustInRelationeAllAttributes_reference_EClass(
36415 problem:LogicProblem, interpretation:PartialInterpretation,
36416 source: DefinedElement, target:DefinedElement)
36417{
36418 find interpretation(problem,interpretation);
36419 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
36420 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllAttributes reference EClass");
36421 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
36422 BinaryElementRelationLink.param1(link,source);
36423 BinaryElementRelationLink.param2(link,target);
36424}
36425/**
36426 * Matcher for detecting tuples t where <>eAllAttributes reference EClass(source,target)
36427 */
36428private pattern mayInRelationeAllAttributes_reference_EClass(
36429 problem:LogicProblem, interpretation:PartialInterpretation,
36430 source: DefinedElement, target:DefinedElement)
36431{
36432 find interpretation(problem,interpretation);
36433 // The two endpoint of the link have to exist
36434 find mayExist(problem, interpretation, source);
36435 find mayExist(problem, interpretation, target);
36436 // Type consistency
36437 find mayInstanceOfEClass_class(problem,interpretation,source);
36438 find mayInstanceOfEAttribute_class(problem,interpretation,target);
36439} or {
36440 find mustInRelationeAllAttributes_reference_EClass(problem,interpretation,source,target);
36441}
36442/**
36443 * Matcher for detecting tuples t where []eAllReferences reference EClass(source,target)
36444 */
36445private pattern mustInRelationeAllReferences_reference_EClass(
36446 problem:LogicProblem, interpretation:PartialInterpretation,
36447 source: DefinedElement, target:DefinedElement)
36448{
36449 find interpretation(problem,interpretation);
36450 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
36451 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllReferences reference EClass");
36452 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
36453 BinaryElementRelationLink.param1(link,source);
36454 BinaryElementRelationLink.param2(link,target);
36455}
36456/**
36457 * Matcher for detecting tuples t where <>eAllReferences reference EClass(source,target)
36458 */
36459private pattern mayInRelationeAllReferences_reference_EClass(
36460 problem:LogicProblem, interpretation:PartialInterpretation,
36461 source: DefinedElement, target:DefinedElement)
36462{
36463 find interpretation(problem,interpretation);
36464 // The two endpoint of the link have to exist
36465 find mayExist(problem, interpretation, source);
36466 find mayExist(problem, interpretation, target);
36467 // Type consistency
36468 find mayInstanceOfEClass_class(problem,interpretation,source);
36469 find mayInstanceOfEReference_class(problem,interpretation,target);
36470} or {
36471 find mustInRelationeAllReferences_reference_EClass(problem,interpretation,source,target);
36472}
36473/**
36474 * Matcher for detecting tuples t where []eReferences reference EClass(source,target)
36475 */
36476private pattern mustInRelationeReferences_reference_EClass(
36477 problem:LogicProblem, interpretation:PartialInterpretation,
36478 source: DefinedElement, target:DefinedElement)
36479{
36480 find interpretation(problem,interpretation);
36481 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
36482 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferences reference EClass");
36483 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
36484 BinaryElementRelationLink.param1(link,source);
36485 BinaryElementRelationLink.param2(link,target);
36486}
36487/**
36488 * Matcher for detecting tuples t where <>eReferences reference EClass(source,target)
36489 */
36490private pattern mayInRelationeReferences_reference_EClass(
36491 problem:LogicProblem, interpretation:PartialInterpretation,
36492 source: DefinedElement, target:DefinedElement)
36493{
36494 find interpretation(problem,interpretation);
36495 // The two endpoint of the link have to exist
36496 find mayExist(problem, interpretation, source);
36497 find mayExist(problem, interpretation, target);
36498 // Type consistency
36499 find mayInstanceOfEClass_class(problem,interpretation,source);
36500 find mayInstanceOfEReference_class(problem,interpretation,target);
36501} or {
36502 find mustInRelationeReferences_reference_EClass(problem,interpretation,source,target);
36503}
36504/**
36505 * Matcher for detecting tuples t where []eAttributes reference EClass(source,target)
36506 */
36507private pattern mustInRelationeAttributes_reference_EClass(
36508 problem:LogicProblem, interpretation:PartialInterpretation,
36509 source: DefinedElement, target:DefinedElement)
36510{
36511 find interpretation(problem,interpretation);
36512 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
36513 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributes reference EClass");
36514 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
36515 BinaryElementRelationLink.param1(link,source);
36516 BinaryElementRelationLink.param2(link,target);
36517}
36518/**
36519 * Matcher for detecting tuples t where <>eAttributes reference EClass(source,target)
36520 */
36521private pattern mayInRelationeAttributes_reference_EClass(
36522 problem:LogicProblem, interpretation:PartialInterpretation,
36523 source: DefinedElement, target:DefinedElement)
36524{
36525 find interpretation(problem,interpretation);
36526 // The two endpoint of the link have to exist
36527 find mayExist(problem, interpretation, source);
36528 find mayExist(problem, interpretation, target);
36529 // Type consistency
36530 find mayInstanceOfEClass_class(problem,interpretation,source);
36531 find mayInstanceOfEAttribute_class(problem,interpretation,target);
36532} or {
36533 find mustInRelationeAttributes_reference_EClass(problem,interpretation,source,target);
36534}
36535/**
36536 * Matcher for detecting tuples t where []eAllContainments reference EClass(source,target)
36537 */
36538private pattern mustInRelationeAllContainments_reference_EClass(
36539 problem:LogicProblem, interpretation:PartialInterpretation,
36540 source: DefinedElement, target:DefinedElement)
36541{
36542 find interpretation(problem,interpretation);
36543 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
36544 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllContainments reference EClass");
36545 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
36546 BinaryElementRelationLink.param1(link,source);
36547 BinaryElementRelationLink.param2(link,target);
36548}
36549/**
36550 * Matcher for detecting tuples t where <>eAllContainments reference EClass(source,target)
36551 */
36552private pattern mayInRelationeAllContainments_reference_EClass(
36553 problem:LogicProblem, interpretation:PartialInterpretation,
36554 source: DefinedElement, target:DefinedElement)
36555{
36556 find interpretation(problem,interpretation);
36557 // The two endpoint of the link have to exist
36558 find mayExist(problem, interpretation, source);
36559 find mayExist(problem, interpretation, target);
36560 // Type consistency
36561 find mayInstanceOfEClass_class(problem,interpretation,source);
36562 find mayInstanceOfEReference_class(problem,interpretation,target);
36563} or {
36564 find mustInRelationeAllContainments_reference_EClass(problem,interpretation,source,target);
36565}
36566/**
36567 * Matcher for detecting tuples t where []eAllOperations reference EClass(source,target)
36568 */
36569private pattern mustInRelationeAllOperations_reference_EClass(
36570 problem:LogicProblem, interpretation:PartialInterpretation,
36571 source: DefinedElement, target:DefinedElement)
36572{
36573 find interpretation(problem,interpretation);
36574 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
36575 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllOperations reference EClass");
36576 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
36577 BinaryElementRelationLink.param1(link,source);
36578 BinaryElementRelationLink.param2(link,target);
36579}
36580/**
36581 * Matcher for detecting tuples t where <>eAllOperations reference EClass(source,target)
36582 */
36583private pattern mayInRelationeAllOperations_reference_EClass(
36584 problem:LogicProblem, interpretation:PartialInterpretation,
36585 source: DefinedElement, target:DefinedElement)
36586{
36587 find interpretation(problem,interpretation);
36588 // The two endpoint of the link have to exist
36589 find mayExist(problem, interpretation, source);
36590 find mayExist(problem, interpretation, target);
36591 // Type consistency
36592 find mayInstanceOfEClass_class(problem,interpretation,source);
36593 find mayInstanceOfEOperation_class(problem,interpretation,target);
36594} or {
36595 find mustInRelationeAllOperations_reference_EClass(problem,interpretation,source,target);
36596}
36597/**
36598 * Matcher for detecting tuples t where []eAllStructuralFeatures reference EClass(source,target)
36599 */
36600private pattern mustInRelationeAllStructuralFeatures_reference_EClass(
36601 problem:LogicProblem, interpretation:PartialInterpretation,
36602 source: DefinedElement, target:DefinedElement)
36603{
36604 find interpretation(problem,interpretation);
36605 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
36606 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllStructuralFeatures reference EClass");
36607 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
36608 BinaryElementRelationLink.param1(link,source);
36609 BinaryElementRelationLink.param2(link,target);
36610}
36611/**
36612 * Matcher for detecting tuples t where <>eAllStructuralFeatures reference EClass(source,target)
36613 */
36614private pattern mayInRelationeAllStructuralFeatures_reference_EClass(
36615 problem:LogicProblem, interpretation:PartialInterpretation,
36616 source: DefinedElement, target:DefinedElement)
36617{
36618 find interpretation(problem,interpretation);
36619 // The two endpoint of the link have to exist
36620 find mayExist(problem, interpretation, source);
36621 find mayExist(problem, interpretation, target);
36622 // Type consistency
36623 find mayInstanceOfEClass_class(problem,interpretation,source);
36624 find mayInstanceOfEStructuralFeature_class(problem,interpretation,target);
36625} or {
36626 find mustInRelationeAllStructuralFeatures_reference_EClass(problem,interpretation,source,target);
36627}
36628/**
36629 * Matcher for detecting tuples t where []eAllSuperTypes reference EClass(source,target)
36630 */
36631private pattern mustInRelationeAllSuperTypes_reference_EClass(
36632 problem:LogicProblem, interpretation:PartialInterpretation,
36633 source: DefinedElement, target:DefinedElement)
36634{
36635 find interpretation(problem,interpretation);
36636 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
36637 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllSuperTypes reference EClass");
36638 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
36639 BinaryElementRelationLink.param1(link,source);
36640 BinaryElementRelationLink.param2(link,target);
36641}
36642/**
36643 * Matcher for detecting tuples t where <>eAllSuperTypes reference EClass(source,target)
36644 */
36645private pattern mayInRelationeAllSuperTypes_reference_EClass(
36646 problem:LogicProblem, interpretation:PartialInterpretation,
36647 source: DefinedElement, target:DefinedElement)
36648{
36649 find interpretation(problem,interpretation);
36650 // The two endpoint of the link have to exist
36651 find mayExist(problem, interpretation, source);
36652 find mayExist(problem, interpretation, target);
36653 // Type consistency
36654 find mayInstanceOfEClass_class(problem,interpretation,source);
36655 find mayInstanceOfEClass_class(problem,interpretation,target);
36656} or {
36657 find mustInRelationeAllSuperTypes_reference_EClass(problem,interpretation,source,target);
36658}
36659/**
36660 * Matcher for detecting tuples t where []eIDAttribute reference EClass(source,target)
36661 */
36662private pattern mustInRelationeIDAttribute_reference_EClass(
36663 problem:LogicProblem, interpretation:PartialInterpretation,
36664 source: DefinedElement, target:DefinedElement)
36665{
36666 find interpretation(problem,interpretation);
36667 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
36668 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eIDAttribute reference EClass");
36669 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
36670 BinaryElementRelationLink.param1(link,source);
36671 BinaryElementRelationLink.param2(link,target);
36672}
36673/**
36674 * Matcher for detecting tuples t where <>eIDAttribute reference EClass(source,target)
36675 */
36676private pattern mayInRelationeIDAttribute_reference_EClass(
36677 problem:LogicProblem, interpretation:PartialInterpretation,
36678 source: DefinedElement, target:DefinedElement)
36679{
36680 find interpretation(problem,interpretation);
36681 // The two endpoint of the link have to exist
36682 find mayExist(problem, interpretation, source);
36683 find mayExist(problem, interpretation, target);
36684 // Type consistency
36685 find mayInstanceOfEClass_class(problem,interpretation,source);
36686 find mayInstanceOfEAttribute_class(problem,interpretation,target);
36687 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
36688 // the upper bound of the multiplicity should be considered.
36689 numberOfExistingReferences == count find mustInRelationeIDAttribute_reference_EClass(problem,interpretation,source,_);
36690 check(numberOfExistingReferences < 1);
36691} or {
36692 find mustInRelationeIDAttribute_reference_EClass(problem,interpretation,source,target);
36693}
36694/**
36695 * Matcher for detecting tuples t where []eStructuralFeatures reference EClass(source,target)
36696 */
36697private pattern mustInRelationeStructuralFeatures_reference_EClass(
36698 problem:LogicProblem, interpretation:PartialInterpretation,
36699 source: DefinedElement, target:DefinedElement)
36700{
36701 find interpretation(problem,interpretation);
36702 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
36703 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eStructuralFeatures reference EClass");
36704 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
36705 BinaryElementRelationLink.param1(link,source);
36706 BinaryElementRelationLink.param2(link,target);
36707}
36708/**
36709 * Matcher for detecting tuples t where <>eStructuralFeatures reference EClass(source,target)
36710 */
36711private pattern mayInRelationeStructuralFeatures_reference_EClass(
36712 problem:LogicProblem, interpretation:PartialInterpretation,
36713 source: DefinedElement, target:DefinedElement)
36714{
36715 find interpretation(problem,interpretation);
36716 // The two endpoint of the link have to exist
36717 find mayExist(problem, interpretation, source);
36718 find mayExist(problem, interpretation, target);
36719 // Type consistency
36720 find mayInstanceOfEClass_class(problem,interpretation,source);
36721 find mayInstanceOfEStructuralFeature_class(problem,interpretation,target);
36722 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
36723 // the upper bound of the opposite reference multiplicity should be considered.
36724 numberOfExistingOppositeReferences == count find mustInRelationeContainingClass_reference_EStructuralFeature(problem,interpretation,target,_);
36725 check(numberOfExistingOppositeReferences < 1);
36726 // The reference is containment, then a new reference cannot be create if:
36727 // 1. Multiple parents
36728 neg find mustContains4(problem,interpretation,_,target);
36729 // 2. Circle in the containment hierarchy
36730 neg find mustTransitiveContains(source,target);
36731} or {
36732 find mustInRelationeStructuralFeatures_reference_EClass(problem,interpretation,source,target);
36733}
36734/**
36735 * Matcher for detecting tuples t where []eGenericSuperTypes reference EClass(source,target)
36736 */
36737private pattern mustInRelationeGenericSuperTypes_reference_EClass(
36738 problem:LogicProblem, interpretation:PartialInterpretation,
36739 source: DefinedElement, target:DefinedElement)
36740{
36741 find interpretation(problem,interpretation);
36742 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
36743 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eGenericSuperTypes reference EClass");
36744 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
36745 BinaryElementRelationLink.param1(link,source);
36746 BinaryElementRelationLink.param2(link,target);
36747}
36748/**
36749 * Matcher for detecting tuples t where <>eGenericSuperTypes reference EClass(source,target)
36750 */
36751private pattern mayInRelationeGenericSuperTypes_reference_EClass(
36752 problem:LogicProblem, interpretation:PartialInterpretation,
36753 source: DefinedElement, target:DefinedElement)
36754{
36755 find interpretation(problem,interpretation);
36756 // The two endpoint of the link have to exist
36757 find mayExist(problem, interpretation, source);
36758 find mayExist(problem, interpretation, target);
36759 // Type consistency
36760 find mayInstanceOfEClass_class(problem,interpretation,source);
36761 find mayInstanceOfEGenericType_class(problem,interpretation,target);
36762 // The reference is containment, then a new reference cannot be create if:
36763 // 1. Multiple parents
36764 neg find mustContains4(problem,interpretation,_,target);
36765 // 2. Circle in the containment hierarchy
36766 neg find mustTransitiveContains(source,target);
36767} or {
36768 find mustInRelationeGenericSuperTypes_reference_EClass(problem,interpretation,source,target);
36769}
36770/**
36771 * Matcher for detecting tuples t where []eAllGenericSuperTypes reference EClass(source,target)
36772 */
36773private pattern mustInRelationeAllGenericSuperTypes_reference_EClass(
36774 problem:LogicProblem, interpretation:PartialInterpretation,
36775 source: DefinedElement, target:DefinedElement)
36776{
36777 find interpretation(problem,interpretation);
36778 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
36779 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllGenericSuperTypes reference EClass");
36780 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
36781 BinaryElementRelationLink.param1(link,source);
36782 BinaryElementRelationLink.param2(link,target);
36783}
36784/**
36785 * Matcher for detecting tuples t where <>eAllGenericSuperTypes reference EClass(source,target)
36786 */
36787private pattern mayInRelationeAllGenericSuperTypes_reference_EClass(
36788 problem:LogicProblem, interpretation:PartialInterpretation,
36789 source: DefinedElement, target:DefinedElement)
36790{
36791 find interpretation(problem,interpretation);
36792 // The two endpoint of the link have to exist
36793 find mayExist(problem, interpretation, source);
36794 find mayExist(problem, interpretation, target);
36795 // Type consistency
36796 find mayInstanceOfEClass_class(problem,interpretation,source);
36797 find mayInstanceOfEGenericType_class(problem,interpretation,target);
36798} or {
36799 find mustInRelationeAllGenericSuperTypes_reference_EClass(problem,interpretation,source,target);
36800}
36801/**
36802 * Matcher for detecting tuples t where []ePackage reference EClassifier(source,target)
36803 */
36804private pattern mustInRelationePackage_reference_EClassifier(
36805 problem:LogicProblem, interpretation:PartialInterpretation,
36806 source: DefinedElement, target:DefinedElement)
36807{
36808 find interpretation(problem,interpretation);
36809 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
36810 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"ePackage reference EClassifier");
36811 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
36812 BinaryElementRelationLink.param1(link,source);
36813 BinaryElementRelationLink.param2(link,target);
36814}
36815/**
36816 * Matcher for detecting tuples t where <>ePackage reference EClassifier(source,target)
36817 */
36818private pattern mayInRelationePackage_reference_EClassifier(
36819 problem:LogicProblem, interpretation:PartialInterpretation,
36820 source: DefinedElement, target:DefinedElement)
36821{
36822 find interpretation(problem,interpretation);
36823 // The two endpoint of the link have to exist
36824 find mayExist(problem, interpretation, source);
36825 find mayExist(problem, interpretation, target);
36826 // Type consistency
36827 find mayInstanceOfEClassifier_class(problem,interpretation,source);
36828 find mayInstanceOfEPackage_class(problem,interpretation,target);
36829 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
36830 // the upper bound of the multiplicity should be considered.
36831 numberOfExistingReferences == count find mustInRelationePackage_reference_EClassifier(problem,interpretation,source,_);
36832 check(numberOfExistingReferences < 1);
36833 // The eOpposite of the reference is containment, then a referene cannot be created if
36834 // 1. Multiple parents
36835 neg find mustContains4(problem,interpretation,source,_);
36836 // 2. Circle in the containment hierarchy
36837 neg find mustTransitiveContains(source,target);
36838} or {
36839 find mustInRelationePackage_reference_EClassifier(problem,interpretation,source,target);
36840}
36841/**
36842 * Matcher for detecting tuples t where []eTypeParameters reference EClassifier(source,target)
36843 */
36844private pattern mustInRelationeTypeParameters_reference_EClassifier(
36845 problem:LogicProblem, interpretation:PartialInterpretation,
36846 source: DefinedElement, target:DefinedElement)
36847{
36848 find interpretation(problem,interpretation);
36849 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
36850 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeParameters reference EClassifier");
36851 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
36852 BinaryElementRelationLink.param1(link,source);
36853 BinaryElementRelationLink.param2(link,target);
36854}
36855/**
36856 * Matcher for detecting tuples t where <>eTypeParameters reference EClassifier(source,target)
36857 */
36858private pattern mayInRelationeTypeParameters_reference_EClassifier(
36859 problem:LogicProblem, interpretation:PartialInterpretation,
36860 source: DefinedElement, target:DefinedElement)
36861{
36862 find interpretation(problem,interpretation);
36863 // The two endpoint of the link have to exist
36864 find mayExist(problem, interpretation, source);
36865 find mayExist(problem, interpretation, target);
36866 // Type consistency
36867 find mayInstanceOfEClassifier_class(problem,interpretation,source);
36868 find mayInstanceOfETypeParameter_class(problem,interpretation,target);
36869 // The reference is containment, then a new reference cannot be create if:
36870 // 1. Multiple parents
36871 neg find mustContains4(problem,interpretation,_,target);
36872 // 2. Circle in the containment hierarchy
36873 neg find mustTransitiveContains(source,target);
36874} or {
36875 find mustInRelationeTypeParameters_reference_EClassifier(problem,interpretation,source,target);
36876}
36877/**
36878 * Matcher for detecting tuples t where []eLiterals reference EEnum(source,target)
36879 */
36880private pattern mustInRelationeLiterals_reference_EEnum(
36881 problem:LogicProblem, interpretation:PartialInterpretation,
36882 source: DefinedElement, target:DefinedElement)
36883{
36884 find interpretation(problem,interpretation);
36885 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
36886 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eLiterals reference EEnum");
36887 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
36888 BinaryElementRelationLink.param1(link,source);
36889 BinaryElementRelationLink.param2(link,target);
36890}
36891/**
36892 * Matcher for detecting tuples t where <>eLiterals reference EEnum(source,target)
36893 */
36894private pattern mayInRelationeLiterals_reference_EEnum(
36895 problem:LogicProblem, interpretation:PartialInterpretation,
36896 source: DefinedElement, target:DefinedElement)
36897{
36898 find interpretation(problem,interpretation);
36899 // The two endpoint of the link have to exist
36900 find mayExist(problem, interpretation, source);
36901 find mayExist(problem, interpretation, target);
36902 // Type consistency
36903 find mayInstanceOfEEnum_class(problem,interpretation,source);
36904 find mayInstanceOfEEnumLiteral_class(problem,interpretation,target);
36905 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
36906 // the upper bound of the opposite reference multiplicity should be considered.
36907 numberOfExistingOppositeReferences == count find mustInRelationeEnum_reference_EEnumLiteral(problem,interpretation,target,_);
36908 check(numberOfExistingOppositeReferences < 1);
36909 // The reference is containment, then a new reference cannot be create if:
36910 // 1. Multiple parents
36911 neg find mustContains4(problem,interpretation,_,target);
36912 // 2. Circle in the containment hierarchy
36913 neg find mustTransitiveContains(source,target);
36914} or {
36915 find mustInRelationeLiterals_reference_EEnum(problem,interpretation,source,target);
36916}
36917/**
36918 * Matcher for detecting tuples t where []eEnum reference EEnumLiteral(source,target)
36919 */
36920private pattern mustInRelationeEnum_reference_EEnumLiteral(
36921 problem:LogicProblem, interpretation:PartialInterpretation,
36922 source: DefinedElement, target:DefinedElement)
36923{
36924 find interpretation(problem,interpretation);
36925 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
36926 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eEnum reference EEnumLiteral");
36927 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
36928 BinaryElementRelationLink.param1(link,source);
36929 BinaryElementRelationLink.param2(link,target);
36930}
36931/**
36932 * Matcher for detecting tuples t where <>eEnum reference EEnumLiteral(source,target)
36933 */
36934private pattern mayInRelationeEnum_reference_EEnumLiteral(
36935 problem:LogicProblem, interpretation:PartialInterpretation,
36936 source: DefinedElement, target:DefinedElement)
36937{
36938 find interpretation(problem,interpretation);
36939 // The two endpoint of the link have to exist
36940 find mayExist(problem, interpretation, source);
36941 find mayExist(problem, interpretation, target);
36942 // Type consistency
36943 find mayInstanceOfEEnumLiteral_class(problem,interpretation,source);
36944 find mayInstanceOfEEnum_class(problem,interpretation,target);
36945 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
36946 // the upper bound of the multiplicity should be considered.
36947 numberOfExistingReferences == count find mustInRelationeEnum_reference_EEnumLiteral(problem,interpretation,source,_);
36948 check(numberOfExistingReferences < 1);
36949 // The eOpposite of the reference is containment, then a referene cannot be created if
36950 // 1. Multiple parents
36951 neg find mustContains4(problem,interpretation,source,_);
36952 // 2. Circle in the containment hierarchy
36953 neg find mustTransitiveContains(source,target);
36954} or {
36955 find mustInRelationeEnum_reference_EEnumLiteral(problem,interpretation,source,target);
36956}
36957/**
36958 * Matcher for detecting tuples t where []eAnnotations reference EModelElement(source,target)
36959 */
36960private pattern mustInRelationeAnnotations_reference_EModelElement(
36961 problem:LogicProblem, interpretation:PartialInterpretation,
36962 source: DefinedElement, target:DefinedElement)
36963{
36964 find interpretation(problem,interpretation);
36965 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
36966 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAnnotations reference EModelElement");
36967 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
36968 BinaryElementRelationLink.param1(link,source);
36969 BinaryElementRelationLink.param2(link,target);
36970}
36971/**
36972 * Matcher for detecting tuples t where <>eAnnotations reference EModelElement(source,target)
36973 */
36974private pattern mayInRelationeAnnotations_reference_EModelElement(
36975 problem:LogicProblem, interpretation:PartialInterpretation,
36976 source: DefinedElement, target:DefinedElement)
36977{
36978 find interpretation(problem,interpretation);
36979 // The two endpoint of the link have to exist
36980 find mayExist(problem, interpretation, source);
36981 find mayExist(problem, interpretation, target);
36982 // Type consistency
36983 find mayInstanceOfEModelElement_class(problem,interpretation,source);
36984 find mayInstanceOfEAnnotation_class(problem,interpretation,target);
36985 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
36986 // the upper bound of the opposite reference multiplicity should be considered.
36987 numberOfExistingOppositeReferences == count find mustInRelationeModelElement_reference_EAnnotation(problem,interpretation,target,_);
36988 check(numberOfExistingOppositeReferences < 1);
36989 // The reference is containment, then a new reference cannot be create if:
36990 // 1. Multiple parents
36991 neg find mustContains4(problem,interpretation,_,target);
36992 // 2. Circle in the containment hierarchy
36993 neg find mustTransitiveContains(source,target);
36994} or {
36995 find mustInRelationeAnnotations_reference_EModelElement(problem,interpretation,source,target);
36996}
36997/**
36998 * Matcher for detecting tuples t where []eContainingClass reference EOperation(source,target)
36999 */
37000private pattern mustInRelationeContainingClass_reference_EOperation(
37001 problem:LogicProblem, interpretation:PartialInterpretation,
37002 source: DefinedElement, target:DefinedElement)
37003{
37004 find interpretation(problem,interpretation);
37005 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
37006 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eContainingClass reference EOperation");
37007 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
37008 BinaryElementRelationLink.param1(link,source);
37009 BinaryElementRelationLink.param2(link,target);
37010}
37011/**
37012 * Matcher for detecting tuples t where <>eContainingClass reference EOperation(source,target)
37013 */
37014private pattern mayInRelationeContainingClass_reference_EOperation(
37015 problem:LogicProblem, interpretation:PartialInterpretation,
37016 source: DefinedElement, target:DefinedElement)
37017{
37018 find interpretation(problem,interpretation);
37019 // The two endpoint of the link have to exist
37020 find mayExist(problem, interpretation, source);
37021 find mayExist(problem, interpretation, target);
37022 // Type consistency
37023 find mayInstanceOfEOperation_class(problem,interpretation,source);
37024 find mayInstanceOfEClass_class(problem,interpretation,target);
37025 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
37026 // the upper bound of the multiplicity should be considered.
37027 numberOfExistingReferences == count find mustInRelationeContainingClass_reference_EOperation(problem,interpretation,source,_);
37028 check(numberOfExistingReferences < 1);
37029 // The eOpposite of the reference is containment, then a referene cannot be created if
37030 // 1. Multiple parents
37031 neg find mustContains4(problem,interpretation,source,_);
37032 // 2. Circle in the containment hierarchy
37033 neg find mustTransitiveContains(source,target);
37034} or {
37035 find mustInRelationeContainingClass_reference_EOperation(problem,interpretation,source,target);
37036}
37037/**
37038 * Matcher for detecting tuples t where []eTypeParameters reference EOperation(source,target)
37039 */
37040private pattern mustInRelationeTypeParameters_reference_EOperation(
37041 problem:LogicProblem, interpretation:PartialInterpretation,
37042 source: DefinedElement, target:DefinedElement)
37043{
37044 find interpretation(problem,interpretation);
37045 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
37046 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeParameters reference EOperation");
37047 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
37048 BinaryElementRelationLink.param1(link,source);
37049 BinaryElementRelationLink.param2(link,target);
37050}
37051/**
37052 * Matcher for detecting tuples t where <>eTypeParameters reference EOperation(source,target)
37053 */
37054private pattern mayInRelationeTypeParameters_reference_EOperation(
37055 problem:LogicProblem, interpretation:PartialInterpretation,
37056 source: DefinedElement, target:DefinedElement)
37057{
37058 find interpretation(problem,interpretation);
37059 // The two endpoint of the link have to exist
37060 find mayExist(problem, interpretation, source);
37061 find mayExist(problem, interpretation, target);
37062 // Type consistency
37063 find mayInstanceOfEOperation_class(problem,interpretation,source);
37064 find mayInstanceOfETypeParameter_class(problem,interpretation,target);
37065 // The reference is containment, then a new reference cannot be create if:
37066 // 1. Multiple parents
37067 neg find mustContains4(problem,interpretation,_,target);
37068 // 2. Circle in the containment hierarchy
37069 neg find mustTransitiveContains(source,target);
37070} or {
37071 find mustInRelationeTypeParameters_reference_EOperation(problem,interpretation,source,target);
37072}
37073/**
37074 * Matcher for detecting tuples t where []eParameters reference EOperation(source,target)
37075 */
37076private pattern mustInRelationeParameters_reference_EOperation(
37077 problem:LogicProblem, interpretation:PartialInterpretation,
37078 source: DefinedElement, target:DefinedElement)
37079{
37080 find interpretation(problem,interpretation);
37081 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
37082 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eParameters reference EOperation");
37083 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
37084 BinaryElementRelationLink.param1(link,source);
37085 BinaryElementRelationLink.param2(link,target);
37086}
37087/**
37088 * Matcher for detecting tuples t where <>eParameters reference EOperation(source,target)
37089 */
37090private pattern mayInRelationeParameters_reference_EOperation(
37091 problem:LogicProblem, interpretation:PartialInterpretation,
37092 source: DefinedElement, target:DefinedElement)
37093{
37094 find interpretation(problem,interpretation);
37095 // The two endpoint of the link have to exist
37096 find mayExist(problem, interpretation, source);
37097 find mayExist(problem, interpretation, target);
37098 // Type consistency
37099 find mayInstanceOfEOperation_class(problem,interpretation,source);
37100 find mayInstanceOfEParameter_class(problem,interpretation,target);
37101 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
37102 // the upper bound of the opposite reference multiplicity should be considered.
37103 numberOfExistingOppositeReferences == count find mustInRelationeOperation_reference_EParameter(problem,interpretation,target,_);
37104 check(numberOfExistingOppositeReferences < 1);
37105 // The reference is containment, then a new reference cannot be create if:
37106 // 1. Multiple parents
37107 neg find mustContains4(problem,interpretation,_,target);
37108 // 2. Circle in the containment hierarchy
37109 neg find mustTransitiveContains(source,target);
37110} or {
37111 find mustInRelationeParameters_reference_EOperation(problem,interpretation,source,target);
37112}
37113/**
37114 * Matcher for detecting tuples t where []eExceptions reference EOperation(source,target)
37115 */
37116private pattern mustInRelationeExceptions_reference_EOperation(
37117 problem:LogicProblem, interpretation:PartialInterpretation,
37118 source: DefinedElement, target:DefinedElement)
37119{
37120 find interpretation(problem,interpretation);
37121 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
37122 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eExceptions reference EOperation");
37123 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
37124 BinaryElementRelationLink.param1(link,source);
37125 BinaryElementRelationLink.param2(link,target);
37126}
37127/**
37128 * Matcher for detecting tuples t where <>eExceptions reference EOperation(source,target)
37129 */
37130private pattern mayInRelationeExceptions_reference_EOperation(
37131 problem:LogicProblem, interpretation:PartialInterpretation,
37132 source: DefinedElement, target:DefinedElement)
37133{
37134 find interpretation(problem,interpretation);
37135 // The two endpoint of the link have to exist
37136 find mayExist(problem, interpretation, source);
37137 find mayExist(problem, interpretation, target);
37138 // Type consistency
37139 find mayInstanceOfEOperation_class(problem,interpretation,source);
37140 find mayInstanceOfEClassifier_class(problem,interpretation,target);
37141} or {
37142 find mustInRelationeExceptions_reference_EOperation(problem,interpretation,source,target);
37143}
37144/**
37145 * Matcher for detecting tuples t where []eGenericExceptions reference EOperation(source,target)
37146 */
37147private pattern mustInRelationeGenericExceptions_reference_EOperation(
37148 problem:LogicProblem, interpretation:PartialInterpretation,
37149 source: DefinedElement, target:DefinedElement)
37150{
37151 find interpretation(problem,interpretation);
37152 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
37153 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eGenericExceptions reference EOperation");
37154 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
37155 BinaryElementRelationLink.param1(link,source);
37156 BinaryElementRelationLink.param2(link,target);
37157}
37158/**
37159 * Matcher for detecting tuples t where <>eGenericExceptions reference EOperation(source,target)
37160 */
37161private pattern mayInRelationeGenericExceptions_reference_EOperation(
37162 problem:LogicProblem, interpretation:PartialInterpretation,
37163 source: DefinedElement, target:DefinedElement)
37164{
37165 find interpretation(problem,interpretation);
37166 // The two endpoint of the link have to exist
37167 find mayExist(problem, interpretation, source);
37168 find mayExist(problem, interpretation, target);
37169 // Type consistency
37170 find mayInstanceOfEOperation_class(problem,interpretation,source);
37171 find mayInstanceOfEGenericType_class(problem,interpretation,target);
37172 // The reference is containment, then a new reference cannot be create if:
37173 // 1. Multiple parents
37174 neg find mustContains4(problem,interpretation,_,target);
37175 // 2. Circle in the containment hierarchy
37176 neg find mustTransitiveContains(source,target);
37177} or {
37178 find mustInRelationeGenericExceptions_reference_EOperation(problem,interpretation,source,target);
37179}
37180/**
37181 * Matcher for detecting tuples t where []eClassifiers reference EPackage(source,target)
37182 */
37183private pattern mustInRelationeClassifiers_reference_EPackage(
37184 problem:LogicProblem, interpretation:PartialInterpretation,
37185 source: DefinedElement, target:DefinedElement)
37186{
37187 find interpretation(problem,interpretation);
37188 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
37189 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eClassifiers reference EPackage");
37190 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
37191 BinaryElementRelationLink.param1(link,source);
37192 BinaryElementRelationLink.param2(link,target);
37193}
37194/**
37195 * Matcher for detecting tuples t where <>eClassifiers reference EPackage(source,target)
37196 */
37197private pattern mayInRelationeClassifiers_reference_EPackage(
37198 problem:LogicProblem, interpretation:PartialInterpretation,
37199 source: DefinedElement, target:DefinedElement)
37200{
37201 find interpretation(problem,interpretation);
37202 // The two endpoint of the link have to exist
37203 find mayExist(problem, interpretation, source);
37204 find mayExist(problem, interpretation, target);
37205 // Type consistency
37206 find mayInstanceOfEPackage_class(problem,interpretation,source);
37207 find mayInstanceOfEClassifier_class(problem,interpretation,target);
37208 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
37209 // the upper bound of the opposite reference multiplicity should be considered.
37210 numberOfExistingOppositeReferences == count find mustInRelationePackage_reference_EClassifier(problem,interpretation,target,_);
37211 check(numberOfExistingOppositeReferences < 1);
37212 // The reference is containment, then a new reference cannot be create if:
37213 // 1. Multiple parents
37214 neg find mustContains4(problem,interpretation,_,target);
37215 // 2. Circle in the containment hierarchy
37216 neg find mustTransitiveContains(source,target);
37217} or {
37218 find mustInRelationeClassifiers_reference_EPackage(problem,interpretation,source,target);
37219}
37220/**
37221 * Matcher for detecting tuples t where []eSubpackages reference EPackage(source,target)
37222 */
37223private pattern mustInRelationeSubpackages_reference_EPackage(
37224 problem:LogicProblem, interpretation:PartialInterpretation,
37225 source: DefinedElement, target:DefinedElement)
37226{
37227 find interpretation(problem,interpretation);
37228 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
37229 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eSubpackages reference EPackage");
37230 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
37231 BinaryElementRelationLink.param1(link,source);
37232 BinaryElementRelationLink.param2(link,target);
37233}
37234/**
37235 * Matcher for detecting tuples t where <>eSubpackages reference EPackage(source,target)
37236 */
37237private pattern mayInRelationeSubpackages_reference_EPackage(
37238 problem:LogicProblem, interpretation:PartialInterpretation,
37239 source: DefinedElement, target:DefinedElement)
37240{
37241 find interpretation(problem,interpretation);
37242 // The two endpoint of the link have to exist
37243 find mayExist(problem, interpretation, source);
37244 find mayExist(problem, interpretation, target);
37245 // Type consistency
37246 find mayInstanceOfEPackage_class(problem,interpretation,source);
37247 find mayInstanceOfEPackage_class(problem,interpretation,target);
37248 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
37249 // the upper bound of the opposite reference multiplicity should be considered.
37250 numberOfExistingOppositeReferences == count find mustInRelationeSuperPackage_reference_EPackage(problem,interpretation,target,_);
37251 check(numberOfExistingOppositeReferences < 1);
37252 // The reference is containment, then a new reference cannot be create if:
37253 // 1. Multiple parents
37254 neg find mustContains4(problem,interpretation,_,target);
37255 // 2. Circle in the containment hierarchy
37256 neg find mustTransitiveContains(source,target);
37257} or {
37258 find mustInRelationeSubpackages_reference_EPackage(problem,interpretation,source,target);
37259}
37260/**
37261 * Matcher for detecting tuples t where []eSuperPackage reference EPackage(source,target)
37262 */
37263private pattern mustInRelationeSuperPackage_reference_EPackage(
37264 problem:LogicProblem, interpretation:PartialInterpretation,
37265 source: DefinedElement, target:DefinedElement)
37266{
37267 find interpretation(problem,interpretation);
37268 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
37269 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eSuperPackage reference EPackage");
37270 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
37271 BinaryElementRelationLink.param1(link,source);
37272 BinaryElementRelationLink.param2(link,target);
37273}
37274/**
37275 * Matcher for detecting tuples t where <>eSuperPackage reference EPackage(source,target)
37276 */
37277private pattern mayInRelationeSuperPackage_reference_EPackage(
37278 problem:LogicProblem, interpretation:PartialInterpretation,
37279 source: DefinedElement, target:DefinedElement)
37280{
37281 find interpretation(problem,interpretation);
37282 // The two endpoint of the link have to exist
37283 find mayExist(problem, interpretation, source);
37284 find mayExist(problem, interpretation, target);
37285 // Type consistency
37286 find mayInstanceOfEPackage_class(problem,interpretation,source);
37287 find mayInstanceOfEPackage_class(problem,interpretation,target);
37288 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
37289 // the upper bound of the multiplicity should be considered.
37290 numberOfExistingReferences == count find mustInRelationeSuperPackage_reference_EPackage(problem,interpretation,source,_);
37291 check(numberOfExistingReferences < 1);
37292 // The eOpposite of the reference is containment, then a referene cannot be created if
37293 // 1. Multiple parents
37294 neg find mustContains4(problem,interpretation,source,_);
37295 // 2. Circle in the containment hierarchy
37296 neg find mustTransitiveContains(source,target);
37297} or {
37298 find mustInRelationeSuperPackage_reference_EPackage(problem,interpretation,source,target);
37299}
37300/**
37301 * Matcher for detecting tuples t where []eOperation reference EParameter(source,target)
37302 */
37303private pattern mustInRelationeOperation_reference_EParameter(
37304 problem:LogicProblem, interpretation:PartialInterpretation,
37305 source: DefinedElement, target:DefinedElement)
37306{
37307 find interpretation(problem,interpretation);
37308 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
37309 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eOperation reference EParameter");
37310 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
37311 BinaryElementRelationLink.param1(link,source);
37312 BinaryElementRelationLink.param2(link,target);
37313}
37314/**
37315 * Matcher for detecting tuples t where <>eOperation reference EParameter(source,target)
37316 */
37317private pattern mayInRelationeOperation_reference_EParameter(
37318 problem:LogicProblem, interpretation:PartialInterpretation,
37319 source: DefinedElement, target:DefinedElement)
37320{
37321 find interpretation(problem,interpretation);
37322 // The two endpoint of the link have to exist
37323 find mayExist(problem, interpretation, source);
37324 find mayExist(problem, interpretation, target);
37325 // Type consistency
37326 find mayInstanceOfEParameter_class(problem,interpretation,source);
37327 find mayInstanceOfEOperation_class(problem,interpretation,target);
37328 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
37329 // the upper bound of the multiplicity should be considered.
37330 numberOfExistingReferences == count find mustInRelationeOperation_reference_EParameter(problem,interpretation,source,_);
37331 check(numberOfExistingReferences < 1);
37332 // The eOpposite of the reference is containment, then a referene cannot be created if
37333 // 1. Multiple parents
37334 neg find mustContains4(problem,interpretation,source,_);
37335 // 2. Circle in the containment hierarchy
37336 neg find mustTransitiveContains(source,target);
37337} or {
37338 find mustInRelationeOperation_reference_EParameter(problem,interpretation,source,target);
37339}
37340/**
37341 * Matcher for detecting tuples t where []eOpposite reference EReference(source,target)
37342 */
37343private pattern mustInRelationeOpposite_reference_EReference(
37344 problem:LogicProblem, interpretation:PartialInterpretation,
37345 source: DefinedElement, target:DefinedElement)
37346{
37347 find interpretation(problem,interpretation);
37348 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
37349 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eOpposite reference EReference");
37350 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
37351 BinaryElementRelationLink.param1(link,source);
37352 BinaryElementRelationLink.param2(link,target);
37353}
37354/**
37355 * Matcher for detecting tuples t where <>eOpposite reference EReference(source,target)
37356 */
37357private pattern mayInRelationeOpposite_reference_EReference(
37358 problem:LogicProblem, interpretation:PartialInterpretation,
37359 source: DefinedElement, target:DefinedElement)
37360{
37361 find interpretation(problem,interpretation);
37362 // The two endpoint of the link have to exist
37363 find mayExist(problem, interpretation, source);
37364 find mayExist(problem, interpretation, target);
37365 // Type consistency
37366 find mayInstanceOfEReference_class(problem,interpretation,source);
37367 find mayInstanceOfEReference_class(problem,interpretation,target);
37368 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
37369 // the upper bound of the multiplicity should be considered.
37370 numberOfExistingReferences == count find mustInRelationeOpposite_reference_EReference(problem,interpretation,source,_);
37371 check(numberOfExistingReferences < 1);
37372} or {
37373 find mustInRelationeOpposite_reference_EReference(problem,interpretation,source,target);
37374}
37375/**
37376 * Matcher for detecting tuples t where []eReferenceType reference EReference(source,target)
37377 */
37378private pattern mustInRelationeReferenceType_reference_EReference(
37379 problem:LogicProblem, interpretation:PartialInterpretation,
37380 source: DefinedElement, target:DefinedElement)
37381{
37382 find interpretation(problem,interpretation);
37383 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
37384 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferenceType reference EReference");
37385 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
37386 BinaryElementRelationLink.param1(link,source);
37387 BinaryElementRelationLink.param2(link,target);
37388}
37389/**
37390 * Matcher for detecting tuples t where <>eReferenceType reference EReference(source,target)
37391 */
37392private pattern mayInRelationeReferenceType_reference_EReference(
37393 problem:LogicProblem, interpretation:PartialInterpretation,
37394 source: DefinedElement, target:DefinedElement)
37395{
37396 find interpretation(problem,interpretation);
37397 // The two endpoint of the link have to exist
37398 find mayExist(problem, interpretation, source);
37399 find mayExist(problem, interpretation, target);
37400 // Type consistency
37401 find mayInstanceOfEReference_class(problem,interpretation,source);
37402 find mayInstanceOfEClass_class(problem,interpretation,target);
37403 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
37404 // the upper bound of the multiplicity should be considered.
37405 numberOfExistingReferences == count find mustInRelationeReferenceType_reference_EReference(problem,interpretation,source,_);
37406 check(numberOfExistingReferences < 1);
37407} or {
37408 find mustInRelationeReferenceType_reference_EReference(problem,interpretation,source,target);
37409}
37410/**
37411 * Matcher for detecting tuples t where []eKeys reference EReference(source,target)
37412 */
37413private pattern mustInRelationeKeys_reference_EReference(
37414 problem:LogicProblem, interpretation:PartialInterpretation,
37415 source: DefinedElement, target:DefinedElement)
37416{
37417 find interpretation(problem,interpretation);
37418 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
37419 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eKeys reference EReference");
37420 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
37421 BinaryElementRelationLink.param1(link,source);
37422 BinaryElementRelationLink.param2(link,target);
37423}
37424/**
37425 * Matcher for detecting tuples t where <>eKeys reference EReference(source,target)
37426 */
37427private pattern mayInRelationeKeys_reference_EReference(
37428 problem:LogicProblem, interpretation:PartialInterpretation,
37429 source: DefinedElement, target:DefinedElement)
37430{
37431 find interpretation(problem,interpretation);
37432 // The two endpoint of the link have to exist
37433 find mayExist(problem, interpretation, source);
37434 find mayExist(problem, interpretation, target);
37435 // Type consistency
37436 find mayInstanceOfEReference_class(problem,interpretation,source);
37437 find mayInstanceOfEAttribute_class(problem,interpretation,target);
37438} or {
37439 find mustInRelationeKeys_reference_EReference(problem,interpretation,source,target);
37440}
37441/**
37442 * Matcher for detecting tuples t where []eContainingClass reference EStructuralFeature(source,target)
37443 */
37444private pattern mustInRelationeContainingClass_reference_EStructuralFeature(
37445 problem:LogicProblem, interpretation:PartialInterpretation,
37446 source: DefinedElement, target:DefinedElement)
37447{
37448 find interpretation(problem,interpretation);
37449 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
37450 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eContainingClass reference EStructuralFeature");
37451 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
37452 BinaryElementRelationLink.param1(link,source);
37453 BinaryElementRelationLink.param2(link,target);
37454}
37455/**
37456 * Matcher for detecting tuples t where <>eContainingClass reference EStructuralFeature(source,target)
37457 */
37458private pattern mayInRelationeContainingClass_reference_EStructuralFeature(
37459 problem:LogicProblem, interpretation:PartialInterpretation,
37460 source: DefinedElement, target:DefinedElement)
37461{
37462 find interpretation(problem,interpretation);
37463 // The two endpoint of the link have to exist
37464 find mayExist(problem, interpretation, source);
37465 find mayExist(problem, interpretation, target);
37466 // Type consistency
37467 find mayInstanceOfEStructuralFeature_class(problem,interpretation,source);
37468 find mayInstanceOfEClass_class(problem,interpretation,target);
37469 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
37470 // the upper bound of the multiplicity should be considered.
37471 numberOfExistingReferences == count find mustInRelationeContainingClass_reference_EStructuralFeature(problem,interpretation,source,_);
37472 check(numberOfExistingReferences < 1);
37473 // The eOpposite of the reference is containment, then a referene cannot be created if
37474 // 1. Multiple parents
37475 neg find mustContains4(problem,interpretation,source,_);
37476 // 2. Circle in the containment hierarchy
37477 neg find mustTransitiveContains(source,target);
37478} or {
37479 find mustInRelationeContainingClass_reference_EStructuralFeature(problem,interpretation,source,target);
37480}
37481/**
37482 * Matcher for detecting tuples t where []eType reference ETypedElement(source,target)
37483 */
37484private pattern mustInRelationeType_reference_ETypedElement(
37485 problem:LogicProblem, interpretation:PartialInterpretation,
37486 source: DefinedElement, target:DefinedElement)
37487{
37488 find interpretation(problem,interpretation);
37489 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
37490 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eType reference ETypedElement");
37491 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
37492 BinaryElementRelationLink.param1(link,source);
37493 BinaryElementRelationLink.param2(link,target);
37494}
37495/**
37496 * Matcher for detecting tuples t where <>eType reference ETypedElement(source,target)
37497 */
37498private pattern mayInRelationeType_reference_ETypedElement(
37499 problem:LogicProblem, interpretation:PartialInterpretation,
37500 source: DefinedElement, target:DefinedElement)
37501{
37502 find interpretation(problem,interpretation);
37503 // The two endpoint of the link have to exist
37504 find mayExist(problem, interpretation, source);
37505 find mayExist(problem, interpretation, target);
37506 // Type consistency
37507 find mayInstanceOfETypedElement_class(problem,interpretation,source);
37508 find mayInstanceOfEClassifier_class(problem,interpretation,target);
37509 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
37510 // the upper bound of the multiplicity should be considered.
37511 numberOfExistingReferences == count find mustInRelationeType_reference_ETypedElement(problem,interpretation,source,_);
37512 check(numberOfExistingReferences < 1);
37513} or {
37514 find mustInRelationeType_reference_ETypedElement(problem,interpretation,source,target);
37515}
37516/**
37517 * Matcher for detecting tuples t where []eGenericType reference ETypedElement(source,target)
37518 */
37519private pattern mustInRelationeGenericType_reference_ETypedElement(
37520 problem:LogicProblem, interpretation:PartialInterpretation,
37521 source: DefinedElement, target:DefinedElement)
37522{
37523 find interpretation(problem,interpretation);
37524 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
37525 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eGenericType reference ETypedElement");
37526 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
37527 BinaryElementRelationLink.param1(link,source);
37528 BinaryElementRelationLink.param2(link,target);
37529}
37530/**
37531 * Matcher for detecting tuples t where <>eGenericType reference ETypedElement(source,target)
37532 */
37533private pattern mayInRelationeGenericType_reference_ETypedElement(
37534 problem:LogicProblem, interpretation:PartialInterpretation,
37535 source: DefinedElement, target:DefinedElement)
37536{
37537 find interpretation(problem,interpretation);
37538 // The two endpoint of the link have to exist
37539 find mayExist(problem, interpretation, source);
37540 find mayExist(problem, interpretation, target);
37541 // Type consistency
37542 find mayInstanceOfETypedElement_class(problem,interpretation,source);
37543 find mayInstanceOfEGenericType_class(problem,interpretation,target);
37544 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
37545 // the upper bound of the multiplicity should be considered.
37546 numberOfExistingReferences == count find mustInRelationeGenericType_reference_ETypedElement(problem,interpretation,source,_);
37547 check(numberOfExistingReferences < 1);
37548 // The reference is containment, then a new reference cannot be create if:
37549 // 1. Multiple parents
37550 neg find mustContains4(problem,interpretation,_,target);
37551 // 2. Circle in the containment hierarchy
37552 neg find mustTransitiveContains(source,target);
37553} or {
37554 find mustInRelationeGenericType_reference_ETypedElement(problem,interpretation,source,target);
37555}
37556/**
37557 * Matcher for detecting tuples t where []eUpperBound reference EGenericType(source,target)
37558 */
37559private pattern mustInRelationeUpperBound_reference_EGenericType(
37560 problem:LogicProblem, interpretation:PartialInterpretation,
37561 source: DefinedElement, target:DefinedElement)
37562{
37563 find interpretation(problem,interpretation);
37564 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
37565 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eUpperBound reference EGenericType");
37566 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
37567 BinaryElementRelationLink.param1(link,source);
37568 BinaryElementRelationLink.param2(link,target);
37569}
37570/**
37571 * Matcher for detecting tuples t where <>eUpperBound reference EGenericType(source,target)
37572 */
37573private pattern mayInRelationeUpperBound_reference_EGenericType(
37574 problem:LogicProblem, interpretation:PartialInterpretation,
37575 source: DefinedElement, target:DefinedElement)
37576{
37577 find interpretation(problem,interpretation);
37578 // The two endpoint of the link have to exist
37579 find mayExist(problem, interpretation, source);
37580 find mayExist(problem, interpretation, target);
37581 // Type consistency
37582 find mayInstanceOfEGenericType_class(problem,interpretation,source);
37583 find mayInstanceOfEGenericType_class(problem,interpretation,target);
37584 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
37585 // the upper bound of the multiplicity should be considered.
37586 numberOfExistingReferences == count find mustInRelationeUpperBound_reference_EGenericType(problem,interpretation,source,_);
37587 check(numberOfExistingReferences < 1);
37588 // The reference is containment, then a new reference cannot be create if:
37589 // 1. Multiple parents
37590 neg find mustContains4(problem,interpretation,_,target);
37591 // 2. Circle in the containment hierarchy
37592 neg find mustTransitiveContains(source,target);
37593} or {
37594 find mustInRelationeUpperBound_reference_EGenericType(problem,interpretation,source,target);
37595}
37596/**
37597 * Matcher for detecting tuples t where []eTypeArguments reference EGenericType(source,target)
37598 */
37599private pattern mustInRelationeTypeArguments_reference_EGenericType(
37600 problem:LogicProblem, interpretation:PartialInterpretation,
37601 source: DefinedElement, target:DefinedElement)
37602{
37603 find interpretation(problem,interpretation);
37604 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
37605 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeArguments reference EGenericType");
37606 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
37607 BinaryElementRelationLink.param1(link,source);
37608 BinaryElementRelationLink.param2(link,target);
37609}
37610/**
37611 * Matcher for detecting tuples t where <>eTypeArguments reference EGenericType(source,target)
37612 */
37613private pattern mayInRelationeTypeArguments_reference_EGenericType(
37614 problem:LogicProblem, interpretation:PartialInterpretation,
37615 source: DefinedElement, target:DefinedElement)
37616{
37617 find interpretation(problem,interpretation);
37618 // The two endpoint of the link have to exist
37619 find mayExist(problem, interpretation, source);
37620 find mayExist(problem, interpretation, target);
37621 // Type consistency
37622 find mayInstanceOfEGenericType_class(problem,interpretation,source);
37623 find mayInstanceOfEGenericType_class(problem,interpretation,target);
37624 // The reference is containment, then a new reference cannot be create if:
37625 // 1. Multiple parents
37626 neg find mustContains4(problem,interpretation,_,target);
37627 // 2. Circle in the containment hierarchy
37628 neg find mustTransitiveContains(source,target);
37629} or {
37630 find mustInRelationeTypeArguments_reference_EGenericType(problem,interpretation,source,target);
37631}
37632/**
37633 * Matcher for detecting tuples t where []eRawType reference EGenericType(source,target)
37634 */
37635private pattern mustInRelationeRawType_reference_EGenericType(
37636 problem:LogicProblem, interpretation:PartialInterpretation,
37637 source: DefinedElement, target:DefinedElement)
37638{
37639 find interpretation(problem,interpretation);
37640 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
37641 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eRawType reference EGenericType");
37642 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
37643 BinaryElementRelationLink.param1(link,source);
37644 BinaryElementRelationLink.param2(link,target);
37645}
37646/**
37647 * Matcher for detecting tuples t where <>eRawType reference EGenericType(source,target)
37648 */
37649private pattern mayInRelationeRawType_reference_EGenericType(
37650 problem:LogicProblem, interpretation:PartialInterpretation,
37651 source: DefinedElement, target:DefinedElement)
37652{
37653 find interpretation(problem,interpretation);
37654 // The two endpoint of the link have to exist
37655 find mayExist(problem, interpretation, source);
37656 find mayExist(problem, interpretation, target);
37657 // Type consistency
37658 find mayInstanceOfEGenericType_class(problem,interpretation,source);
37659 find mayInstanceOfEClassifier_class(problem,interpretation,target);
37660 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
37661 // the upper bound of the multiplicity should be considered.
37662 numberOfExistingReferences == count find mustInRelationeRawType_reference_EGenericType(problem,interpretation,source,_);
37663 check(numberOfExistingReferences < 1);
37664} or {
37665 find mustInRelationeRawType_reference_EGenericType(problem,interpretation,source,target);
37666}
37667/**
37668 * Matcher for detecting tuples t where []eLowerBound reference EGenericType(source,target)
37669 */
37670private pattern mustInRelationeLowerBound_reference_EGenericType(
37671 problem:LogicProblem, interpretation:PartialInterpretation,
37672 source: DefinedElement, target:DefinedElement)
37673{
37674 find interpretation(problem,interpretation);
37675 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
37676 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eLowerBound reference EGenericType");
37677 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
37678 BinaryElementRelationLink.param1(link,source);
37679 BinaryElementRelationLink.param2(link,target);
37680}
37681/**
37682 * Matcher for detecting tuples t where <>eLowerBound reference EGenericType(source,target)
37683 */
37684private pattern mayInRelationeLowerBound_reference_EGenericType(
37685 problem:LogicProblem, interpretation:PartialInterpretation,
37686 source: DefinedElement, target:DefinedElement)
37687{
37688 find interpretation(problem,interpretation);
37689 // The two endpoint of the link have to exist
37690 find mayExist(problem, interpretation, source);
37691 find mayExist(problem, interpretation, target);
37692 // Type consistency
37693 find mayInstanceOfEGenericType_class(problem,interpretation,source);
37694 find mayInstanceOfEGenericType_class(problem,interpretation,target);
37695 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
37696 // the upper bound of the multiplicity should be considered.
37697 numberOfExistingReferences == count find mustInRelationeLowerBound_reference_EGenericType(problem,interpretation,source,_);
37698 check(numberOfExistingReferences < 1);
37699 // The reference is containment, then a new reference cannot be create if:
37700 // 1. Multiple parents
37701 neg find mustContains4(problem,interpretation,_,target);
37702 // 2. Circle in the containment hierarchy
37703 neg find mustTransitiveContains(source,target);
37704} or {
37705 find mustInRelationeLowerBound_reference_EGenericType(problem,interpretation,source,target);
37706}
37707/**
37708 * Matcher for detecting tuples t where []eTypeParameter reference EGenericType(source,target)
37709 */
37710private pattern mustInRelationeTypeParameter_reference_EGenericType(
37711 problem:LogicProblem, interpretation:PartialInterpretation,
37712 source: DefinedElement, target:DefinedElement)
37713{
37714 find interpretation(problem,interpretation);
37715 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
37716 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeParameter reference EGenericType");
37717 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
37718 BinaryElementRelationLink.param1(link,source);
37719 BinaryElementRelationLink.param2(link,target);
37720}
37721/**
37722 * Matcher for detecting tuples t where <>eTypeParameter reference EGenericType(source,target)
37723 */
37724private pattern mayInRelationeTypeParameter_reference_EGenericType(
37725 problem:LogicProblem, interpretation:PartialInterpretation,
37726 source: DefinedElement, target:DefinedElement)
37727{
37728 find interpretation(problem,interpretation);
37729 // The two endpoint of the link have to exist
37730 find mayExist(problem, interpretation, source);
37731 find mayExist(problem, interpretation, target);
37732 // Type consistency
37733 find mayInstanceOfEGenericType_class(problem,interpretation,source);
37734 find mayInstanceOfETypeParameter_class(problem,interpretation,target);
37735 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
37736 // the upper bound of the multiplicity should be considered.
37737 numberOfExistingReferences == count find mustInRelationeTypeParameter_reference_EGenericType(problem,interpretation,source,_);
37738 check(numberOfExistingReferences < 1);
37739} or {
37740 find mustInRelationeTypeParameter_reference_EGenericType(problem,interpretation,source,target);
37741}
37742/**
37743 * Matcher for detecting tuples t where []eClassifier reference EGenericType(source,target)
37744 */
37745private pattern mustInRelationeClassifier_reference_EGenericType(
37746 problem:LogicProblem, interpretation:PartialInterpretation,
37747 source: DefinedElement, target:DefinedElement)
37748{
37749 find interpretation(problem,interpretation);
37750 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
37751 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eClassifier reference EGenericType");
37752 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
37753 BinaryElementRelationLink.param1(link,source);
37754 BinaryElementRelationLink.param2(link,target);
37755}
37756/**
37757 * Matcher for detecting tuples t where <>eClassifier reference EGenericType(source,target)
37758 */
37759private pattern mayInRelationeClassifier_reference_EGenericType(
37760 problem:LogicProblem, interpretation:PartialInterpretation,
37761 source: DefinedElement, target:DefinedElement)
37762{
37763 find interpretation(problem,interpretation);
37764 // The two endpoint of the link have to exist
37765 find mayExist(problem, interpretation, source);
37766 find mayExist(problem, interpretation, target);
37767 // Type consistency
37768 find mayInstanceOfEGenericType_class(problem,interpretation,source);
37769 find mayInstanceOfEClassifier_class(problem,interpretation,target);
37770 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
37771 // the upper bound of the multiplicity should be considered.
37772 numberOfExistingReferences == count find mustInRelationeClassifier_reference_EGenericType(problem,interpretation,source,_);
37773 check(numberOfExistingReferences < 1);
37774} or {
37775 find mustInRelationeClassifier_reference_EGenericType(problem,interpretation,source,target);
37776}
37777/**
37778 * Matcher for detecting tuples t where []eBounds reference ETypeParameter(source,target)
37779 */
37780private pattern mustInRelationeBounds_reference_ETypeParameter(
37781 problem:LogicProblem, interpretation:PartialInterpretation,
37782 source: DefinedElement, target:DefinedElement)
37783{
37784 find interpretation(problem,interpretation);
37785 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
37786 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eBounds reference ETypeParameter");
37787 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
37788 BinaryElementRelationLink.param1(link,source);
37789 BinaryElementRelationLink.param2(link,target);
37790}
37791/**
37792 * Matcher for detecting tuples t where <>eBounds reference ETypeParameter(source,target)
37793 */
37794private pattern mayInRelationeBounds_reference_ETypeParameter(
37795 problem:LogicProblem, interpretation:PartialInterpretation,
37796 source: DefinedElement, target:DefinedElement)
37797{
37798 find interpretation(problem,interpretation);
37799 // The two endpoint of the link have to exist
37800 find mayExist(problem, interpretation, source);
37801 find mayExist(problem, interpretation, target);
37802 // Type consistency
37803 find mayInstanceOfETypeParameter_class(problem,interpretation,source);
37804 find mayInstanceOfEGenericType_class(problem,interpretation,target);
37805 // The reference is containment, then a new reference cannot be create if:
37806 // 1. Multiple parents
37807 neg find mustContains4(problem,interpretation,_,target);
37808 // 2. Circle in the containment hierarchy
37809 neg find mustTransitiveContains(source,target);
37810} or {
37811 find mustInRelationeBounds_reference_ETypeParameter(problem,interpretation,source,target);
37812}
37813/**
37814 * Matcher for detecting tuples t where []iD attribute EAttribute(source,target)
37815 */
37816private pattern mustInRelationiD_attribute_EAttribute(
37817 problem:LogicProblem, interpretation:PartialInterpretation,
37818 source: DefinedElement, target:DefinedElement)
37819{
37820 find interpretation(problem,interpretation);
37821 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
37822 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"iD attribute EAttribute");
37823 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
37824 BinaryElementRelationLink.param1(link,source);
37825 BinaryElementRelationLink.param2(link,target);
37826}
37827/**
37828 * Matcher for detecting tuples t where <>iD attribute EAttribute(source,target)
37829 */
37830private pattern mayInRelationiD_attribute_EAttribute(
37831 problem:LogicProblem, interpretation:PartialInterpretation,
37832 source: DefinedElement, target:DefinedElement)
37833{
37834 find interpretation(problem,interpretation);
37835 // The two endpoint of the link have to exist
37836 find mayExist(problem, interpretation, source);
37837 find mayExist(problem, interpretation, target);
37838 // Type consistency
37839 find mayInstanceOfEAttribute_class(problem,interpretation,source);
37840 BooleanElement(target);
37841 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
37842 // the upper bound of the multiplicity should be considered.
37843 numberOfExistingReferences == count find mustInRelationiD_attribute_EAttribute(problem,interpretation,source,_);
37844 check(numberOfExistingReferences < 1);
37845} or {
37846 find mustInRelationiD_attribute_EAttribute(problem,interpretation,source,target);
37847}
37848/**
37849 * Matcher for detecting tuples t where []source attribute EAnnotation(source,target)
37850 */
37851private pattern mustInRelationsource_attribute_EAnnotation(
37852 problem:LogicProblem, interpretation:PartialInterpretation,
37853 source: DefinedElement, target:DefinedElement)
37854{
37855 find interpretation(problem,interpretation);
37856 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
37857 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"source attribute EAnnotation");
37858 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
37859 BinaryElementRelationLink.param1(link,source);
37860 BinaryElementRelationLink.param2(link,target);
37861}
37862/**
37863 * Matcher for detecting tuples t where <>source attribute EAnnotation(source,target)
37864 */
37865private pattern mayInRelationsource_attribute_EAnnotation(
37866 problem:LogicProblem, interpretation:PartialInterpretation,
37867 source: DefinedElement, target:DefinedElement)
37868{
37869 find interpretation(problem,interpretation);
37870 // The two endpoint of the link have to exist
37871 find mayExist(problem, interpretation, source);
37872 find mayExist(problem, interpretation, target);
37873 // Type consistency
37874 find mayInstanceOfEAnnotation_class(problem,interpretation,source);
37875 StringElement(target);
37876 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
37877 // the upper bound of the multiplicity should be considered.
37878 numberOfExistingReferences == count find mustInRelationsource_attribute_EAnnotation(problem,interpretation,source,_);
37879 check(numberOfExistingReferences < 1);
37880} or {
37881 find mustInRelationsource_attribute_EAnnotation(problem,interpretation,source,target);
37882}
37883/**
37884 * Matcher for detecting tuples t where []abstract attribute EClass(source,target)
37885 */
37886private pattern mustInRelationabstract_attribute_EClass(
37887 problem:LogicProblem, interpretation:PartialInterpretation,
37888 source: DefinedElement, target:DefinedElement)
37889{
37890 find interpretation(problem,interpretation);
37891 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
37892 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"abstract attribute EClass");
37893 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
37894 BinaryElementRelationLink.param1(link,source);
37895 BinaryElementRelationLink.param2(link,target);
37896}
37897/**
37898 * Matcher for detecting tuples t where <>abstract attribute EClass(source,target)
37899 */
37900private pattern mayInRelationabstract_attribute_EClass(
37901 problem:LogicProblem, interpretation:PartialInterpretation,
37902 source: DefinedElement, target:DefinedElement)
37903{
37904 find interpretation(problem,interpretation);
37905 // The two endpoint of the link have to exist
37906 find mayExist(problem, interpretation, source);
37907 find mayExist(problem, interpretation, target);
37908 // Type consistency
37909 find mayInstanceOfEClass_class(problem,interpretation,source);
37910 BooleanElement(target);
37911 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
37912 // the upper bound of the multiplicity should be considered.
37913 numberOfExistingReferences == count find mustInRelationabstract_attribute_EClass(problem,interpretation,source,_);
37914 check(numberOfExistingReferences < 1);
37915} or {
37916 find mustInRelationabstract_attribute_EClass(problem,interpretation,source,target);
37917}
37918/**
37919 * Matcher for detecting tuples t where []interface attribute EClass(source,target)
37920 */
37921private pattern mustInRelationinterface_attribute_EClass(
37922 problem:LogicProblem, interpretation:PartialInterpretation,
37923 source: DefinedElement, target:DefinedElement)
37924{
37925 find interpretation(problem,interpretation);
37926 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
37927 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface attribute EClass");
37928 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
37929 BinaryElementRelationLink.param1(link,source);
37930 BinaryElementRelationLink.param2(link,target);
37931}
37932/**
37933 * Matcher for detecting tuples t where <>interface attribute EClass(source,target)
37934 */
37935private pattern mayInRelationinterface_attribute_EClass(
37936 problem:LogicProblem, interpretation:PartialInterpretation,
37937 source: DefinedElement, target:DefinedElement)
37938{
37939 find interpretation(problem,interpretation);
37940 // The two endpoint of the link have to exist
37941 find mayExist(problem, interpretation, source);
37942 find mayExist(problem, interpretation, target);
37943 // Type consistency
37944 find mayInstanceOfEClass_class(problem,interpretation,source);
37945 BooleanElement(target);
37946 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
37947 // the upper bound of the multiplicity should be considered.
37948 numberOfExistingReferences == count find mustInRelationinterface_attribute_EClass(problem,interpretation,source,_);
37949 check(numberOfExistingReferences < 1);
37950} or {
37951 find mustInRelationinterface_attribute_EClass(problem,interpretation,source,target);
37952}
37953/**
37954 * Matcher for detecting tuples t where []instanceClassName attribute EClassifier(source,target)
37955 */
37956private pattern mustInRelationinstanceClassName_attribute_EClassifier(
37957 problem:LogicProblem, interpretation:PartialInterpretation,
37958 source: DefinedElement, target:DefinedElement)
37959{
37960 find interpretation(problem,interpretation);
37961 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
37962 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"instanceClassName attribute EClassifier");
37963 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
37964 BinaryElementRelationLink.param1(link,source);
37965 BinaryElementRelationLink.param2(link,target);
37966}
37967/**
37968 * Matcher for detecting tuples t where <>instanceClassName attribute EClassifier(source,target)
37969 */
37970private pattern mayInRelationinstanceClassName_attribute_EClassifier(
37971 problem:LogicProblem, interpretation:PartialInterpretation,
37972 source: DefinedElement, target:DefinedElement)
37973{
37974 find interpretation(problem,interpretation);
37975 // The two endpoint of the link have to exist
37976 find mayExist(problem, interpretation, source);
37977 find mayExist(problem, interpretation, target);
37978 // Type consistency
37979 find mayInstanceOfEClassifier_class(problem,interpretation,source);
37980 StringElement(target);
37981 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
37982 // the upper bound of the multiplicity should be considered.
37983 numberOfExistingReferences == count find mustInRelationinstanceClassName_attribute_EClassifier(problem,interpretation,source,_);
37984 check(numberOfExistingReferences < 1);
37985} or {
37986 find mustInRelationinstanceClassName_attribute_EClassifier(problem,interpretation,source,target);
37987}
37988/**
37989 * Matcher for detecting tuples t where []instanceTypeName attribute EClassifier(source,target)
37990 */
37991private pattern mustInRelationinstanceTypeName_attribute_EClassifier(
37992 problem:LogicProblem, interpretation:PartialInterpretation,
37993 source: DefinedElement, target:DefinedElement)
37994{
37995 find interpretation(problem,interpretation);
37996 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
37997 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"instanceTypeName attribute EClassifier");
37998 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
37999 BinaryElementRelationLink.param1(link,source);
38000 BinaryElementRelationLink.param2(link,target);
38001}
38002/**
38003 * Matcher for detecting tuples t where <>instanceTypeName attribute EClassifier(source,target)
38004 */
38005private pattern mayInRelationinstanceTypeName_attribute_EClassifier(
38006 problem:LogicProblem, interpretation:PartialInterpretation,
38007 source: DefinedElement, target:DefinedElement)
38008{
38009 find interpretation(problem,interpretation);
38010 // The two endpoint of the link have to exist
38011 find mayExist(problem, interpretation, source);
38012 find mayExist(problem, interpretation, target);
38013 // Type consistency
38014 find mayInstanceOfEClassifier_class(problem,interpretation,source);
38015 StringElement(target);
38016 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
38017 // the upper bound of the multiplicity should be considered.
38018 numberOfExistingReferences == count find mustInRelationinstanceTypeName_attribute_EClassifier(problem,interpretation,source,_);
38019 check(numberOfExistingReferences < 1);
38020} or {
38021 find mustInRelationinstanceTypeName_attribute_EClassifier(problem,interpretation,source,target);
38022}
38023/**
38024 * Matcher for detecting tuples t where []serializable attribute EDataType(source,target)
38025 */
38026private pattern mustInRelationserializable_attribute_EDataType(
38027 problem:LogicProblem, interpretation:PartialInterpretation,
38028 source: DefinedElement, target:DefinedElement)
38029{
38030 find interpretation(problem,interpretation);
38031 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
38032 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"serializable attribute EDataType");
38033 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
38034 BinaryElementRelationLink.param1(link,source);
38035 BinaryElementRelationLink.param2(link,target);
38036}
38037/**
38038 * Matcher for detecting tuples t where <>serializable attribute EDataType(source,target)
38039 */
38040private pattern mayInRelationserializable_attribute_EDataType(
38041 problem:LogicProblem, interpretation:PartialInterpretation,
38042 source: DefinedElement, target:DefinedElement)
38043{
38044 find interpretation(problem,interpretation);
38045 // The two endpoint of the link have to exist
38046 find mayExist(problem, interpretation, source);
38047 find mayExist(problem, interpretation, target);
38048 // Type consistency
38049 find mayInstanceOfEDataType_class(problem,interpretation,source);
38050 BooleanElement(target);
38051 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
38052 // the upper bound of the multiplicity should be considered.
38053 numberOfExistingReferences == count find mustInRelationserializable_attribute_EDataType(problem,interpretation,source,_);
38054 check(numberOfExistingReferences < 1);
38055} or {
38056 find mustInRelationserializable_attribute_EDataType(problem,interpretation,source,target);
38057}
38058/**
38059 * Matcher for detecting tuples t where []value attribute EEnumLiteral(source,target)
38060 */
38061private pattern mustInRelationvalue_attribute_EEnumLiteral(
38062 problem:LogicProblem, interpretation:PartialInterpretation,
38063 source: DefinedElement, target:DefinedElement)
38064{
38065 find interpretation(problem,interpretation);
38066 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
38067 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"value attribute EEnumLiteral");
38068 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
38069 BinaryElementRelationLink.param1(link,source);
38070 BinaryElementRelationLink.param2(link,target);
38071}
38072/**
38073 * Matcher for detecting tuples t where <>value attribute EEnumLiteral(source,target)
38074 */
38075private pattern mayInRelationvalue_attribute_EEnumLiteral(
38076 problem:LogicProblem, interpretation:PartialInterpretation,
38077 source: DefinedElement, target:DefinedElement)
38078{
38079 find interpretation(problem,interpretation);
38080 // The two endpoint of the link have to exist
38081 find mayExist(problem, interpretation, source);
38082 find mayExist(problem, interpretation, target);
38083 // Type consistency
38084 find mayInstanceOfEEnumLiteral_class(problem,interpretation,source);
38085 IntegerElement(target);
38086 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
38087 // the upper bound of the multiplicity should be considered.
38088 numberOfExistingReferences == count find mustInRelationvalue_attribute_EEnumLiteral(problem,interpretation,source,_);
38089 check(numberOfExistingReferences < 1);
38090} or {
38091 find mustInRelationvalue_attribute_EEnumLiteral(problem,interpretation,source,target);
38092}
38093/**
38094 * Matcher for detecting tuples t where []literal attribute EEnumLiteral(source,target)
38095 */
38096private pattern mustInRelationliteral_attribute_EEnumLiteral(
38097 problem:LogicProblem, interpretation:PartialInterpretation,
38098 source: DefinedElement, target:DefinedElement)
38099{
38100 find interpretation(problem,interpretation);
38101 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
38102 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"literal attribute EEnumLiteral");
38103 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
38104 BinaryElementRelationLink.param1(link,source);
38105 BinaryElementRelationLink.param2(link,target);
38106}
38107/**
38108 * Matcher for detecting tuples t where <>literal attribute EEnumLiteral(source,target)
38109 */
38110private pattern mayInRelationliteral_attribute_EEnumLiteral(
38111 problem:LogicProblem, interpretation:PartialInterpretation,
38112 source: DefinedElement, target:DefinedElement)
38113{
38114 find interpretation(problem,interpretation);
38115 // The two endpoint of the link have to exist
38116 find mayExist(problem, interpretation, source);
38117 find mayExist(problem, interpretation, target);
38118 // Type consistency
38119 find mayInstanceOfEEnumLiteral_class(problem,interpretation,source);
38120 StringElement(target);
38121 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
38122 // the upper bound of the multiplicity should be considered.
38123 numberOfExistingReferences == count find mustInRelationliteral_attribute_EEnumLiteral(problem,interpretation,source,_);
38124 check(numberOfExistingReferences < 1);
38125} or {
38126 find mustInRelationliteral_attribute_EEnumLiteral(problem,interpretation,source,target);
38127}
38128/**
38129 * Matcher for detecting tuples t where []name attribute ENamedElement(source,target)
38130 */
38131private pattern mustInRelationname_attribute_ENamedElement(
38132 problem:LogicProblem, interpretation:PartialInterpretation,
38133 source: DefinedElement, target:DefinedElement)
38134{
38135 find interpretation(problem,interpretation);
38136 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
38137 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"name attribute ENamedElement");
38138 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
38139 BinaryElementRelationLink.param1(link,source);
38140 BinaryElementRelationLink.param2(link,target);
38141}
38142/**
38143 * Matcher for detecting tuples t where <>name attribute ENamedElement(source,target)
38144 */
38145private pattern mayInRelationname_attribute_ENamedElement(
38146 problem:LogicProblem, interpretation:PartialInterpretation,
38147 source: DefinedElement, target:DefinedElement)
38148{
38149 find interpretation(problem,interpretation);
38150 // The two endpoint of the link have to exist
38151 find mayExist(problem, interpretation, source);
38152 find mayExist(problem, interpretation, target);
38153 // Type consistency
38154 find mayInstanceOfENamedElement_class(problem,interpretation,source);
38155 StringElement(target);
38156 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
38157 // the upper bound of the multiplicity should be considered.
38158 numberOfExistingReferences == count find mustInRelationname_attribute_ENamedElement(problem,interpretation,source,_);
38159 check(numberOfExistingReferences < 1);
38160} or {
38161 find mustInRelationname_attribute_ENamedElement(problem,interpretation,source,target);
38162}
38163/**
38164 * Matcher for detecting tuples t where []nsURI attribute EPackage(source,target)
38165 */
38166private pattern mustInRelationnsURI_attribute_EPackage(
38167 problem:LogicProblem, interpretation:PartialInterpretation,
38168 source: DefinedElement, target:DefinedElement)
38169{
38170 find interpretation(problem,interpretation);
38171 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
38172 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"nsURI attribute EPackage");
38173 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
38174 BinaryElementRelationLink.param1(link,source);
38175 BinaryElementRelationLink.param2(link,target);
38176}
38177/**
38178 * Matcher for detecting tuples t where <>nsURI attribute EPackage(source,target)
38179 */
38180private pattern mayInRelationnsURI_attribute_EPackage(
38181 problem:LogicProblem, interpretation:PartialInterpretation,
38182 source: DefinedElement, target:DefinedElement)
38183{
38184 find interpretation(problem,interpretation);
38185 // The two endpoint of the link have to exist
38186 find mayExist(problem, interpretation, source);
38187 find mayExist(problem, interpretation, target);
38188 // Type consistency
38189 find mayInstanceOfEPackage_class(problem,interpretation,source);
38190 StringElement(target);
38191 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
38192 // the upper bound of the multiplicity should be considered.
38193 numberOfExistingReferences == count find mustInRelationnsURI_attribute_EPackage(problem,interpretation,source,_);
38194 check(numberOfExistingReferences < 1);
38195} or {
38196 find mustInRelationnsURI_attribute_EPackage(problem,interpretation,source,target);
38197}
38198/**
38199 * Matcher for detecting tuples t where []nsPrefix attribute EPackage(source,target)
38200 */
38201private pattern mustInRelationnsPrefix_attribute_EPackage(
38202 problem:LogicProblem, interpretation:PartialInterpretation,
38203 source: DefinedElement, target:DefinedElement)
38204{
38205 find interpretation(problem,interpretation);
38206 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
38207 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"nsPrefix attribute EPackage");
38208 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
38209 BinaryElementRelationLink.param1(link,source);
38210 BinaryElementRelationLink.param2(link,target);
38211}
38212/**
38213 * Matcher for detecting tuples t where <>nsPrefix attribute EPackage(source,target)
38214 */
38215private pattern mayInRelationnsPrefix_attribute_EPackage(
38216 problem:LogicProblem, interpretation:PartialInterpretation,
38217 source: DefinedElement, target:DefinedElement)
38218{
38219 find interpretation(problem,interpretation);
38220 // The two endpoint of the link have to exist
38221 find mayExist(problem, interpretation, source);
38222 find mayExist(problem, interpretation, target);
38223 // Type consistency
38224 find mayInstanceOfEPackage_class(problem,interpretation,source);
38225 StringElement(target);
38226 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
38227 // the upper bound of the multiplicity should be considered.
38228 numberOfExistingReferences == count find mustInRelationnsPrefix_attribute_EPackage(problem,interpretation,source,_);
38229 check(numberOfExistingReferences < 1);
38230} or {
38231 find mustInRelationnsPrefix_attribute_EPackage(problem,interpretation,source,target);
38232}
38233/**
38234 * Matcher for detecting tuples t where []containment attribute EReference(source,target)
38235 */
38236private pattern mustInRelationcontainment_attribute_EReference(
38237 problem:LogicProblem, interpretation:PartialInterpretation,
38238 source: DefinedElement, target:DefinedElement)
38239{
38240 find interpretation(problem,interpretation);
38241 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
38242 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"containment attribute EReference");
38243 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
38244 BinaryElementRelationLink.param1(link,source);
38245 BinaryElementRelationLink.param2(link,target);
38246}
38247/**
38248 * Matcher for detecting tuples t where <>containment attribute EReference(source,target)
38249 */
38250private pattern mayInRelationcontainment_attribute_EReference(
38251 problem:LogicProblem, interpretation:PartialInterpretation,
38252 source: DefinedElement, target:DefinedElement)
38253{
38254 find interpretation(problem,interpretation);
38255 // The two endpoint of the link have to exist
38256 find mayExist(problem, interpretation, source);
38257 find mayExist(problem, interpretation, target);
38258 // Type consistency
38259 find mayInstanceOfEReference_class(problem,interpretation,source);
38260 BooleanElement(target);
38261 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
38262 // the upper bound of the multiplicity should be considered.
38263 numberOfExistingReferences == count find mustInRelationcontainment_attribute_EReference(problem,interpretation,source,_);
38264 check(numberOfExistingReferences < 1);
38265} or {
38266 find mustInRelationcontainment_attribute_EReference(problem,interpretation,source,target);
38267}
38268/**
38269 * Matcher for detecting tuples t where []container attribute EReference(source,target)
38270 */
38271private pattern mustInRelationcontainer_attribute_EReference(
38272 problem:LogicProblem, interpretation:PartialInterpretation,
38273 source: DefinedElement, target:DefinedElement)
38274{
38275 find interpretation(problem,interpretation);
38276 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
38277 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"container attribute EReference");
38278 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
38279 BinaryElementRelationLink.param1(link,source);
38280 BinaryElementRelationLink.param2(link,target);
38281}
38282/**
38283 * Matcher for detecting tuples t where <>container attribute EReference(source,target)
38284 */
38285private pattern mayInRelationcontainer_attribute_EReference(
38286 problem:LogicProblem, interpretation:PartialInterpretation,
38287 source: DefinedElement, target:DefinedElement)
38288{
38289 find interpretation(problem,interpretation);
38290 // The two endpoint of the link have to exist
38291 find mayExist(problem, interpretation, source);
38292 find mayExist(problem, interpretation, target);
38293 // Type consistency
38294 find mayInstanceOfEReference_class(problem,interpretation,source);
38295 BooleanElement(target);
38296 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
38297 // the upper bound of the multiplicity should be considered.
38298 numberOfExistingReferences == count find mustInRelationcontainer_attribute_EReference(problem,interpretation,source,_);
38299 check(numberOfExistingReferences < 1);
38300} or {
38301 find mustInRelationcontainer_attribute_EReference(problem,interpretation,source,target);
38302}
38303/**
38304 * Matcher for detecting tuples t where []resolveProxies attribute EReference(source,target)
38305 */
38306private pattern mustInRelationresolveProxies_attribute_EReference(
38307 problem:LogicProblem, interpretation:PartialInterpretation,
38308 source: DefinedElement, target:DefinedElement)
38309{
38310 find interpretation(problem,interpretation);
38311 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
38312 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"resolveProxies attribute EReference");
38313 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
38314 BinaryElementRelationLink.param1(link,source);
38315 BinaryElementRelationLink.param2(link,target);
38316}
38317/**
38318 * Matcher for detecting tuples t where <>resolveProxies attribute EReference(source,target)
38319 */
38320private pattern mayInRelationresolveProxies_attribute_EReference(
38321 problem:LogicProblem, interpretation:PartialInterpretation,
38322 source: DefinedElement, target:DefinedElement)
38323{
38324 find interpretation(problem,interpretation);
38325 // The two endpoint of the link have to exist
38326 find mayExist(problem, interpretation, source);
38327 find mayExist(problem, interpretation, target);
38328 // Type consistency
38329 find mayInstanceOfEReference_class(problem,interpretation,source);
38330 BooleanElement(target);
38331 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
38332 // the upper bound of the multiplicity should be considered.
38333 numberOfExistingReferences == count find mustInRelationresolveProxies_attribute_EReference(problem,interpretation,source,_);
38334 check(numberOfExistingReferences < 1);
38335} or {
38336 find mustInRelationresolveProxies_attribute_EReference(problem,interpretation,source,target);
38337}
38338/**
38339 * Matcher for detecting tuples t where []changeable attribute EStructuralFeature(source,target)
38340 */
38341private pattern mustInRelationchangeable_attribute_EStructuralFeature(
38342 problem:LogicProblem, interpretation:PartialInterpretation,
38343 source: DefinedElement, target:DefinedElement)
38344{
38345 find interpretation(problem,interpretation);
38346 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
38347 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"changeable attribute EStructuralFeature");
38348 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
38349 BinaryElementRelationLink.param1(link,source);
38350 BinaryElementRelationLink.param2(link,target);
38351}
38352/**
38353 * Matcher for detecting tuples t where <>changeable attribute EStructuralFeature(source,target)
38354 */
38355private pattern mayInRelationchangeable_attribute_EStructuralFeature(
38356 problem:LogicProblem, interpretation:PartialInterpretation,
38357 source: DefinedElement, target:DefinedElement)
38358{
38359 find interpretation(problem,interpretation);
38360 // The two endpoint of the link have to exist
38361 find mayExist(problem, interpretation, source);
38362 find mayExist(problem, interpretation, target);
38363 // Type consistency
38364 find mayInstanceOfEStructuralFeature_class(problem,interpretation,source);
38365 BooleanElement(target);
38366 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
38367 // the upper bound of the multiplicity should be considered.
38368 numberOfExistingReferences == count find mustInRelationchangeable_attribute_EStructuralFeature(problem,interpretation,source,_);
38369 check(numberOfExistingReferences < 1);
38370} or {
38371 find mustInRelationchangeable_attribute_EStructuralFeature(problem,interpretation,source,target);
38372}
38373/**
38374 * Matcher for detecting tuples t where []volatile attribute EStructuralFeature(source,target)
38375 */
38376private pattern mustInRelationvolatile_attribute_EStructuralFeature(
38377 problem:LogicProblem, interpretation:PartialInterpretation,
38378 source: DefinedElement, target:DefinedElement)
38379{
38380 find interpretation(problem,interpretation);
38381 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
38382 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"volatile attribute EStructuralFeature");
38383 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
38384 BinaryElementRelationLink.param1(link,source);
38385 BinaryElementRelationLink.param2(link,target);
38386}
38387/**
38388 * Matcher for detecting tuples t where <>volatile attribute EStructuralFeature(source,target)
38389 */
38390private pattern mayInRelationvolatile_attribute_EStructuralFeature(
38391 problem:LogicProblem, interpretation:PartialInterpretation,
38392 source: DefinedElement, target:DefinedElement)
38393{
38394 find interpretation(problem,interpretation);
38395 // The two endpoint of the link have to exist
38396 find mayExist(problem, interpretation, source);
38397 find mayExist(problem, interpretation, target);
38398 // Type consistency
38399 find mayInstanceOfEStructuralFeature_class(problem,interpretation,source);
38400 BooleanElement(target);
38401 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
38402 // the upper bound of the multiplicity should be considered.
38403 numberOfExistingReferences == count find mustInRelationvolatile_attribute_EStructuralFeature(problem,interpretation,source,_);
38404 check(numberOfExistingReferences < 1);
38405} or {
38406 find mustInRelationvolatile_attribute_EStructuralFeature(problem,interpretation,source,target);
38407}
38408/**
38409 * Matcher for detecting tuples t where []transient attribute EStructuralFeature(source,target)
38410 */
38411private pattern mustInRelationtransient_attribute_EStructuralFeature(
38412 problem:LogicProblem, interpretation:PartialInterpretation,
38413 source: DefinedElement, target:DefinedElement)
38414{
38415 find interpretation(problem,interpretation);
38416 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
38417 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"transient attribute EStructuralFeature");
38418 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
38419 BinaryElementRelationLink.param1(link,source);
38420 BinaryElementRelationLink.param2(link,target);
38421}
38422/**
38423 * Matcher for detecting tuples t where <>transient attribute EStructuralFeature(source,target)
38424 */
38425private pattern mayInRelationtransient_attribute_EStructuralFeature(
38426 problem:LogicProblem, interpretation:PartialInterpretation,
38427 source: DefinedElement, target:DefinedElement)
38428{
38429 find interpretation(problem,interpretation);
38430 // The two endpoint of the link have to exist
38431 find mayExist(problem, interpretation, source);
38432 find mayExist(problem, interpretation, target);
38433 // Type consistency
38434 find mayInstanceOfEStructuralFeature_class(problem,interpretation,source);
38435 BooleanElement(target);
38436 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
38437 // the upper bound of the multiplicity should be considered.
38438 numberOfExistingReferences == count find mustInRelationtransient_attribute_EStructuralFeature(problem,interpretation,source,_);
38439 check(numberOfExistingReferences < 1);
38440} or {
38441 find mustInRelationtransient_attribute_EStructuralFeature(problem,interpretation,source,target);
38442}
38443/**
38444 * Matcher for detecting tuples t where []defaultValueLiteral attribute EStructuralFeature(source,target)
38445 */
38446private pattern mustInRelationdefaultValueLiteral_attribute_EStructuralFeature(
38447 problem:LogicProblem, interpretation:PartialInterpretation,
38448 source: DefinedElement, target:DefinedElement)
38449{
38450 find interpretation(problem,interpretation);
38451 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
38452 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"defaultValueLiteral attribute EStructuralFeature");
38453 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
38454 BinaryElementRelationLink.param1(link,source);
38455 BinaryElementRelationLink.param2(link,target);
38456}
38457/**
38458 * Matcher for detecting tuples t where <>defaultValueLiteral attribute EStructuralFeature(source,target)
38459 */
38460private pattern mayInRelationdefaultValueLiteral_attribute_EStructuralFeature(
38461 problem:LogicProblem, interpretation:PartialInterpretation,
38462 source: DefinedElement, target:DefinedElement)
38463{
38464 find interpretation(problem,interpretation);
38465 // The two endpoint of the link have to exist
38466 find mayExist(problem, interpretation, source);
38467 find mayExist(problem, interpretation, target);
38468 // Type consistency
38469 find mayInstanceOfEStructuralFeature_class(problem,interpretation,source);
38470 StringElement(target);
38471 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
38472 // the upper bound of the multiplicity should be considered.
38473 numberOfExistingReferences == count find mustInRelationdefaultValueLiteral_attribute_EStructuralFeature(problem,interpretation,source,_);
38474 check(numberOfExistingReferences < 1);
38475} or {
38476 find mustInRelationdefaultValueLiteral_attribute_EStructuralFeature(problem,interpretation,source,target);
38477}
38478/**
38479 * Matcher for detecting tuples t where []unsettable attribute EStructuralFeature(source,target)
38480 */
38481private pattern mustInRelationunsettable_attribute_EStructuralFeature(
38482 problem:LogicProblem, interpretation:PartialInterpretation,
38483 source: DefinedElement, target:DefinedElement)
38484{
38485 find interpretation(problem,interpretation);
38486 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
38487 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"unsettable attribute EStructuralFeature");
38488 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
38489 BinaryElementRelationLink.param1(link,source);
38490 BinaryElementRelationLink.param2(link,target);
38491}
38492/**
38493 * Matcher for detecting tuples t where <>unsettable attribute EStructuralFeature(source,target)
38494 */
38495private pattern mayInRelationunsettable_attribute_EStructuralFeature(
38496 problem:LogicProblem, interpretation:PartialInterpretation,
38497 source: DefinedElement, target:DefinedElement)
38498{
38499 find interpretation(problem,interpretation);
38500 // The two endpoint of the link have to exist
38501 find mayExist(problem, interpretation, source);
38502 find mayExist(problem, interpretation, target);
38503 // Type consistency
38504 find mayInstanceOfEStructuralFeature_class(problem,interpretation,source);
38505 BooleanElement(target);
38506 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
38507 // the upper bound of the multiplicity should be considered.
38508 numberOfExistingReferences == count find mustInRelationunsettable_attribute_EStructuralFeature(problem,interpretation,source,_);
38509 check(numberOfExistingReferences < 1);
38510} or {
38511 find mustInRelationunsettable_attribute_EStructuralFeature(problem,interpretation,source,target);
38512}
38513/**
38514 * Matcher for detecting tuples t where []derived attribute EStructuralFeature(source,target)
38515 */
38516private pattern mustInRelationderived_attribute_EStructuralFeature(
38517 problem:LogicProblem, interpretation:PartialInterpretation,
38518 source: DefinedElement, target:DefinedElement)
38519{
38520 find interpretation(problem,interpretation);
38521 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
38522 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"derived attribute EStructuralFeature");
38523 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
38524 BinaryElementRelationLink.param1(link,source);
38525 BinaryElementRelationLink.param2(link,target);
38526}
38527/**
38528 * Matcher for detecting tuples t where <>derived attribute EStructuralFeature(source,target)
38529 */
38530private pattern mayInRelationderived_attribute_EStructuralFeature(
38531 problem:LogicProblem, interpretation:PartialInterpretation,
38532 source: DefinedElement, target:DefinedElement)
38533{
38534 find interpretation(problem,interpretation);
38535 // The two endpoint of the link have to exist
38536 find mayExist(problem, interpretation, source);
38537 find mayExist(problem, interpretation, target);
38538 // Type consistency
38539 find mayInstanceOfEStructuralFeature_class(problem,interpretation,source);
38540 BooleanElement(target);
38541 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
38542 // the upper bound of the multiplicity should be considered.
38543 numberOfExistingReferences == count find mustInRelationderived_attribute_EStructuralFeature(problem,interpretation,source,_);
38544 check(numberOfExistingReferences < 1);
38545} or {
38546 find mustInRelationderived_attribute_EStructuralFeature(problem,interpretation,source,target);
38547}
38548/**
38549 * Matcher for detecting tuples t where []ordered attribute ETypedElement(source,target)
38550 */
38551private pattern mustInRelationordered_attribute_ETypedElement(
38552 problem:LogicProblem, interpretation:PartialInterpretation,
38553 source: DefinedElement, target:DefinedElement)
38554{
38555 find interpretation(problem,interpretation);
38556 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
38557 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"ordered attribute ETypedElement");
38558 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
38559 BinaryElementRelationLink.param1(link,source);
38560 BinaryElementRelationLink.param2(link,target);
38561}
38562/**
38563 * Matcher for detecting tuples t where <>ordered attribute ETypedElement(source,target)
38564 */
38565private pattern mayInRelationordered_attribute_ETypedElement(
38566 problem:LogicProblem, interpretation:PartialInterpretation,
38567 source: DefinedElement, target:DefinedElement)
38568{
38569 find interpretation(problem,interpretation);
38570 // The two endpoint of the link have to exist
38571 find mayExist(problem, interpretation, source);
38572 find mayExist(problem, interpretation, target);
38573 // Type consistency
38574 find mayInstanceOfETypedElement_class(problem,interpretation,source);
38575 BooleanElement(target);
38576 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
38577 // the upper bound of the multiplicity should be considered.
38578 numberOfExistingReferences == count find mustInRelationordered_attribute_ETypedElement(problem,interpretation,source,_);
38579 check(numberOfExistingReferences < 1);
38580} or {
38581 find mustInRelationordered_attribute_ETypedElement(problem,interpretation,source,target);
38582}
38583/**
38584 * Matcher for detecting tuples t where []unique attribute ETypedElement(source,target)
38585 */
38586private pattern mustInRelationunique_attribute_ETypedElement(
38587 problem:LogicProblem, interpretation:PartialInterpretation,
38588 source: DefinedElement, target:DefinedElement)
38589{
38590 find interpretation(problem,interpretation);
38591 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
38592 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"unique attribute ETypedElement");
38593 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
38594 BinaryElementRelationLink.param1(link,source);
38595 BinaryElementRelationLink.param2(link,target);
38596}
38597/**
38598 * Matcher for detecting tuples t where <>unique attribute ETypedElement(source,target)
38599 */
38600private pattern mayInRelationunique_attribute_ETypedElement(
38601 problem:LogicProblem, interpretation:PartialInterpretation,
38602 source: DefinedElement, target:DefinedElement)
38603{
38604 find interpretation(problem,interpretation);
38605 // The two endpoint of the link have to exist
38606 find mayExist(problem, interpretation, source);
38607 find mayExist(problem, interpretation, target);
38608 // Type consistency
38609 find mayInstanceOfETypedElement_class(problem,interpretation,source);
38610 BooleanElement(target);
38611 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
38612 // the upper bound of the multiplicity should be considered.
38613 numberOfExistingReferences == count find mustInRelationunique_attribute_ETypedElement(problem,interpretation,source,_);
38614 check(numberOfExistingReferences < 1);
38615} or {
38616 find mustInRelationunique_attribute_ETypedElement(problem,interpretation,source,target);
38617}
38618/**
38619 * Matcher for detecting tuples t where []lowerBound attribute ETypedElement(source,target)
38620 */
38621private pattern mustInRelationlowerBound_attribute_ETypedElement(
38622 problem:LogicProblem, interpretation:PartialInterpretation,
38623 source: DefinedElement, target:DefinedElement)
38624{
38625 find interpretation(problem,interpretation);
38626 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
38627 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"lowerBound attribute ETypedElement");
38628 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
38629 BinaryElementRelationLink.param1(link,source);
38630 BinaryElementRelationLink.param2(link,target);
38631}
38632/**
38633 * Matcher for detecting tuples t where <>lowerBound attribute ETypedElement(source,target)
38634 */
38635private pattern mayInRelationlowerBound_attribute_ETypedElement(
38636 problem:LogicProblem, interpretation:PartialInterpretation,
38637 source: DefinedElement, target:DefinedElement)
38638{
38639 find interpretation(problem,interpretation);
38640 // The two endpoint of the link have to exist
38641 find mayExist(problem, interpretation, source);
38642 find mayExist(problem, interpretation, target);
38643 // Type consistency
38644 find mayInstanceOfETypedElement_class(problem,interpretation,source);
38645 IntegerElement(target);
38646 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
38647 // the upper bound of the multiplicity should be considered.
38648 numberOfExistingReferences == count find mustInRelationlowerBound_attribute_ETypedElement(problem,interpretation,source,_);
38649 check(numberOfExistingReferences < 1);
38650} or {
38651 find mustInRelationlowerBound_attribute_ETypedElement(problem,interpretation,source,target);
38652}
38653/**
38654 * Matcher for detecting tuples t where []upperBound attribute ETypedElement(source,target)
38655 */
38656private pattern mustInRelationupperBound_attribute_ETypedElement(
38657 problem:LogicProblem, interpretation:PartialInterpretation,
38658 source: DefinedElement, target:DefinedElement)
38659{
38660 find interpretation(problem,interpretation);
38661 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
38662 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"upperBound attribute ETypedElement");
38663 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
38664 BinaryElementRelationLink.param1(link,source);
38665 BinaryElementRelationLink.param2(link,target);
38666}
38667/**
38668 * Matcher for detecting tuples t where <>upperBound attribute ETypedElement(source,target)
38669 */
38670private pattern mayInRelationupperBound_attribute_ETypedElement(
38671 problem:LogicProblem, interpretation:PartialInterpretation,
38672 source: DefinedElement, target:DefinedElement)
38673{
38674 find interpretation(problem,interpretation);
38675 // The two endpoint of the link have to exist
38676 find mayExist(problem, interpretation, source);
38677 find mayExist(problem, interpretation, target);
38678 // Type consistency
38679 find mayInstanceOfETypedElement_class(problem,interpretation,source);
38680 IntegerElement(target);
38681 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
38682 // the upper bound of the multiplicity should be considered.
38683 numberOfExistingReferences == count find mustInRelationupperBound_attribute_ETypedElement(problem,interpretation,source,_);
38684 check(numberOfExistingReferences < 1);
38685} or {
38686 find mustInRelationupperBound_attribute_ETypedElement(problem,interpretation,source,target);
38687}
38688/**
38689 * Matcher for detecting tuples t where []many attribute ETypedElement(source,target)
38690 */
38691private pattern mustInRelationmany_attribute_ETypedElement(
38692 problem:LogicProblem, interpretation:PartialInterpretation,
38693 source: DefinedElement, target:DefinedElement)
38694{
38695 find interpretation(problem,interpretation);
38696 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
38697 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"many attribute ETypedElement");
38698 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
38699 BinaryElementRelationLink.param1(link,source);
38700 BinaryElementRelationLink.param2(link,target);
38701}
38702/**
38703 * Matcher for detecting tuples t where <>many attribute ETypedElement(source,target)
38704 */
38705private pattern mayInRelationmany_attribute_ETypedElement(
38706 problem:LogicProblem, interpretation:PartialInterpretation,
38707 source: DefinedElement, target:DefinedElement)
38708{
38709 find interpretation(problem,interpretation);
38710 // The two endpoint of the link have to exist
38711 find mayExist(problem, interpretation, source);
38712 find mayExist(problem, interpretation, target);
38713 // Type consistency
38714 find mayInstanceOfETypedElement_class(problem,interpretation,source);
38715 BooleanElement(target);
38716 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
38717 // the upper bound of the multiplicity should be considered.
38718 numberOfExistingReferences == count find mustInRelationmany_attribute_ETypedElement(problem,interpretation,source,_);
38719 check(numberOfExistingReferences < 1);
38720} or {
38721 find mustInRelationmany_attribute_ETypedElement(problem,interpretation,source,target);
38722}
38723/**
38724 * Matcher for detecting tuples t where []required attribute ETypedElement(source,target)
38725 */
38726private pattern mustInRelationrequired_attribute_ETypedElement(
38727 problem:LogicProblem, interpretation:PartialInterpretation,
38728 source: DefinedElement, target:DefinedElement)
38729{
38730 find interpretation(problem,interpretation);
38731 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
38732 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"required attribute ETypedElement");
38733 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
38734 BinaryElementRelationLink.param1(link,source);
38735 BinaryElementRelationLink.param2(link,target);
38736}
38737/**
38738 * Matcher for detecting tuples t where <>required attribute ETypedElement(source,target)
38739 */
38740private pattern mayInRelationrequired_attribute_ETypedElement(
38741 problem:LogicProblem, interpretation:PartialInterpretation,
38742 source: DefinedElement, target:DefinedElement)
38743{
38744 find interpretation(problem,interpretation);
38745 // The two endpoint of the link have to exist
38746 find mayExist(problem, interpretation, source);
38747 find mayExist(problem, interpretation, target);
38748 // Type consistency
38749 find mayInstanceOfETypedElement_class(problem,interpretation,source);
38750 BooleanElement(target);
38751 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
38752 // the upper bound of the multiplicity should be considered.
38753 numberOfExistingReferences == count find mustInRelationrequired_attribute_ETypedElement(problem,interpretation,source,_);
38754 check(numberOfExistingReferences < 1);
38755} or {
38756 find mustInRelationrequired_attribute_ETypedElement(problem,interpretation,source,target);
38757}
38758/**
38759 * Matcher for detecting tuples t where []key attribute EStringToStringMapEntry(source,target)
38760 */
38761private pattern mustInRelationkey_attribute_EStringToStringMapEntry(
38762 problem:LogicProblem, interpretation:PartialInterpretation,
38763 source: DefinedElement, target:DefinedElement)
38764{
38765 find interpretation(problem,interpretation);
38766 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
38767 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"key attribute EStringToStringMapEntry");
38768 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
38769 BinaryElementRelationLink.param1(link,source);
38770 BinaryElementRelationLink.param2(link,target);
38771}
38772/**
38773 * Matcher for detecting tuples t where <>key attribute EStringToStringMapEntry(source,target)
38774 */
38775private pattern mayInRelationkey_attribute_EStringToStringMapEntry(
38776 problem:LogicProblem, interpretation:PartialInterpretation,
38777 source: DefinedElement, target:DefinedElement)
38778{
38779 find interpretation(problem,interpretation);
38780 // The two endpoint of the link have to exist
38781 find mayExist(problem, interpretation, source);
38782 find mayExist(problem, interpretation, target);
38783 // Type consistency
38784 find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,source);
38785 StringElement(target);
38786 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
38787 // the upper bound of the multiplicity should be considered.
38788 numberOfExistingReferences == count find mustInRelationkey_attribute_EStringToStringMapEntry(problem,interpretation,source,_);
38789 check(numberOfExistingReferences < 1);
38790} or {
38791 find mustInRelationkey_attribute_EStringToStringMapEntry(problem,interpretation,source,target);
38792}
38793/**
38794 * Matcher for detecting tuples t where []value attribute EStringToStringMapEntry(source,target)
38795 */
38796private pattern mustInRelationvalue_attribute_EStringToStringMapEntry(
38797 problem:LogicProblem, interpretation:PartialInterpretation,
38798 source: DefinedElement, target:DefinedElement)
38799{
38800 find interpretation(problem,interpretation);
38801 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
38802 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"value attribute EStringToStringMapEntry");
38803 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
38804 BinaryElementRelationLink.param1(link,source);
38805 BinaryElementRelationLink.param2(link,target);
38806}
38807/**
38808 * Matcher for detecting tuples t where <>value attribute EStringToStringMapEntry(source,target)
38809 */
38810private pattern mayInRelationvalue_attribute_EStringToStringMapEntry(
38811 problem:LogicProblem, interpretation:PartialInterpretation,
38812 source: DefinedElement, target:DefinedElement)
38813{
38814 find interpretation(problem,interpretation);
38815 // The two endpoint of the link have to exist
38816 find mayExist(problem, interpretation, source);
38817 find mayExist(problem, interpretation, target);
38818 // Type consistency
38819 find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,source);
38820 StringElement(target);
38821 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
38822 // the upper bound of the multiplicity should be considered.
38823 numberOfExistingReferences == count find mustInRelationvalue_attribute_EStringToStringMapEntry(problem,interpretation,source,_);
38824 check(numberOfExistingReferences < 1);
38825} or {
38826 find mustInRelationvalue_attribute_EStringToStringMapEntry(problem,interpretation,source,target);
38827}
38828
38829//////////
38830// 1.3 Relation Definition Indexers
38831//////////
38832
38833//////////
38834// 1.4 Containment Indexer
38835//////////
38836private pattern mustContains2(source: DefinedElement, target: DefinedElement) {
38837 find mustContains4(_,_,source,target);
38838}
38839
38840private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation,
38841 source: DefinedElement, target: DefinedElement)
38842 { find mustInRelationdetails_reference_EAnnotation(problem,interpretation,source,target); }or
38843
38844 { find mustInRelationcontents_reference_EAnnotation(problem,interpretation,source,target); }or
38845
38846 { find mustInRelationeOperations_reference_EClass(problem,interpretation,source,target); }or
38847
38848 { find mustInRelationeStructuralFeatures_reference_EClass(problem,interpretation,source,target); }or
38849
38850 { find mustInRelationeGenericSuperTypes_reference_EClass(problem,interpretation,source,target); }or
38851
38852 { find mustInRelationeTypeParameters_reference_EClassifier(problem,interpretation,source,target); }or
38853
38854 { find mustInRelationeLiterals_reference_EEnum(problem,interpretation,source,target); }or
38855
38856 { find mustInRelationeAnnotations_reference_EModelElement(problem,interpretation,source,target); }or
38857
38858 { find mustInRelationeTypeParameters_reference_EOperation(problem,interpretation,source,target); }or
38859
38860 { find mustInRelationeParameters_reference_EOperation(problem,interpretation,source,target); }or
38861
38862 { find mustInRelationeGenericExceptions_reference_EOperation(problem,interpretation,source,target); }or
38863
38864 { find mustInRelationeClassifiers_reference_EPackage(problem,interpretation,source,target); }or
38865
38866 { find mustInRelationeSubpackages_reference_EPackage(problem,interpretation,source,target); }or
38867
38868 { find mustInRelationeGenericType_reference_ETypedElement(problem,interpretation,source,target); }or
38869
38870 { find mustInRelationeUpperBound_reference_EGenericType(problem,interpretation,source,target); }or
38871
38872 { find mustInRelationeTypeArguments_reference_EGenericType(problem,interpretation,source,target); }or
38873
38874 { find mustInRelationeLowerBound_reference_EGenericType(problem,interpretation,source,target); }or
38875
38876 { find mustInRelationeBounds_reference_ETypeParameter(problem,interpretation,source,target); }
38877
38878private pattern mustTransitiveContains(source,target) {
38879 find mustContains2+(source,target);
38880}
38881
38882//////////
38883// 2. Invalidation Indexers
38884//////////
38885// 2.1 Invalidated by WF Queries
38886//////////
38887
38888//////////
38889// 3. Unfinishedness Indexers
38890//////////
38891// 3.1 Unfinishedness Measured by Multiplicity
38892//////////
38893pattern unfinishedLowerMultiplicity_eAttributeType_reference_EAttribute(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) {
38894 find interpretation(problem,interpretation);
38895 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
38896 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributeType reference EAttribute");
38897 find mustInstanceOfEAttribute_class(problem,interpretation,object);
38898 numberOfExistingReferences == count find mustInRelationeAttributeType_reference_EAttribute(problem,interpretation,object,_);
38899 check(numberOfExistingReferences < 1);
38900 missingMultiplicity == eval(1-numberOfExistingReferences);
38901}
38902pattern unfinishedLowerMultiplicity_eReferenceType_reference_EReference(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) {
38903 find interpretation(problem,interpretation);
38904 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
38905 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferenceType reference EReference");
38906 find mustInstanceOfEReference_class(problem,interpretation,object);
38907 numberOfExistingReferences == count find mustInRelationeReferenceType_reference_EReference(problem,interpretation,object,_);
38908 check(numberOfExistingReferences < 1);
38909 missingMultiplicity == eval(1-numberOfExistingReferences);
38910}
38911pattern unfinishedLowerMultiplicity_eRawType_reference_EGenericType(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) {
38912 find interpretation(problem,interpretation);
38913 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
38914 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eRawType reference EGenericType");
38915 find mustInstanceOfEGenericType_class(problem,interpretation,object);
38916 numberOfExistingReferences == count find mustInRelationeRawType_reference_EGenericType(problem,interpretation,object,_);
38917 check(numberOfExistingReferences < 1);
38918 missingMultiplicity == eval(1-numberOfExistingReferences);
38919}
38920
38921//////////
38922// 3.2 Unfinishedness Measured by WF Queries
38923//////////
38924
38925//////////
38926// 4. Refinement Indexers
38927//////////
38928// 4.1 Object constructors
38929//////////
38930private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation)
38931{
38932 find interpretation(problem,interpretation);
38933 find mustInstanceOfETypeParameter_class(problem,interpretation,root);
38934 find mustExist(problem, interpretation, root);
38935}or{
38936 find interpretation(problem,interpretation);
38937 find mustInstanceOfETypedElement_class(problem,interpretation,root);
38938 find mustExist(problem, interpretation, root);
38939}or{
38940 find interpretation(problem,interpretation);
38941 find mustInstanceOfEClass_class(problem,interpretation,root);
38942 find mustExist(problem, interpretation, root);
38943}or{
38944 find interpretation(problem,interpretation);
38945 find mustInstanceOfEStructuralFeature_class(problem,interpretation,root);
38946 find mustExist(problem, interpretation, root);
38947}or{
38948 find interpretation(problem,interpretation);
38949 find mustInstanceOfEAnnotation_class(problem,interpretation,root);
38950 find mustExist(problem, interpretation, root);
38951}or{
38952 find interpretation(problem,interpretation);
38953 find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,root);
38954 find mustExist(problem, interpretation, root);
38955}or{
38956 find interpretation(problem,interpretation);
38957 find mustInstanceOfEAttribute_class(problem,interpretation,root);
38958 find mustExist(problem, interpretation, root);
38959}or{
38960 find interpretation(problem,interpretation);
38961 find mustInstanceOfEObject_class(problem,interpretation,root);
38962 find mustExist(problem, interpretation, root);
38963}or{
38964 find interpretation(problem,interpretation);
38965 find mustInstanceOfEClassifier_class(problem,interpretation,root);
38966 find mustExist(problem, interpretation, root);
38967}or{
38968 find interpretation(problem,interpretation);
38969 find mustInstanceOfEGenericType_class(problem,interpretation,root);
38970 find mustExist(problem, interpretation, root);
38971}or{
38972 find interpretation(problem,interpretation);
38973 find mustInstanceOfEEnumLiteral_class(problem,interpretation,root);
38974 find mustExist(problem, interpretation, root);
38975}or{
38976 find interpretation(problem,interpretation);
38977 find mustInstanceOfEDataType_class(problem,interpretation,root);
38978 find mustExist(problem, interpretation, root);
38979}or{
38980 find interpretation(problem,interpretation);
38981 find mustInstanceOfEOperation_class(problem,interpretation,root);
38982 find mustExist(problem, interpretation, root);
38983}or{
38984 find interpretation(problem,interpretation);
38985 find mustInstanceOfEPackage_class(problem,interpretation,root);
38986 find mustExist(problem, interpretation, root);
38987}or{
38988 find interpretation(problem,interpretation);
38989 find mustInstanceOfEParameter_class(problem,interpretation,root);
38990 find mustExist(problem, interpretation, root);
38991}or{
38992 find interpretation(problem,interpretation);
38993 find mustInstanceOfEModelElement_class(problem,interpretation,root);
38994 find mustExist(problem, interpretation, root);
38995}or{
38996 find interpretation(problem,interpretation);
38997 find mustInstanceOfEReference_class(problem,interpretation,root);
38998 find mustExist(problem, interpretation, root);
38999}or{
39000 find interpretation(problem,interpretation);
39001 find mustInstanceOfEEnum_class(problem,interpretation,root);
39002 find mustExist(problem, interpretation, root);
39003}or{
39004 find interpretation(problem,interpretation);
39005 find mustInstanceOfENamedElement_class(problem,interpretation,root);
39006 find mustExist(problem, interpretation, root);
39007}or{
39008 find interpretation(problem,interpretation);
39009 find mustInstanceOfEModelElement_class_DefinedPart(problem,interpretation,root);
39010 find mustExist(problem, interpretation, root);
39011}or{
39012 find interpretation(problem,interpretation);
39013 find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,root);
39014 find mustExist(problem, interpretation, root);
39015}or{
39016 find interpretation(problem,interpretation);
39017 find mustInstanceOfENamedElement_class_DefinedPart(problem,interpretation,root);
39018 find mustExist(problem, interpretation, root);
39019}or{
39020 find interpretation(problem,interpretation);
39021 find mustInstanceOfENamedElement_class_UndefinedPart(problem,interpretation,root);
39022 find mustExist(problem, interpretation, root);
39023}or{
39024 find interpretation(problem,interpretation);
39025 find mustInstanceOfEPackage_class_DefinedPart(problem,interpretation,root);
39026 find mustExist(problem, interpretation, root);
39027}or{
39028 find interpretation(problem,interpretation);
39029 find mustInstanceOfEPackage_class_UndefinedPart(problem,interpretation,root);
39030 find mustExist(problem, interpretation, root);
39031}
39032pattern createObject_EAnnotation_class_by_eAnnotations_reference_EModelElement_with_eModelElement_reference_EAnnotation(
39033 problem:LogicProblem, interpretation:PartialInterpretation,
39034 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
39035 container:DefinedElement)
39036{
39037 find interpretation(problem,interpretation);
39038 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
39039 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EAnnotation class");
39040 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
39041 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eAnnotations reference EModelElement");
39042 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
39043 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eModelElement reference EAnnotation");
39044 find mustInstanceOfEModelElement_class(problem,interpretation,container);
39045 find mayInstanceOfEAnnotation_class(problem,interpretation,newObject);
39046 find mayInRelationeAnnotations_reference_EModelElement(problem,interpretation,container,newObject);
39047 find mustExist(problem, interpretation, container);
39048 neg find mustExist(problem, interpretation, newObject);
39049}
39050pattern createObject_EAnnotation_class(
39051 problem:LogicProblem, interpretation:PartialInterpretation,
39052 typeInterpretation:PartialComplexTypeInterpretation)
39053{
39054 find interpretation(problem,interpretation);
39055 neg find hasElementInContainment(problem,interpretation);
39056 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
39057 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EAnnotation class");
39058 find mayInstanceOfEAnnotation_class(problem,interpretation,newObject);
39059 find mayExist(problem, interpretation, newObject);
39060 neg find mustExist(problem, interpretation, newObject);
39061}
39062pattern createObject_EClass_class_by_eClassifiers_reference_EPackage_with_ePackage_reference_EClassifier(
39063 problem:LogicProblem, interpretation:PartialInterpretation,
39064 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
39065 container:DefinedElement)
39066{
39067 find interpretation(problem,interpretation);
39068 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
39069 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EClass class");
39070 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
39071 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eClassifiers reference EPackage");
39072 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
39073 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"ePackage reference EClassifier");
39074 find mustInstanceOfEPackage_class(problem,interpretation,container);
39075 find mayInstanceOfEClass_class(problem,interpretation,newObject);
39076 find mayInRelationeClassifiers_reference_EPackage(problem,interpretation,container,newObject);
39077 find mustExist(problem, interpretation, container);
39078 neg find mustExist(problem, interpretation, newObject);
39079}
39080pattern createObject_EClass_class(
39081 problem:LogicProblem, interpretation:PartialInterpretation,
39082 typeInterpretation:PartialComplexTypeInterpretation)
39083{
39084 find interpretation(problem,interpretation);
39085 neg find hasElementInContainment(problem,interpretation);
39086 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
39087 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EClass class");
39088 find mayInstanceOfEClass_class(problem,interpretation,newObject);
39089 find mayExist(problem, interpretation, newObject);
39090 neg find mustExist(problem, interpretation, newObject);
39091}
39092pattern createObject_EEnum_class_by_eClassifiers_reference_EPackage_with_ePackage_reference_EClassifier(
39093 problem:LogicProblem, interpretation:PartialInterpretation,
39094 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
39095 container:DefinedElement)
39096{
39097 find interpretation(problem,interpretation);
39098 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
39099 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EEnum class");
39100 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
39101 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eClassifiers reference EPackage");
39102 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
39103 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"ePackage reference EClassifier");
39104 find mustInstanceOfEPackage_class(problem,interpretation,container);
39105 find mayInstanceOfEEnum_class(problem,interpretation,newObject);
39106 find mayInRelationeClassifiers_reference_EPackage(problem,interpretation,container,newObject);
39107 find mustExist(problem, interpretation, container);
39108 neg find mustExist(problem, interpretation, newObject);
39109}
39110pattern createObject_EEnum_class(
39111 problem:LogicProblem, interpretation:PartialInterpretation,
39112 typeInterpretation:PartialComplexTypeInterpretation)
39113{
39114 find interpretation(problem,interpretation);
39115 neg find hasElementInContainment(problem,interpretation);
39116 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
39117 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EEnum class");
39118 find mayInstanceOfEEnum_class(problem,interpretation,newObject);
39119 find mayExist(problem, interpretation, newObject);
39120 neg find mustExist(problem, interpretation, newObject);
39121}
39122pattern createObject_EReference_class_by_eStructuralFeatures_reference_EClass_with_eContainingClass_reference_EStructuralFeature(
39123 problem:LogicProblem, interpretation:PartialInterpretation,
39124 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
39125 container:DefinedElement)
39126{
39127 find interpretation(problem,interpretation);
39128 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
39129 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EReference class");
39130 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
39131 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eStructuralFeatures reference EClass");
39132 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
39133 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eContainingClass reference EStructuralFeature");
39134 find mustInstanceOfEClass_class(problem,interpretation,container);
39135 find mayInstanceOfEReference_class(problem,interpretation,newObject);
39136 find mayInRelationeStructuralFeatures_reference_EClass(problem,interpretation,container,newObject);
39137 find mustExist(problem, interpretation, container);
39138 neg find mustExist(problem, interpretation, newObject);
39139}
39140pattern createObject_EReference_class(
39141 problem:LogicProblem, interpretation:PartialInterpretation,
39142 typeInterpretation:PartialComplexTypeInterpretation)
39143{
39144 find interpretation(problem,interpretation);
39145 neg find hasElementInContainment(problem,interpretation);
39146 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
39147 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EReference class");
39148 find mayInstanceOfEReference_class(problem,interpretation,newObject);
39149 find mayExist(problem, interpretation, newObject);
39150 neg find mustExist(problem, interpretation, newObject);
39151}
39152pattern createObject_EOperation_class_by_eOperations_reference_EClass_with_eContainingClass_reference_EOperation(
39153 problem:LogicProblem, interpretation:PartialInterpretation,
39154 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
39155 container:DefinedElement)
39156{
39157 find interpretation(problem,interpretation);
39158 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
39159 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EOperation class");
39160 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
39161 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eOperations reference EClass");
39162 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
39163 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eContainingClass reference EOperation");
39164 find mustInstanceOfEClass_class(problem,interpretation,container);
39165 find mayInstanceOfEOperation_class(problem,interpretation,newObject);
39166 find mayInRelationeOperations_reference_EClass(problem,interpretation,container,newObject);
39167 find mustExist(problem, interpretation, container);
39168 neg find mustExist(problem, interpretation, newObject);
39169}
39170pattern createObject_EOperation_class(
39171 problem:LogicProblem, interpretation:PartialInterpretation,
39172 typeInterpretation:PartialComplexTypeInterpretation)
39173{
39174 find interpretation(problem,interpretation);
39175 neg find hasElementInContainment(problem,interpretation);
39176 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
39177 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EOperation class");
39178 find mayInstanceOfEOperation_class(problem,interpretation,newObject);
39179 find mayExist(problem, interpretation, newObject);
39180 neg find mustExist(problem, interpretation, newObject);
39181}
39182pattern createObject_ETypeParameter_class_by_eTypeParameters_reference_EClassifier(
39183 problem:LogicProblem, interpretation:PartialInterpretation,
39184 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
39185 container:DefinedElement)
39186{
39187 find interpretation(problem,interpretation);
39188 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
39189 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"ETypeParameter class");
39190 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
39191 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eTypeParameters reference EClassifier");
39192 find mustInstanceOfEClassifier_class(problem,interpretation,container);
39193 find mayInstanceOfETypeParameter_class(problem,interpretation,newObject);
39194 find mayInRelationeTypeParameters_reference_EClassifier(problem,interpretation,container,newObject);
39195 find mustExist(problem, interpretation, container);
39196 neg find mustExist(problem, interpretation, newObject);
39197}
39198pattern createObject_ETypeParameter_class_by_eTypeParameters_reference_EOperation(
39199 problem:LogicProblem, interpretation:PartialInterpretation,
39200 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
39201 container:DefinedElement)
39202{
39203 find interpretation(problem,interpretation);
39204 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
39205 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"ETypeParameter class");
39206 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
39207 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eTypeParameters reference EOperation");
39208 find mustInstanceOfEOperation_class(problem,interpretation,container);
39209 find mayInstanceOfETypeParameter_class(problem,interpretation,newObject);
39210 find mayInRelationeTypeParameters_reference_EOperation(problem,interpretation,container,newObject);
39211 find mustExist(problem, interpretation, container);
39212 neg find mustExist(problem, interpretation, newObject);
39213}
39214pattern createObject_ETypeParameter_class(
39215 problem:LogicProblem, interpretation:PartialInterpretation,
39216 typeInterpretation:PartialComplexTypeInterpretation)
39217{
39218 find interpretation(problem,interpretation);
39219 neg find hasElementInContainment(problem,interpretation);
39220 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
39221 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"ETypeParameter class");
39222 find mayInstanceOfETypeParameter_class(problem,interpretation,newObject);
39223 find mayExist(problem, interpretation, newObject);
39224 neg find mustExist(problem, interpretation, newObject);
39225}
39226pattern createObject_EPackage_class_UndefinedPart_by_eSubpackages_reference_EPackage_with_eSuperPackage_reference_EPackage(
39227 problem:LogicProblem, interpretation:PartialInterpretation,
39228 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
39229 container:DefinedElement)
39230{
39231 find interpretation(problem,interpretation);
39232 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
39233 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EPackage class UndefinedPart");
39234 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
39235 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eSubpackages reference EPackage");
39236 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
39237 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eSuperPackage reference EPackage");
39238 find mustInstanceOfEPackage_class(problem,interpretation,container);
39239 find mayInstanceOfEPackage_class_UndefinedPart(problem,interpretation,newObject);
39240 find mayInRelationeSubpackages_reference_EPackage(problem,interpretation,container,newObject);
39241 find mustExist(problem, interpretation, container);
39242 neg find mustExist(problem, interpretation, newObject);
39243}
39244pattern createObject_EPackage_class_UndefinedPart(
39245 problem:LogicProblem, interpretation:PartialInterpretation,
39246 typeInterpretation:PartialComplexTypeInterpretation)
39247{
39248 find interpretation(problem,interpretation);
39249 neg find hasElementInContainment(problem,interpretation);
39250 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
39251 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EPackage class UndefinedPart");
39252 find mayInstanceOfEPackage_class_UndefinedPart(problem,interpretation,newObject);
39253 find mayExist(problem, interpretation, newObject);
39254 neg find mustExist(problem, interpretation, newObject);
39255}
39256pattern createObject_EStringToStringMapEntry_class_by_details_reference_EAnnotation(
39257 problem:LogicProblem, interpretation:PartialInterpretation,
39258 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
39259 container:DefinedElement)
39260{
39261 find interpretation(problem,interpretation);
39262 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
39263 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EStringToStringMapEntry class");
39264 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
39265 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"details reference EAnnotation");
39266 find mustInstanceOfEAnnotation_class(problem,interpretation,container);
39267 find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,newObject);
39268 find mayInRelationdetails_reference_EAnnotation(problem,interpretation,container,newObject);
39269 find mustExist(problem, interpretation, container);
39270 neg find mustExist(problem, interpretation, newObject);
39271}
39272pattern createObject_EStringToStringMapEntry_class(
39273 problem:LogicProblem, interpretation:PartialInterpretation,
39274 typeInterpretation:PartialComplexTypeInterpretation)
39275{
39276 find interpretation(problem,interpretation);
39277 neg find hasElementInContainment(problem,interpretation);
39278 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
39279 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EStringToStringMapEntry class");
39280 find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,newObject);
39281 find mayExist(problem, interpretation, newObject);
39282 neg find mustExist(problem, interpretation, newObject);
39283}
39284pattern createObject_EObject_class_by_contents_reference_EAnnotation(
39285 problem:LogicProblem, interpretation:PartialInterpretation,
39286 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
39287 container:DefinedElement)
39288{
39289 find interpretation(problem,interpretation);
39290 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
39291 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EObject class");
39292 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
39293 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"contents reference EAnnotation");
39294 find mustInstanceOfEAnnotation_class(problem,interpretation,container);
39295 find mayInstanceOfEObject_class(problem,interpretation,newObject);
39296 find mayInRelationcontents_reference_EAnnotation(problem,interpretation,container,newObject);
39297 find mustExist(problem, interpretation, container);
39298 neg find mustExist(problem, interpretation, newObject);
39299}
39300pattern createObject_EObject_class(
39301 problem:LogicProblem, interpretation:PartialInterpretation,
39302 typeInterpretation:PartialComplexTypeInterpretation)
39303{
39304 find interpretation(problem,interpretation);
39305 neg find hasElementInContainment(problem,interpretation);
39306 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
39307 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EObject class");
39308 find mayInstanceOfEObject_class(problem,interpretation,newObject);
39309 find mayExist(problem, interpretation, newObject);
39310 neg find mustExist(problem, interpretation, newObject);
39311}
39312pattern createObject_EGenericType_class_by_eGenericSuperTypes_reference_EClass(
39313 problem:LogicProblem, interpretation:PartialInterpretation,
39314 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
39315 container:DefinedElement)
39316{
39317 find interpretation(problem,interpretation);
39318 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
39319 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class");
39320 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
39321 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eGenericSuperTypes reference EClass");
39322 find mustInstanceOfEClass_class(problem,interpretation,container);
39323 find mayInstanceOfEGenericType_class(problem,interpretation,newObject);
39324 find mayInRelationeGenericSuperTypes_reference_EClass(problem,interpretation,container,newObject);
39325 find mustExist(problem, interpretation, container);
39326 neg find mustExist(problem, interpretation, newObject);
39327}
39328pattern createObject_EGenericType_class_by_eGenericExceptions_reference_EOperation(
39329 problem:LogicProblem, interpretation:PartialInterpretation,
39330 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
39331 container:DefinedElement)
39332{
39333 find interpretation(problem,interpretation);
39334 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
39335 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class");
39336 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
39337 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eGenericExceptions reference EOperation");
39338 find mustInstanceOfEOperation_class(problem,interpretation,container);
39339 find mayInstanceOfEGenericType_class(problem,interpretation,newObject);
39340 find mayInRelationeGenericExceptions_reference_EOperation(problem,interpretation,container,newObject);
39341 find mustExist(problem, interpretation, container);
39342 neg find mustExist(problem, interpretation, newObject);
39343}
39344pattern createObject_EGenericType_class_by_eGenericType_reference_ETypedElement(
39345 problem:LogicProblem, interpretation:PartialInterpretation,
39346 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
39347 container:DefinedElement)
39348{
39349 find interpretation(problem,interpretation);
39350 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
39351 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class");
39352 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
39353 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eGenericType reference ETypedElement");
39354 find mustInstanceOfETypedElement_class(problem,interpretation,container);
39355 find mayInstanceOfEGenericType_class(problem,interpretation,newObject);
39356 find mayInRelationeGenericType_reference_ETypedElement(problem,interpretation,container,newObject);
39357 find mustExist(problem, interpretation, container);
39358 neg find mustExist(problem, interpretation, newObject);
39359}
39360pattern createObject_EGenericType_class_by_eUpperBound_reference_EGenericType(
39361 problem:LogicProblem, interpretation:PartialInterpretation,
39362 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
39363 container:DefinedElement)
39364{
39365 find interpretation(problem,interpretation);
39366 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
39367 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class");
39368 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
39369 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eUpperBound reference EGenericType");
39370 find mustInstanceOfEGenericType_class(problem,interpretation,container);
39371 find mayInstanceOfEGenericType_class(problem,interpretation,newObject);
39372 find mayInRelationeUpperBound_reference_EGenericType(problem,interpretation,container,newObject);
39373 find mustExist(problem, interpretation, container);
39374 neg find mustExist(problem, interpretation, newObject);
39375}
39376pattern createObject_EGenericType_class_by_eTypeArguments_reference_EGenericType(
39377 problem:LogicProblem, interpretation:PartialInterpretation,
39378 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
39379 container:DefinedElement)
39380{
39381 find interpretation(problem,interpretation);
39382 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
39383 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class");
39384 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
39385 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eTypeArguments reference EGenericType");
39386 find mustInstanceOfEGenericType_class(problem,interpretation,container);
39387 find mayInstanceOfEGenericType_class(problem,interpretation,newObject);
39388 find mayInRelationeTypeArguments_reference_EGenericType(problem,interpretation,container,newObject);
39389 find mustExist(problem, interpretation, container);
39390 neg find mustExist(problem, interpretation, newObject);
39391}
39392pattern createObject_EGenericType_class_by_eLowerBound_reference_EGenericType(
39393 problem:LogicProblem, interpretation:PartialInterpretation,
39394 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
39395 container:DefinedElement)
39396{
39397 find interpretation(problem,interpretation);
39398 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
39399 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class");
39400 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
39401 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eLowerBound reference EGenericType");
39402 find mustInstanceOfEGenericType_class(problem,interpretation,container);
39403 find mayInstanceOfEGenericType_class(problem,interpretation,newObject);
39404 find mayInRelationeLowerBound_reference_EGenericType(problem,interpretation,container,newObject);
39405 find mustExist(problem, interpretation, container);
39406 neg find mustExist(problem, interpretation, newObject);
39407}
39408pattern createObject_EGenericType_class_by_eBounds_reference_ETypeParameter(
39409 problem:LogicProblem, interpretation:PartialInterpretation,
39410 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
39411 container:DefinedElement)
39412{
39413 find interpretation(problem,interpretation);
39414 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
39415 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class");
39416 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
39417 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eBounds reference ETypeParameter");
39418 find mustInstanceOfETypeParameter_class(problem,interpretation,container);
39419 find mayInstanceOfEGenericType_class(problem,interpretation,newObject);
39420 find mayInRelationeBounds_reference_ETypeParameter(problem,interpretation,container,newObject);
39421 find mustExist(problem, interpretation, container);
39422 neg find mustExist(problem, interpretation, newObject);
39423}
39424pattern createObject_EGenericType_class(
39425 problem:LogicProblem, interpretation:PartialInterpretation,
39426 typeInterpretation:PartialComplexTypeInterpretation)
39427{
39428 find interpretation(problem,interpretation);
39429 neg find hasElementInContainment(problem,interpretation);
39430 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
39431 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class");
39432 find mayInstanceOfEGenericType_class(problem,interpretation,newObject);
39433 find mayExist(problem, interpretation, newObject);
39434 neg find mustExist(problem, interpretation, newObject);
39435}
39436pattern createObject_EParameter_class_by_eParameters_reference_EOperation_with_eOperation_reference_EParameter(
39437 problem:LogicProblem, interpretation:PartialInterpretation,
39438 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
39439 container:DefinedElement)
39440{
39441 find interpretation(problem,interpretation);
39442 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
39443 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EParameter class");
39444 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
39445 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eParameters reference EOperation");
39446 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
39447 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eOperation reference EParameter");
39448 find mustInstanceOfEOperation_class(problem,interpretation,container);
39449 find mayInstanceOfEParameter_class(problem,interpretation,newObject);
39450 find mayInRelationeParameters_reference_EOperation(problem,interpretation,container,newObject);
39451 find mustExist(problem, interpretation, container);
39452 neg find mustExist(problem, interpretation, newObject);
39453}
39454pattern createObject_EParameter_class(
39455 problem:LogicProblem, interpretation:PartialInterpretation,
39456 typeInterpretation:PartialComplexTypeInterpretation)
39457{
39458 find interpretation(problem,interpretation);
39459 neg find hasElementInContainment(problem,interpretation);
39460 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
39461 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EParameter class");
39462 find mayInstanceOfEParameter_class(problem,interpretation,newObject);
39463 find mayExist(problem, interpretation, newObject);
39464 neg find mustExist(problem, interpretation, newObject);
39465}
39466pattern createObject_EAttribute_class_by_eStructuralFeatures_reference_EClass_with_eContainingClass_reference_EStructuralFeature(
39467 problem:LogicProblem, interpretation:PartialInterpretation,
39468 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
39469 container:DefinedElement)
39470{
39471 find interpretation(problem,interpretation);
39472 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
39473 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EAttribute class");
39474 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
39475 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eStructuralFeatures reference EClass");
39476 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
39477 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eContainingClass reference EStructuralFeature");
39478 find mustInstanceOfEClass_class(problem,interpretation,container);
39479 find mayInstanceOfEAttribute_class(problem,interpretation,newObject);
39480 find mayInRelationeStructuralFeatures_reference_EClass(problem,interpretation,container,newObject);
39481 find mustExist(problem, interpretation, container);
39482 neg find mustExist(problem, interpretation, newObject);
39483}
39484pattern createObject_EAttribute_class(
39485 problem:LogicProblem, interpretation:PartialInterpretation,
39486 typeInterpretation:PartialComplexTypeInterpretation)
39487{
39488 find interpretation(problem,interpretation);
39489 neg find hasElementInContainment(problem,interpretation);
39490 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
39491 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EAttribute class");
39492 find mayInstanceOfEAttribute_class(problem,interpretation,newObject);
39493 find mayExist(problem, interpretation, newObject);
39494 neg find mustExist(problem, interpretation, newObject);
39495}
39496pattern createObject_EEnumLiteral_class_by_eLiterals_reference_EEnum_with_eEnum_reference_EEnumLiteral(
39497 problem:LogicProblem, interpretation:PartialInterpretation,
39498 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
39499 container:DefinedElement)
39500{
39501 find interpretation(problem,interpretation);
39502 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
39503 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EEnumLiteral class");
39504 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
39505 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eLiterals reference EEnum");
39506 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
39507 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eEnum reference EEnumLiteral");
39508 find mustInstanceOfEEnum_class(problem,interpretation,container);
39509 find mayInstanceOfEEnumLiteral_class(problem,interpretation,newObject);
39510 find mayInRelationeLiterals_reference_EEnum(problem,interpretation,container,newObject);
39511 find mustExist(problem, interpretation, container);
39512 neg find mustExist(problem, interpretation, newObject);
39513}
39514pattern createObject_EEnumLiteral_class(
39515 problem:LogicProblem, interpretation:PartialInterpretation,
39516 typeInterpretation:PartialComplexTypeInterpretation)
39517{
39518 find interpretation(problem,interpretation);
39519 neg find hasElementInContainment(problem,interpretation);
39520 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
39521 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EEnumLiteral class");
39522 find mayInstanceOfEEnumLiteral_class(problem,interpretation,newObject);
39523 find mayExist(problem, interpretation, newObject);
39524 neg find mustExist(problem, interpretation, newObject);
39525}
39526pattern createObject_EDataType_class_by_eClassifiers_reference_EPackage_with_ePackage_reference_EClassifier(
39527 problem:LogicProblem, interpretation:PartialInterpretation,
39528 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
39529 container:DefinedElement)
39530{
39531 find interpretation(problem,interpretation);
39532 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
39533 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EDataType class");
39534 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
39535 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eClassifiers reference EPackage");
39536 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
39537 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"ePackage reference EClassifier");
39538 find mustInstanceOfEPackage_class(problem,interpretation,container);
39539 find mayInstanceOfEDataType_class(problem,interpretation,newObject);
39540 find mayInRelationeClassifiers_reference_EPackage(problem,interpretation,container,newObject);
39541 find mustExist(problem, interpretation, container);
39542 neg find mustExist(problem, interpretation, newObject);
39543}
39544pattern createObject_EDataType_class(
39545 problem:LogicProblem, interpretation:PartialInterpretation,
39546 typeInterpretation:PartialComplexTypeInterpretation)
39547{
39548 find interpretation(problem,interpretation);
39549 neg find hasElementInContainment(problem,interpretation);
39550 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
39551 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EDataType class");
39552 find mayInstanceOfEDataType_class(problem,interpretation,newObject);
39553 find mayExist(problem, interpretation, newObject);
39554 neg find mustExist(problem, interpretation, newObject);
39555}
39556
39557//////////
39558// 4.2 Type refinement
39559//////////
39560pattern refineTypeTo_EAnnotation_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
39561 find interpretation(problem,interpretation);
39562 PartialInterpretation.newElements(interpretation,element);
39563 find mayInstanceOfEAnnotation_class(problem,interpretation,element);
39564 neg find mustInstanceOfEObject_class(problem,interpretation,element);
39565 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
39566 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
39567 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
39568 neg find mustInstanceOfENamedElement_class(problem,interpretation,element);
39569}
39570pattern refineTypeTo_EClass_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
39571 find interpretation(problem,interpretation);
39572 PartialInterpretation.newElements(interpretation,element);
39573 find mayInstanceOfEClass_class(problem,interpretation,element);
39574 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
39575 neg find mustInstanceOfEObject_class(problem,interpretation,element);
39576 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
39577 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
39578 neg find mustInstanceOfEClass_class(problem,interpretation,element);
39579 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
39580 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
39581 neg find mustInstanceOfEDataType_class(problem,interpretation,element);
39582 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
39583 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
39584}
39585pattern refineTypeTo_EEnum_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
39586 find interpretation(problem,interpretation);
39587 PartialInterpretation.newElements(interpretation,element);
39588 find mayInstanceOfEEnum_class(problem,interpretation,element);
39589 neg find mustInstanceOfEObject_class(problem,interpretation,element);
39590 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
39591 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
39592 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
39593 neg find mustInstanceOfEClass_class(problem,interpretation,element);
39594 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
39595 neg find mustInstanceOfEEnum_class(problem,interpretation,element);
39596 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
39597 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
39598 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
39599}
39600pattern refineTypeTo_EReference_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
39601 find interpretation(problem,interpretation);
39602 PartialInterpretation.newElements(interpretation,element);
39603 find mayInstanceOfEReference_class(problem,interpretation,element);
39604 neg find mustInstanceOfEObject_class(problem,interpretation,element);
39605 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
39606 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
39607 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
39608 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
39609 neg find mustInstanceOfEAttribute_class(problem,interpretation,element);
39610 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
39611 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
39612 neg find mustInstanceOfEReference_class(problem,interpretation,element);
39613 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
39614 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
39615 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
39616}
39617pattern refineTypeTo_EOperation_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
39618 find interpretation(problem,interpretation);
39619 PartialInterpretation.newElements(interpretation,element);
39620 find mayInstanceOfEOperation_class(problem,interpretation,element);
39621 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
39622 neg find mustInstanceOfEObject_class(problem,interpretation,element);
39623 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
39624 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
39625 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
39626 neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element);
39627 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
39628 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
39629 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
39630 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
39631 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
39632}
39633pattern refineTypeTo_ETypeParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
39634 find interpretation(problem,interpretation);
39635 PartialInterpretation.newElements(interpretation,element);
39636 find mayInstanceOfETypeParameter_class(problem,interpretation,element);
39637 neg find mustInstanceOfEObject_class(problem,interpretation,element);
39638 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
39639 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
39640 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
39641 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
39642 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
39643 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
39644 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
39645 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
39646}
39647pattern refineTypeTo_EPackage_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
39648 find interpretation(problem,interpretation);
39649 PartialInterpretation.newElements(interpretation,element);
39650 find mayInstanceOfEPackage_class_UndefinedPart(problem,interpretation,element);
39651 neg find mustInstanceOfEPackage_class_UndefinedPart(problem,interpretation,element);
39652 neg find mustInstanceOfEObject_class(problem,interpretation,element);
39653 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
39654 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
39655 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
39656 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
39657 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
39658 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
39659 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
39660}
39661pattern refineTypeTo_EStringToStringMapEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
39662 find interpretation(problem,interpretation);
39663 PartialInterpretation.newElements(interpretation,element);
39664 find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
39665 neg find mustInstanceOfEObject_class(problem,interpretation,element);
39666 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
39667 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
39668 neg find mustInstanceOfEModelElement_class(problem,interpretation,element);
39669}
39670pattern refineTypeTo_EObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
39671 find interpretation(problem,interpretation);
39672 PartialInterpretation.newElements(interpretation,element);
39673 find mayInstanceOfEObject_class(problem,interpretation,element);
39674 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
39675 neg find mustInstanceOfEObject_class(problem,interpretation,element);
39676 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
39677 neg find mustInstanceOfEModelElement_class(problem,interpretation,element);
39678}
39679pattern refineTypeTo_EGenericType_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
39680 find interpretation(problem,interpretation);
39681 PartialInterpretation.newElements(interpretation,element);
39682 find mayInstanceOfEGenericType_class(problem,interpretation,element);
39683 neg find mustInstanceOfEObject_class(problem,interpretation,element);
39684 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
39685 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
39686 neg find mustInstanceOfEModelElement_class(problem,interpretation,element);
39687}
39688pattern refineTypeTo_EParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
39689 find interpretation(problem,interpretation);
39690 PartialInterpretation.newElements(interpretation,element);
39691 find mayInstanceOfEParameter_class(problem,interpretation,element);
39692 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
39693 neg find mustInstanceOfEObject_class(problem,interpretation,element);
39694 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
39695 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
39696 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
39697 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
39698 neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element);
39699 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
39700 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
39701 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
39702 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
39703}
39704pattern refineTypeTo_EAttribute_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
39705 find interpretation(problem,interpretation);
39706 PartialInterpretation.newElements(interpretation,element);
39707 find mayInstanceOfEAttribute_class(problem,interpretation,element);
39708 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
39709 neg find mustInstanceOfEObject_class(problem,interpretation,element);
39710 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
39711 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
39712 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
39713 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
39714 neg find mustInstanceOfEAttribute_class(problem,interpretation,element);
39715 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
39716 neg find mustInstanceOfEReference_class(problem,interpretation,element);
39717 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
39718 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
39719 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
39720}
39721pattern refineTypeTo_EEnumLiteral_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
39722 find interpretation(problem,interpretation);
39723 PartialInterpretation.newElements(interpretation,element);
39724 find mayInstanceOfEEnumLiteral_class(problem,interpretation,element);
39725 neg find mustInstanceOfEObject_class(problem,interpretation,element);
39726 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
39727 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
39728 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
39729 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
39730 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
39731 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
39732 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
39733 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
39734}
39735pattern refineTypeTo_EDataType_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
39736 find interpretation(problem,interpretation);
39737 PartialInterpretation.newElements(interpretation,element);
39738 find mayInstanceOfEDataType_class(problem,interpretation,element);
39739 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
39740 neg find mustInstanceOfEObject_class(problem,interpretation,element);
39741 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
39742 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
39743 neg find mustInstanceOfEClass_class(problem,interpretation,element);
39744 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
39745 neg find mustInstanceOfEEnum_class(problem,interpretation,element);
39746 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
39747 neg find mustInstanceOfEDataType_class(problem,interpretation,element);
39748 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
39749 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
39750}
39751
39752//////////
39753// 4.3 Relation refinement
39754//////////
39755pattern refineRelation_eAttributeType_reference_EAttribute(
39756 problem:LogicProblem, interpretation:PartialInterpretation,
39757 relationIterpretation:PartialRelationInterpretation,
39758 from: DefinedElement, to: DefinedElement)
39759{
39760 find interpretation(problem,interpretation);
39761 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
39762 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributeType reference EAttribute");
39763 find mustExist(problem, interpretation, from);
39764 find mustExist(problem, interpretation, to);
39765 find mustInstanceOfEAttribute_class(problem,interpretation,from);
39766 find mustInstanceOfEDataType_class(problem,interpretation,to);
39767 find mayInRelationeAttributeType_reference_EAttribute(problem,interpretation,from,to);
39768 neg find mustInRelationeAttributeType_reference_EAttribute(problem,interpretation,from,to);
39769}
39770pattern refineRelation_references_reference_EAnnotation(
39771 problem:LogicProblem, interpretation:PartialInterpretation,
39772 relationIterpretation:PartialRelationInterpretation,
39773 from: DefinedElement, to: DefinedElement)
39774{
39775 find interpretation(problem,interpretation);
39776 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
39777 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"references reference EAnnotation");
39778 find mustExist(problem, interpretation, from);
39779 find mustExist(problem, interpretation, to);
39780 find mustInstanceOfEAnnotation_class(problem,interpretation,from);
39781 find mustInstanceOfEObject_class(problem,interpretation,to);
39782 find mayInRelationreferences_reference_EAnnotation(problem,interpretation,from,to);
39783 neg find mustInRelationreferences_reference_EAnnotation(problem,interpretation,from,to);
39784}
39785pattern refineRelation_eSuperTypes_reference_EClass(
39786 problem:LogicProblem, interpretation:PartialInterpretation,
39787 relationIterpretation:PartialRelationInterpretation,
39788 from: DefinedElement, to: DefinedElement)
39789{
39790 find interpretation(problem,interpretation);
39791 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
39792 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eSuperTypes reference EClass");
39793 find mustExist(problem, interpretation, from);
39794 find mustExist(problem, interpretation, to);
39795 find mustInstanceOfEClass_class(problem,interpretation,from);
39796 find mustInstanceOfEClass_class(problem,interpretation,to);
39797 find mayInRelationeSuperTypes_reference_EClass(problem,interpretation,from,to);
39798 neg find mustInRelationeSuperTypes_reference_EClass(problem,interpretation,from,to);
39799}
39800pattern refineRelation_eAllAttributes_reference_EClass(
39801 problem:LogicProblem, interpretation:PartialInterpretation,
39802 relationIterpretation:PartialRelationInterpretation,
39803 from: DefinedElement, to: DefinedElement)
39804{
39805 find interpretation(problem,interpretation);
39806 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
39807 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllAttributes reference EClass");
39808 find mustExist(problem, interpretation, from);
39809 find mustExist(problem, interpretation, to);
39810 find mustInstanceOfEClass_class(problem,interpretation,from);
39811 find mustInstanceOfEAttribute_class(problem,interpretation,to);
39812 find mayInRelationeAllAttributes_reference_EClass(problem,interpretation,from,to);
39813 neg find mustInRelationeAllAttributes_reference_EClass(problem,interpretation,from,to);
39814}
39815pattern refineRelation_eAllReferences_reference_EClass(
39816 problem:LogicProblem, interpretation:PartialInterpretation,
39817 relationIterpretation:PartialRelationInterpretation,
39818 from: DefinedElement, to: DefinedElement)
39819{
39820 find interpretation(problem,interpretation);
39821 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
39822 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllReferences reference EClass");
39823 find mustExist(problem, interpretation, from);
39824 find mustExist(problem, interpretation, to);
39825 find mustInstanceOfEClass_class(problem,interpretation,from);
39826 find mustInstanceOfEReference_class(problem,interpretation,to);
39827 find mayInRelationeAllReferences_reference_EClass(problem,interpretation,from,to);
39828 neg find mustInRelationeAllReferences_reference_EClass(problem,interpretation,from,to);
39829}
39830pattern refineRelation_eReferences_reference_EClass(
39831 problem:LogicProblem, interpretation:PartialInterpretation,
39832 relationIterpretation:PartialRelationInterpretation,
39833 from: DefinedElement, to: DefinedElement)
39834{
39835 find interpretation(problem,interpretation);
39836 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
39837 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferences reference EClass");
39838 find mustExist(problem, interpretation, from);
39839 find mustExist(problem, interpretation, to);
39840 find mustInstanceOfEClass_class(problem,interpretation,from);
39841 find mustInstanceOfEReference_class(problem,interpretation,to);
39842 find mayInRelationeReferences_reference_EClass(problem,interpretation,from,to);
39843 neg find mustInRelationeReferences_reference_EClass(problem,interpretation,from,to);
39844}
39845pattern refineRelation_eAttributes_reference_EClass(
39846 problem:LogicProblem, interpretation:PartialInterpretation,
39847 relationIterpretation:PartialRelationInterpretation,
39848 from: DefinedElement, to: DefinedElement)
39849{
39850 find interpretation(problem,interpretation);
39851 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
39852 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributes reference EClass");
39853 find mustExist(problem, interpretation, from);
39854 find mustExist(problem, interpretation, to);
39855 find mustInstanceOfEClass_class(problem,interpretation,from);
39856 find mustInstanceOfEAttribute_class(problem,interpretation,to);
39857 find mayInRelationeAttributes_reference_EClass(problem,interpretation,from,to);
39858 neg find mustInRelationeAttributes_reference_EClass(problem,interpretation,from,to);
39859}
39860pattern refineRelation_eAllContainments_reference_EClass(
39861 problem:LogicProblem, interpretation:PartialInterpretation,
39862 relationIterpretation:PartialRelationInterpretation,
39863 from: DefinedElement, to: DefinedElement)
39864{
39865 find interpretation(problem,interpretation);
39866 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
39867 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllContainments reference EClass");
39868 find mustExist(problem, interpretation, from);
39869 find mustExist(problem, interpretation, to);
39870 find mustInstanceOfEClass_class(problem,interpretation,from);
39871 find mustInstanceOfEReference_class(problem,interpretation,to);
39872 find mayInRelationeAllContainments_reference_EClass(problem,interpretation,from,to);
39873 neg find mustInRelationeAllContainments_reference_EClass(problem,interpretation,from,to);
39874}
39875pattern refineRelation_eAllOperations_reference_EClass(
39876 problem:LogicProblem, interpretation:PartialInterpretation,
39877 relationIterpretation:PartialRelationInterpretation,
39878 from: DefinedElement, to: DefinedElement)
39879{
39880 find interpretation(problem,interpretation);
39881 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
39882 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllOperations reference EClass");
39883 find mustExist(problem, interpretation, from);
39884 find mustExist(problem, interpretation, to);
39885 find mustInstanceOfEClass_class(problem,interpretation,from);
39886 find mustInstanceOfEOperation_class(problem,interpretation,to);
39887 find mayInRelationeAllOperations_reference_EClass(problem,interpretation,from,to);
39888 neg find mustInRelationeAllOperations_reference_EClass(problem,interpretation,from,to);
39889}
39890pattern refineRelation_eAllStructuralFeatures_reference_EClass(
39891 problem:LogicProblem, interpretation:PartialInterpretation,
39892 relationIterpretation:PartialRelationInterpretation,
39893 from: DefinedElement, to: DefinedElement)
39894{
39895 find interpretation(problem,interpretation);
39896 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
39897 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllStructuralFeatures reference EClass");
39898 find mustExist(problem, interpretation, from);
39899 find mustExist(problem, interpretation, to);
39900 find mustInstanceOfEClass_class(problem,interpretation,from);
39901 find mustInstanceOfEStructuralFeature_class(problem,interpretation,to);
39902 find mayInRelationeAllStructuralFeatures_reference_EClass(problem,interpretation,from,to);
39903 neg find mustInRelationeAllStructuralFeatures_reference_EClass(problem,interpretation,from,to);
39904}
39905pattern refineRelation_eAllSuperTypes_reference_EClass(
39906 problem:LogicProblem, interpretation:PartialInterpretation,
39907 relationIterpretation:PartialRelationInterpretation,
39908 from: DefinedElement, to: DefinedElement)
39909{
39910 find interpretation(problem,interpretation);
39911 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
39912 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllSuperTypes reference EClass");
39913 find mustExist(problem, interpretation, from);
39914 find mustExist(problem, interpretation, to);
39915 find mustInstanceOfEClass_class(problem,interpretation,from);
39916 find mustInstanceOfEClass_class(problem,interpretation,to);
39917 find mayInRelationeAllSuperTypes_reference_EClass(problem,interpretation,from,to);
39918 neg find mustInRelationeAllSuperTypes_reference_EClass(problem,interpretation,from,to);
39919}
39920pattern refineRelation_eIDAttribute_reference_EClass(
39921 problem:LogicProblem, interpretation:PartialInterpretation,
39922 relationIterpretation:PartialRelationInterpretation,
39923 from: DefinedElement, to: DefinedElement)
39924{
39925 find interpretation(problem,interpretation);
39926 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
39927 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eIDAttribute reference EClass");
39928 find mustExist(problem, interpretation, from);
39929 find mustExist(problem, interpretation, to);
39930 find mustInstanceOfEClass_class(problem,interpretation,from);
39931 find mustInstanceOfEAttribute_class(problem,interpretation,to);
39932 find mayInRelationeIDAttribute_reference_EClass(problem,interpretation,from,to);
39933 neg find mustInRelationeIDAttribute_reference_EClass(problem,interpretation,from,to);
39934}
39935pattern refineRelation_eAllGenericSuperTypes_reference_EClass(
39936 problem:LogicProblem, interpretation:PartialInterpretation,
39937 relationIterpretation:PartialRelationInterpretation,
39938 from: DefinedElement, to: DefinedElement)
39939{
39940 find interpretation(problem,interpretation);
39941 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
39942 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllGenericSuperTypes reference EClass");
39943 find mustExist(problem, interpretation, from);
39944 find mustExist(problem, interpretation, to);
39945 find mustInstanceOfEClass_class(problem,interpretation,from);
39946 find mustInstanceOfEGenericType_class(problem,interpretation,to);
39947 find mayInRelationeAllGenericSuperTypes_reference_EClass(problem,interpretation,from,to);
39948 neg find mustInRelationeAllGenericSuperTypes_reference_EClass(problem,interpretation,from,to);
39949}
39950pattern refineRelation_eExceptions_reference_EOperation(
39951 problem:LogicProblem, interpretation:PartialInterpretation,
39952 relationIterpretation:PartialRelationInterpretation,
39953 from: DefinedElement, to: DefinedElement)
39954{
39955 find interpretation(problem,interpretation);
39956 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
39957 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eExceptions reference EOperation");
39958 find mustExist(problem, interpretation, from);
39959 find mustExist(problem, interpretation, to);
39960 find mustInstanceOfEOperation_class(problem,interpretation,from);
39961 find mustInstanceOfEClassifier_class(problem,interpretation,to);
39962 find mayInRelationeExceptions_reference_EOperation(problem,interpretation,from,to);
39963 neg find mustInRelationeExceptions_reference_EOperation(problem,interpretation,from,to);
39964}
39965pattern refineRelation_eOpposite_reference_EReference(
39966 problem:LogicProblem, interpretation:PartialInterpretation,
39967 relationIterpretation:PartialRelationInterpretation,
39968 from: DefinedElement, to: DefinedElement)
39969{
39970 find interpretation(problem,interpretation);
39971 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
39972 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eOpposite reference EReference");
39973 find mustExist(problem, interpretation, from);
39974 find mustExist(problem, interpretation, to);
39975 find mustInstanceOfEReference_class(problem,interpretation,from);
39976 find mustInstanceOfEReference_class(problem,interpretation,to);
39977 find mayInRelationeOpposite_reference_EReference(problem,interpretation,from,to);
39978 neg find mustInRelationeOpposite_reference_EReference(problem,interpretation,from,to);
39979}
39980pattern refineRelation_eReferenceType_reference_EReference(
39981 problem:LogicProblem, interpretation:PartialInterpretation,
39982 relationIterpretation:PartialRelationInterpretation,
39983 from: DefinedElement, to: DefinedElement)
39984{
39985 find interpretation(problem,interpretation);
39986 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
39987 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferenceType reference EReference");
39988 find mustExist(problem, interpretation, from);
39989 find mustExist(problem, interpretation, to);
39990 find mustInstanceOfEReference_class(problem,interpretation,from);
39991 find mustInstanceOfEClass_class(problem,interpretation,to);
39992 find mayInRelationeReferenceType_reference_EReference(problem,interpretation,from,to);
39993 neg find mustInRelationeReferenceType_reference_EReference(problem,interpretation,from,to);
39994}
39995pattern refineRelation_eKeys_reference_EReference(
39996 problem:LogicProblem, interpretation:PartialInterpretation,
39997 relationIterpretation:PartialRelationInterpretation,
39998 from: DefinedElement, to: DefinedElement)
39999{
40000 find interpretation(problem,interpretation);
40001 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
40002 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eKeys reference EReference");
40003 find mustExist(problem, interpretation, from);
40004 find mustExist(problem, interpretation, to);
40005 find mustInstanceOfEReference_class(problem,interpretation,from);
40006 find mustInstanceOfEAttribute_class(problem,interpretation,to);
40007 find mayInRelationeKeys_reference_EReference(problem,interpretation,from,to);
40008 neg find mustInRelationeKeys_reference_EReference(problem,interpretation,from,to);
40009}
40010pattern refineRelation_eType_reference_ETypedElement(
40011 problem:LogicProblem, interpretation:PartialInterpretation,
40012 relationIterpretation:PartialRelationInterpretation,
40013 from: DefinedElement, to: DefinedElement)
40014{
40015 find interpretation(problem,interpretation);
40016 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
40017 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eType reference ETypedElement");
40018 find mustExist(problem, interpretation, from);
40019 find mustExist(problem, interpretation, to);
40020 find mustInstanceOfETypedElement_class(problem,interpretation,from);
40021 find mustInstanceOfEClassifier_class(problem,interpretation,to);
40022 find mayInRelationeType_reference_ETypedElement(problem,interpretation,from,to);
40023 neg find mustInRelationeType_reference_ETypedElement(problem,interpretation,from,to);
40024}
40025pattern refineRelation_eRawType_reference_EGenericType(
40026 problem:LogicProblem, interpretation:PartialInterpretation,
40027 relationIterpretation:PartialRelationInterpretation,
40028 from: DefinedElement, to: DefinedElement)
40029{
40030 find interpretation(problem,interpretation);
40031 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
40032 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eRawType reference EGenericType");
40033 find mustExist(problem, interpretation, from);
40034 find mustExist(problem, interpretation, to);
40035 find mustInstanceOfEGenericType_class(problem,interpretation,from);
40036 find mustInstanceOfEClassifier_class(problem,interpretation,to);
40037 find mayInRelationeRawType_reference_EGenericType(problem,interpretation,from,to);
40038 neg find mustInRelationeRawType_reference_EGenericType(problem,interpretation,from,to);
40039}
40040pattern refineRelation_eTypeParameter_reference_EGenericType(
40041 problem:LogicProblem, interpretation:PartialInterpretation,
40042 relationIterpretation:PartialRelationInterpretation,
40043 from: DefinedElement, to: DefinedElement)
40044{
40045 find interpretation(problem,interpretation);
40046 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
40047 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeParameter reference EGenericType");
40048 find mustExist(problem, interpretation, from);
40049 find mustExist(problem, interpretation, to);
40050 find mustInstanceOfEGenericType_class(problem,interpretation,from);
40051 find mustInstanceOfETypeParameter_class(problem,interpretation,to);
40052 find mayInRelationeTypeParameter_reference_EGenericType(problem,interpretation,from,to);
40053 neg find mustInRelationeTypeParameter_reference_EGenericType(problem,interpretation,from,to);
40054}
40055pattern refineRelation_eClassifier_reference_EGenericType(
40056 problem:LogicProblem, interpretation:PartialInterpretation,
40057 relationIterpretation:PartialRelationInterpretation,
40058 from: DefinedElement, to: DefinedElement)
40059{
40060 find interpretation(problem,interpretation);
40061 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
40062 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eClassifier reference EGenericType");
40063 find mustExist(problem, interpretation, from);
40064 find mustExist(problem, interpretation, to);
40065 find mustInstanceOfEGenericType_class(problem,interpretation,from);
40066 find mustInstanceOfEClassifier_class(problem,interpretation,to);
40067 find mayInRelationeClassifier_reference_EGenericType(problem,interpretation,from,to);
40068 neg find mustInRelationeClassifier_reference_EGenericType(problem,interpretation,from,to);
40069}
40070pattern refineRelation_iD_attribute_EAttribute(
40071 problem:LogicProblem, interpretation:PartialInterpretation,
40072 relationIterpretation:PartialRelationInterpretation,
40073 from: DefinedElement, to: DefinedElement)
40074{
40075 find interpretation(problem,interpretation);
40076 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
40077 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"iD attribute EAttribute");
40078 find mustExist(problem, interpretation, from);
40079 find mustExist(problem, interpretation, to);
40080 find mustInstanceOfEAttribute_class(problem,interpretation,from);
40081 BooleanElement(to);
40082 find mayInRelationiD_attribute_EAttribute(problem,interpretation,from,to);
40083 neg find mustInRelationiD_attribute_EAttribute(problem,interpretation,from,to);
40084}
40085pattern refineRelation_source_attribute_EAnnotation(
40086 problem:LogicProblem, interpretation:PartialInterpretation,
40087 relationIterpretation:PartialRelationInterpretation,
40088 from: DefinedElement, to: DefinedElement)
40089{
40090 find interpretation(problem,interpretation);
40091 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
40092 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"source attribute EAnnotation");
40093 find mustExist(problem, interpretation, from);
40094 find mustExist(problem, interpretation, to);
40095 find mustInstanceOfEAnnotation_class(problem,interpretation,from);
40096 StringElement(to);
40097 find mayInRelationsource_attribute_EAnnotation(problem,interpretation,from,to);
40098 neg find mustInRelationsource_attribute_EAnnotation(problem,interpretation,from,to);
40099}
40100pattern refineRelation_abstract_attribute_EClass(
40101 problem:LogicProblem, interpretation:PartialInterpretation,
40102 relationIterpretation:PartialRelationInterpretation,
40103 from: DefinedElement, to: DefinedElement)
40104{
40105 find interpretation(problem,interpretation);
40106 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
40107 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"abstract attribute EClass");
40108 find mustExist(problem, interpretation, from);
40109 find mustExist(problem, interpretation, to);
40110 find mustInstanceOfEClass_class(problem,interpretation,from);
40111 BooleanElement(to);
40112 find mayInRelationabstract_attribute_EClass(problem,interpretation,from,to);
40113 neg find mustInRelationabstract_attribute_EClass(problem,interpretation,from,to);
40114}
40115pattern refineRelation_interface_attribute_EClass(
40116 problem:LogicProblem, interpretation:PartialInterpretation,
40117 relationIterpretation:PartialRelationInterpretation,
40118 from: DefinedElement, to: DefinedElement)
40119{
40120 find interpretation(problem,interpretation);
40121 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
40122 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface attribute EClass");
40123 find mustExist(problem, interpretation, from);
40124 find mustExist(problem, interpretation, to);
40125 find mustInstanceOfEClass_class(problem,interpretation,from);
40126 BooleanElement(to);
40127 find mayInRelationinterface_attribute_EClass(problem,interpretation,from,to);
40128 neg find mustInRelationinterface_attribute_EClass(problem,interpretation,from,to);
40129}
40130pattern refineRelation_instanceClassName_attribute_EClassifier(
40131 problem:LogicProblem, interpretation:PartialInterpretation,
40132 relationIterpretation:PartialRelationInterpretation,
40133 from: DefinedElement, to: DefinedElement)
40134{
40135 find interpretation(problem,interpretation);
40136 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
40137 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"instanceClassName attribute EClassifier");
40138 find mustExist(problem, interpretation, from);
40139 find mustExist(problem, interpretation, to);
40140 find mustInstanceOfEClassifier_class(problem,interpretation,from);
40141 StringElement(to);
40142 find mayInRelationinstanceClassName_attribute_EClassifier(problem,interpretation,from,to);
40143 neg find mustInRelationinstanceClassName_attribute_EClassifier(problem,interpretation,from,to);
40144}
40145pattern refineRelation_instanceTypeName_attribute_EClassifier(
40146 problem:LogicProblem, interpretation:PartialInterpretation,
40147 relationIterpretation:PartialRelationInterpretation,
40148 from: DefinedElement, to: DefinedElement)
40149{
40150 find interpretation(problem,interpretation);
40151 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
40152 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"instanceTypeName attribute EClassifier");
40153 find mustExist(problem, interpretation, from);
40154 find mustExist(problem, interpretation, to);
40155 find mustInstanceOfEClassifier_class(problem,interpretation,from);
40156 StringElement(to);
40157 find mayInRelationinstanceTypeName_attribute_EClassifier(problem,interpretation,from,to);
40158 neg find mustInRelationinstanceTypeName_attribute_EClassifier(problem,interpretation,from,to);
40159}
40160pattern refineRelation_serializable_attribute_EDataType(
40161 problem:LogicProblem, interpretation:PartialInterpretation,
40162 relationIterpretation:PartialRelationInterpretation,
40163 from: DefinedElement, to: DefinedElement)
40164{
40165 find interpretation(problem,interpretation);
40166 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
40167 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"serializable attribute EDataType");
40168 find mustExist(problem, interpretation, from);
40169 find mustExist(problem, interpretation, to);
40170 find mustInstanceOfEDataType_class(problem,interpretation,from);
40171 BooleanElement(to);
40172 find mayInRelationserializable_attribute_EDataType(problem,interpretation,from,to);
40173 neg find mustInRelationserializable_attribute_EDataType(problem,interpretation,from,to);
40174}
40175pattern refineRelation_value_attribute_EEnumLiteral(
40176 problem:LogicProblem, interpretation:PartialInterpretation,
40177 relationIterpretation:PartialRelationInterpretation,
40178 from: DefinedElement, to: DefinedElement)
40179{
40180 find interpretation(problem,interpretation);
40181 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
40182 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"value attribute EEnumLiteral");
40183 find mustExist(problem, interpretation, from);
40184 find mustExist(problem, interpretation, to);
40185 find mustInstanceOfEEnumLiteral_class(problem,interpretation,from);
40186 IntegerElement(to);
40187 find mayInRelationvalue_attribute_EEnumLiteral(problem,interpretation,from,to);
40188 neg find mustInRelationvalue_attribute_EEnumLiteral(problem,interpretation,from,to);
40189}
40190pattern refineRelation_literal_attribute_EEnumLiteral(
40191 problem:LogicProblem, interpretation:PartialInterpretation,
40192 relationIterpretation:PartialRelationInterpretation,
40193 from: DefinedElement, to: DefinedElement)
40194{
40195 find interpretation(problem,interpretation);
40196 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
40197 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"literal attribute EEnumLiteral");
40198 find mustExist(problem, interpretation, from);
40199 find mustExist(problem, interpretation, to);
40200 find mustInstanceOfEEnumLiteral_class(problem,interpretation,from);
40201 StringElement(to);
40202 find mayInRelationliteral_attribute_EEnumLiteral(problem,interpretation,from,to);
40203 neg find mustInRelationliteral_attribute_EEnumLiteral(problem,interpretation,from,to);
40204}
40205pattern refineRelation_name_attribute_ENamedElement(
40206 problem:LogicProblem, interpretation:PartialInterpretation,
40207 relationIterpretation:PartialRelationInterpretation,
40208 from: DefinedElement, to: DefinedElement)
40209{
40210 find interpretation(problem,interpretation);
40211 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
40212 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"name attribute ENamedElement");
40213 find mustExist(problem, interpretation, from);
40214 find mustExist(problem, interpretation, to);
40215 find mustInstanceOfENamedElement_class(problem,interpretation,from);
40216 StringElement(to);
40217 find mayInRelationname_attribute_ENamedElement(problem,interpretation,from,to);
40218 neg find mustInRelationname_attribute_ENamedElement(problem,interpretation,from,to);
40219}
40220pattern refineRelation_nsURI_attribute_EPackage(
40221 problem:LogicProblem, interpretation:PartialInterpretation,
40222 relationIterpretation:PartialRelationInterpretation,
40223 from: DefinedElement, to: DefinedElement)
40224{
40225 find interpretation(problem,interpretation);
40226 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
40227 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"nsURI attribute EPackage");
40228 find mustExist(problem, interpretation, from);
40229 find mustExist(problem, interpretation, to);
40230 find mustInstanceOfEPackage_class(problem,interpretation,from);
40231 StringElement(to);
40232 find mayInRelationnsURI_attribute_EPackage(problem,interpretation,from,to);
40233 neg find mustInRelationnsURI_attribute_EPackage(problem,interpretation,from,to);
40234}
40235pattern refineRelation_nsPrefix_attribute_EPackage(
40236 problem:LogicProblem, interpretation:PartialInterpretation,
40237 relationIterpretation:PartialRelationInterpretation,
40238 from: DefinedElement, to: DefinedElement)
40239{
40240 find interpretation(problem,interpretation);
40241 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
40242 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"nsPrefix attribute EPackage");
40243 find mustExist(problem, interpretation, from);
40244 find mustExist(problem, interpretation, to);
40245 find mustInstanceOfEPackage_class(problem,interpretation,from);
40246 StringElement(to);
40247 find mayInRelationnsPrefix_attribute_EPackage(problem,interpretation,from,to);
40248 neg find mustInRelationnsPrefix_attribute_EPackage(problem,interpretation,from,to);
40249}
40250pattern refineRelation_containment_attribute_EReference(
40251 problem:LogicProblem, interpretation:PartialInterpretation,
40252 relationIterpretation:PartialRelationInterpretation,
40253 from: DefinedElement, to: DefinedElement)
40254{
40255 find interpretation(problem,interpretation);
40256 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
40257 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"containment attribute EReference");
40258 find mustExist(problem, interpretation, from);
40259 find mustExist(problem, interpretation, to);
40260 find mustInstanceOfEReference_class(problem,interpretation,from);
40261 BooleanElement(to);
40262 find mayInRelationcontainment_attribute_EReference(problem,interpretation,from,to);
40263 neg find mustInRelationcontainment_attribute_EReference(problem,interpretation,from,to);
40264}
40265pattern refineRelation_container_attribute_EReference(
40266 problem:LogicProblem, interpretation:PartialInterpretation,
40267 relationIterpretation:PartialRelationInterpretation,
40268 from: DefinedElement, to: DefinedElement)
40269{
40270 find interpretation(problem,interpretation);
40271 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
40272 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"container attribute EReference");
40273 find mustExist(problem, interpretation, from);
40274 find mustExist(problem, interpretation, to);
40275 find mustInstanceOfEReference_class(problem,interpretation,from);
40276 BooleanElement(to);
40277 find mayInRelationcontainer_attribute_EReference(problem,interpretation,from,to);
40278 neg find mustInRelationcontainer_attribute_EReference(problem,interpretation,from,to);
40279}
40280pattern refineRelation_resolveProxies_attribute_EReference(
40281 problem:LogicProblem, interpretation:PartialInterpretation,
40282 relationIterpretation:PartialRelationInterpretation,
40283 from: DefinedElement, to: DefinedElement)
40284{
40285 find interpretation(problem,interpretation);
40286 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
40287 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"resolveProxies attribute EReference");
40288 find mustExist(problem, interpretation, from);
40289 find mustExist(problem, interpretation, to);
40290 find mustInstanceOfEReference_class(problem,interpretation,from);
40291 BooleanElement(to);
40292 find mayInRelationresolveProxies_attribute_EReference(problem,interpretation,from,to);
40293 neg find mustInRelationresolveProxies_attribute_EReference(problem,interpretation,from,to);
40294}
40295pattern refineRelation_changeable_attribute_EStructuralFeature(
40296 problem:LogicProblem, interpretation:PartialInterpretation,
40297 relationIterpretation:PartialRelationInterpretation,
40298 from: DefinedElement, to: DefinedElement)
40299{
40300 find interpretation(problem,interpretation);
40301 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
40302 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"changeable attribute EStructuralFeature");
40303 find mustExist(problem, interpretation, from);
40304 find mustExist(problem, interpretation, to);
40305 find mustInstanceOfEStructuralFeature_class(problem,interpretation,from);
40306 BooleanElement(to);
40307 find mayInRelationchangeable_attribute_EStructuralFeature(problem,interpretation,from,to);
40308 neg find mustInRelationchangeable_attribute_EStructuralFeature(problem,interpretation,from,to);
40309}
40310pattern refineRelation_volatile_attribute_EStructuralFeature(
40311 problem:LogicProblem, interpretation:PartialInterpretation,
40312 relationIterpretation:PartialRelationInterpretation,
40313 from: DefinedElement, to: DefinedElement)
40314{
40315 find interpretation(problem,interpretation);
40316 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
40317 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"volatile attribute EStructuralFeature");
40318 find mustExist(problem, interpretation, from);
40319 find mustExist(problem, interpretation, to);
40320 find mustInstanceOfEStructuralFeature_class(problem,interpretation,from);
40321 BooleanElement(to);
40322 find mayInRelationvolatile_attribute_EStructuralFeature(problem,interpretation,from,to);
40323 neg find mustInRelationvolatile_attribute_EStructuralFeature(problem,interpretation,from,to);
40324}
40325pattern refineRelation_transient_attribute_EStructuralFeature(
40326 problem:LogicProblem, interpretation:PartialInterpretation,
40327 relationIterpretation:PartialRelationInterpretation,
40328 from: DefinedElement, to: DefinedElement)
40329{
40330 find interpretation(problem,interpretation);
40331 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
40332 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"transient attribute EStructuralFeature");
40333 find mustExist(problem, interpretation, from);
40334 find mustExist(problem, interpretation, to);
40335 find mustInstanceOfEStructuralFeature_class(problem,interpretation,from);
40336 BooleanElement(to);
40337 find mayInRelationtransient_attribute_EStructuralFeature(problem,interpretation,from,to);
40338 neg find mustInRelationtransient_attribute_EStructuralFeature(problem,interpretation,from,to);
40339}
40340pattern refineRelation_defaultValueLiteral_attribute_EStructuralFeature(
40341 problem:LogicProblem, interpretation:PartialInterpretation,
40342 relationIterpretation:PartialRelationInterpretation,
40343 from: DefinedElement, to: DefinedElement)
40344{
40345 find interpretation(problem,interpretation);
40346 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
40347 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"defaultValueLiteral attribute EStructuralFeature");
40348 find mustExist(problem, interpretation, from);
40349 find mustExist(problem, interpretation, to);
40350 find mustInstanceOfEStructuralFeature_class(problem,interpretation,from);
40351 StringElement(to);
40352 find mayInRelationdefaultValueLiteral_attribute_EStructuralFeature(problem,interpretation,from,to);
40353 neg find mustInRelationdefaultValueLiteral_attribute_EStructuralFeature(problem,interpretation,from,to);
40354}
40355pattern refineRelation_unsettable_attribute_EStructuralFeature(
40356 problem:LogicProblem, interpretation:PartialInterpretation,
40357 relationIterpretation:PartialRelationInterpretation,
40358 from: DefinedElement, to: DefinedElement)
40359{
40360 find interpretation(problem,interpretation);
40361 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
40362 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"unsettable attribute EStructuralFeature");
40363 find mustExist(problem, interpretation, from);
40364 find mustExist(problem, interpretation, to);
40365 find mustInstanceOfEStructuralFeature_class(problem,interpretation,from);
40366 BooleanElement(to);
40367 find mayInRelationunsettable_attribute_EStructuralFeature(problem,interpretation,from,to);
40368 neg find mustInRelationunsettable_attribute_EStructuralFeature(problem,interpretation,from,to);
40369}
40370pattern refineRelation_derived_attribute_EStructuralFeature(
40371 problem:LogicProblem, interpretation:PartialInterpretation,
40372 relationIterpretation:PartialRelationInterpretation,
40373 from: DefinedElement, to: DefinedElement)
40374{
40375 find interpretation(problem,interpretation);
40376 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
40377 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"derived attribute EStructuralFeature");
40378 find mustExist(problem, interpretation, from);
40379 find mustExist(problem, interpretation, to);
40380 find mustInstanceOfEStructuralFeature_class(problem,interpretation,from);
40381 BooleanElement(to);
40382 find mayInRelationderived_attribute_EStructuralFeature(problem,interpretation,from,to);
40383 neg find mustInRelationderived_attribute_EStructuralFeature(problem,interpretation,from,to);
40384}
40385pattern refineRelation_ordered_attribute_ETypedElement(
40386 problem:LogicProblem, interpretation:PartialInterpretation,
40387 relationIterpretation:PartialRelationInterpretation,
40388 from: DefinedElement, to: DefinedElement)
40389{
40390 find interpretation(problem,interpretation);
40391 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
40392 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"ordered attribute ETypedElement");
40393 find mustExist(problem, interpretation, from);
40394 find mustExist(problem, interpretation, to);
40395 find mustInstanceOfETypedElement_class(problem,interpretation,from);
40396 BooleanElement(to);
40397 find mayInRelationordered_attribute_ETypedElement(problem,interpretation,from,to);
40398 neg find mustInRelationordered_attribute_ETypedElement(problem,interpretation,from,to);
40399}
40400pattern refineRelation_unique_attribute_ETypedElement(
40401 problem:LogicProblem, interpretation:PartialInterpretation,
40402 relationIterpretation:PartialRelationInterpretation,
40403 from: DefinedElement, to: DefinedElement)
40404{
40405 find interpretation(problem,interpretation);
40406 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
40407 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"unique attribute ETypedElement");
40408 find mustExist(problem, interpretation, from);
40409 find mustExist(problem, interpretation, to);
40410 find mustInstanceOfETypedElement_class(problem,interpretation,from);
40411 BooleanElement(to);
40412 find mayInRelationunique_attribute_ETypedElement(problem,interpretation,from,to);
40413 neg find mustInRelationunique_attribute_ETypedElement(problem,interpretation,from,to);
40414}
40415pattern refineRelation_lowerBound_attribute_ETypedElement(
40416 problem:LogicProblem, interpretation:PartialInterpretation,
40417 relationIterpretation:PartialRelationInterpretation,
40418 from: DefinedElement, to: DefinedElement)
40419{
40420 find interpretation(problem,interpretation);
40421 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
40422 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"lowerBound attribute ETypedElement");
40423 find mustExist(problem, interpretation, from);
40424 find mustExist(problem, interpretation, to);
40425 find mustInstanceOfETypedElement_class(problem,interpretation,from);
40426 IntegerElement(to);
40427 find mayInRelationlowerBound_attribute_ETypedElement(problem,interpretation,from,to);
40428 neg find mustInRelationlowerBound_attribute_ETypedElement(problem,interpretation,from,to);
40429}
40430pattern refineRelation_upperBound_attribute_ETypedElement(
40431 problem:LogicProblem, interpretation:PartialInterpretation,
40432 relationIterpretation:PartialRelationInterpretation,
40433 from: DefinedElement, to: DefinedElement)
40434{
40435 find interpretation(problem,interpretation);
40436 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
40437 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"upperBound attribute ETypedElement");
40438 find mustExist(problem, interpretation, from);
40439 find mustExist(problem, interpretation, to);
40440 find mustInstanceOfETypedElement_class(problem,interpretation,from);
40441 IntegerElement(to);
40442 find mayInRelationupperBound_attribute_ETypedElement(problem,interpretation,from,to);
40443 neg find mustInRelationupperBound_attribute_ETypedElement(problem,interpretation,from,to);
40444}
40445pattern refineRelation_many_attribute_ETypedElement(
40446 problem:LogicProblem, interpretation:PartialInterpretation,
40447 relationIterpretation:PartialRelationInterpretation,
40448 from: DefinedElement, to: DefinedElement)
40449{
40450 find interpretation(problem,interpretation);
40451 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
40452 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"many attribute ETypedElement");
40453 find mustExist(problem, interpretation, from);
40454 find mustExist(problem, interpretation, to);
40455 find mustInstanceOfETypedElement_class(problem,interpretation,from);
40456 BooleanElement(to);
40457 find mayInRelationmany_attribute_ETypedElement(problem,interpretation,from,to);
40458 neg find mustInRelationmany_attribute_ETypedElement(problem,interpretation,from,to);
40459}
40460pattern refineRelation_required_attribute_ETypedElement(
40461 problem:LogicProblem, interpretation:PartialInterpretation,
40462 relationIterpretation:PartialRelationInterpretation,
40463 from: DefinedElement, to: DefinedElement)
40464{
40465 find interpretation(problem,interpretation);
40466 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
40467 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"required attribute ETypedElement");
40468 find mustExist(problem, interpretation, from);
40469 find mustExist(problem, interpretation, to);
40470 find mustInstanceOfETypedElement_class(problem,interpretation,from);
40471 BooleanElement(to);
40472 find mayInRelationrequired_attribute_ETypedElement(problem,interpretation,from,to);
40473 neg find mustInRelationrequired_attribute_ETypedElement(problem,interpretation,from,to);
40474}
40475pattern refineRelation_key_attribute_EStringToStringMapEntry(
40476 problem:LogicProblem, interpretation:PartialInterpretation,
40477 relationIterpretation:PartialRelationInterpretation,
40478 from: DefinedElement, to: DefinedElement)
40479{
40480 find interpretation(problem,interpretation);
40481 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
40482 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"key attribute EStringToStringMapEntry");
40483 find mustExist(problem, interpretation, from);
40484 find mustExist(problem, interpretation, to);
40485 find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,from);
40486 StringElement(to);
40487 find mayInRelationkey_attribute_EStringToStringMapEntry(problem,interpretation,from,to);
40488 neg find mustInRelationkey_attribute_EStringToStringMapEntry(problem,interpretation,from,to);
40489}
40490pattern refineRelation_value_attribute_EStringToStringMapEntry(
40491 problem:LogicProblem, interpretation:PartialInterpretation,
40492 relationIterpretation:PartialRelationInterpretation,
40493 from: DefinedElement, to: DefinedElement)
40494{
40495 find interpretation(problem,interpretation);
40496 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
40497 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"value attribute EStringToStringMapEntry");
40498 find mustExist(problem, interpretation, from);
40499 find mustExist(problem, interpretation, to);
40500 find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,from);
40501 StringElement(to);
40502 find mayInRelationvalue_attribute_EStringToStringMapEntry(problem,interpretation,from,to);
40503 neg find mustInRelationvalue_attribute_EStringToStringMapEntry(problem,interpretation,from,to);
40504}
40505import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage"
40506import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem"
40507import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language"
40508
40509//////////
40510// 0. Util
40511//////////
40512private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) {
40513 PartialInterpretation.problem(interpretation,problem);
40514}
40515
40516/////////////////////////
40517// 0.1 Existence
40518/////////////////////////
40519private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
40520 find interpretation(problem,interpretation);
40521 LogicProblem.elements(problem,element);
40522} or {
40523 find interpretation(problem,interpretation);
40524 PartialInterpretation.newElements(interpretation,element);
40525}
40526
40527private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
40528 find mustExist(problem,interpretation,element);
40529} or {
40530 find interpretation(problem,interpretation);
40531 neg find elementCloseWorld(element);
40532 PartialInterpretation.openWorldElements(interpretation,element);
40533}
40534
40535private pattern elementCloseWorld(element:DefinedElement) {
40536 PartialInterpretation.openWorldElements(i,element);
40537 PartialInterpretation.maxNewElements(i,0);
40538} or {
40539 Scope.targetTypeInterpretation(scope,interpretation);
40540 PartialTypeInterpratation.elements(interpretation,element);
40541 Scope.maxNewElements(scope,0);
40542}
40543
40544////////////////////////
40545// 0.2 Equivalence
40546////////////////////////
40547pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) {
40548 find mayExist(problem,interpretation,a);
40549 find mayExist(problem,interpretation,b);
40550 a == b;
40551}
40552
40553////////////////////////
40554// 0.3 Required Patterns by TypeIndexer
40555////////////////////////
40556private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) {
40557 find interpretation(problem,interpretation);
40558 LogicProblem.types(problem,type);
40559 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
40560 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
40561}
40562
40563private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) {
40564 find interpretation(problem,interpretation);
40565 LogicProblem.types(problem,type);
40566 TypeDefinition.elements(type,element);
40567} or {
40568 find interpretation(problem,interpretation);
40569 find typeInterpretation(problem,interpretation,type,typeInterpretation);
40570 PartialComplexTypeInterpretation.elements(typeInterpretation,element);
40571}
40572
40573private pattern isPrimitive(element: PrimitiveElement) {
40574 PrimitiveElement(element);
40575}
40576
40577//////////
40578// 1. Problem-Specific Base Indexers
40579//////////
40580// 1.1 Type Indexers
40581//////////
40582// 1.1.1 primitive Type Indexers
40583//////////
40584
40585//////////
40586// 1.1.2 domain-specific Type Indexers
40587//////////
40588/**
40589 * An element must be an instance of type "EAttribute class".
40590 */
40591private pattern mustInstanceOfEAttribute_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
40592 Type.name(type,"EAttribute class");
40593 find directInstanceOf(problem,interpretation,element,type);
40594}
40595private pattern scopeDisallowsNewEAttribute_class(problem:LogicProblem, interpretation:PartialInterpretation) {
40596 find interpretation(problem,interpretation);
40597 PartialInterpretation.scopes(interpretation,scope);
40598 Scope.targetTypeInterpretation(scope,typeInterpretation);
40599 Scope.maxNewElements(scope,0);
40600 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
40601 Type.name(type,"EAttribute class");
40602}
40603
40604/**
40605 * An element may be an instance of type "EAttribute class".
40606 */
40607private pattern mayInstanceOfEAttribute_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
40608{
40609 find interpretation(problem,interpretation);
40610 PartialInterpretation.newElements(interpretation,element);
40611 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
40612 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
40613 neg find mustInstanceOfEObject_class(problem,interpretation,element);
40614 neg find mustInstanceOfEReference_class(problem,interpretation,element);
40615 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
40616 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
40617 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
40618 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
40619 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
40620 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
40621 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
40622 neg find scopeDisallowsNewEAttribute_class(problem, interpretation);
40623 neg find isPrimitive(element);
40624} or {
40625 find interpretation(problem,interpretation);
40626 PartialInterpretation.openWorldElements(interpretation,element);
40627 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
40628 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
40629 neg find mustInstanceOfEObject_class(problem,interpretation,element);
40630 neg find mustInstanceOfEReference_class(problem,interpretation,element);
40631 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
40632 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
40633 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
40634 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
40635 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
40636 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
40637 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
40638 neg find scopeDisallowsNewEAttribute_class(problem, interpretation);
40639 neg find isPrimitive(element);
40640} or
40641{ find mustInstanceOfEAttribute_class(problem,interpretation,element); }
40642/**
40643 * An element must be an instance of type "EAnnotation class".
40644 */
40645private pattern mustInstanceOfEAnnotation_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
40646 Type.name(type,"EAnnotation class");
40647 find directInstanceOf(problem,interpretation,element,type);
40648}
40649private pattern scopeDisallowsNewEAnnotation_class(problem:LogicProblem, interpretation:PartialInterpretation) {
40650 find interpretation(problem,interpretation);
40651 PartialInterpretation.scopes(interpretation,scope);
40652 Scope.targetTypeInterpretation(scope,typeInterpretation);
40653 Scope.maxNewElements(scope,0);
40654 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
40655 Type.name(type,"EAnnotation class");
40656}
40657
40658/**
40659 * An element may be an instance of type "EAnnotation class".
40660 */
40661private pattern mayInstanceOfEAnnotation_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
40662{
40663 find interpretation(problem,interpretation);
40664 PartialInterpretation.newElements(interpretation,element);
40665 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
40666 neg find mustInstanceOfEObject_class(problem,interpretation,element);
40667 neg find mustInstanceOfENamedElement_class(problem,interpretation,element);
40668 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
40669 neg find scopeDisallowsNewEAnnotation_class(problem, interpretation);
40670 neg find isPrimitive(element);
40671} or {
40672 find interpretation(problem,interpretation);
40673 PartialInterpretation.openWorldElements(interpretation,element);
40674 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
40675 neg find mustInstanceOfEObject_class(problem,interpretation,element);
40676 neg find mustInstanceOfENamedElement_class(problem,interpretation,element);
40677 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
40678 neg find scopeDisallowsNewEAnnotation_class(problem, interpretation);
40679 neg find isPrimitive(element);
40680} or
40681{ find mustInstanceOfEAnnotation_class(problem,interpretation,element); }
40682/**
40683 * An element must be an instance of type "EClass class".
40684 */
40685private pattern mustInstanceOfEClass_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
40686 Type.name(type,"EClass class");
40687 find directInstanceOf(problem,interpretation,element,type);
40688}
40689private pattern scopeDisallowsNewEClass_class(problem:LogicProblem, interpretation:PartialInterpretation) {
40690 find interpretation(problem,interpretation);
40691 PartialInterpretation.scopes(interpretation,scope);
40692 Scope.targetTypeInterpretation(scope,typeInterpretation);
40693 Scope.maxNewElements(scope,0);
40694 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
40695 Type.name(type,"EClass class");
40696}
40697
40698/**
40699 * An element may be an instance of type "EClass class".
40700 */
40701private pattern mayInstanceOfEClass_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
40702{
40703 find interpretation(problem,interpretation);
40704 PartialInterpretation.newElements(interpretation,element);
40705 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
40706 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
40707 neg find mustInstanceOfEObject_class(problem,interpretation,element);
40708 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
40709 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
40710 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
40711 neg find mustInstanceOfEDataType_class(problem,interpretation,element);
40712 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
40713 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
40714 neg find scopeDisallowsNewEClass_class(problem, interpretation);
40715 neg find isPrimitive(element);
40716} or {
40717 find interpretation(problem,interpretation);
40718 PartialInterpretation.openWorldElements(interpretation,element);
40719 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
40720 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
40721 neg find mustInstanceOfEObject_class(problem,interpretation,element);
40722 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
40723 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
40724 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
40725 neg find mustInstanceOfEDataType_class(problem,interpretation,element);
40726 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
40727 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
40728 neg find scopeDisallowsNewEClass_class(problem, interpretation);
40729 neg find isPrimitive(element);
40730} or
40731{ find mustInstanceOfEClass_class(problem,interpretation,element); }
40732/**
40733 * An element must be an instance of type "EClassifier class".
40734 */
40735private pattern mustInstanceOfEClassifier_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
40736 Type.name(type,"EClassifier class");
40737 find directInstanceOf(problem,interpretation,element,type);
40738}
40739private pattern scopeDisallowsNewEClassifier_class(problem:LogicProblem, interpretation:PartialInterpretation) {
40740 find interpretation(problem,interpretation);
40741 PartialInterpretation.scopes(interpretation,scope);
40742 Scope.targetTypeInterpretation(scope,typeInterpretation);
40743 Scope.maxNewElements(scope,0);
40744 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
40745 Type.name(type,"EClassifier class");
40746}
40747
40748/**
40749 * An element may be an instance of type "EClassifier class".
40750 */
40751private pattern mayInstanceOfEClassifier_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
40752{
40753 find interpretation(problem,interpretation);
40754 PartialInterpretation.newElements(interpretation,element);
40755 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
40756 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
40757 neg find mustInstanceOfEObject_class(problem,interpretation,element);
40758 neg find mustInstanceOfEClass_class(problem,interpretation,element);
40759 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
40760 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
40761 neg find mustInstanceOfEDataType_class(problem,interpretation,element);
40762 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
40763 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
40764 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
40765 neg find scopeDisallowsNewEClassifier_class(problem, interpretation);
40766 neg find isPrimitive(element);
40767} or {
40768 find interpretation(problem,interpretation);
40769 PartialInterpretation.openWorldElements(interpretation,element);
40770 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
40771 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
40772 neg find mustInstanceOfEObject_class(problem,interpretation,element);
40773 neg find mustInstanceOfEClass_class(problem,interpretation,element);
40774 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
40775 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
40776 neg find mustInstanceOfEDataType_class(problem,interpretation,element);
40777 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
40778 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
40779 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
40780 neg find scopeDisallowsNewEClassifier_class(problem, interpretation);
40781 neg find isPrimitive(element);
40782} or
40783{ find mustInstanceOfEClassifier_class(problem,interpretation,element); }
40784/**
40785 * An element must be an instance of type "EDataType class".
40786 */
40787private pattern mustInstanceOfEDataType_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
40788 Type.name(type,"EDataType class");
40789 find directInstanceOf(problem,interpretation,element,type);
40790}
40791private pattern scopeDisallowsNewEDataType_class(problem:LogicProblem, interpretation:PartialInterpretation) {
40792 find interpretation(problem,interpretation);
40793 PartialInterpretation.scopes(interpretation,scope);
40794 Scope.targetTypeInterpretation(scope,typeInterpretation);
40795 Scope.maxNewElements(scope,0);
40796 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
40797 Type.name(type,"EDataType class");
40798}
40799
40800/**
40801 * An element may be an instance of type "EDataType class".
40802 */
40803private pattern mayInstanceOfEDataType_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
40804{
40805 find interpretation(problem,interpretation);
40806 PartialInterpretation.newElements(interpretation,element);
40807 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
40808 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
40809 neg find mustInstanceOfEEnum_class(problem,interpretation,element);
40810 neg find mustInstanceOfEObject_class(problem,interpretation,element);
40811 neg find mustInstanceOfEClass_class(problem,interpretation,element);
40812 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
40813 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
40814 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
40815 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
40816 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
40817 neg find scopeDisallowsNewEDataType_class(problem, interpretation);
40818 neg find isPrimitive(element);
40819} or {
40820 find interpretation(problem,interpretation);
40821 PartialInterpretation.openWorldElements(interpretation,element);
40822 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
40823 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
40824 neg find mustInstanceOfEEnum_class(problem,interpretation,element);
40825 neg find mustInstanceOfEObject_class(problem,interpretation,element);
40826 neg find mustInstanceOfEClass_class(problem,interpretation,element);
40827 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
40828 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
40829 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
40830 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
40831 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
40832 neg find scopeDisallowsNewEDataType_class(problem, interpretation);
40833 neg find isPrimitive(element);
40834} or
40835{ find mustInstanceOfEDataType_class(problem,interpretation,element); }
40836/**
40837 * An element must be an instance of type "EEnum class".
40838 */
40839private pattern mustInstanceOfEEnum_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
40840 Type.name(type,"EEnum class");
40841 find directInstanceOf(problem,interpretation,element,type);
40842}
40843private pattern scopeDisallowsNewEEnum_class(problem:LogicProblem, interpretation:PartialInterpretation) {
40844 find interpretation(problem,interpretation);
40845 PartialInterpretation.scopes(interpretation,scope);
40846 Scope.targetTypeInterpretation(scope,typeInterpretation);
40847 Scope.maxNewElements(scope,0);
40848 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
40849 Type.name(type,"EEnum class");
40850}
40851
40852/**
40853 * An element may be an instance of type "EEnum class".
40854 */
40855private pattern mayInstanceOfEEnum_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
40856{
40857 find interpretation(problem,interpretation);
40858 PartialInterpretation.newElements(interpretation,element);
40859 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
40860 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
40861 neg find mustInstanceOfEObject_class(problem,interpretation,element);
40862 neg find mustInstanceOfEClass_class(problem,interpretation,element);
40863 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
40864 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
40865 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
40866 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
40867 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
40868 neg find scopeDisallowsNewEEnum_class(problem, interpretation);
40869 neg find isPrimitive(element);
40870} or {
40871 find interpretation(problem,interpretation);
40872 PartialInterpretation.openWorldElements(interpretation,element);
40873 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
40874 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
40875 neg find mustInstanceOfEObject_class(problem,interpretation,element);
40876 neg find mustInstanceOfEClass_class(problem,interpretation,element);
40877 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
40878 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
40879 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
40880 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
40881 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
40882 neg find scopeDisallowsNewEEnum_class(problem, interpretation);
40883 neg find isPrimitive(element);
40884} or
40885{ find mustInstanceOfEEnum_class(problem,interpretation,element); }
40886/**
40887 * An element must be an instance of type "EEnumLiteral class".
40888 */
40889private pattern mustInstanceOfEEnumLiteral_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
40890 Type.name(type,"EEnumLiteral class");
40891 find directInstanceOf(problem,interpretation,element,type);
40892}
40893private pattern scopeDisallowsNewEEnumLiteral_class(problem:LogicProblem, interpretation:PartialInterpretation) {
40894 find interpretation(problem,interpretation);
40895 PartialInterpretation.scopes(interpretation,scope);
40896 Scope.targetTypeInterpretation(scope,typeInterpretation);
40897 Scope.maxNewElements(scope,0);
40898 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
40899 Type.name(type,"EEnumLiteral class");
40900}
40901
40902/**
40903 * An element may be an instance of type "EEnumLiteral class".
40904 */
40905private pattern mayInstanceOfEEnumLiteral_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
40906{
40907 find interpretation(problem,interpretation);
40908 PartialInterpretation.newElements(interpretation,element);
40909 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
40910 neg find mustInstanceOfEObject_class(problem,interpretation,element);
40911 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
40912 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
40913 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
40914 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
40915 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
40916 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
40917 neg find scopeDisallowsNewEEnumLiteral_class(problem, interpretation);
40918 neg find isPrimitive(element);
40919} or {
40920 find interpretation(problem,interpretation);
40921 PartialInterpretation.openWorldElements(interpretation,element);
40922 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
40923 neg find mustInstanceOfEObject_class(problem,interpretation,element);
40924 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
40925 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
40926 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
40927 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
40928 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
40929 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
40930 neg find scopeDisallowsNewEEnumLiteral_class(problem, interpretation);
40931 neg find isPrimitive(element);
40932} or
40933{ find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); }
40934/**
40935 * An element must be an instance of type "EModelElement class".
40936 */
40937private pattern mustInstanceOfEModelElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
40938 Type.name(type,"EModelElement class");
40939 find directInstanceOf(problem,interpretation,element,type);
40940}
40941private pattern scopeDisallowsNewEModelElement_class(problem:LogicProblem, interpretation:PartialInterpretation) {
40942 find interpretation(problem,interpretation);
40943 PartialInterpretation.scopes(interpretation,scope);
40944 Scope.targetTypeInterpretation(scope,typeInterpretation);
40945 Scope.maxNewElements(scope,0);
40946 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
40947 Type.name(type,"EModelElement class");
40948}
40949
40950/**
40951 * An element may be an instance of type "EModelElement class".
40952 */
40953private pattern mayInstanceOfEModelElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
40954{
40955 find interpretation(problem,interpretation);
40956 PartialInterpretation.newElements(interpretation,element);
40957 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
40958 neg find mustInstanceOfEObject_class(problem,interpretation,element);
40959 neg find mustInstanceOfENamedElement_class(problem,interpretation,element);
40960 neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element);
40961 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
40962 neg find scopeDisallowsNewEModelElement_class(problem, interpretation);
40963 neg find isPrimitive(element);
40964} or {
40965 find interpretation(problem,interpretation);
40966 PartialInterpretation.openWorldElements(interpretation,element);
40967 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
40968 neg find mustInstanceOfEObject_class(problem,interpretation,element);
40969 neg find mustInstanceOfENamedElement_class(problem,interpretation,element);
40970 neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element);
40971 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
40972 neg find scopeDisallowsNewEModelElement_class(problem, interpretation);
40973 neg find isPrimitive(element);
40974} or
40975{ find mustInstanceOfEModelElement_class(problem,interpretation,element); }
40976/**
40977 * An element must be an instance of type "ENamedElement class".
40978 */
40979private pattern mustInstanceOfENamedElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
40980 Type.name(type,"ENamedElement class");
40981 find directInstanceOf(problem,interpretation,element,type);
40982}
40983private pattern scopeDisallowsNewENamedElement_class(problem:LogicProblem, interpretation:PartialInterpretation) {
40984 find interpretation(problem,interpretation);
40985 PartialInterpretation.scopes(interpretation,scope);
40986 Scope.targetTypeInterpretation(scope,typeInterpretation);
40987 Scope.maxNewElements(scope,0);
40988 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
40989 Type.name(type,"ENamedElement class");
40990}
40991
40992/**
40993 * An element may be an instance of type "ENamedElement class".
40994 */
40995private pattern mayInstanceOfENamedElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
40996{
40997 find interpretation(problem,interpretation);
40998 PartialInterpretation.newElements(interpretation,element);
40999 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
41000 neg find mustInstanceOfEObject_class(problem,interpretation,element);
41001 neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element);
41002 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
41003 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
41004 neg find scopeDisallowsNewENamedElement_class(problem, interpretation);
41005 neg find isPrimitive(element);
41006} or {
41007 find interpretation(problem,interpretation);
41008 PartialInterpretation.openWorldElements(interpretation,element);
41009 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
41010 neg find mustInstanceOfEObject_class(problem,interpretation,element);
41011 neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element);
41012 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
41013 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
41014 neg find scopeDisallowsNewENamedElement_class(problem, interpretation);
41015 neg find isPrimitive(element);
41016} or
41017{ find mustInstanceOfENamedElement_class(problem,interpretation,element); }
41018/**
41019 * An element must be an instance of type "EObject class".
41020 */
41021private pattern mustInstanceOfEObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
41022 Type.name(type,"EObject class");
41023 find directInstanceOf(problem,interpretation,element,type);
41024}
41025private pattern scopeDisallowsNewEObject_class(problem:LogicProblem, interpretation:PartialInterpretation) {
41026 find interpretation(problem,interpretation);
41027 PartialInterpretation.scopes(interpretation,scope);
41028 Scope.targetTypeInterpretation(scope,typeInterpretation);
41029 Scope.maxNewElements(scope,0);
41030 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
41031 Type.name(type,"EObject class");
41032}
41033
41034/**
41035 * An element may be an instance of type "EObject class".
41036 */
41037private pattern mayInstanceOfEObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
41038{
41039 find interpretation(problem,interpretation);
41040 PartialInterpretation.newElements(interpretation,element);
41041 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
41042 neg find mustInstanceOfEModelElement_class(problem,interpretation,element);
41043 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
41044 neg find scopeDisallowsNewEObject_class(problem, interpretation);
41045 neg find isPrimitive(element);
41046} or {
41047 find interpretation(problem,interpretation);
41048 PartialInterpretation.openWorldElements(interpretation,element);
41049 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
41050 neg find mustInstanceOfEModelElement_class(problem,interpretation,element);
41051 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
41052 neg find scopeDisallowsNewEObject_class(problem, interpretation);
41053 neg find isPrimitive(element);
41054} or
41055{ find mustInstanceOfEObject_class(problem,interpretation,element); }
41056/**
41057 * An element must be an instance of type "EOperation class".
41058 */
41059private pattern mustInstanceOfEOperation_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
41060 Type.name(type,"EOperation class");
41061 find directInstanceOf(problem,interpretation,element,type);
41062}
41063private pattern scopeDisallowsNewEOperation_class(problem:LogicProblem, interpretation:PartialInterpretation) {
41064 find interpretation(problem,interpretation);
41065 PartialInterpretation.scopes(interpretation,scope);
41066 Scope.targetTypeInterpretation(scope,typeInterpretation);
41067 Scope.maxNewElements(scope,0);
41068 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
41069 Type.name(type,"EOperation class");
41070}
41071
41072/**
41073 * An element may be an instance of type "EOperation class".
41074 */
41075private pattern mayInstanceOfEOperation_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
41076{
41077 find interpretation(problem,interpretation);
41078 PartialInterpretation.newElements(interpretation,element);
41079 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
41080 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
41081 neg find mustInstanceOfEObject_class(problem,interpretation,element);
41082 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
41083 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
41084 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
41085 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
41086 neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element);
41087 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
41088 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
41089 neg find scopeDisallowsNewEOperation_class(problem, interpretation);
41090 neg find isPrimitive(element);
41091} or {
41092 find interpretation(problem,interpretation);
41093 PartialInterpretation.openWorldElements(interpretation,element);
41094 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
41095 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
41096 neg find mustInstanceOfEObject_class(problem,interpretation,element);
41097 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
41098 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
41099 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
41100 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
41101 neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element);
41102 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
41103 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
41104 neg find scopeDisallowsNewEOperation_class(problem, interpretation);
41105 neg find isPrimitive(element);
41106} or
41107{ find mustInstanceOfEOperation_class(problem,interpretation,element); }
41108/**
41109 * An element must be an instance of type "EPackage class".
41110 */
41111private pattern mustInstanceOfEPackage_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
41112 Type.name(type,"EPackage class");
41113 find directInstanceOf(problem,interpretation,element,type);
41114}
41115private pattern scopeDisallowsNewEPackage_class(problem:LogicProblem, interpretation:PartialInterpretation) {
41116 find interpretation(problem,interpretation);
41117 PartialInterpretation.scopes(interpretation,scope);
41118 Scope.targetTypeInterpretation(scope,typeInterpretation);
41119 Scope.maxNewElements(scope,0);
41120 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
41121 Type.name(type,"EPackage class");
41122}
41123
41124/**
41125 * An element may be an instance of type "EPackage class".
41126 */
41127private pattern mayInstanceOfEPackage_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
41128{
41129 find interpretation(problem,interpretation);
41130 PartialInterpretation.newElements(interpretation,element);
41131 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
41132 neg find mustInstanceOfEObject_class(problem,interpretation,element);
41133 neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element);
41134 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
41135 neg find scopeDisallowsNewEPackage_class(problem, interpretation);
41136 neg find isPrimitive(element);
41137} or {
41138 find interpretation(problem,interpretation);
41139 PartialInterpretation.openWorldElements(interpretation,element);
41140 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
41141 neg find mustInstanceOfEObject_class(problem,interpretation,element);
41142 neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element);
41143 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
41144 neg find scopeDisallowsNewEPackage_class(problem, interpretation);
41145 neg find isPrimitive(element);
41146} or
41147{ find mustInstanceOfEPackage_class(problem,interpretation,element); }
41148/**
41149 * An element must be an instance of type "EParameter class".
41150 */
41151private pattern mustInstanceOfEParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
41152 Type.name(type,"EParameter class");
41153 find directInstanceOf(problem,interpretation,element,type);
41154}
41155private pattern scopeDisallowsNewEParameter_class(problem:LogicProblem, interpretation:PartialInterpretation) {
41156 find interpretation(problem,interpretation);
41157 PartialInterpretation.scopes(interpretation,scope);
41158 Scope.targetTypeInterpretation(scope,typeInterpretation);
41159 Scope.maxNewElements(scope,0);
41160 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
41161 Type.name(type,"EParameter class");
41162}
41163
41164/**
41165 * An element may be an instance of type "EParameter class".
41166 */
41167private pattern mayInstanceOfEParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
41168{
41169 find interpretation(problem,interpretation);
41170 PartialInterpretation.newElements(interpretation,element);
41171 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
41172 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
41173 neg find mustInstanceOfEObject_class(problem,interpretation,element);
41174 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
41175 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
41176 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
41177 neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element);
41178 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
41179 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
41180 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
41181 neg find scopeDisallowsNewEParameter_class(problem, interpretation);
41182 neg find isPrimitive(element);
41183} or {
41184 find interpretation(problem,interpretation);
41185 PartialInterpretation.openWorldElements(interpretation,element);
41186 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
41187 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
41188 neg find mustInstanceOfEObject_class(problem,interpretation,element);
41189 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
41190 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
41191 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
41192 neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element);
41193 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
41194 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
41195 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
41196 neg find scopeDisallowsNewEParameter_class(problem, interpretation);
41197 neg find isPrimitive(element);
41198} or
41199{ find mustInstanceOfEParameter_class(problem,interpretation,element); }
41200/**
41201 * An element must be an instance of type "EReference class".
41202 */
41203private pattern mustInstanceOfEReference_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
41204 Type.name(type,"EReference class");
41205 find directInstanceOf(problem,interpretation,element,type);
41206}
41207private pattern scopeDisallowsNewEReference_class(problem:LogicProblem, interpretation:PartialInterpretation) {
41208 find interpretation(problem,interpretation);
41209 PartialInterpretation.scopes(interpretation,scope);
41210 Scope.targetTypeInterpretation(scope,typeInterpretation);
41211 Scope.maxNewElements(scope,0);
41212 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
41213 Type.name(type,"EReference class");
41214}
41215
41216/**
41217 * An element may be an instance of type "EReference class".
41218 */
41219private pattern mayInstanceOfEReference_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
41220{
41221 find interpretation(problem,interpretation);
41222 PartialInterpretation.newElements(interpretation,element);
41223 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
41224 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
41225 neg find mustInstanceOfEAttribute_class(problem,interpretation,element);
41226 neg find mustInstanceOfEObject_class(problem,interpretation,element);
41227 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
41228 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
41229 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
41230 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
41231 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
41232 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
41233 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
41234 neg find scopeDisallowsNewEReference_class(problem, interpretation);
41235 neg find isPrimitive(element);
41236} or {
41237 find interpretation(problem,interpretation);
41238 PartialInterpretation.openWorldElements(interpretation,element);
41239 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
41240 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
41241 neg find mustInstanceOfEAttribute_class(problem,interpretation,element);
41242 neg find mustInstanceOfEObject_class(problem,interpretation,element);
41243 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
41244 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
41245 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
41246 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
41247 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
41248 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
41249 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
41250 neg find scopeDisallowsNewEReference_class(problem, interpretation);
41251 neg find isPrimitive(element);
41252} or
41253{ find mustInstanceOfEReference_class(problem,interpretation,element); }
41254/**
41255 * An element must be an instance of type "EStructuralFeature class".
41256 */
41257private pattern mustInstanceOfEStructuralFeature_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
41258 Type.name(type,"EStructuralFeature class");
41259 find directInstanceOf(problem,interpretation,element,type);
41260}
41261private pattern scopeDisallowsNewEStructuralFeature_class(problem:LogicProblem, interpretation:PartialInterpretation) {
41262 find interpretation(problem,interpretation);
41263 PartialInterpretation.scopes(interpretation,scope);
41264 Scope.targetTypeInterpretation(scope,typeInterpretation);
41265 Scope.maxNewElements(scope,0);
41266 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
41267 Type.name(type,"EStructuralFeature class");
41268}
41269
41270/**
41271 * An element may be an instance of type "EStructuralFeature class".
41272 */
41273private pattern mayInstanceOfEStructuralFeature_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
41274{
41275 find interpretation(problem,interpretation);
41276 PartialInterpretation.newElements(interpretation,element);
41277 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
41278 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
41279 neg find mustInstanceOfEAttribute_class(problem,interpretation,element);
41280 neg find mustInstanceOfEObject_class(problem,interpretation,element);
41281 neg find mustInstanceOfEReference_class(problem,interpretation,element);
41282 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
41283 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
41284 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
41285 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
41286 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
41287 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
41288 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
41289 neg find scopeDisallowsNewEStructuralFeature_class(problem, interpretation);
41290 neg find isPrimitive(element);
41291} or {
41292 find interpretation(problem,interpretation);
41293 PartialInterpretation.openWorldElements(interpretation,element);
41294 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
41295 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
41296 neg find mustInstanceOfEAttribute_class(problem,interpretation,element);
41297 neg find mustInstanceOfEObject_class(problem,interpretation,element);
41298 neg find mustInstanceOfEReference_class(problem,interpretation,element);
41299 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
41300 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
41301 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
41302 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
41303 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
41304 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
41305 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
41306 neg find scopeDisallowsNewEStructuralFeature_class(problem, interpretation);
41307 neg find isPrimitive(element);
41308} or
41309{ find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); }
41310/**
41311 * An element must be an instance of type "ETypedElement class".
41312 */
41313private pattern mustInstanceOfETypedElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
41314 Type.name(type,"ETypedElement class");
41315 find directInstanceOf(problem,interpretation,element,type);
41316}
41317private pattern scopeDisallowsNewETypedElement_class(problem:LogicProblem, interpretation:PartialInterpretation) {
41318 find interpretation(problem,interpretation);
41319 PartialInterpretation.scopes(interpretation,scope);
41320 Scope.targetTypeInterpretation(scope,typeInterpretation);
41321 Scope.maxNewElements(scope,0);
41322 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
41323 Type.name(type,"ETypedElement class");
41324}
41325
41326/**
41327 * An element may be an instance of type "ETypedElement class".
41328 */
41329private pattern mayInstanceOfETypedElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
41330{
41331 find interpretation(problem,interpretation);
41332 PartialInterpretation.newElements(interpretation,element);
41333 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
41334 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
41335 neg find mustInstanceOfEObject_class(problem,interpretation,element);
41336 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
41337 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
41338 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
41339 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
41340 neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element);
41341 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
41342 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
41343 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
41344 neg find scopeDisallowsNewETypedElement_class(problem, interpretation);
41345 neg find isPrimitive(element);
41346} or {
41347 find interpretation(problem,interpretation);
41348 PartialInterpretation.openWorldElements(interpretation,element);
41349 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
41350 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
41351 neg find mustInstanceOfEObject_class(problem,interpretation,element);
41352 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
41353 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
41354 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
41355 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
41356 neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element);
41357 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
41358 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
41359 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
41360 neg find scopeDisallowsNewETypedElement_class(problem, interpretation);
41361 neg find isPrimitive(element);
41362} or
41363{ find mustInstanceOfETypedElement_class(problem,interpretation,element); }
41364/**
41365 * An element must be an instance of type "EStringToStringMapEntry class".
41366 */
41367private pattern mustInstanceOfEStringToStringMapEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
41368 Type.name(type,"EStringToStringMapEntry class");
41369 find directInstanceOf(problem,interpretation,element,type);
41370}
41371private pattern scopeDisallowsNewEStringToStringMapEntry_class(problem:LogicProblem, interpretation:PartialInterpretation) {
41372 find interpretation(problem,interpretation);
41373 PartialInterpretation.scopes(interpretation,scope);
41374 Scope.targetTypeInterpretation(scope,typeInterpretation);
41375 Scope.maxNewElements(scope,0);
41376 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
41377 Type.name(type,"EStringToStringMapEntry class");
41378}
41379
41380/**
41381 * An element may be an instance of type "EStringToStringMapEntry class".
41382 */
41383private pattern mayInstanceOfEStringToStringMapEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
41384{
41385 find interpretation(problem,interpretation);
41386 PartialInterpretation.newElements(interpretation,element);
41387 neg find mustInstanceOfEObject_class(problem,interpretation,element);
41388 neg find mustInstanceOfEModelElement_class(problem,interpretation,element);
41389 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
41390 neg find scopeDisallowsNewEStringToStringMapEntry_class(problem, interpretation);
41391 neg find isPrimitive(element);
41392} or {
41393 find interpretation(problem,interpretation);
41394 PartialInterpretation.openWorldElements(interpretation,element);
41395 neg find mustInstanceOfEObject_class(problem,interpretation,element);
41396 neg find mustInstanceOfEModelElement_class(problem,interpretation,element);
41397 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
41398 neg find scopeDisallowsNewEStringToStringMapEntry_class(problem, interpretation);
41399 neg find isPrimitive(element);
41400} or
41401{ find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); }
41402/**
41403 * An element must be an instance of type "EGenericType class".
41404 */
41405private pattern mustInstanceOfEGenericType_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
41406 Type.name(type,"EGenericType class");
41407 find directInstanceOf(problem,interpretation,element,type);
41408}
41409private pattern scopeDisallowsNewEGenericType_class(problem:LogicProblem, interpretation:PartialInterpretation) {
41410 find interpretation(problem,interpretation);
41411 PartialInterpretation.scopes(interpretation,scope);
41412 Scope.targetTypeInterpretation(scope,typeInterpretation);
41413 Scope.maxNewElements(scope,0);
41414 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
41415 Type.name(type,"EGenericType class");
41416}
41417
41418/**
41419 * An element may be an instance of type "EGenericType class".
41420 */
41421private pattern mayInstanceOfEGenericType_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
41422{
41423 find interpretation(problem,interpretation);
41424 PartialInterpretation.newElements(interpretation,element);
41425 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
41426 neg find mustInstanceOfEObject_class(problem,interpretation,element);
41427 neg find mustInstanceOfEModelElement_class(problem,interpretation,element);
41428 neg find scopeDisallowsNewEGenericType_class(problem, interpretation);
41429 neg find isPrimitive(element);
41430} or {
41431 find interpretation(problem,interpretation);
41432 PartialInterpretation.openWorldElements(interpretation,element);
41433 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
41434 neg find mustInstanceOfEObject_class(problem,interpretation,element);
41435 neg find mustInstanceOfEModelElement_class(problem,interpretation,element);
41436 neg find scopeDisallowsNewEGenericType_class(problem, interpretation);
41437 neg find isPrimitive(element);
41438} or
41439{ find mustInstanceOfEGenericType_class(problem,interpretation,element); }
41440/**
41441 * An element must be an instance of type "ETypeParameter class".
41442 */
41443private pattern mustInstanceOfETypeParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
41444 Type.name(type,"ETypeParameter class");
41445 find directInstanceOf(problem,interpretation,element,type);
41446}
41447private pattern scopeDisallowsNewETypeParameter_class(problem:LogicProblem, interpretation:PartialInterpretation) {
41448 find interpretation(problem,interpretation);
41449 PartialInterpretation.scopes(interpretation,scope);
41450 Scope.targetTypeInterpretation(scope,typeInterpretation);
41451 Scope.maxNewElements(scope,0);
41452 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
41453 Type.name(type,"ETypeParameter class");
41454}
41455
41456/**
41457 * An element may be an instance of type "ETypeParameter class".
41458 */
41459private pattern mayInstanceOfETypeParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
41460{
41461 find interpretation(problem,interpretation);
41462 PartialInterpretation.newElements(interpretation,element);
41463 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
41464 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
41465 neg find mustInstanceOfEObject_class(problem,interpretation,element);
41466 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
41467 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
41468 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
41469 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
41470 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
41471 neg find scopeDisallowsNewETypeParameter_class(problem, interpretation);
41472 neg find isPrimitive(element);
41473} or {
41474 find interpretation(problem,interpretation);
41475 PartialInterpretation.openWorldElements(interpretation,element);
41476 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
41477 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
41478 neg find mustInstanceOfEObject_class(problem,interpretation,element);
41479 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
41480 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
41481 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
41482 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
41483 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
41484 neg find scopeDisallowsNewETypeParameter_class(problem, interpretation);
41485 neg find isPrimitive(element);
41486} or
41487{ find mustInstanceOfETypeParameter_class(problem,interpretation,element); }
41488/**
41489 * An element must be an instance of type "EModelElement class DefinedPart".
41490 */
41491private pattern mustInstanceOfEModelElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
41492 Type.name(type,"EModelElement class DefinedPart");
41493 find directInstanceOf(problem,interpretation,element,type);
41494}
41495private pattern scopeDisallowsNewEModelElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
41496 find interpretation(problem,interpretation);
41497 PartialInterpretation.scopes(interpretation,scope);
41498 Scope.targetTypeInterpretation(scope,typeInterpretation);
41499 Scope.maxNewElements(scope,0);
41500 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
41501 Type.name(type,"EModelElement class DefinedPart");
41502}
41503
41504/**
41505 * An element may be an instance of type "EModelElement class DefinedPart".
41506 */
41507private pattern mayInstanceOfEModelElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
41508{ find mustInstanceOfEModelElement_class_DefinedPart(problem,interpretation,element); }
41509/**
41510 * An element must be an instance of type "EModelElement class UndefinedPart".
41511 */
41512private pattern mustInstanceOfEModelElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
41513 Type.name(type,"EModelElement class UndefinedPart");
41514 find directInstanceOf(problem,interpretation,element,type);
41515}
41516private pattern scopeDisallowsNewEModelElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
41517 find interpretation(problem,interpretation);
41518 PartialInterpretation.scopes(interpretation,scope);
41519 Scope.targetTypeInterpretation(scope,typeInterpretation);
41520 Scope.maxNewElements(scope,0);
41521 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
41522 Type.name(type,"EModelElement class UndefinedPart");
41523}
41524
41525/**
41526 * An element may be an instance of type "EModelElement class UndefinedPart".
41527 */
41528private pattern mayInstanceOfEModelElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
41529{
41530 find interpretation(problem,interpretation);
41531 PartialInterpretation.newElements(interpretation,element);
41532 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
41533 neg find mustInstanceOfEObject_class(problem,interpretation,element);
41534 neg find mustInstanceOfENamedElement_class(problem,interpretation,element);
41535 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
41536 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
41537 neg find scopeDisallowsNewEModelElement_class_UndefinedPart(problem, interpretation);
41538 neg find isPrimitive(element);
41539} or {
41540 find interpretation(problem,interpretation);
41541 PartialInterpretation.openWorldElements(interpretation,element);
41542 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
41543 neg find mustInstanceOfEObject_class(problem,interpretation,element);
41544 neg find mustInstanceOfENamedElement_class(problem,interpretation,element);
41545 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
41546 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
41547 neg find scopeDisallowsNewEModelElement_class_UndefinedPart(problem, interpretation);
41548 neg find isPrimitive(element);
41549} or
41550{ find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); }
41551/**
41552 * An element must be an instance of type "ENamedElement class DefinedPart".
41553 */
41554private pattern mustInstanceOfENamedElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
41555 Type.name(type,"ENamedElement class DefinedPart");
41556 find directInstanceOf(problem,interpretation,element,type);
41557}
41558private pattern scopeDisallowsNewENamedElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
41559 find interpretation(problem,interpretation);
41560 PartialInterpretation.scopes(interpretation,scope);
41561 Scope.targetTypeInterpretation(scope,typeInterpretation);
41562 Scope.maxNewElements(scope,0);
41563 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
41564 Type.name(type,"ENamedElement class DefinedPart");
41565}
41566
41567/**
41568 * An element may be an instance of type "ENamedElement class DefinedPart".
41569 */
41570private pattern mayInstanceOfENamedElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
41571{ find mustInstanceOfENamedElement_class_DefinedPart(problem,interpretation,element); }
41572/**
41573 * An element must be an instance of type "ENamedElement class UndefinedPart".
41574 */
41575private pattern mustInstanceOfENamedElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
41576 Type.name(type,"ENamedElement class UndefinedPart");
41577 find directInstanceOf(problem,interpretation,element,type);
41578}
41579private pattern scopeDisallowsNewENamedElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
41580 find interpretation(problem,interpretation);
41581 PartialInterpretation.scopes(interpretation,scope);
41582 Scope.targetTypeInterpretation(scope,typeInterpretation);
41583 Scope.maxNewElements(scope,0);
41584 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
41585 Type.name(type,"ENamedElement class UndefinedPart");
41586}
41587
41588/**
41589 * An element may be an instance of type "ENamedElement class UndefinedPart".
41590 */
41591private pattern mayInstanceOfENamedElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
41592{
41593 find interpretation(problem,interpretation);
41594 PartialInterpretation.newElements(interpretation,element);
41595 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
41596 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
41597 neg find mustInstanceOfEObject_class(problem,interpretation,element);
41598 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
41599 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
41600 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
41601 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
41602 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
41603 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
41604 neg find scopeDisallowsNewENamedElement_class_UndefinedPart(problem, interpretation);
41605 neg find isPrimitive(element);
41606} or {
41607 find interpretation(problem,interpretation);
41608 PartialInterpretation.openWorldElements(interpretation,element);
41609 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
41610 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
41611 neg find mustInstanceOfEObject_class(problem,interpretation,element);
41612 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
41613 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
41614 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
41615 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
41616 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
41617 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
41618 neg find scopeDisallowsNewENamedElement_class_UndefinedPart(problem, interpretation);
41619 neg find isPrimitive(element);
41620} or
41621{ find mustInstanceOfENamedElement_class_UndefinedPart(problem,interpretation,element); }
41622/**
41623 * An element must be an instance of type "EPackage class DefinedPart".
41624 */
41625private pattern mustInstanceOfEPackage_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
41626 Type.name(type,"EPackage class DefinedPart");
41627 find directInstanceOf(problem,interpretation,element,type);
41628}
41629private pattern scopeDisallowsNewEPackage_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
41630 find interpretation(problem,interpretation);
41631 PartialInterpretation.scopes(interpretation,scope);
41632 Scope.targetTypeInterpretation(scope,typeInterpretation);
41633 Scope.maxNewElements(scope,0);
41634 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
41635 Type.name(type,"EPackage class DefinedPart");
41636}
41637
41638/**
41639 * An element may be an instance of type "EPackage class DefinedPart".
41640 */
41641private pattern mayInstanceOfEPackage_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
41642{ find mustInstanceOfEPackage_class_DefinedPart(problem,interpretation,element); }
41643/**
41644 * An element must be an instance of type "EPackage class UndefinedPart".
41645 */
41646private pattern mustInstanceOfEPackage_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
41647 Type.name(type,"EPackage class UndefinedPart");
41648 find directInstanceOf(problem,interpretation,element,type);
41649}
41650private pattern scopeDisallowsNewEPackage_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
41651 find interpretation(problem,interpretation);
41652 PartialInterpretation.scopes(interpretation,scope);
41653 Scope.targetTypeInterpretation(scope,typeInterpretation);
41654 Scope.maxNewElements(scope,0);
41655 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
41656 Type.name(type,"EPackage class UndefinedPart");
41657}
41658
41659/**
41660 * An element may be an instance of type "EPackage class UndefinedPart".
41661 */
41662private pattern mayInstanceOfEPackage_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
41663{
41664 find interpretation(problem,interpretation);
41665 PartialInterpretation.newElements(interpretation,element);
41666 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
41667 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
41668 neg find mustInstanceOfEObject_class(problem,interpretation,element);
41669 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
41670 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
41671 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
41672 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
41673 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
41674 neg find scopeDisallowsNewEPackage_class_UndefinedPart(problem, interpretation);
41675 neg find isPrimitive(element);
41676} or {
41677 find interpretation(problem,interpretation);
41678 PartialInterpretation.openWorldElements(interpretation,element);
41679 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
41680 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
41681 neg find mustInstanceOfEObject_class(problem,interpretation,element);
41682 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
41683 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
41684 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
41685 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
41686 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
41687 neg find scopeDisallowsNewEPackage_class_UndefinedPart(problem, interpretation);
41688 neg find isPrimitive(element);
41689} or
41690{ find mustInstanceOfEPackage_class_UndefinedPart(problem,interpretation,element); }
41691
41692//////////
41693// 1.2 Relation Declaration Indexers
41694//////////
41695/**
41696 * Matcher for detecting tuples t where []eAttributeType reference EAttribute(source,target)
41697 */
41698private pattern mustInRelationeAttributeType_reference_EAttribute(
41699 problem:LogicProblem, interpretation:PartialInterpretation,
41700 source: DefinedElement, target:DefinedElement)
41701{
41702 find interpretation(problem,interpretation);
41703 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
41704 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributeType reference EAttribute");
41705 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
41706 BinaryElementRelationLink.param1(link,source);
41707 BinaryElementRelationLink.param2(link,target);
41708}
41709/**
41710 * Matcher for detecting tuples t where <>eAttributeType reference EAttribute(source,target)
41711 */
41712private pattern mayInRelationeAttributeType_reference_EAttribute(
41713 problem:LogicProblem, interpretation:PartialInterpretation,
41714 source: DefinedElement, target:DefinedElement)
41715{
41716 find interpretation(problem,interpretation);
41717 // The two endpoint of the link have to exist
41718 find mayExist(problem, interpretation, source);
41719 find mayExist(problem, interpretation, target);
41720 // Type consistency
41721 find mayInstanceOfEAttribute_class(problem,interpretation,source);
41722 find mayInstanceOfEDataType_class(problem,interpretation,target);
41723 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
41724 // the upper bound of the multiplicity should be considered.
41725 numberOfExistingReferences == count find mustInRelationeAttributeType_reference_EAttribute(problem,interpretation,source,_);
41726 check(numberOfExistingReferences < 1);
41727} or {
41728 find mustInRelationeAttributeType_reference_EAttribute(problem,interpretation,source,target);
41729}
41730/**
41731 * Matcher for detecting tuples t where []details reference EAnnotation(source,target)
41732 */
41733private pattern mustInRelationdetails_reference_EAnnotation(
41734 problem:LogicProblem, interpretation:PartialInterpretation,
41735 source: DefinedElement, target:DefinedElement)
41736{
41737 find interpretation(problem,interpretation);
41738 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
41739 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"details reference EAnnotation");
41740 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
41741 BinaryElementRelationLink.param1(link,source);
41742 BinaryElementRelationLink.param2(link,target);
41743}
41744/**
41745 * Matcher for detecting tuples t where <>details reference EAnnotation(source,target)
41746 */
41747private pattern mayInRelationdetails_reference_EAnnotation(
41748 problem:LogicProblem, interpretation:PartialInterpretation,
41749 source: DefinedElement, target:DefinedElement)
41750{
41751 find interpretation(problem,interpretation);
41752 // The two endpoint of the link have to exist
41753 find mayExist(problem, interpretation, source);
41754 find mayExist(problem, interpretation, target);
41755 // Type consistency
41756 find mayInstanceOfEAnnotation_class(problem,interpretation,source);
41757 find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,target);
41758 // The reference is containment, then a new reference cannot be create if:
41759 // 1. Multiple parents
41760 neg find mustContains4(problem,interpretation,_,target);
41761 // 2. Circle in the containment hierarchy
41762 neg find mustTransitiveContains(source,target);
41763} or {
41764 find mustInRelationdetails_reference_EAnnotation(problem,interpretation,source,target);
41765}
41766/**
41767 * Matcher for detecting tuples t where []eModelElement reference EAnnotation(source,target)
41768 */
41769private pattern mustInRelationeModelElement_reference_EAnnotation(
41770 problem:LogicProblem, interpretation:PartialInterpretation,
41771 source: DefinedElement, target:DefinedElement)
41772{
41773 find interpretation(problem,interpretation);
41774 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
41775 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eModelElement reference EAnnotation");
41776 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
41777 BinaryElementRelationLink.param1(link,source);
41778 BinaryElementRelationLink.param2(link,target);
41779}
41780/**
41781 * Matcher for detecting tuples t where <>eModelElement reference EAnnotation(source,target)
41782 */
41783private pattern mayInRelationeModelElement_reference_EAnnotation(
41784 problem:LogicProblem, interpretation:PartialInterpretation,
41785 source: DefinedElement, target:DefinedElement)
41786{
41787 find interpretation(problem,interpretation);
41788 // The two endpoint of the link have to exist
41789 find mayExist(problem, interpretation, source);
41790 find mayExist(problem, interpretation, target);
41791 // Type consistency
41792 find mayInstanceOfEAnnotation_class(problem,interpretation,source);
41793 find mayInstanceOfEModelElement_class(problem,interpretation,target);
41794 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
41795 // the upper bound of the multiplicity should be considered.
41796 numberOfExistingReferences == count find mustInRelationeModelElement_reference_EAnnotation(problem,interpretation,source,_);
41797 check(numberOfExistingReferences < 1);
41798 // The eOpposite of the reference is containment, then a referene cannot be created if
41799 // 1. Multiple parents
41800 neg find mustContains4(problem,interpretation,source,_);
41801 // 2. Circle in the containment hierarchy
41802 neg find mustTransitiveContains(source,target);
41803} or {
41804 find mustInRelationeModelElement_reference_EAnnotation(problem,interpretation,source,target);
41805}
41806/**
41807 * Matcher for detecting tuples t where []contents reference EAnnotation(source,target)
41808 */
41809private pattern mustInRelationcontents_reference_EAnnotation(
41810 problem:LogicProblem, interpretation:PartialInterpretation,
41811 source: DefinedElement, target:DefinedElement)
41812{
41813 find interpretation(problem,interpretation);
41814 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
41815 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"contents reference EAnnotation");
41816 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
41817 BinaryElementRelationLink.param1(link,source);
41818 BinaryElementRelationLink.param2(link,target);
41819}
41820/**
41821 * Matcher for detecting tuples t where <>contents reference EAnnotation(source,target)
41822 */
41823private pattern mayInRelationcontents_reference_EAnnotation(
41824 problem:LogicProblem, interpretation:PartialInterpretation,
41825 source: DefinedElement, target:DefinedElement)
41826{
41827 find interpretation(problem,interpretation);
41828 // The two endpoint of the link have to exist
41829 find mayExist(problem, interpretation, source);
41830 find mayExist(problem, interpretation, target);
41831 // Type consistency
41832 find mayInstanceOfEAnnotation_class(problem,interpretation,source);
41833 find mayInstanceOfEObject_class(problem,interpretation,target);
41834 // The reference is containment, then a new reference cannot be create if:
41835 // 1. Multiple parents
41836 neg find mustContains4(problem,interpretation,_,target);
41837 // 2. Circle in the containment hierarchy
41838 neg find mustTransitiveContains(source,target);
41839} or {
41840 find mustInRelationcontents_reference_EAnnotation(problem,interpretation,source,target);
41841}
41842/**
41843 * Matcher for detecting tuples t where []references reference EAnnotation(source,target)
41844 */
41845private pattern mustInRelationreferences_reference_EAnnotation(
41846 problem:LogicProblem, interpretation:PartialInterpretation,
41847 source: DefinedElement, target:DefinedElement)
41848{
41849 find interpretation(problem,interpretation);
41850 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
41851 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"references reference EAnnotation");
41852 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
41853 BinaryElementRelationLink.param1(link,source);
41854 BinaryElementRelationLink.param2(link,target);
41855}
41856/**
41857 * Matcher for detecting tuples t where <>references reference EAnnotation(source,target)
41858 */
41859private pattern mayInRelationreferences_reference_EAnnotation(
41860 problem:LogicProblem, interpretation:PartialInterpretation,
41861 source: DefinedElement, target:DefinedElement)
41862{
41863 find interpretation(problem,interpretation);
41864 // The two endpoint of the link have to exist
41865 find mayExist(problem, interpretation, source);
41866 find mayExist(problem, interpretation, target);
41867 // Type consistency
41868 find mayInstanceOfEAnnotation_class(problem,interpretation,source);
41869 find mayInstanceOfEObject_class(problem,interpretation,target);
41870} or {
41871 find mustInRelationreferences_reference_EAnnotation(problem,interpretation,source,target);
41872}
41873/**
41874 * Matcher for detecting tuples t where []eSuperTypes reference EClass(source,target)
41875 */
41876private pattern mustInRelationeSuperTypes_reference_EClass(
41877 problem:LogicProblem, interpretation:PartialInterpretation,
41878 source: DefinedElement, target:DefinedElement)
41879{
41880 find interpretation(problem,interpretation);
41881 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
41882 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eSuperTypes reference EClass");
41883 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
41884 BinaryElementRelationLink.param1(link,source);
41885 BinaryElementRelationLink.param2(link,target);
41886}
41887/**
41888 * Matcher for detecting tuples t where <>eSuperTypes reference EClass(source,target)
41889 */
41890private pattern mayInRelationeSuperTypes_reference_EClass(
41891 problem:LogicProblem, interpretation:PartialInterpretation,
41892 source: DefinedElement, target:DefinedElement)
41893{
41894 find interpretation(problem,interpretation);
41895 // The two endpoint of the link have to exist
41896 find mayExist(problem, interpretation, source);
41897 find mayExist(problem, interpretation, target);
41898 // Type consistency
41899 find mayInstanceOfEClass_class(problem,interpretation,source);
41900 find mayInstanceOfEClass_class(problem,interpretation,target);
41901} or {
41902 find mustInRelationeSuperTypes_reference_EClass(problem,interpretation,source,target);
41903}
41904/**
41905 * Matcher for detecting tuples t where []eOperations reference EClass(source,target)
41906 */
41907private pattern mustInRelationeOperations_reference_EClass(
41908 problem:LogicProblem, interpretation:PartialInterpretation,
41909 source: DefinedElement, target:DefinedElement)
41910{
41911 find interpretation(problem,interpretation);
41912 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
41913 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eOperations reference EClass");
41914 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
41915 BinaryElementRelationLink.param1(link,source);
41916 BinaryElementRelationLink.param2(link,target);
41917}
41918/**
41919 * Matcher for detecting tuples t where <>eOperations reference EClass(source,target)
41920 */
41921private pattern mayInRelationeOperations_reference_EClass(
41922 problem:LogicProblem, interpretation:PartialInterpretation,
41923 source: DefinedElement, target:DefinedElement)
41924{
41925 find interpretation(problem,interpretation);
41926 // The two endpoint of the link have to exist
41927 find mayExist(problem, interpretation, source);
41928 find mayExist(problem, interpretation, target);
41929 // Type consistency
41930 find mayInstanceOfEClass_class(problem,interpretation,source);
41931 find mayInstanceOfEOperation_class(problem,interpretation,target);
41932 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
41933 // the upper bound of the opposite reference multiplicity should be considered.
41934 numberOfExistingOppositeReferences == count find mustInRelationeContainingClass_reference_EOperation(problem,interpretation,target,_);
41935 check(numberOfExistingOppositeReferences < 1);
41936 // The reference is containment, then a new reference cannot be create if:
41937 // 1. Multiple parents
41938 neg find mustContains4(problem,interpretation,_,target);
41939 // 2. Circle in the containment hierarchy
41940 neg find mustTransitiveContains(source,target);
41941} or {
41942 find mustInRelationeOperations_reference_EClass(problem,interpretation,source,target);
41943}
41944/**
41945 * Matcher for detecting tuples t where []eAllAttributes reference EClass(source,target)
41946 */
41947private pattern mustInRelationeAllAttributes_reference_EClass(
41948 problem:LogicProblem, interpretation:PartialInterpretation,
41949 source: DefinedElement, target:DefinedElement)
41950{
41951 find interpretation(problem,interpretation);
41952 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
41953 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllAttributes reference EClass");
41954 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
41955 BinaryElementRelationLink.param1(link,source);
41956 BinaryElementRelationLink.param2(link,target);
41957}
41958/**
41959 * Matcher for detecting tuples t where <>eAllAttributes reference EClass(source,target)
41960 */
41961private pattern mayInRelationeAllAttributes_reference_EClass(
41962 problem:LogicProblem, interpretation:PartialInterpretation,
41963 source: DefinedElement, target:DefinedElement)
41964{
41965 find interpretation(problem,interpretation);
41966 // The two endpoint of the link have to exist
41967 find mayExist(problem, interpretation, source);
41968 find mayExist(problem, interpretation, target);
41969 // Type consistency
41970 find mayInstanceOfEClass_class(problem,interpretation,source);
41971 find mayInstanceOfEAttribute_class(problem,interpretation,target);
41972} or {
41973 find mustInRelationeAllAttributes_reference_EClass(problem,interpretation,source,target);
41974}
41975/**
41976 * Matcher for detecting tuples t where []eAllReferences reference EClass(source,target)
41977 */
41978private pattern mustInRelationeAllReferences_reference_EClass(
41979 problem:LogicProblem, interpretation:PartialInterpretation,
41980 source: DefinedElement, target:DefinedElement)
41981{
41982 find interpretation(problem,interpretation);
41983 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
41984 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllReferences reference EClass");
41985 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
41986 BinaryElementRelationLink.param1(link,source);
41987 BinaryElementRelationLink.param2(link,target);
41988}
41989/**
41990 * Matcher for detecting tuples t where <>eAllReferences reference EClass(source,target)
41991 */
41992private pattern mayInRelationeAllReferences_reference_EClass(
41993 problem:LogicProblem, interpretation:PartialInterpretation,
41994 source: DefinedElement, target:DefinedElement)
41995{
41996 find interpretation(problem,interpretation);
41997 // The two endpoint of the link have to exist
41998 find mayExist(problem, interpretation, source);
41999 find mayExist(problem, interpretation, target);
42000 // Type consistency
42001 find mayInstanceOfEClass_class(problem,interpretation,source);
42002 find mayInstanceOfEReference_class(problem,interpretation,target);
42003} or {
42004 find mustInRelationeAllReferences_reference_EClass(problem,interpretation,source,target);
42005}
42006/**
42007 * Matcher for detecting tuples t where []eReferences reference EClass(source,target)
42008 */
42009private pattern mustInRelationeReferences_reference_EClass(
42010 problem:LogicProblem, interpretation:PartialInterpretation,
42011 source: DefinedElement, target:DefinedElement)
42012{
42013 find interpretation(problem,interpretation);
42014 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
42015 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferences reference EClass");
42016 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
42017 BinaryElementRelationLink.param1(link,source);
42018 BinaryElementRelationLink.param2(link,target);
42019}
42020/**
42021 * Matcher for detecting tuples t where <>eReferences reference EClass(source,target)
42022 */
42023private pattern mayInRelationeReferences_reference_EClass(
42024 problem:LogicProblem, interpretation:PartialInterpretation,
42025 source: DefinedElement, target:DefinedElement)
42026{
42027 find interpretation(problem,interpretation);
42028 // The two endpoint of the link have to exist
42029 find mayExist(problem, interpretation, source);
42030 find mayExist(problem, interpretation, target);
42031 // Type consistency
42032 find mayInstanceOfEClass_class(problem,interpretation,source);
42033 find mayInstanceOfEReference_class(problem,interpretation,target);
42034} or {
42035 find mustInRelationeReferences_reference_EClass(problem,interpretation,source,target);
42036}
42037/**
42038 * Matcher for detecting tuples t where []eAttributes reference EClass(source,target)
42039 */
42040private pattern mustInRelationeAttributes_reference_EClass(
42041 problem:LogicProblem, interpretation:PartialInterpretation,
42042 source: DefinedElement, target:DefinedElement)
42043{
42044 find interpretation(problem,interpretation);
42045 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
42046 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributes reference EClass");
42047 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
42048 BinaryElementRelationLink.param1(link,source);
42049 BinaryElementRelationLink.param2(link,target);
42050}
42051/**
42052 * Matcher for detecting tuples t where <>eAttributes reference EClass(source,target)
42053 */
42054private pattern mayInRelationeAttributes_reference_EClass(
42055 problem:LogicProblem, interpretation:PartialInterpretation,
42056 source: DefinedElement, target:DefinedElement)
42057{
42058 find interpretation(problem,interpretation);
42059 // The two endpoint of the link have to exist
42060 find mayExist(problem, interpretation, source);
42061 find mayExist(problem, interpretation, target);
42062 // Type consistency
42063 find mayInstanceOfEClass_class(problem,interpretation,source);
42064 find mayInstanceOfEAttribute_class(problem,interpretation,target);
42065} or {
42066 find mustInRelationeAttributes_reference_EClass(problem,interpretation,source,target);
42067}
42068/**
42069 * Matcher for detecting tuples t where []eAllContainments reference EClass(source,target)
42070 */
42071private pattern mustInRelationeAllContainments_reference_EClass(
42072 problem:LogicProblem, interpretation:PartialInterpretation,
42073 source: DefinedElement, target:DefinedElement)
42074{
42075 find interpretation(problem,interpretation);
42076 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
42077 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllContainments reference EClass");
42078 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
42079 BinaryElementRelationLink.param1(link,source);
42080 BinaryElementRelationLink.param2(link,target);
42081}
42082/**
42083 * Matcher for detecting tuples t where <>eAllContainments reference EClass(source,target)
42084 */
42085private pattern mayInRelationeAllContainments_reference_EClass(
42086 problem:LogicProblem, interpretation:PartialInterpretation,
42087 source: DefinedElement, target:DefinedElement)
42088{
42089 find interpretation(problem,interpretation);
42090 // The two endpoint of the link have to exist
42091 find mayExist(problem, interpretation, source);
42092 find mayExist(problem, interpretation, target);
42093 // Type consistency
42094 find mayInstanceOfEClass_class(problem,interpretation,source);
42095 find mayInstanceOfEReference_class(problem,interpretation,target);
42096} or {
42097 find mustInRelationeAllContainments_reference_EClass(problem,interpretation,source,target);
42098}
42099/**
42100 * Matcher for detecting tuples t where []eAllOperations reference EClass(source,target)
42101 */
42102private pattern mustInRelationeAllOperations_reference_EClass(
42103 problem:LogicProblem, interpretation:PartialInterpretation,
42104 source: DefinedElement, target:DefinedElement)
42105{
42106 find interpretation(problem,interpretation);
42107 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
42108 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllOperations reference EClass");
42109 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
42110 BinaryElementRelationLink.param1(link,source);
42111 BinaryElementRelationLink.param2(link,target);
42112}
42113/**
42114 * Matcher for detecting tuples t where <>eAllOperations reference EClass(source,target)
42115 */
42116private pattern mayInRelationeAllOperations_reference_EClass(
42117 problem:LogicProblem, interpretation:PartialInterpretation,
42118 source: DefinedElement, target:DefinedElement)
42119{
42120 find interpretation(problem,interpretation);
42121 // The two endpoint of the link have to exist
42122 find mayExist(problem, interpretation, source);
42123 find mayExist(problem, interpretation, target);
42124 // Type consistency
42125 find mayInstanceOfEClass_class(problem,interpretation,source);
42126 find mayInstanceOfEOperation_class(problem,interpretation,target);
42127} or {
42128 find mustInRelationeAllOperations_reference_EClass(problem,interpretation,source,target);
42129}
42130/**
42131 * Matcher for detecting tuples t where []eAllStructuralFeatures reference EClass(source,target)
42132 */
42133private pattern mustInRelationeAllStructuralFeatures_reference_EClass(
42134 problem:LogicProblem, interpretation:PartialInterpretation,
42135 source: DefinedElement, target:DefinedElement)
42136{
42137 find interpretation(problem,interpretation);
42138 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
42139 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllStructuralFeatures reference EClass");
42140 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
42141 BinaryElementRelationLink.param1(link,source);
42142 BinaryElementRelationLink.param2(link,target);
42143}
42144/**
42145 * Matcher for detecting tuples t where <>eAllStructuralFeatures reference EClass(source,target)
42146 */
42147private pattern mayInRelationeAllStructuralFeatures_reference_EClass(
42148 problem:LogicProblem, interpretation:PartialInterpretation,
42149 source: DefinedElement, target:DefinedElement)
42150{
42151 find interpretation(problem,interpretation);
42152 // The two endpoint of the link have to exist
42153 find mayExist(problem, interpretation, source);
42154 find mayExist(problem, interpretation, target);
42155 // Type consistency
42156 find mayInstanceOfEClass_class(problem,interpretation,source);
42157 find mayInstanceOfEStructuralFeature_class(problem,interpretation,target);
42158} or {
42159 find mustInRelationeAllStructuralFeatures_reference_EClass(problem,interpretation,source,target);
42160}
42161/**
42162 * Matcher for detecting tuples t where []eAllSuperTypes reference EClass(source,target)
42163 */
42164private pattern mustInRelationeAllSuperTypes_reference_EClass(
42165 problem:LogicProblem, interpretation:PartialInterpretation,
42166 source: DefinedElement, target:DefinedElement)
42167{
42168 find interpretation(problem,interpretation);
42169 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
42170 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllSuperTypes reference EClass");
42171 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
42172 BinaryElementRelationLink.param1(link,source);
42173 BinaryElementRelationLink.param2(link,target);
42174}
42175/**
42176 * Matcher for detecting tuples t where <>eAllSuperTypes reference EClass(source,target)
42177 */
42178private pattern mayInRelationeAllSuperTypes_reference_EClass(
42179 problem:LogicProblem, interpretation:PartialInterpretation,
42180 source: DefinedElement, target:DefinedElement)
42181{
42182 find interpretation(problem,interpretation);
42183 // The two endpoint of the link have to exist
42184 find mayExist(problem, interpretation, source);
42185 find mayExist(problem, interpretation, target);
42186 // Type consistency
42187 find mayInstanceOfEClass_class(problem,interpretation,source);
42188 find mayInstanceOfEClass_class(problem,interpretation,target);
42189} or {
42190 find mustInRelationeAllSuperTypes_reference_EClass(problem,interpretation,source,target);
42191}
42192/**
42193 * Matcher for detecting tuples t where []eIDAttribute reference EClass(source,target)
42194 */
42195private pattern mustInRelationeIDAttribute_reference_EClass(
42196 problem:LogicProblem, interpretation:PartialInterpretation,
42197 source: DefinedElement, target:DefinedElement)
42198{
42199 find interpretation(problem,interpretation);
42200 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
42201 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eIDAttribute reference EClass");
42202 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
42203 BinaryElementRelationLink.param1(link,source);
42204 BinaryElementRelationLink.param2(link,target);
42205}
42206/**
42207 * Matcher for detecting tuples t where <>eIDAttribute reference EClass(source,target)
42208 */
42209private pattern mayInRelationeIDAttribute_reference_EClass(
42210 problem:LogicProblem, interpretation:PartialInterpretation,
42211 source: DefinedElement, target:DefinedElement)
42212{
42213 find interpretation(problem,interpretation);
42214 // The two endpoint of the link have to exist
42215 find mayExist(problem, interpretation, source);
42216 find mayExist(problem, interpretation, target);
42217 // Type consistency
42218 find mayInstanceOfEClass_class(problem,interpretation,source);
42219 find mayInstanceOfEAttribute_class(problem,interpretation,target);
42220 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
42221 // the upper bound of the multiplicity should be considered.
42222 numberOfExistingReferences == count find mustInRelationeIDAttribute_reference_EClass(problem,interpretation,source,_);
42223 check(numberOfExistingReferences < 1);
42224} or {
42225 find mustInRelationeIDAttribute_reference_EClass(problem,interpretation,source,target);
42226}
42227/**
42228 * Matcher for detecting tuples t where []eStructuralFeatures reference EClass(source,target)
42229 */
42230private pattern mustInRelationeStructuralFeatures_reference_EClass(
42231 problem:LogicProblem, interpretation:PartialInterpretation,
42232 source: DefinedElement, target:DefinedElement)
42233{
42234 find interpretation(problem,interpretation);
42235 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
42236 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eStructuralFeatures reference EClass");
42237 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
42238 BinaryElementRelationLink.param1(link,source);
42239 BinaryElementRelationLink.param2(link,target);
42240}
42241/**
42242 * Matcher for detecting tuples t where <>eStructuralFeatures reference EClass(source,target)
42243 */
42244private pattern mayInRelationeStructuralFeatures_reference_EClass(
42245 problem:LogicProblem, interpretation:PartialInterpretation,
42246 source: DefinedElement, target:DefinedElement)
42247{
42248 find interpretation(problem,interpretation);
42249 // The two endpoint of the link have to exist
42250 find mayExist(problem, interpretation, source);
42251 find mayExist(problem, interpretation, target);
42252 // Type consistency
42253 find mayInstanceOfEClass_class(problem,interpretation,source);
42254 find mayInstanceOfEStructuralFeature_class(problem,interpretation,target);
42255 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
42256 // the upper bound of the opposite reference multiplicity should be considered.
42257 numberOfExistingOppositeReferences == count find mustInRelationeContainingClass_reference_EStructuralFeature(problem,interpretation,target,_);
42258 check(numberOfExistingOppositeReferences < 1);
42259 // The reference is containment, then a new reference cannot be create if:
42260 // 1. Multiple parents
42261 neg find mustContains4(problem,interpretation,_,target);
42262 // 2. Circle in the containment hierarchy
42263 neg find mustTransitiveContains(source,target);
42264} or {
42265 find mustInRelationeStructuralFeatures_reference_EClass(problem,interpretation,source,target);
42266}
42267/**
42268 * Matcher for detecting tuples t where []eGenericSuperTypes reference EClass(source,target)
42269 */
42270private pattern mustInRelationeGenericSuperTypes_reference_EClass(
42271 problem:LogicProblem, interpretation:PartialInterpretation,
42272 source: DefinedElement, target:DefinedElement)
42273{
42274 find interpretation(problem,interpretation);
42275 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
42276 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eGenericSuperTypes reference EClass");
42277 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
42278 BinaryElementRelationLink.param1(link,source);
42279 BinaryElementRelationLink.param2(link,target);
42280}
42281/**
42282 * Matcher for detecting tuples t where <>eGenericSuperTypes reference EClass(source,target)
42283 */
42284private pattern mayInRelationeGenericSuperTypes_reference_EClass(
42285 problem:LogicProblem, interpretation:PartialInterpretation,
42286 source: DefinedElement, target:DefinedElement)
42287{
42288 find interpretation(problem,interpretation);
42289 // The two endpoint of the link have to exist
42290 find mayExist(problem, interpretation, source);
42291 find mayExist(problem, interpretation, target);
42292 // Type consistency
42293 find mayInstanceOfEClass_class(problem,interpretation,source);
42294 find mayInstanceOfEGenericType_class(problem,interpretation,target);
42295 // The reference is containment, then a new reference cannot be create if:
42296 // 1. Multiple parents
42297 neg find mustContains4(problem,interpretation,_,target);
42298 // 2. Circle in the containment hierarchy
42299 neg find mustTransitiveContains(source,target);
42300} or {
42301 find mustInRelationeGenericSuperTypes_reference_EClass(problem,interpretation,source,target);
42302}
42303/**
42304 * Matcher for detecting tuples t where []eAllGenericSuperTypes reference EClass(source,target)
42305 */
42306private pattern mustInRelationeAllGenericSuperTypes_reference_EClass(
42307 problem:LogicProblem, interpretation:PartialInterpretation,
42308 source: DefinedElement, target:DefinedElement)
42309{
42310 find interpretation(problem,interpretation);
42311 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
42312 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllGenericSuperTypes reference EClass");
42313 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
42314 BinaryElementRelationLink.param1(link,source);
42315 BinaryElementRelationLink.param2(link,target);
42316}
42317/**
42318 * Matcher for detecting tuples t where <>eAllGenericSuperTypes reference EClass(source,target)
42319 */
42320private pattern mayInRelationeAllGenericSuperTypes_reference_EClass(
42321 problem:LogicProblem, interpretation:PartialInterpretation,
42322 source: DefinedElement, target:DefinedElement)
42323{
42324 find interpretation(problem,interpretation);
42325 // The two endpoint of the link have to exist
42326 find mayExist(problem, interpretation, source);
42327 find mayExist(problem, interpretation, target);
42328 // Type consistency
42329 find mayInstanceOfEClass_class(problem,interpretation,source);
42330 find mayInstanceOfEGenericType_class(problem,interpretation,target);
42331} or {
42332 find mustInRelationeAllGenericSuperTypes_reference_EClass(problem,interpretation,source,target);
42333}
42334/**
42335 * Matcher for detecting tuples t where []ePackage reference EClassifier(source,target)
42336 */
42337private pattern mustInRelationePackage_reference_EClassifier(
42338 problem:LogicProblem, interpretation:PartialInterpretation,
42339 source: DefinedElement, target:DefinedElement)
42340{
42341 find interpretation(problem,interpretation);
42342 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
42343 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"ePackage reference EClassifier");
42344 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
42345 BinaryElementRelationLink.param1(link,source);
42346 BinaryElementRelationLink.param2(link,target);
42347}
42348/**
42349 * Matcher for detecting tuples t where <>ePackage reference EClassifier(source,target)
42350 */
42351private pattern mayInRelationePackage_reference_EClassifier(
42352 problem:LogicProblem, interpretation:PartialInterpretation,
42353 source: DefinedElement, target:DefinedElement)
42354{
42355 find interpretation(problem,interpretation);
42356 // The two endpoint of the link have to exist
42357 find mayExist(problem, interpretation, source);
42358 find mayExist(problem, interpretation, target);
42359 // Type consistency
42360 find mayInstanceOfEClassifier_class(problem,interpretation,source);
42361 find mayInstanceOfEPackage_class(problem,interpretation,target);
42362 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
42363 // the upper bound of the multiplicity should be considered.
42364 numberOfExistingReferences == count find mustInRelationePackage_reference_EClassifier(problem,interpretation,source,_);
42365 check(numberOfExistingReferences < 1);
42366 // The eOpposite of the reference is containment, then a referene cannot be created if
42367 // 1. Multiple parents
42368 neg find mustContains4(problem,interpretation,source,_);
42369 // 2. Circle in the containment hierarchy
42370 neg find mustTransitiveContains(source,target);
42371} or {
42372 find mustInRelationePackage_reference_EClassifier(problem,interpretation,source,target);
42373}
42374/**
42375 * Matcher for detecting tuples t where []eTypeParameters reference EClassifier(source,target)
42376 */
42377private pattern mustInRelationeTypeParameters_reference_EClassifier(
42378 problem:LogicProblem, interpretation:PartialInterpretation,
42379 source: DefinedElement, target:DefinedElement)
42380{
42381 find interpretation(problem,interpretation);
42382 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
42383 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeParameters reference EClassifier");
42384 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
42385 BinaryElementRelationLink.param1(link,source);
42386 BinaryElementRelationLink.param2(link,target);
42387}
42388/**
42389 * Matcher for detecting tuples t where <>eTypeParameters reference EClassifier(source,target)
42390 */
42391private pattern mayInRelationeTypeParameters_reference_EClassifier(
42392 problem:LogicProblem, interpretation:PartialInterpretation,
42393 source: DefinedElement, target:DefinedElement)
42394{
42395 find interpretation(problem,interpretation);
42396 // The two endpoint of the link have to exist
42397 find mayExist(problem, interpretation, source);
42398 find mayExist(problem, interpretation, target);
42399 // Type consistency
42400 find mayInstanceOfEClassifier_class(problem,interpretation,source);
42401 find mayInstanceOfETypeParameter_class(problem,interpretation,target);
42402 // The reference is containment, then a new reference cannot be create if:
42403 // 1. Multiple parents
42404 neg find mustContains4(problem,interpretation,_,target);
42405 // 2. Circle in the containment hierarchy
42406 neg find mustTransitiveContains(source,target);
42407} or {
42408 find mustInRelationeTypeParameters_reference_EClassifier(problem,interpretation,source,target);
42409}
42410/**
42411 * Matcher for detecting tuples t where []eLiterals reference EEnum(source,target)
42412 */
42413private pattern mustInRelationeLiterals_reference_EEnum(
42414 problem:LogicProblem, interpretation:PartialInterpretation,
42415 source: DefinedElement, target:DefinedElement)
42416{
42417 find interpretation(problem,interpretation);
42418 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
42419 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eLiterals reference EEnum");
42420 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
42421 BinaryElementRelationLink.param1(link,source);
42422 BinaryElementRelationLink.param2(link,target);
42423}
42424/**
42425 * Matcher for detecting tuples t where <>eLiterals reference EEnum(source,target)
42426 */
42427private pattern mayInRelationeLiterals_reference_EEnum(
42428 problem:LogicProblem, interpretation:PartialInterpretation,
42429 source: DefinedElement, target:DefinedElement)
42430{
42431 find interpretation(problem,interpretation);
42432 // The two endpoint of the link have to exist
42433 find mayExist(problem, interpretation, source);
42434 find mayExist(problem, interpretation, target);
42435 // Type consistency
42436 find mayInstanceOfEEnum_class(problem,interpretation,source);
42437 find mayInstanceOfEEnumLiteral_class(problem,interpretation,target);
42438 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
42439 // the upper bound of the opposite reference multiplicity should be considered.
42440 numberOfExistingOppositeReferences == count find mustInRelationeEnum_reference_EEnumLiteral(problem,interpretation,target,_);
42441 check(numberOfExistingOppositeReferences < 1);
42442 // The reference is containment, then a new reference cannot be create if:
42443 // 1. Multiple parents
42444 neg find mustContains4(problem,interpretation,_,target);
42445 // 2. Circle in the containment hierarchy
42446 neg find mustTransitiveContains(source,target);
42447} or {
42448 find mustInRelationeLiterals_reference_EEnum(problem,interpretation,source,target);
42449}
42450/**
42451 * Matcher for detecting tuples t where []eEnum reference EEnumLiteral(source,target)
42452 */
42453private pattern mustInRelationeEnum_reference_EEnumLiteral(
42454 problem:LogicProblem, interpretation:PartialInterpretation,
42455 source: DefinedElement, target:DefinedElement)
42456{
42457 find interpretation(problem,interpretation);
42458 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
42459 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eEnum reference EEnumLiteral");
42460 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
42461 BinaryElementRelationLink.param1(link,source);
42462 BinaryElementRelationLink.param2(link,target);
42463}
42464/**
42465 * Matcher for detecting tuples t where <>eEnum reference EEnumLiteral(source,target)
42466 */
42467private pattern mayInRelationeEnum_reference_EEnumLiteral(
42468 problem:LogicProblem, interpretation:PartialInterpretation,
42469 source: DefinedElement, target:DefinedElement)
42470{
42471 find interpretation(problem,interpretation);
42472 // The two endpoint of the link have to exist
42473 find mayExist(problem, interpretation, source);
42474 find mayExist(problem, interpretation, target);
42475 // Type consistency
42476 find mayInstanceOfEEnumLiteral_class(problem,interpretation,source);
42477 find mayInstanceOfEEnum_class(problem,interpretation,target);
42478 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
42479 // the upper bound of the multiplicity should be considered.
42480 numberOfExistingReferences == count find mustInRelationeEnum_reference_EEnumLiteral(problem,interpretation,source,_);
42481 check(numberOfExistingReferences < 1);
42482 // The eOpposite of the reference is containment, then a referene cannot be created if
42483 // 1. Multiple parents
42484 neg find mustContains4(problem,interpretation,source,_);
42485 // 2. Circle in the containment hierarchy
42486 neg find mustTransitiveContains(source,target);
42487} or {
42488 find mustInRelationeEnum_reference_EEnumLiteral(problem,interpretation,source,target);
42489}
42490/**
42491 * Matcher for detecting tuples t where []eAnnotations reference EModelElement(source,target)
42492 */
42493private pattern mustInRelationeAnnotations_reference_EModelElement(
42494 problem:LogicProblem, interpretation:PartialInterpretation,
42495 source: DefinedElement, target:DefinedElement)
42496{
42497 find interpretation(problem,interpretation);
42498 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
42499 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAnnotations reference EModelElement");
42500 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
42501 BinaryElementRelationLink.param1(link,source);
42502 BinaryElementRelationLink.param2(link,target);
42503}
42504/**
42505 * Matcher for detecting tuples t where <>eAnnotations reference EModelElement(source,target)
42506 */
42507private pattern mayInRelationeAnnotations_reference_EModelElement(
42508 problem:LogicProblem, interpretation:PartialInterpretation,
42509 source: DefinedElement, target:DefinedElement)
42510{
42511 find interpretation(problem,interpretation);
42512 // The two endpoint of the link have to exist
42513 find mayExist(problem, interpretation, source);
42514 find mayExist(problem, interpretation, target);
42515 // Type consistency
42516 find mayInstanceOfEModelElement_class(problem,interpretation,source);
42517 find mayInstanceOfEAnnotation_class(problem,interpretation,target);
42518 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
42519 // the upper bound of the opposite reference multiplicity should be considered.
42520 numberOfExistingOppositeReferences == count find mustInRelationeModelElement_reference_EAnnotation(problem,interpretation,target,_);
42521 check(numberOfExistingOppositeReferences < 1);
42522 // The reference is containment, then a new reference cannot be create if:
42523 // 1. Multiple parents
42524 neg find mustContains4(problem,interpretation,_,target);
42525 // 2. Circle in the containment hierarchy
42526 neg find mustTransitiveContains(source,target);
42527} or {
42528 find mustInRelationeAnnotations_reference_EModelElement(problem,interpretation,source,target);
42529}
42530/**
42531 * Matcher for detecting tuples t where []eContainingClass reference EOperation(source,target)
42532 */
42533private pattern mustInRelationeContainingClass_reference_EOperation(
42534 problem:LogicProblem, interpretation:PartialInterpretation,
42535 source: DefinedElement, target:DefinedElement)
42536{
42537 find interpretation(problem,interpretation);
42538 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
42539 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eContainingClass reference EOperation");
42540 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
42541 BinaryElementRelationLink.param1(link,source);
42542 BinaryElementRelationLink.param2(link,target);
42543}
42544/**
42545 * Matcher for detecting tuples t where <>eContainingClass reference EOperation(source,target)
42546 */
42547private pattern mayInRelationeContainingClass_reference_EOperation(
42548 problem:LogicProblem, interpretation:PartialInterpretation,
42549 source: DefinedElement, target:DefinedElement)
42550{
42551 find interpretation(problem,interpretation);
42552 // The two endpoint of the link have to exist
42553 find mayExist(problem, interpretation, source);
42554 find mayExist(problem, interpretation, target);
42555 // Type consistency
42556 find mayInstanceOfEOperation_class(problem,interpretation,source);
42557 find mayInstanceOfEClass_class(problem,interpretation,target);
42558 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
42559 // the upper bound of the multiplicity should be considered.
42560 numberOfExistingReferences == count find mustInRelationeContainingClass_reference_EOperation(problem,interpretation,source,_);
42561 check(numberOfExistingReferences < 1);
42562 // The eOpposite of the reference is containment, then a referene cannot be created if
42563 // 1. Multiple parents
42564 neg find mustContains4(problem,interpretation,source,_);
42565 // 2. Circle in the containment hierarchy
42566 neg find mustTransitiveContains(source,target);
42567} or {
42568 find mustInRelationeContainingClass_reference_EOperation(problem,interpretation,source,target);
42569}
42570/**
42571 * Matcher for detecting tuples t where []eTypeParameters reference EOperation(source,target)
42572 */
42573private pattern mustInRelationeTypeParameters_reference_EOperation(
42574 problem:LogicProblem, interpretation:PartialInterpretation,
42575 source: DefinedElement, target:DefinedElement)
42576{
42577 find interpretation(problem,interpretation);
42578 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
42579 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeParameters reference EOperation");
42580 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
42581 BinaryElementRelationLink.param1(link,source);
42582 BinaryElementRelationLink.param2(link,target);
42583}
42584/**
42585 * Matcher for detecting tuples t where <>eTypeParameters reference EOperation(source,target)
42586 */
42587private pattern mayInRelationeTypeParameters_reference_EOperation(
42588 problem:LogicProblem, interpretation:PartialInterpretation,
42589 source: DefinedElement, target:DefinedElement)
42590{
42591 find interpretation(problem,interpretation);
42592 // The two endpoint of the link have to exist
42593 find mayExist(problem, interpretation, source);
42594 find mayExist(problem, interpretation, target);
42595 // Type consistency
42596 find mayInstanceOfEOperation_class(problem,interpretation,source);
42597 find mayInstanceOfETypeParameter_class(problem,interpretation,target);
42598 // The reference is containment, then a new reference cannot be create if:
42599 // 1. Multiple parents
42600 neg find mustContains4(problem,interpretation,_,target);
42601 // 2. Circle in the containment hierarchy
42602 neg find mustTransitiveContains(source,target);
42603} or {
42604 find mustInRelationeTypeParameters_reference_EOperation(problem,interpretation,source,target);
42605}
42606/**
42607 * Matcher for detecting tuples t where []eParameters reference EOperation(source,target)
42608 */
42609private pattern mustInRelationeParameters_reference_EOperation(
42610 problem:LogicProblem, interpretation:PartialInterpretation,
42611 source: DefinedElement, target:DefinedElement)
42612{
42613 find interpretation(problem,interpretation);
42614 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
42615 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eParameters reference EOperation");
42616 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
42617 BinaryElementRelationLink.param1(link,source);
42618 BinaryElementRelationLink.param2(link,target);
42619}
42620/**
42621 * Matcher for detecting tuples t where <>eParameters reference EOperation(source,target)
42622 */
42623private pattern mayInRelationeParameters_reference_EOperation(
42624 problem:LogicProblem, interpretation:PartialInterpretation,
42625 source: DefinedElement, target:DefinedElement)
42626{
42627 find interpretation(problem,interpretation);
42628 // The two endpoint of the link have to exist
42629 find mayExist(problem, interpretation, source);
42630 find mayExist(problem, interpretation, target);
42631 // Type consistency
42632 find mayInstanceOfEOperation_class(problem,interpretation,source);
42633 find mayInstanceOfEParameter_class(problem,interpretation,target);
42634 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
42635 // the upper bound of the opposite reference multiplicity should be considered.
42636 numberOfExistingOppositeReferences == count find mustInRelationeOperation_reference_EParameter(problem,interpretation,target,_);
42637 check(numberOfExistingOppositeReferences < 1);
42638 // The reference is containment, then a new reference cannot be create if:
42639 // 1. Multiple parents
42640 neg find mustContains4(problem,interpretation,_,target);
42641 // 2. Circle in the containment hierarchy
42642 neg find mustTransitiveContains(source,target);
42643} or {
42644 find mustInRelationeParameters_reference_EOperation(problem,interpretation,source,target);
42645}
42646/**
42647 * Matcher for detecting tuples t where []eExceptions reference EOperation(source,target)
42648 */
42649private pattern mustInRelationeExceptions_reference_EOperation(
42650 problem:LogicProblem, interpretation:PartialInterpretation,
42651 source: DefinedElement, target:DefinedElement)
42652{
42653 find interpretation(problem,interpretation);
42654 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
42655 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eExceptions reference EOperation");
42656 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
42657 BinaryElementRelationLink.param1(link,source);
42658 BinaryElementRelationLink.param2(link,target);
42659}
42660/**
42661 * Matcher for detecting tuples t where <>eExceptions reference EOperation(source,target)
42662 */
42663private pattern mayInRelationeExceptions_reference_EOperation(
42664 problem:LogicProblem, interpretation:PartialInterpretation,
42665 source: DefinedElement, target:DefinedElement)
42666{
42667 find interpretation(problem,interpretation);
42668 // The two endpoint of the link have to exist
42669 find mayExist(problem, interpretation, source);
42670 find mayExist(problem, interpretation, target);
42671 // Type consistency
42672 find mayInstanceOfEOperation_class(problem,interpretation,source);
42673 find mayInstanceOfEClassifier_class(problem,interpretation,target);
42674} or {
42675 find mustInRelationeExceptions_reference_EOperation(problem,interpretation,source,target);
42676}
42677/**
42678 * Matcher for detecting tuples t where []eGenericExceptions reference EOperation(source,target)
42679 */
42680private pattern mustInRelationeGenericExceptions_reference_EOperation(
42681 problem:LogicProblem, interpretation:PartialInterpretation,
42682 source: DefinedElement, target:DefinedElement)
42683{
42684 find interpretation(problem,interpretation);
42685 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
42686 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eGenericExceptions reference EOperation");
42687 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
42688 BinaryElementRelationLink.param1(link,source);
42689 BinaryElementRelationLink.param2(link,target);
42690}
42691/**
42692 * Matcher for detecting tuples t where <>eGenericExceptions reference EOperation(source,target)
42693 */
42694private pattern mayInRelationeGenericExceptions_reference_EOperation(
42695 problem:LogicProblem, interpretation:PartialInterpretation,
42696 source: DefinedElement, target:DefinedElement)
42697{
42698 find interpretation(problem,interpretation);
42699 // The two endpoint of the link have to exist
42700 find mayExist(problem, interpretation, source);
42701 find mayExist(problem, interpretation, target);
42702 // Type consistency
42703 find mayInstanceOfEOperation_class(problem,interpretation,source);
42704 find mayInstanceOfEGenericType_class(problem,interpretation,target);
42705 // The reference is containment, then a new reference cannot be create if:
42706 // 1. Multiple parents
42707 neg find mustContains4(problem,interpretation,_,target);
42708 // 2. Circle in the containment hierarchy
42709 neg find mustTransitiveContains(source,target);
42710} or {
42711 find mustInRelationeGenericExceptions_reference_EOperation(problem,interpretation,source,target);
42712}
42713/**
42714 * Matcher for detecting tuples t where []eClassifiers reference EPackage(source,target)
42715 */
42716private pattern mustInRelationeClassifiers_reference_EPackage(
42717 problem:LogicProblem, interpretation:PartialInterpretation,
42718 source: DefinedElement, target:DefinedElement)
42719{
42720 find interpretation(problem,interpretation);
42721 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
42722 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eClassifiers reference EPackage");
42723 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
42724 BinaryElementRelationLink.param1(link,source);
42725 BinaryElementRelationLink.param2(link,target);
42726}
42727/**
42728 * Matcher for detecting tuples t where <>eClassifiers reference EPackage(source,target)
42729 */
42730private pattern mayInRelationeClassifiers_reference_EPackage(
42731 problem:LogicProblem, interpretation:PartialInterpretation,
42732 source: DefinedElement, target:DefinedElement)
42733{
42734 find interpretation(problem,interpretation);
42735 // The two endpoint of the link have to exist
42736 find mayExist(problem, interpretation, source);
42737 find mayExist(problem, interpretation, target);
42738 // Type consistency
42739 find mayInstanceOfEPackage_class(problem,interpretation,source);
42740 find mayInstanceOfEClassifier_class(problem,interpretation,target);
42741 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
42742 // the upper bound of the opposite reference multiplicity should be considered.
42743 numberOfExistingOppositeReferences == count find mustInRelationePackage_reference_EClassifier(problem,interpretation,target,_);
42744 check(numberOfExistingOppositeReferences < 1);
42745 // The reference is containment, then a new reference cannot be create if:
42746 // 1. Multiple parents
42747 neg find mustContains4(problem,interpretation,_,target);
42748 // 2. Circle in the containment hierarchy
42749 neg find mustTransitiveContains(source,target);
42750} or {
42751 find mustInRelationeClassifiers_reference_EPackage(problem,interpretation,source,target);
42752}
42753/**
42754 * Matcher for detecting tuples t where []eSubpackages reference EPackage(source,target)
42755 */
42756private pattern mustInRelationeSubpackages_reference_EPackage(
42757 problem:LogicProblem, interpretation:PartialInterpretation,
42758 source: DefinedElement, target:DefinedElement)
42759{
42760 find interpretation(problem,interpretation);
42761 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
42762 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eSubpackages reference EPackage");
42763 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
42764 BinaryElementRelationLink.param1(link,source);
42765 BinaryElementRelationLink.param2(link,target);
42766}
42767/**
42768 * Matcher for detecting tuples t where <>eSubpackages reference EPackage(source,target)
42769 */
42770private pattern mayInRelationeSubpackages_reference_EPackage(
42771 problem:LogicProblem, interpretation:PartialInterpretation,
42772 source: DefinedElement, target:DefinedElement)
42773{
42774 find interpretation(problem,interpretation);
42775 // The two endpoint of the link have to exist
42776 find mayExist(problem, interpretation, source);
42777 find mayExist(problem, interpretation, target);
42778 // Type consistency
42779 find mayInstanceOfEPackage_class(problem,interpretation,source);
42780 find mayInstanceOfEPackage_class(problem,interpretation,target);
42781 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
42782 // the upper bound of the opposite reference multiplicity should be considered.
42783 numberOfExistingOppositeReferences == count find mustInRelationeSuperPackage_reference_EPackage(problem,interpretation,target,_);
42784 check(numberOfExistingOppositeReferences < 1);
42785 // The reference is containment, then a new reference cannot be create if:
42786 // 1. Multiple parents
42787 neg find mustContains4(problem,interpretation,_,target);
42788 // 2. Circle in the containment hierarchy
42789 neg find mustTransitiveContains(source,target);
42790} or {
42791 find mustInRelationeSubpackages_reference_EPackage(problem,interpretation,source,target);
42792}
42793/**
42794 * Matcher for detecting tuples t where []eSuperPackage reference EPackage(source,target)
42795 */
42796private pattern mustInRelationeSuperPackage_reference_EPackage(
42797 problem:LogicProblem, interpretation:PartialInterpretation,
42798 source: DefinedElement, target:DefinedElement)
42799{
42800 find interpretation(problem,interpretation);
42801 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
42802 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eSuperPackage reference EPackage");
42803 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
42804 BinaryElementRelationLink.param1(link,source);
42805 BinaryElementRelationLink.param2(link,target);
42806}
42807/**
42808 * Matcher for detecting tuples t where <>eSuperPackage reference EPackage(source,target)
42809 */
42810private pattern mayInRelationeSuperPackage_reference_EPackage(
42811 problem:LogicProblem, interpretation:PartialInterpretation,
42812 source: DefinedElement, target:DefinedElement)
42813{
42814 find interpretation(problem,interpretation);
42815 // The two endpoint of the link have to exist
42816 find mayExist(problem, interpretation, source);
42817 find mayExist(problem, interpretation, target);
42818 // Type consistency
42819 find mayInstanceOfEPackage_class(problem,interpretation,source);
42820 find mayInstanceOfEPackage_class(problem,interpretation,target);
42821 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
42822 // the upper bound of the multiplicity should be considered.
42823 numberOfExistingReferences == count find mustInRelationeSuperPackage_reference_EPackage(problem,interpretation,source,_);
42824 check(numberOfExistingReferences < 1);
42825 // The eOpposite of the reference is containment, then a referene cannot be created if
42826 // 1. Multiple parents
42827 neg find mustContains4(problem,interpretation,source,_);
42828 // 2. Circle in the containment hierarchy
42829 neg find mustTransitiveContains(source,target);
42830} or {
42831 find mustInRelationeSuperPackage_reference_EPackage(problem,interpretation,source,target);
42832}
42833/**
42834 * Matcher for detecting tuples t where []eOperation reference EParameter(source,target)
42835 */
42836private pattern mustInRelationeOperation_reference_EParameter(
42837 problem:LogicProblem, interpretation:PartialInterpretation,
42838 source: DefinedElement, target:DefinedElement)
42839{
42840 find interpretation(problem,interpretation);
42841 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
42842 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eOperation reference EParameter");
42843 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
42844 BinaryElementRelationLink.param1(link,source);
42845 BinaryElementRelationLink.param2(link,target);
42846}
42847/**
42848 * Matcher for detecting tuples t where <>eOperation reference EParameter(source,target)
42849 */
42850private pattern mayInRelationeOperation_reference_EParameter(
42851 problem:LogicProblem, interpretation:PartialInterpretation,
42852 source: DefinedElement, target:DefinedElement)
42853{
42854 find interpretation(problem,interpretation);
42855 // The two endpoint of the link have to exist
42856 find mayExist(problem, interpretation, source);
42857 find mayExist(problem, interpretation, target);
42858 // Type consistency
42859 find mayInstanceOfEParameter_class(problem,interpretation,source);
42860 find mayInstanceOfEOperation_class(problem,interpretation,target);
42861 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
42862 // the upper bound of the multiplicity should be considered.
42863 numberOfExistingReferences == count find mustInRelationeOperation_reference_EParameter(problem,interpretation,source,_);
42864 check(numberOfExistingReferences < 1);
42865 // The eOpposite of the reference is containment, then a referene cannot be created if
42866 // 1. Multiple parents
42867 neg find mustContains4(problem,interpretation,source,_);
42868 // 2. Circle in the containment hierarchy
42869 neg find mustTransitiveContains(source,target);
42870} or {
42871 find mustInRelationeOperation_reference_EParameter(problem,interpretation,source,target);
42872}
42873/**
42874 * Matcher for detecting tuples t where []eOpposite reference EReference(source,target)
42875 */
42876private pattern mustInRelationeOpposite_reference_EReference(
42877 problem:LogicProblem, interpretation:PartialInterpretation,
42878 source: DefinedElement, target:DefinedElement)
42879{
42880 find interpretation(problem,interpretation);
42881 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
42882 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eOpposite reference EReference");
42883 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
42884 BinaryElementRelationLink.param1(link,source);
42885 BinaryElementRelationLink.param2(link,target);
42886}
42887/**
42888 * Matcher for detecting tuples t where <>eOpposite reference EReference(source,target)
42889 */
42890private pattern mayInRelationeOpposite_reference_EReference(
42891 problem:LogicProblem, interpretation:PartialInterpretation,
42892 source: DefinedElement, target:DefinedElement)
42893{
42894 find interpretation(problem,interpretation);
42895 // The two endpoint of the link have to exist
42896 find mayExist(problem, interpretation, source);
42897 find mayExist(problem, interpretation, target);
42898 // Type consistency
42899 find mayInstanceOfEReference_class(problem,interpretation,source);
42900 find mayInstanceOfEReference_class(problem,interpretation,target);
42901 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
42902 // the upper bound of the multiplicity should be considered.
42903 numberOfExistingReferences == count find mustInRelationeOpposite_reference_EReference(problem,interpretation,source,_);
42904 check(numberOfExistingReferences < 1);
42905} or {
42906 find mustInRelationeOpposite_reference_EReference(problem,interpretation,source,target);
42907}
42908/**
42909 * Matcher for detecting tuples t where []eReferenceType reference EReference(source,target)
42910 */
42911private pattern mustInRelationeReferenceType_reference_EReference(
42912 problem:LogicProblem, interpretation:PartialInterpretation,
42913 source: DefinedElement, target:DefinedElement)
42914{
42915 find interpretation(problem,interpretation);
42916 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
42917 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferenceType reference EReference");
42918 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
42919 BinaryElementRelationLink.param1(link,source);
42920 BinaryElementRelationLink.param2(link,target);
42921}
42922/**
42923 * Matcher for detecting tuples t where <>eReferenceType reference EReference(source,target)
42924 */
42925private pattern mayInRelationeReferenceType_reference_EReference(
42926 problem:LogicProblem, interpretation:PartialInterpretation,
42927 source: DefinedElement, target:DefinedElement)
42928{
42929 find interpretation(problem,interpretation);
42930 // The two endpoint of the link have to exist
42931 find mayExist(problem, interpretation, source);
42932 find mayExist(problem, interpretation, target);
42933 // Type consistency
42934 find mayInstanceOfEReference_class(problem,interpretation,source);
42935 find mayInstanceOfEClass_class(problem,interpretation,target);
42936 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
42937 // the upper bound of the multiplicity should be considered.
42938 numberOfExistingReferences == count find mustInRelationeReferenceType_reference_EReference(problem,interpretation,source,_);
42939 check(numberOfExistingReferences < 1);
42940} or {
42941 find mustInRelationeReferenceType_reference_EReference(problem,interpretation,source,target);
42942}
42943/**
42944 * Matcher for detecting tuples t where []eKeys reference EReference(source,target)
42945 */
42946private pattern mustInRelationeKeys_reference_EReference(
42947 problem:LogicProblem, interpretation:PartialInterpretation,
42948 source: DefinedElement, target:DefinedElement)
42949{
42950 find interpretation(problem,interpretation);
42951 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
42952 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eKeys reference EReference");
42953 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
42954 BinaryElementRelationLink.param1(link,source);
42955 BinaryElementRelationLink.param2(link,target);
42956}
42957/**
42958 * Matcher for detecting tuples t where <>eKeys reference EReference(source,target)
42959 */
42960private pattern mayInRelationeKeys_reference_EReference(
42961 problem:LogicProblem, interpretation:PartialInterpretation,
42962 source: DefinedElement, target:DefinedElement)
42963{
42964 find interpretation(problem,interpretation);
42965 // The two endpoint of the link have to exist
42966 find mayExist(problem, interpretation, source);
42967 find mayExist(problem, interpretation, target);
42968 // Type consistency
42969 find mayInstanceOfEReference_class(problem,interpretation,source);
42970 find mayInstanceOfEAttribute_class(problem,interpretation,target);
42971} or {
42972 find mustInRelationeKeys_reference_EReference(problem,interpretation,source,target);
42973}
42974/**
42975 * Matcher for detecting tuples t where []eContainingClass reference EStructuralFeature(source,target)
42976 */
42977private pattern mustInRelationeContainingClass_reference_EStructuralFeature(
42978 problem:LogicProblem, interpretation:PartialInterpretation,
42979 source: DefinedElement, target:DefinedElement)
42980{
42981 find interpretation(problem,interpretation);
42982 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
42983 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eContainingClass reference EStructuralFeature");
42984 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
42985 BinaryElementRelationLink.param1(link,source);
42986 BinaryElementRelationLink.param2(link,target);
42987}
42988/**
42989 * Matcher for detecting tuples t where <>eContainingClass reference EStructuralFeature(source,target)
42990 */
42991private pattern mayInRelationeContainingClass_reference_EStructuralFeature(
42992 problem:LogicProblem, interpretation:PartialInterpretation,
42993 source: DefinedElement, target:DefinedElement)
42994{
42995 find interpretation(problem,interpretation);
42996 // The two endpoint of the link have to exist
42997 find mayExist(problem, interpretation, source);
42998 find mayExist(problem, interpretation, target);
42999 // Type consistency
43000 find mayInstanceOfEStructuralFeature_class(problem,interpretation,source);
43001 find mayInstanceOfEClass_class(problem,interpretation,target);
43002 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
43003 // the upper bound of the multiplicity should be considered.
43004 numberOfExistingReferences == count find mustInRelationeContainingClass_reference_EStructuralFeature(problem,interpretation,source,_);
43005 check(numberOfExistingReferences < 1);
43006 // The eOpposite of the reference is containment, then a referene cannot be created if
43007 // 1. Multiple parents
43008 neg find mustContains4(problem,interpretation,source,_);
43009 // 2. Circle in the containment hierarchy
43010 neg find mustTransitiveContains(source,target);
43011} or {
43012 find mustInRelationeContainingClass_reference_EStructuralFeature(problem,interpretation,source,target);
43013}
43014/**
43015 * Matcher for detecting tuples t where []eType reference ETypedElement(source,target)
43016 */
43017private pattern mustInRelationeType_reference_ETypedElement(
43018 problem:LogicProblem, interpretation:PartialInterpretation,
43019 source: DefinedElement, target:DefinedElement)
43020{
43021 find interpretation(problem,interpretation);
43022 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
43023 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eType reference ETypedElement");
43024 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
43025 BinaryElementRelationLink.param1(link,source);
43026 BinaryElementRelationLink.param2(link,target);
43027}
43028/**
43029 * Matcher for detecting tuples t where <>eType reference ETypedElement(source,target)
43030 */
43031private pattern mayInRelationeType_reference_ETypedElement(
43032 problem:LogicProblem, interpretation:PartialInterpretation,
43033 source: DefinedElement, target:DefinedElement)
43034{
43035 find interpretation(problem,interpretation);
43036 // The two endpoint of the link have to exist
43037 find mayExist(problem, interpretation, source);
43038 find mayExist(problem, interpretation, target);
43039 // Type consistency
43040 find mayInstanceOfETypedElement_class(problem,interpretation,source);
43041 find mayInstanceOfEClassifier_class(problem,interpretation,target);
43042 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
43043 // the upper bound of the multiplicity should be considered.
43044 numberOfExistingReferences == count find mustInRelationeType_reference_ETypedElement(problem,interpretation,source,_);
43045 check(numberOfExistingReferences < 1);
43046} or {
43047 find mustInRelationeType_reference_ETypedElement(problem,interpretation,source,target);
43048}
43049/**
43050 * Matcher for detecting tuples t where []eGenericType reference ETypedElement(source,target)
43051 */
43052private pattern mustInRelationeGenericType_reference_ETypedElement(
43053 problem:LogicProblem, interpretation:PartialInterpretation,
43054 source: DefinedElement, target:DefinedElement)
43055{
43056 find interpretation(problem,interpretation);
43057 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
43058 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eGenericType reference ETypedElement");
43059 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
43060 BinaryElementRelationLink.param1(link,source);
43061 BinaryElementRelationLink.param2(link,target);
43062}
43063/**
43064 * Matcher for detecting tuples t where <>eGenericType reference ETypedElement(source,target)
43065 */
43066private pattern mayInRelationeGenericType_reference_ETypedElement(
43067 problem:LogicProblem, interpretation:PartialInterpretation,
43068 source: DefinedElement, target:DefinedElement)
43069{
43070 find interpretation(problem,interpretation);
43071 // The two endpoint of the link have to exist
43072 find mayExist(problem, interpretation, source);
43073 find mayExist(problem, interpretation, target);
43074 // Type consistency
43075 find mayInstanceOfETypedElement_class(problem,interpretation,source);
43076 find mayInstanceOfEGenericType_class(problem,interpretation,target);
43077 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
43078 // the upper bound of the multiplicity should be considered.
43079 numberOfExistingReferences == count find mustInRelationeGenericType_reference_ETypedElement(problem,interpretation,source,_);
43080 check(numberOfExistingReferences < 1);
43081 // The reference is containment, then a new reference cannot be create if:
43082 // 1. Multiple parents
43083 neg find mustContains4(problem,interpretation,_,target);
43084 // 2. Circle in the containment hierarchy
43085 neg find mustTransitiveContains(source,target);
43086} or {
43087 find mustInRelationeGenericType_reference_ETypedElement(problem,interpretation,source,target);
43088}
43089/**
43090 * Matcher for detecting tuples t where []eUpperBound reference EGenericType(source,target)
43091 */
43092private pattern mustInRelationeUpperBound_reference_EGenericType(
43093 problem:LogicProblem, interpretation:PartialInterpretation,
43094 source: DefinedElement, target:DefinedElement)
43095{
43096 find interpretation(problem,interpretation);
43097 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
43098 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eUpperBound reference EGenericType");
43099 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
43100 BinaryElementRelationLink.param1(link,source);
43101 BinaryElementRelationLink.param2(link,target);
43102}
43103/**
43104 * Matcher for detecting tuples t where <>eUpperBound reference EGenericType(source,target)
43105 */
43106private pattern mayInRelationeUpperBound_reference_EGenericType(
43107 problem:LogicProblem, interpretation:PartialInterpretation,
43108 source: DefinedElement, target:DefinedElement)
43109{
43110 find interpretation(problem,interpretation);
43111 // The two endpoint of the link have to exist
43112 find mayExist(problem, interpretation, source);
43113 find mayExist(problem, interpretation, target);
43114 // Type consistency
43115 find mayInstanceOfEGenericType_class(problem,interpretation,source);
43116 find mayInstanceOfEGenericType_class(problem,interpretation,target);
43117 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
43118 // the upper bound of the multiplicity should be considered.
43119 numberOfExistingReferences == count find mustInRelationeUpperBound_reference_EGenericType(problem,interpretation,source,_);
43120 check(numberOfExistingReferences < 1);
43121 // The reference is containment, then a new reference cannot be create if:
43122 // 1. Multiple parents
43123 neg find mustContains4(problem,interpretation,_,target);
43124 // 2. Circle in the containment hierarchy
43125 neg find mustTransitiveContains(source,target);
43126} or {
43127 find mustInRelationeUpperBound_reference_EGenericType(problem,interpretation,source,target);
43128}
43129/**
43130 * Matcher for detecting tuples t where []eTypeArguments reference EGenericType(source,target)
43131 */
43132private pattern mustInRelationeTypeArguments_reference_EGenericType(
43133 problem:LogicProblem, interpretation:PartialInterpretation,
43134 source: DefinedElement, target:DefinedElement)
43135{
43136 find interpretation(problem,interpretation);
43137 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
43138 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeArguments reference EGenericType");
43139 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
43140 BinaryElementRelationLink.param1(link,source);
43141 BinaryElementRelationLink.param2(link,target);
43142}
43143/**
43144 * Matcher for detecting tuples t where <>eTypeArguments reference EGenericType(source,target)
43145 */
43146private pattern mayInRelationeTypeArguments_reference_EGenericType(
43147 problem:LogicProblem, interpretation:PartialInterpretation,
43148 source: DefinedElement, target:DefinedElement)
43149{
43150 find interpretation(problem,interpretation);
43151 // The two endpoint of the link have to exist
43152 find mayExist(problem, interpretation, source);
43153 find mayExist(problem, interpretation, target);
43154 // Type consistency
43155 find mayInstanceOfEGenericType_class(problem,interpretation,source);
43156 find mayInstanceOfEGenericType_class(problem,interpretation,target);
43157 // The reference is containment, then a new reference cannot be create if:
43158 // 1. Multiple parents
43159 neg find mustContains4(problem,interpretation,_,target);
43160 // 2. Circle in the containment hierarchy
43161 neg find mustTransitiveContains(source,target);
43162} or {
43163 find mustInRelationeTypeArguments_reference_EGenericType(problem,interpretation,source,target);
43164}
43165/**
43166 * Matcher for detecting tuples t where []eRawType reference EGenericType(source,target)
43167 */
43168private pattern mustInRelationeRawType_reference_EGenericType(
43169 problem:LogicProblem, interpretation:PartialInterpretation,
43170 source: DefinedElement, target:DefinedElement)
43171{
43172 find interpretation(problem,interpretation);
43173 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
43174 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eRawType reference EGenericType");
43175 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
43176 BinaryElementRelationLink.param1(link,source);
43177 BinaryElementRelationLink.param2(link,target);
43178}
43179/**
43180 * Matcher for detecting tuples t where <>eRawType reference EGenericType(source,target)
43181 */
43182private pattern mayInRelationeRawType_reference_EGenericType(
43183 problem:LogicProblem, interpretation:PartialInterpretation,
43184 source: DefinedElement, target:DefinedElement)
43185{
43186 find interpretation(problem,interpretation);
43187 // The two endpoint of the link have to exist
43188 find mayExist(problem, interpretation, source);
43189 find mayExist(problem, interpretation, target);
43190 // Type consistency
43191 find mayInstanceOfEGenericType_class(problem,interpretation,source);
43192 find mayInstanceOfEClassifier_class(problem,interpretation,target);
43193 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
43194 // the upper bound of the multiplicity should be considered.
43195 numberOfExistingReferences == count find mustInRelationeRawType_reference_EGenericType(problem,interpretation,source,_);
43196 check(numberOfExistingReferences < 1);
43197} or {
43198 find mustInRelationeRawType_reference_EGenericType(problem,interpretation,source,target);
43199}
43200/**
43201 * Matcher for detecting tuples t where []eLowerBound reference EGenericType(source,target)
43202 */
43203private pattern mustInRelationeLowerBound_reference_EGenericType(
43204 problem:LogicProblem, interpretation:PartialInterpretation,
43205 source: DefinedElement, target:DefinedElement)
43206{
43207 find interpretation(problem,interpretation);
43208 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
43209 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eLowerBound reference EGenericType");
43210 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
43211 BinaryElementRelationLink.param1(link,source);
43212 BinaryElementRelationLink.param2(link,target);
43213}
43214/**
43215 * Matcher for detecting tuples t where <>eLowerBound reference EGenericType(source,target)
43216 */
43217private pattern mayInRelationeLowerBound_reference_EGenericType(
43218 problem:LogicProblem, interpretation:PartialInterpretation,
43219 source: DefinedElement, target:DefinedElement)
43220{
43221 find interpretation(problem,interpretation);
43222 // The two endpoint of the link have to exist
43223 find mayExist(problem, interpretation, source);
43224 find mayExist(problem, interpretation, target);
43225 // Type consistency
43226 find mayInstanceOfEGenericType_class(problem,interpretation,source);
43227 find mayInstanceOfEGenericType_class(problem,interpretation,target);
43228 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
43229 // the upper bound of the multiplicity should be considered.
43230 numberOfExistingReferences == count find mustInRelationeLowerBound_reference_EGenericType(problem,interpretation,source,_);
43231 check(numberOfExistingReferences < 1);
43232 // The reference is containment, then a new reference cannot be create if:
43233 // 1. Multiple parents
43234 neg find mustContains4(problem,interpretation,_,target);
43235 // 2. Circle in the containment hierarchy
43236 neg find mustTransitiveContains(source,target);
43237} or {
43238 find mustInRelationeLowerBound_reference_EGenericType(problem,interpretation,source,target);
43239}
43240/**
43241 * Matcher for detecting tuples t where []eTypeParameter reference EGenericType(source,target)
43242 */
43243private pattern mustInRelationeTypeParameter_reference_EGenericType(
43244 problem:LogicProblem, interpretation:PartialInterpretation,
43245 source: DefinedElement, target:DefinedElement)
43246{
43247 find interpretation(problem,interpretation);
43248 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
43249 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeParameter reference EGenericType");
43250 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
43251 BinaryElementRelationLink.param1(link,source);
43252 BinaryElementRelationLink.param2(link,target);
43253}
43254/**
43255 * Matcher for detecting tuples t where <>eTypeParameter reference EGenericType(source,target)
43256 */
43257private pattern mayInRelationeTypeParameter_reference_EGenericType(
43258 problem:LogicProblem, interpretation:PartialInterpretation,
43259 source: DefinedElement, target:DefinedElement)
43260{
43261 find interpretation(problem,interpretation);
43262 // The two endpoint of the link have to exist
43263 find mayExist(problem, interpretation, source);
43264 find mayExist(problem, interpretation, target);
43265 // Type consistency
43266 find mayInstanceOfEGenericType_class(problem,interpretation,source);
43267 find mayInstanceOfETypeParameter_class(problem,interpretation,target);
43268 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
43269 // the upper bound of the multiplicity should be considered.
43270 numberOfExistingReferences == count find mustInRelationeTypeParameter_reference_EGenericType(problem,interpretation,source,_);
43271 check(numberOfExistingReferences < 1);
43272} or {
43273 find mustInRelationeTypeParameter_reference_EGenericType(problem,interpretation,source,target);
43274}
43275/**
43276 * Matcher for detecting tuples t where []eClassifier reference EGenericType(source,target)
43277 */
43278private pattern mustInRelationeClassifier_reference_EGenericType(
43279 problem:LogicProblem, interpretation:PartialInterpretation,
43280 source: DefinedElement, target:DefinedElement)
43281{
43282 find interpretation(problem,interpretation);
43283 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
43284 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eClassifier reference EGenericType");
43285 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
43286 BinaryElementRelationLink.param1(link,source);
43287 BinaryElementRelationLink.param2(link,target);
43288}
43289/**
43290 * Matcher for detecting tuples t where <>eClassifier reference EGenericType(source,target)
43291 */
43292private pattern mayInRelationeClassifier_reference_EGenericType(
43293 problem:LogicProblem, interpretation:PartialInterpretation,
43294 source: DefinedElement, target:DefinedElement)
43295{
43296 find interpretation(problem,interpretation);
43297 // The two endpoint of the link have to exist
43298 find mayExist(problem, interpretation, source);
43299 find mayExist(problem, interpretation, target);
43300 // Type consistency
43301 find mayInstanceOfEGenericType_class(problem,interpretation,source);
43302 find mayInstanceOfEClassifier_class(problem,interpretation,target);
43303 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
43304 // the upper bound of the multiplicity should be considered.
43305 numberOfExistingReferences == count find mustInRelationeClassifier_reference_EGenericType(problem,interpretation,source,_);
43306 check(numberOfExistingReferences < 1);
43307} or {
43308 find mustInRelationeClassifier_reference_EGenericType(problem,interpretation,source,target);
43309}
43310/**
43311 * Matcher for detecting tuples t where []eBounds reference ETypeParameter(source,target)
43312 */
43313private pattern mustInRelationeBounds_reference_ETypeParameter(
43314 problem:LogicProblem, interpretation:PartialInterpretation,
43315 source: DefinedElement, target:DefinedElement)
43316{
43317 find interpretation(problem,interpretation);
43318 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
43319 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eBounds reference ETypeParameter");
43320 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
43321 BinaryElementRelationLink.param1(link,source);
43322 BinaryElementRelationLink.param2(link,target);
43323}
43324/**
43325 * Matcher for detecting tuples t where <>eBounds reference ETypeParameter(source,target)
43326 */
43327private pattern mayInRelationeBounds_reference_ETypeParameter(
43328 problem:LogicProblem, interpretation:PartialInterpretation,
43329 source: DefinedElement, target:DefinedElement)
43330{
43331 find interpretation(problem,interpretation);
43332 // The two endpoint of the link have to exist
43333 find mayExist(problem, interpretation, source);
43334 find mayExist(problem, interpretation, target);
43335 // Type consistency
43336 find mayInstanceOfETypeParameter_class(problem,interpretation,source);
43337 find mayInstanceOfEGenericType_class(problem,interpretation,target);
43338 // The reference is containment, then a new reference cannot be create if:
43339 // 1. Multiple parents
43340 neg find mustContains4(problem,interpretation,_,target);
43341 // 2. Circle in the containment hierarchy
43342 neg find mustTransitiveContains(source,target);
43343} or {
43344 find mustInRelationeBounds_reference_ETypeParameter(problem,interpretation,source,target);
43345}
43346/**
43347 * Matcher for detecting tuples t where []iD attribute EAttribute(source,target)
43348 */
43349private pattern mustInRelationiD_attribute_EAttribute(
43350 problem:LogicProblem, interpretation:PartialInterpretation,
43351 source: DefinedElement, target:DefinedElement)
43352{
43353 find interpretation(problem,interpretation);
43354 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
43355 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"iD attribute EAttribute");
43356 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
43357 BinaryElementRelationLink.param1(link,source);
43358 BinaryElementRelationLink.param2(link,target);
43359}
43360/**
43361 * Matcher for detecting tuples t where <>iD attribute EAttribute(source,target)
43362 */
43363private pattern mayInRelationiD_attribute_EAttribute(
43364 problem:LogicProblem, interpretation:PartialInterpretation,
43365 source: DefinedElement, target:DefinedElement)
43366{
43367 find interpretation(problem,interpretation);
43368 // The two endpoint of the link have to exist
43369 find mayExist(problem, interpretation, source);
43370 find mayExist(problem, interpretation, target);
43371 // Type consistency
43372 find mayInstanceOfEAttribute_class(problem,interpretation,source);
43373 BooleanElement(target);
43374 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
43375 // the upper bound of the multiplicity should be considered.
43376 numberOfExistingReferences == count find mustInRelationiD_attribute_EAttribute(problem,interpretation,source,_);
43377 check(numberOfExistingReferences < 1);
43378} or {
43379 find mustInRelationiD_attribute_EAttribute(problem,interpretation,source,target);
43380}
43381/**
43382 * Matcher for detecting tuples t where []source attribute EAnnotation(source,target)
43383 */
43384private pattern mustInRelationsource_attribute_EAnnotation(
43385 problem:LogicProblem, interpretation:PartialInterpretation,
43386 source: DefinedElement, target:DefinedElement)
43387{
43388 find interpretation(problem,interpretation);
43389 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
43390 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"source attribute EAnnotation");
43391 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
43392 BinaryElementRelationLink.param1(link,source);
43393 BinaryElementRelationLink.param2(link,target);
43394}
43395/**
43396 * Matcher for detecting tuples t where <>source attribute EAnnotation(source,target)
43397 */
43398private pattern mayInRelationsource_attribute_EAnnotation(
43399 problem:LogicProblem, interpretation:PartialInterpretation,
43400 source: DefinedElement, target:DefinedElement)
43401{
43402 find interpretation(problem,interpretation);
43403 // The two endpoint of the link have to exist
43404 find mayExist(problem, interpretation, source);
43405 find mayExist(problem, interpretation, target);
43406 // Type consistency
43407 find mayInstanceOfEAnnotation_class(problem,interpretation,source);
43408 StringElement(target);
43409 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
43410 // the upper bound of the multiplicity should be considered.
43411 numberOfExistingReferences == count find mustInRelationsource_attribute_EAnnotation(problem,interpretation,source,_);
43412 check(numberOfExistingReferences < 1);
43413} or {
43414 find mustInRelationsource_attribute_EAnnotation(problem,interpretation,source,target);
43415}
43416/**
43417 * Matcher for detecting tuples t where []abstract attribute EClass(source,target)
43418 */
43419private pattern mustInRelationabstract_attribute_EClass(
43420 problem:LogicProblem, interpretation:PartialInterpretation,
43421 source: DefinedElement, target:DefinedElement)
43422{
43423 find interpretation(problem,interpretation);
43424 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
43425 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"abstract attribute EClass");
43426 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
43427 BinaryElementRelationLink.param1(link,source);
43428 BinaryElementRelationLink.param2(link,target);
43429}
43430/**
43431 * Matcher for detecting tuples t where <>abstract attribute EClass(source,target)
43432 */
43433private pattern mayInRelationabstract_attribute_EClass(
43434 problem:LogicProblem, interpretation:PartialInterpretation,
43435 source: DefinedElement, target:DefinedElement)
43436{
43437 find interpretation(problem,interpretation);
43438 // The two endpoint of the link have to exist
43439 find mayExist(problem, interpretation, source);
43440 find mayExist(problem, interpretation, target);
43441 // Type consistency
43442 find mayInstanceOfEClass_class(problem,interpretation,source);
43443 BooleanElement(target);
43444 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
43445 // the upper bound of the multiplicity should be considered.
43446 numberOfExistingReferences == count find mustInRelationabstract_attribute_EClass(problem,interpretation,source,_);
43447 check(numberOfExistingReferences < 1);
43448} or {
43449 find mustInRelationabstract_attribute_EClass(problem,interpretation,source,target);
43450}
43451/**
43452 * Matcher for detecting tuples t where []interface attribute EClass(source,target)
43453 */
43454private pattern mustInRelationinterface_attribute_EClass(
43455 problem:LogicProblem, interpretation:PartialInterpretation,
43456 source: DefinedElement, target:DefinedElement)
43457{
43458 find interpretation(problem,interpretation);
43459 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
43460 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface attribute EClass");
43461 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
43462 BinaryElementRelationLink.param1(link,source);
43463 BinaryElementRelationLink.param2(link,target);
43464}
43465/**
43466 * Matcher for detecting tuples t where <>interface attribute EClass(source,target)
43467 */
43468private pattern mayInRelationinterface_attribute_EClass(
43469 problem:LogicProblem, interpretation:PartialInterpretation,
43470 source: DefinedElement, target:DefinedElement)
43471{
43472 find interpretation(problem,interpretation);
43473 // The two endpoint of the link have to exist
43474 find mayExist(problem, interpretation, source);
43475 find mayExist(problem, interpretation, target);
43476 // Type consistency
43477 find mayInstanceOfEClass_class(problem,interpretation,source);
43478 BooleanElement(target);
43479 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
43480 // the upper bound of the multiplicity should be considered.
43481 numberOfExistingReferences == count find mustInRelationinterface_attribute_EClass(problem,interpretation,source,_);
43482 check(numberOfExistingReferences < 1);
43483} or {
43484 find mustInRelationinterface_attribute_EClass(problem,interpretation,source,target);
43485}
43486/**
43487 * Matcher for detecting tuples t where []instanceClassName attribute EClassifier(source,target)
43488 */
43489private pattern mustInRelationinstanceClassName_attribute_EClassifier(
43490 problem:LogicProblem, interpretation:PartialInterpretation,
43491 source: DefinedElement, target:DefinedElement)
43492{
43493 find interpretation(problem,interpretation);
43494 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
43495 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"instanceClassName attribute EClassifier");
43496 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
43497 BinaryElementRelationLink.param1(link,source);
43498 BinaryElementRelationLink.param2(link,target);
43499}
43500/**
43501 * Matcher for detecting tuples t where <>instanceClassName attribute EClassifier(source,target)
43502 */
43503private pattern mayInRelationinstanceClassName_attribute_EClassifier(
43504 problem:LogicProblem, interpretation:PartialInterpretation,
43505 source: DefinedElement, target:DefinedElement)
43506{
43507 find interpretation(problem,interpretation);
43508 // The two endpoint of the link have to exist
43509 find mayExist(problem, interpretation, source);
43510 find mayExist(problem, interpretation, target);
43511 // Type consistency
43512 find mayInstanceOfEClassifier_class(problem,interpretation,source);
43513 StringElement(target);
43514 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
43515 // the upper bound of the multiplicity should be considered.
43516 numberOfExistingReferences == count find mustInRelationinstanceClassName_attribute_EClassifier(problem,interpretation,source,_);
43517 check(numberOfExistingReferences < 1);
43518} or {
43519 find mustInRelationinstanceClassName_attribute_EClassifier(problem,interpretation,source,target);
43520}
43521/**
43522 * Matcher for detecting tuples t where []instanceTypeName attribute EClassifier(source,target)
43523 */
43524private pattern mustInRelationinstanceTypeName_attribute_EClassifier(
43525 problem:LogicProblem, interpretation:PartialInterpretation,
43526 source: DefinedElement, target:DefinedElement)
43527{
43528 find interpretation(problem,interpretation);
43529 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
43530 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"instanceTypeName attribute EClassifier");
43531 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
43532 BinaryElementRelationLink.param1(link,source);
43533 BinaryElementRelationLink.param2(link,target);
43534}
43535/**
43536 * Matcher for detecting tuples t where <>instanceTypeName attribute EClassifier(source,target)
43537 */
43538private pattern mayInRelationinstanceTypeName_attribute_EClassifier(
43539 problem:LogicProblem, interpretation:PartialInterpretation,
43540 source: DefinedElement, target:DefinedElement)
43541{
43542 find interpretation(problem,interpretation);
43543 // The two endpoint of the link have to exist
43544 find mayExist(problem, interpretation, source);
43545 find mayExist(problem, interpretation, target);
43546 // Type consistency
43547 find mayInstanceOfEClassifier_class(problem,interpretation,source);
43548 StringElement(target);
43549 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
43550 // the upper bound of the multiplicity should be considered.
43551 numberOfExistingReferences == count find mustInRelationinstanceTypeName_attribute_EClassifier(problem,interpretation,source,_);
43552 check(numberOfExistingReferences < 1);
43553} or {
43554 find mustInRelationinstanceTypeName_attribute_EClassifier(problem,interpretation,source,target);
43555}
43556/**
43557 * Matcher for detecting tuples t where []serializable attribute EDataType(source,target)
43558 */
43559private pattern mustInRelationserializable_attribute_EDataType(
43560 problem:LogicProblem, interpretation:PartialInterpretation,
43561 source: DefinedElement, target:DefinedElement)
43562{
43563 find interpretation(problem,interpretation);
43564 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
43565 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"serializable attribute EDataType");
43566 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
43567 BinaryElementRelationLink.param1(link,source);
43568 BinaryElementRelationLink.param2(link,target);
43569}
43570/**
43571 * Matcher for detecting tuples t where <>serializable attribute EDataType(source,target)
43572 */
43573private pattern mayInRelationserializable_attribute_EDataType(
43574 problem:LogicProblem, interpretation:PartialInterpretation,
43575 source: DefinedElement, target:DefinedElement)
43576{
43577 find interpretation(problem,interpretation);
43578 // The two endpoint of the link have to exist
43579 find mayExist(problem, interpretation, source);
43580 find mayExist(problem, interpretation, target);
43581 // Type consistency
43582 find mayInstanceOfEDataType_class(problem,interpretation,source);
43583 BooleanElement(target);
43584 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
43585 // the upper bound of the multiplicity should be considered.
43586 numberOfExistingReferences == count find mustInRelationserializable_attribute_EDataType(problem,interpretation,source,_);
43587 check(numberOfExistingReferences < 1);
43588} or {
43589 find mustInRelationserializable_attribute_EDataType(problem,interpretation,source,target);
43590}
43591/**
43592 * Matcher for detecting tuples t where []value attribute EEnumLiteral(source,target)
43593 */
43594private pattern mustInRelationvalue_attribute_EEnumLiteral(
43595 problem:LogicProblem, interpretation:PartialInterpretation,
43596 source: DefinedElement, target:DefinedElement)
43597{
43598 find interpretation(problem,interpretation);
43599 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
43600 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"value attribute EEnumLiteral");
43601 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
43602 BinaryElementRelationLink.param1(link,source);
43603 BinaryElementRelationLink.param2(link,target);
43604}
43605/**
43606 * Matcher for detecting tuples t where <>value attribute EEnumLiteral(source,target)
43607 */
43608private pattern mayInRelationvalue_attribute_EEnumLiteral(
43609 problem:LogicProblem, interpretation:PartialInterpretation,
43610 source: DefinedElement, target:DefinedElement)
43611{
43612 find interpretation(problem,interpretation);
43613 // The two endpoint of the link have to exist
43614 find mayExist(problem, interpretation, source);
43615 find mayExist(problem, interpretation, target);
43616 // Type consistency
43617 find mayInstanceOfEEnumLiteral_class(problem,interpretation,source);
43618 IntegerElement(target);
43619 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
43620 // the upper bound of the multiplicity should be considered.
43621 numberOfExistingReferences == count find mustInRelationvalue_attribute_EEnumLiteral(problem,interpretation,source,_);
43622 check(numberOfExistingReferences < 1);
43623} or {
43624 find mustInRelationvalue_attribute_EEnumLiteral(problem,interpretation,source,target);
43625}
43626/**
43627 * Matcher for detecting tuples t where []literal attribute EEnumLiteral(source,target)
43628 */
43629private pattern mustInRelationliteral_attribute_EEnumLiteral(
43630 problem:LogicProblem, interpretation:PartialInterpretation,
43631 source: DefinedElement, target:DefinedElement)
43632{
43633 find interpretation(problem,interpretation);
43634 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
43635 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"literal attribute EEnumLiteral");
43636 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
43637 BinaryElementRelationLink.param1(link,source);
43638 BinaryElementRelationLink.param2(link,target);
43639}
43640/**
43641 * Matcher for detecting tuples t where <>literal attribute EEnumLiteral(source,target)
43642 */
43643private pattern mayInRelationliteral_attribute_EEnumLiteral(
43644 problem:LogicProblem, interpretation:PartialInterpretation,
43645 source: DefinedElement, target:DefinedElement)
43646{
43647 find interpretation(problem,interpretation);
43648 // The two endpoint of the link have to exist
43649 find mayExist(problem, interpretation, source);
43650 find mayExist(problem, interpretation, target);
43651 // Type consistency
43652 find mayInstanceOfEEnumLiteral_class(problem,interpretation,source);
43653 StringElement(target);
43654 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
43655 // the upper bound of the multiplicity should be considered.
43656 numberOfExistingReferences == count find mustInRelationliteral_attribute_EEnumLiteral(problem,interpretation,source,_);
43657 check(numberOfExistingReferences < 1);
43658} or {
43659 find mustInRelationliteral_attribute_EEnumLiteral(problem,interpretation,source,target);
43660}
43661/**
43662 * Matcher for detecting tuples t where []name attribute ENamedElement(source,target)
43663 */
43664private pattern mustInRelationname_attribute_ENamedElement(
43665 problem:LogicProblem, interpretation:PartialInterpretation,
43666 source: DefinedElement, target:DefinedElement)
43667{
43668 find interpretation(problem,interpretation);
43669 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
43670 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"name attribute ENamedElement");
43671 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
43672 BinaryElementRelationLink.param1(link,source);
43673 BinaryElementRelationLink.param2(link,target);
43674}
43675/**
43676 * Matcher for detecting tuples t where <>name attribute ENamedElement(source,target)
43677 */
43678private pattern mayInRelationname_attribute_ENamedElement(
43679 problem:LogicProblem, interpretation:PartialInterpretation,
43680 source: DefinedElement, target:DefinedElement)
43681{
43682 find interpretation(problem,interpretation);
43683 // The two endpoint of the link have to exist
43684 find mayExist(problem, interpretation, source);
43685 find mayExist(problem, interpretation, target);
43686 // Type consistency
43687 find mayInstanceOfENamedElement_class(problem,interpretation,source);
43688 StringElement(target);
43689 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
43690 // the upper bound of the multiplicity should be considered.
43691 numberOfExistingReferences == count find mustInRelationname_attribute_ENamedElement(problem,interpretation,source,_);
43692 check(numberOfExistingReferences < 1);
43693} or {
43694 find mustInRelationname_attribute_ENamedElement(problem,interpretation,source,target);
43695}
43696/**
43697 * Matcher for detecting tuples t where []nsURI attribute EPackage(source,target)
43698 */
43699private pattern mustInRelationnsURI_attribute_EPackage(
43700 problem:LogicProblem, interpretation:PartialInterpretation,
43701 source: DefinedElement, target:DefinedElement)
43702{
43703 find interpretation(problem,interpretation);
43704 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
43705 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"nsURI attribute EPackage");
43706 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
43707 BinaryElementRelationLink.param1(link,source);
43708 BinaryElementRelationLink.param2(link,target);
43709}
43710/**
43711 * Matcher for detecting tuples t where <>nsURI attribute EPackage(source,target)
43712 */
43713private pattern mayInRelationnsURI_attribute_EPackage(
43714 problem:LogicProblem, interpretation:PartialInterpretation,
43715 source: DefinedElement, target:DefinedElement)
43716{
43717 find interpretation(problem,interpretation);
43718 // The two endpoint of the link have to exist
43719 find mayExist(problem, interpretation, source);
43720 find mayExist(problem, interpretation, target);
43721 // Type consistency
43722 find mayInstanceOfEPackage_class(problem,interpretation,source);
43723 StringElement(target);
43724 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
43725 // the upper bound of the multiplicity should be considered.
43726 numberOfExistingReferences == count find mustInRelationnsURI_attribute_EPackage(problem,interpretation,source,_);
43727 check(numberOfExistingReferences < 1);
43728} or {
43729 find mustInRelationnsURI_attribute_EPackage(problem,interpretation,source,target);
43730}
43731/**
43732 * Matcher for detecting tuples t where []nsPrefix attribute EPackage(source,target)
43733 */
43734private pattern mustInRelationnsPrefix_attribute_EPackage(
43735 problem:LogicProblem, interpretation:PartialInterpretation,
43736 source: DefinedElement, target:DefinedElement)
43737{
43738 find interpretation(problem,interpretation);
43739 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
43740 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"nsPrefix attribute EPackage");
43741 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
43742 BinaryElementRelationLink.param1(link,source);
43743 BinaryElementRelationLink.param2(link,target);
43744}
43745/**
43746 * Matcher for detecting tuples t where <>nsPrefix attribute EPackage(source,target)
43747 */
43748private pattern mayInRelationnsPrefix_attribute_EPackage(
43749 problem:LogicProblem, interpretation:PartialInterpretation,
43750 source: DefinedElement, target:DefinedElement)
43751{
43752 find interpretation(problem,interpretation);
43753 // The two endpoint of the link have to exist
43754 find mayExist(problem, interpretation, source);
43755 find mayExist(problem, interpretation, target);
43756 // Type consistency
43757 find mayInstanceOfEPackage_class(problem,interpretation,source);
43758 StringElement(target);
43759 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
43760 // the upper bound of the multiplicity should be considered.
43761 numberOfExistingReferences == count find mustInRelationnsPrefix_attribute_EPackage(problem,interpretation,source,_);
43762 check(numberOfExistingReferences < 1);
43763} or {
43764 find mustInRelationnsPrefix_attribute_EPackage(problem,interpretation,source,target);
43765}
43766/**
43767 * Matcher for detecting tuples t where []containment attribute EReference(source,target)
43768 */
43769private pattern mustInRelationcontainment_attribute_EReference(
43770 problem:LogicProblem, interpretation:PartialInterpretation,
43771 source: DefinedElement, target:DefinedElement)
43772{
43773 find interpretation(problem,interpretation);
43774 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
43775 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"containment attribute EReference");
43776 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
43777 BinaryElementRelationLink.param1(link,source);
43778 BinaryElementRelationLink.param2(link,target);
43779}
43780/**
43781 * Matcher for detecting tuples t where <>containment attribute EReference(source,target)
43782 */
43783private pattern mayInRelationcontainment_attribute_EReference(
43784 problem:LogicProblem, interpretation:PartialInterpretation,
43785 source: DefinedElement, target:DefinedElement)
43786{
43787 find interpretation(problem,interpretation);
43788 // The two endpoint of the link have to exist
43789 find mayExist(problem, interpretation, source);
43790 find mayExist(problem, interpretation, target);
43791 // Type consistency
43792 find mayInstanceOfEReference_class(problem,interpretation,source);
43793 BooleanElement(target);
43794 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
43795 // the upper bound of the multiplicity should be considered.
43796 numberOfExistingReferences == count find mustInRelationcontainment_attribute_EReference(problem,interpretation,source,_);
43797 check(numberOfExistingReferences < 1);
43798} or {
43799 find mustInRelationcontainment_attribute_EReference(problem,interpretation,source,target);
43800}
43801/**
43802 * Matcher for detecting tuples t where []container attribute EReference(source,target)
43803 */
43804private pattern mustInRelationcontainer_attribute_EReference(
43805 problem:LogicProblem, interpretation:PartialInterpretation,
43806 source: DefinedElement, target:DefinedElement)
43807{
43808 find interpretation(problem,interpretation);
43809 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
43810 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"container attribute EReference");
43811 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
43812 BinaryElementRelationLink.param1(link,source);
43813 BinaryElementRelationLink.param2(link,target);
43814}
43815/**
43816 * Matcher for detecting tuples t where <>container attribute EReference(source,target)
43817 */
43818private pattern mayInRelationcontainer_attribute_EReference(
43819 problem:LogicProblem, interpretation:PartialInterpretation,
43820 source: DefinedElement, target:DefinedElement)
43821{
43822 find interpretation(problem,interpretation);
43823 // The two endpoint of the link have to exist
43824 find mayExist(problem, interpretation, source);
43825 find mayExist(problem, interpretation, target);
43826 // Type consistency
43827 find mayInstanceOfEReference_class(problem,interpretation,source);
43828 BooleanElement(target);
43829 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
43830 // the upper bound of the multiplicity should be considered.
43831 numberOfExistingReferences == count find mustInRelationcontainer_attribute_EReference(problem,interpretation,source,_);
43832 check(numberOfExistingReferences < 1);
43833} or {
43834 find mustInRelationcontainer_attribute_EReference(problem,interpretation,source,target);
43835}
43836/**
43837 * Matcher for detecting tuples t where []resolveProxies attribute EReference(source,target)
43838 */
43839private pattern mustInRelationresolveProxies_attribute_EReference(
43840 problem:LogicProblem, interpretation:PartialInterpretation,
43841 source: DefinedElement, target:DefinedElement)
43842{
43843 find interpretation(problem,interpretation);
43844 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
43845 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"resolveProxies attribute EReference");
43846 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
43847 BinaryElementRelationLink.param1(link,source);
43848 BinaryElementRelationLink.param2(link,target);
43849}
43850/**
43851 * Matcher for detecting tuples t where <>resolveProxies attribute EReference(source,target)
43852 */
43853private pattern mayInRelationresolveProxies_attribute_EReference(
43854 problem:LogicProblem, interpretation:PartialInterpretation,
43855 source: DefinedElement, target:DefinedElement)
43856{
43857 find interpretation(problem,interpretation);
43858 // The two endpoint of the link have to exist
43859 find mayExist(problem, interpretation, source);
43860 find mayExist(problem, interpretation, target);
43861 // Type consistency
43862 find mayInstanceOfEReference_class(problem,interpretation,source);
43863 BooleanElement(target);
43864 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
43865 // the upper bound of the multiplicity should be considered.
43866 numberOfExistingReferences == count find mustInRelationresolveProxies_attribute_EReference(problem,interpretation,source,_);
43867 check(numberOfExistingReferences < 1);
43868} or {
43869 find mustInRelationresolveProxies_attribute_EReference(problem,interpretation,source,target);
43870}
43871/**
43872 * Matcher for detecting tuples t where []changeable attribute EStructuralFeature(source,target)
43873 */
43874private pattern mustInRelationchangeable_attribute_EStructuralFeature(
43875 problem:LogicProblem, interpretation:PartialInterpretation,
43876 source: DefinedElement, target:DefinedElement)
43877{
43878 find interpretation(problem,interpretation);
43879 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
43880 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"changeable attribute EStructuralFeature");
43881 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
43882 BinaryElementRelationLink.param1(link,source);
43883 BinaryElementRelationLink.param2(link,target);
43884}
43885/**
43886 * Matcher for detecting tuples t where <>changeable attribute EStructuralFeature(source,target)
43887 */
43888private pattern mayInRelationchangeable_attribute_EStructuralFeature(
43889 problem:LogicProblem, interpretation:PartialInterpretation,
43890 source: DefinedElement, target:DefinedElement)
43891{
43892 find interpretation(problem,interpretation);
43893 // The two endpoint of the link have to exist
43894 find mayExist(problem, interpretation, source);
43895 find mayExist(problem, interpretation, target);
43896 // Type consistency
43897 find mayInstanceOfEStructuralFeature_class(problem,interpretation,source);
43898 BooleanElement(target);
43899 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
43900 // the upper bound of the multiplicity should be considered.
43901 numberOfExistingReferences == count find mustInRelationchangeable_attribute_EStructuralFeature(problem,interpretation,source,_);
43902 check(numberOfExistingReferences < 1);
43903} or {
43904 find mustInRelationchangeable_attribute_EStructuralFeature(problem,interpretation,source,target);
43905}
43906/**
43907 * Matcher for detecting tuples t where []volatile attribute EStructuralFeature(source,target)
43908 */
43909private pattern mustInRelationvolatile_attribute_EStructuralFeature(
43910 problem:LogicProblem, interpretation:PartialInterpretation,
43911 source: DefinedElement, target:DefinedElement)
43912{
43913 find interpretation(problem,interpretation);
43914 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
43915 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"volatile attribute EStructuralFeature");
43916 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
43917 BinaryElementRelationLink.param1(link,source);
43918 BinaryElementRelationLink.param2(link,target);
43919}
43920/**
43921 * Matcher for detecting tuples t where <>volatile attribute EStructuralFeature(source,target)
43922 */
43923private pattern mayInRelationvolatile_attribute_EStructuralFeature(
43924 problem:LogicProblem, interpretation:PartialInterpretation,
43925 source: DefinedElement, target:DefinedElement)
43926{
43927 find interpretation(problem,interpretation);
43928 // The two endpoint of the link have to exist
43929 find mayExist(problem, interpretation, source);
43930 find mayExist(problem, interpretation, target);
43931 // Type consistency
43932 find mayInstanceOfEStructuralFeature_class(problem,interpretation,source);
43933 BooleanElement(target);
43934 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
43935 // the upper bound of the multiplicity should be considered.
43936 numberOfExistingReferences == count find mustInRelationvolatile_attribute_EStructuralFeature(problem,interpretation,source,_);
43937 check(numberOfExistingReferences < 1);
43938} or {
43939 find mustInRelationvolatile_attribute_EStructuralFeature(problem,interpretation,source,target);
43940}
43941/**
43942 * Matcher for detecting tuples t where []transient attribute EStructuralFeature(source,target)
43943 */
43944private pattern mustInRelationtransient_attribute_EStructuralFeature(
43945 problem:LogicProblem, interpretation:PartialInterpretation,
43946 source: DefinedElement, target:DefinedElement)
43947{
43948 find interpretation(problem,interpretation);
43949 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
43950 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"transient attribute EStructuralFeature");
43951 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
43952 BinaryElementRelationLink.param1(link,source);
43953 BinaryElementRelationLink.param2(link,target);
43954}
43955/**
43956 * Matcher for detecting tuples t where <>transient attribute EStructuralFeature(source,target)
43957 */
43958private pattern mayInRelationtransient_attribute_EStructuralFeature(
43959 problem:LogicProblem, interpretation:PartialInterpretation,
43960 source: DefinedElement, target:DefinedElement)
43961{
43962 find interpretation(problem,interpretation);
43963 // The two endpoint of the link have to exist
43964 find mayExist(problem, interpretation, source);
43965 find mayExist(problem, interpretation, target);
43966 // Type consistency
43967 find mayInstanceOfEStructuralFeature_class(problem,interpretation,source);
43968 BooleanElement(target);
43969 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
43970 // the upper bound of the multiplicity should be considered.
43971 numberOfExistingReferences == count find mustInRelationtransient_attribute_EStructuralFeature(problem,interpretation,source,_);
43972 check(numberOfExistingReferences < 1);
43973} or {
43974 find mustInRelationtransient_attribute_EStructuralFeature(problem,interpretation,source,target);
43975}
43976/**
43977 * Matcher for detecting tuples t where []defaultValueLiteral attribute EStructuralFeature(source,target)
43978 */
43979private pattern mustInRelationdefaultValueLiteral_attribute_EStructuralFeature(
43980 problem:LogicProblem, interpretation:PartialInterpretation,
43981 source: DefinedElement, target:DefinedElement)
43982{
43983 find interpretation(problem,interpretation);
43984 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
43985 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"defaultValueLiteral attribute EStructuralFeature");
43986 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
43987 BinaryElementRelationLink.param1(link,source);
43988 BinaryElementRelationLink.param2(link,target);
43989}
43990/**
43991 * Matcher for detecting tuples t where <>defaultValueLiteral attribute EStructuralFeature(source,target)
43992 */
43993private pattern mayInRelationdefaultValueLiteral_attribute_EStructuralFeature(
43994 problem:LogicProblem, interpretation:PartialInterpretation,
43995 source: DefinedElement, target:DefinedElement)
43996{
43997 find interpretation(problem,interpretation);
43998 // The two endpoint of the link have to exist
43999 find mayExist(problem, interpretation, source);
44000 find mayExist(problem, interpretation, target);
44001 // Type consistency
44002 find mayInstanceOfEStructuralFeature_class(problem,interpretation,source);
44003 StringElement(target);
44004 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
44005 // the upper bound of the multiplicity should be considered.
44006 numberOfExistingReferences == count find mustInRelationdefaultValueLiteral_attribute_EStructuralFeature(problem,interpretation,source,_);
44007 check(numberOfExistingReferences < 1);
44008} or {
44009 find mustInRelationdefaultValueLiteral_attribute_EStructuralFeature(problem,interpretation,source,target);
44010}
44011/**
44012 * Matcher for detecting tuples t where []unsettable attribute EStructuralFeature(source,target)
44013 */
44014private pattern mustInRelationunsettable_attribute_EStructuralFeature(
44015 problem:LogicProblem, interpretation:PartialInterpretation,
44016 source: DefinedElement, target:DefinedElement)
44017{
44018 find interpretation(problem,interpretation);
44019 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
44020 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"unsettable attribute EStructuralFeature");
44021 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
44022 BinaryElementRelationLink.param1(link,source);
44023 BinaryElementRelationLink.param2(link,target);
44024}
44025/**
44026 * Matcher for detecting tuples t where <>unsettable attribute EStructuralFeature(source,target)
44027 */
44028private pattern mayInRelationunsettable_attribute_EStructuralFeature(
44029 problem:LogicProblem, interpretation:PartialInterpretation,
44030 source: DefinedElement, target:DefinedElement)
44031{
44032 find interpretation(problem,interpretation);
44033 // The two endpoint of the link have to exist
44034 find mayExist(problem, interpretation, source);
44035 find mayExist(problem, interpretation, target);
44036 // Type consistency
44037 find mayInstanceOfEStructuralFeature_class(problem,interpretation,source);
44038 BooleanElement(target);
44039 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
44040 // the upper bound of the multiplicity should be considered.
44041 numberOfExistingReferences == count find mustInRelationunsettable_attribute_EStructuralFeature(problem,interpretation,source,_);
44042 check(numberOfExistingReferences < 1);
44043} or {
44044 find mustInRelationunsettable_attribute_EStructuralFeature(problem,interpretation,source,target);
44045}
44046/**
44047 * Matcher for detecting tuples t where []derived attribute EStructuralFeature(source,target)
44048 */
44049private pattern mustInRelationderived_attribute_EStructuralFeature(
44050 problem:LogicProblem, interpretation:PartialInterpretation,
44051 source: DefinedElement, target:DefinedElement)
44052{
44053 find interpretation(problem,interpretation);
44054 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
44055 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"derived attribute EStructuralFeature");
44056 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
44057 BinaryElementRelationLink.param1(link,source);
44058 BinaryElementRelationLink.param2(link,target);
44059}
44060/**
44061 * Matcher for detecting tuples t where <>derived attribute EStructuralFeature(source,target)
44062 */
44063private pattern mayInRelationderived_attribute_EStructuralFeature(
44064 problem:LogicProblem, interpretation:PartialInterpretation,
44065 source: DefinedElement, target:DefinedElement)
44066{
44067 find interpretation(problem,interpretation);
44068 // The two endpoint of the link have to exist
44069 find mayExist(problem, interpretation, source);
44070 find mayExist(problem, interpretation, target);
44071 // Type consistency
44072 find mayInstanceOfEStructuralFeature_class(problem,interpretation,source);
44073 BooleanElement(target);
44074 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
44075 // the upper bound of the multiplicity should be considered.
44076 numberOfExistingReferences == count find mustInRelationderived_attribute_EStructuralFeature(problem,interpretation,source,_);
44077 check(numberOfExistingReferences < 1);
44078} or {
44079 find mustInRelationderived_attribute_EStructuralFeature(problem,interpretation,source,target);
44080}
44081/**
44082 * Matcher for detecting tuples t where []ordered attribute ETypedElement(source,target)
44083 */
44084private pattern mustInRelationordered_attribute_ETypedElement(
44085 problem:LogicProblem, interpretation:PartialInterpretation,
44086 source: DefinedElement, target:DefinedElement)
44087{
44088 find interpretation(problem,interpretation);
44089 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
44090 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"ordered attribute ETypedElement");
44091 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
44092 BinaryElementRelationLink.param1(link,source);
44093 BinaryElementRelationLink.param2(link,target);
44094}
44095/**
44096 * Matcher for detecting tuples t where <>ordered attribute ETypedElement(source,target)
44097 */
44098private pattern mayInRelationordered_attribute_ETypedElement(
44099 problem:LogicProblem, interpretation:PartialInterpretation,
44100 source: DefinedElement, target:DefinedElement)
44101{
44102 find interpretation(problem,interpretation);
44103 // The two endpoint of the link have to exist
44104 find mayExist(problem, interpretation, source);
44105 find mayExist(problem, interpretation, target);
44106 // Type consistency
44107 find mayInstanceOfETypedElement_class(problem,interpretation,source);
44108 BooleanElement(target);
44109 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
44110 // the upper bound of the multiplicity should be considered.
44111 numberOfExistingReferences == count find mustInRelationordered_attribute_ETypedElement(problem,interpretation,source,_);
44112 check(numberOfExistingReferences < 1);
44113} or {
44114 find mustInRelationordered_attribute_ETypedElement(problem,interpretation,source,target);
44115}
44116/**
44117 * Matcher for detecting tuples t where []unique attribute ETypedElement(source,target)
44118 */
44119private pattern mustInRelationunique_attribute_ETypedElement(
44120 problem:LogicProblem, interpretation:PartialInterpretation,
44121 source: DefinedElement, target:DefinedElement)
44122{
44123 find interpretation(problem,interpretation);
44124 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
44125 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"unique attribute ETypedElement");
44126 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
44127 BinaryElementRelationLink.param1(link,source);
44128 BinaryElementRelationLink.param2(link,target);
44129}
44130/**
44131 * Matcher for detecting tuples t where <>unique attribute ETypedElement(source,target)
44132 */
44133private pattern mayInRelationunique_attribute_ETypedElement(
44134 problem:LogicProblem, interpretation:PartialInterpretation,
44135 source: DefinedElement, target:DefinedElement)
44136{
44137 find interpretation(problem,interpretation);
44138 // The two endpoint of the link have to exist
44139 find mayExist(problem, interpretation, source);
44140 find mayExist(problem, interpretation, target);
44141 // Type consistency
44142 find mayInstanceOfETypedElement_class(problem,interpretation,source);
44143 BooleanElement(target);
44144 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
44145 // the upper bound of the multiplicity should be considered.
44146 numberOfExistingReferences == count find mustInRelationunique_attribute_ETypedElement(problem,interpretation,source,_);
44147 check(numberOfExistingReferences < 1);
44148} or {
44149 find mustInRelationunique_attribute_ETypedElement(problem,interpretation,source,target);
44150}
44151/**
44152 * Matcher for detecting tuples t where []lowerBound attribute ETypedElement(source,target)
44153 */
44154private pattern mustInRelationlowerBound_attribute_ETypedElement(
44155 problem:LogicProblem, interpretation:PartialInterpretation,
44156 source: DefinedElement, target:DefinedElement)
44157{
44158 find interpretation(problem,interpretation);
44159 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
44160 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"lowerBound attribute ETypedElement");
44161 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
44162 BinaryElementRelationLink.param1(link,source);
44163 BinaryElementRelationLink.param2(link,target);
44164}
44165/**
44166 * Matcher for detecting tuples t where <>lowerBound attribute ETypedElement(source,target)
44167 */
44168private pattern mayInRelationlowerBound_attribute_ETypedElement(
44169 problem:LogicProblem, interpretation:PartialInterpretation,
44170 source: DefinedElement, target:DefinedElement)
44171{
44172 find interpretation(problem,interpretation);
44173 // The two endpoint of the link have to exist
44174 find mayExist(problem, interpretation, source);
44175 find mayExist(problem, interpretation, target);
44176 // Type consistency
44177 find mayInstanceOfETypedElement_class(problem,interpretation,source);
44178 IntegerElement(target);
44179 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
44180 // the upper bound of the multiplicity should be considered.
44181 numberOfExistingReferences == count find mustInRelationlowerBound_attribute_ETypedElement(problem,interpretation,source,_);
44182 check(numberOfExistingReferences < 1);
44183} or {
44184 find mustInRelationlowerBound_attribute_ETypedElement(problem,interpretation,source,target);
44185}
44186/**
44187 * Matcher for detecting tuples t where []upperBound attribute ETypedElement(source,target)
44188 */
44189private pattern mustInRelationupperBound_attribute_ETypedElement(
44190 problem:LogicProblem, interpretation:PartialInterpretation,
44191 source: DefinedElement, target:DefinedElement)
44192{
44193 find interpretation(problem,interpretation);
44194 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
44195 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"upperBound attribute ETypedElement");
44196 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
44197 BinaryElementRelationLink.param1(link,source);
44198 BinaryElementRelationLink.param2(link,target);
44199}
44200/**
44201 * Matcher for detecting tuples t where <>upperBound attribute ETypedElement(source,target)
44202 */
44203private pattern mayInRelationupperBound_attribute_ETypedElement(
44204 problem:LogicProblem, interpretation:PartialInterpretation,
44205 source: DefinedElement, target:DefinedElement)
44206{
44207 find interpretation(problem,interpretation);
44208 // The two endpoint of the link have to exist
44209 find mayExist(problem, interpretation, source);
44210 find mayExist(problem, interpretation, target);
44211 // Type consistency
44212 find mayInstanceOfETypedElement_class(problem,interpretation,source);
44213 IntegerElement(target);
44214 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
44215 // the upper bound of the multiplicity should be considered.
44216 numberOfExistingReferences == count find mustInRelationupperBound_attribute_ETypedElement(problem,interpretation,source,_);
44217 check(numberOfExistingReferences < 1);
44218} or {
44219 find mustInRelationupperBound_attribute_ETypedElement(problem,interpretation,source,target);
44220}
44221/**
44222 * Matcher for detecting tuples t where []many attribute ETypedElement(source,target)
44223 */
44224private pattern mustInRelationmany_attribute_ETypedElement(
44225 problem:LogicProblem, interpretation:PartialInterpretation,
44226 source: DefinedElement, target:DefinedElement)
44227{
44228 find interpretation(problem,interpretation);
44229 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
44230 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"many attribute ETypedElement");
44231 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
44232 BinaryElementRelationLink.param1(link,source);
44233 BinaryElementRelationLink.param2(link,target);
44234}
44235/**
44236 * Matcher for detecting tuples t where <>many attribute ETypedElement(source,target)
44237 */
44238private pattern mayInRelationmany_attribute_ETypedElement(
44239 problem:LogicProblem, interpretation:PartialInterpretation,
44240 source: DefinedElement, target:DefinedElement)
44241{
44242 find interpretation(problem,interpretation);
44243 // The two endpoint of the link have to exist
44244 find mayExist(problem, interpretation, source);
44245 find mayExist(problem, interpretation, target);
44246 // Type consistency
44247 find mayInstanceOfETypedElement_class(problem,interpretation,source);
44248 BooleanElement(target);
44249 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
44250 // the upper bound of the multiplicity should be considered.
44251 numberOfExistingReferences == count find mustInRelationmany_attribute_ETypedElement(problem,interpretation,source,_);
44252 check(numberOfExistingReferences < 1);
44253} or {
44254 find mustInRelationmany_attribute_ETypedElement(problem,interpretation,source,target);
44255}
44256/**
44257 * Matcher for detecting tuples t where []required attribute ETypedElement(source,target)
44258 */
44259private pattern mustInRelationrequired_attribute_ETypedElement(
44260 problem:LogicProblem, interpretation:PartialInterpretation,
44261 source: DefinedElement, target:DefinedElement)
44262{
44263 find interpretation(problem,interpretation);
44264 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
44265 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"required attribute ETypedElement");
44266 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
44267 BinaryElementRelationLink.param1(link,source);
44268 BinaryElementRelationLink.param2(link,target);
44269}
44270/**
44271 * Matcher for detecting tuples t where <>required attribute ETypedElement(source,target)
44272 */
44273private pattern mayInRelationrequired_attribute_ETypedElement(
44274 problem:LogicProblem, interpretation:PartialInterpretation,
44275 source: DefinedElement, target:DefinedElement)
44276{
44277 find interpretation(problem,interpretation);
44278 // The two endpoint of the link have to exist
44279 find mayExist(problem, interpretation, source);
44280 find mayExist(problem, interpretation, target);
44281 // Type consistency
44282 find mayInstanceOfETypedElement_class(problem,interpretation,source);
44283 BooleanElement(target);
44284 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
44285 // the upper bound of the multiplicity should be considered.
44286 numberOfExistingReferences == count find mustInRelationrequired_attribute_ETypedElement(problem,interpretation,source,_);
44287 check(numberOfExistingReferences < 1);
44288} or {
44289 find mustInRelationrequired_attribute_ETypedElement(problem,interpretation,source,target);
44290}
44291/**
44292 * Matcher for detecting tuples t where []key attribute EStringToStringMapEntry(source,target)
44293 */
44294private pattern mustInRelationkey_attribute_EStringToStringMapEntry(
44295 problem:LogicProblem, interpretation:PartialInterpretation,
44296 source: DefinedElement, target:DefinedElement)
44297{
44298 find interpretation(problem,interpretation);
44299 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
44300 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"key attribute EStringToStringMapEntry");
44301 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
44302 BinaryElementRelationLink.param1(link,source);
44303 BinaryElementRelationLink.param2(link,target);
44304}
44305/**
44306 * Matcher for detecting tuples t where <>key attribute EStringToStringMapEntry(source,target)
44307 */
44308private pattern mayInRelationkey_attribute_EStringToStringMapEntry(
44309 problem:LogicProblem, interpretation:PartialInterpretation,
44310 source: DefinedElement, target:DefinedElement)
44311{
44312 find interpretation(problem,interpretation);
44313 // The two endpoint of the link have to exist
44314 find mayExist(problem, interpretation, source);
44315 find mayExist(problem, interpretation, target);
44316 // Type consistency
44317 find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,source);
44318 StringElement(target);
44319 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
44320 // the upper bound of the multiplicity should be considered.
44321 numberOfExistingReferences == count find mustInRelationkey_attribute_EStringToStringMapEntry(problem,interpretation,source,_);
44322 check(numberOfExistingReferences < 1);
44323} or {
44324 find mustInRelationkey_attribute_EStringToStringMapEntry(problem,interpretation,source,target);
44325}
44326/**
44327 * Matcher for detecting tuples t where []value attribute EStringToStringMapEntry(source,target)
44328 */
44329private pattern mustInRelationvalue_attribute_EStringToStringMapEntry(
44330 problem:LogicProblem, interpretation:PartialInterpretation,
44331 source: DefinedElement, target:DefinedElement)
44332{
44333 find interpretation(problem,interpretation);
44334 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
44335 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"value attribute EStringToStringMapEntry");
44336 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
44337 BinaryElementRelationLink.param1(link,source);
44338 BinaryElementRelationLink.param2(link,target);
44339}
44340/**
44341 * Matcher for detecting tuples t where <>value attribute EStringToStringMapEntry(source,target)
44342 */
44343private pattern mayInRelationvalue_attribute_EStringToStringMapEntry(
44344 problem:LogicProblem, interpretation:PartialInterpretation,
44345 source: DefinedElement, target:DefinedElement)
44346{
44347 find interpretation(problem,interpretation);
44348 // The two endpoint of the link have to exist
44349 find mayExist(problem, interpretation, source);
44350 find mayExist(problem, interpretation, target);
44351 // Type consistency
44352 find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,source);
44353 StringElement(target);
44354 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
44355 // the upper bound of the multiplicity should be considered.
44356 numberOfExistingReferences == count find mustInRelationvalue_attribute_EStringToStringMapEntry(problem,interpretation,source,_);
44357 check(numberOfExistingReferences < 1);
44358} or {
44359 find mustInRelationvalue_attribute_EStringToStringMapEntry(problem,interpretation,source,target);
44360}
44361
44362//////////
44363// 1.3 Relation Definition Indexers
44364//////////
44365
44366//////////
44367// 1.4 Containment Indexer
44368//////////
44369private pattern mustContains2(source: DefinedElement, target: DefinedElement) {
44370 find mustContains4(_,_,source,target);
44371}
44372
44373private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation,
44374 source: DefinedElement, target: DefinedElement)
44375 { find mustInRelationdetails_reference_EAnnotation(problem,interpretation,source,target); }or
44376
44377 { find mustInRelationcontents_reference_EAnnotation(problem,interpretation,source,target); }or
44378
44379 { find mustInRelationeOperations_reference_EClass(problem,interpretation,source,target); }or
44380
44381 { find mustInRelationeStructuralFeatures_reference_EClass(problem,interpretation,source,target); }or
44382
44383 { find mustInRelationeGenericSuperTypes_reference_EClass(problem,interpretation,source,target); }or
44384
44385 { find mustInRelationeTypeParameters_reference_EClassifier(problem,interpretation,source,target); }or
44386
44387 { find mustInRelationeLiterals_reference_EEnum(problem,interpretation,source,target); }or
44388
44389 { find mustInRelationeAnnotations_reference_EModelElement(problem,interpretation,source,target); }or
44390
44391 { find mustInRelationeTypeParameters_reference_EOperation(problem,interpretation,source,target); }or
44392
44393 { find mustInRelationeParameters_reference_EOperation(problem,interpretation,source,target); }or
44394
44395 { find mustInRelationeGenericExceptions_reference_EOperation(problem,interpretation,source,target); }or
44396
44397 { find mustInRelationeClassifiers_reference_EPackage(problem,interpretation,source,target); }or
44398
44399 { find mustInRelationeSubpackages_reference_EPackage(problem,interpretation,source,target); }or
44400
44401 { find mustInRelationeGenericType_reference_ETypedElement(problem,interpretation,source,target); }or
44402
44403 { find mustInRelationeUpperBound_reference_EGenericType(problem,interpretation,source,target); }or
44404
44405 { find mustInRelationeTypeArguments_reference_EGenericType(problem,interpretation,source,target); }or
44406
44407 { find mustInRelationeLowerBound_reference_EGenericType(problem,interpretation,source,target); }or
44408
44409 { find mustInRelationeBounds_reference_ETypeParameter(problem,interpretation,source,target); }
44410
44411private pattern mustTransitiveContains(source,target) {
44412 find mustContains2+(source,target);
44413}
44414
44415//////////
44416// 2. Invalidation Indexers
44417//////////
44418// 2.1 Invalidated by WF Queries
44419//////////
44420
44421//////////
44422// 3. Unfinishedness Indexers
44423//////////
44424// 3.1 Unfinishedness Measured by Multiplicity
44425//////////
44426pattern unfinishedLowerMultiplicity_eAttributeType_reference_EAttribute(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) {
44427 find interpretation(problem,interpretation);
44428 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
44429 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributeType reference EAttribute");
44430 find mustInstanceOfEAttribute_class(problem,interpretation,object);
44431 numberOfExistingReferences == count find mustInRelationeAttributeType_reference_EAttribute(problem,interpretation,object,_);
44432 check(numberOfExistingReferences < 1);
44433 missingMultiplicity == eval(1-numberOfExistingReferences);
44434}
44435pattern unfinishedLowerMultiplicity_eReferenceType_reference_EReference(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) {
44436 find interpretation(problem,interpretation);
44437 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
44438 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferenceType reference EReference");
44439 find mustInstanceOfEReference_class(problem,interpretation,object);
44440 numberOfExistingReferences == count find mustInRelationeReferenceType_reference_EReference(problem,interpretation,object,_);
44441 check(numberOfExistingReferences < 1);
44442 missingMultiplicity == eval(1-numberOfExistingReferences);
44443}
44444pattern unfinishedLowerMultiplicity_eRawType_reference_EGenericType(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) {
44445 find interpretation(problem,interpretation);
44446 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
44447 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eRawType reference EGenericType");
44448 find mustInstanceOfEGenericType_class(problem,interpretation,object);
44449 numberOfExistingReferences == count find mustInRelationeRawType_reference_EGenericType(problem,interpretation,object,_);
44450 check(numberOfExistingReferences < 1);
44451 missingMultiplicity == eval(1-numberOfExistingReferences);
44452}
44453
44454//////////
44455// 3.2 Unfinishedness Measured by WF Queries
44456//////////
44457
44458//////////
44459// 4. Refinement Indexers
44460//////////
44461// 4.1 Object constructors
44462//////////
44463private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation)
44464{
44465 find interpretation(problem,interpretation);
44466 find mustInstanceOfETypeParameter_class(problem,interpretation,root);
44467 find mustExist(problem, interpretation, root);
44468}or{
44469 find interpretation(problem,interpretation);
44470 find mustInstanceOfETypedElement_class(problem,interpretation,root);
44471 find mustExist(problem, interpretation, root);
44472}or{
44473 find interpretation(problem,interpretation);
44474 find mustInstanceOfEClass_class(problem,interpretation,root);
44475 find mustExist(problem, interpretation, root);
44476}or{
44477 find interpretation(problem,interpretation);
44478 find mustInstanceOfEStructuralFeature_class(problem,interpretation,root);
44479 find mustExist(problem, interpretation, root);
44480}or{
44481 find interpretation(problem,interpretation);
44482 find mustInstanceOfEAnnotation_class(problem,interpretation,root);
44483 find mustExist(problem, interpretation, root);
44484}or{
44485 find interpretation(problem,interpretation);
44486 find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,root);
44487 find mustExist(problem, interpretation, root);
44488}or{
44489 find interpretation(problem,interpretation);
44490 find mustInstanceOfEAttribute_class(problem,interpretation,root);
44491 find mustExist(problem, interpretation, root);
44492}or{
44493 find interpretation(problem,interpretation);
44494 find mustInstanceOfEObject_class(problem,interpretation,root);
44495 find mustExist(problem, interpretation, root);
44496}or{
44497 find interpretation(problem,interpretation);
44498 find mustInstanceOfEClassifier_class(problem,interpretation,root);
44499 find mustExist(problem, interpretation, root);
44500}or{
44501 find interpretation(problem,interpretation);
44502 find mustInstanceOfEGenericType_class(problem,interpretation,root);
44503 find mustExist(problem, interpretation, root);
44504}or{
44505 find interpretation(problem,interpretation);
44506 find mustInstanceOfEEnumLiteral_class(problem,interpretation,root);
44507 find mustExist(problem, interpretation, root);
44508}or{
44509 find interpretation(problem,interpretation);
44510 find mustInstanceOfEDataType_class(problem,interpretation,root);
44511 find mustExist(problem, interpretation, root);
44512}or{
44513 find interpretation(problem,interpretation);
44514 find mustInstanceOfEOperation_class(problem,interpretation,root);
44515 find mustExist(problem, interpretation, root);
44516}or{
44517 find interpretation(problem,interpretation);
44518 find mustInstanceOfEPackage_class(problem,interpretation,root);
44519 find mustExist(problem, interpretation, root);
44520}or{
44521 find interpretation(problem,interpretation);
44522 find mustInstanceOfEParameter_class(problem,interpretation,root);
44523 find mustExist(problem, interpretation, root);
44524}or{
44525 find interpretation(problem,interpretation);
44526 find mustInstanceOfEModelElement_class(problem,interpretation,root);
44527 find mustExist(problem, interpretation, root);
44528}or{
44529 find interpretation(problem,interpretation);
44530 find mustInstanceOfEReference_class(problem,interpretation,root);
44531 find mustExist(problem, interpretation, root);
44532}or{
44533 find interpretation(problem,interpretation);
44534 find mustInstanceOfEEnum_class(problem,interpretation,root);
44535 find mustExist(problem, interpretation, root);
44536}or{
44537 find interpretation(problem,interpretation);
44538 find mustInstanceOfENamedElement_class(problem,interpretation,root);
44539 find mustExist(problem, interpretation, root);
44540}or{
44541 find interpretation(problem,interpretation);
44542 find mustInstanceOfEModelElement_class_DefinedPart(problem,interpretation,root);
44543 find mustExist(problem, interpretation, root);
44544}or{
44545 find interpretation(problem,interpretation);
44546 find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,root);
44547 find mustExist(problem, interpretation, root);
44548}or{
44549 find interpretation(problem,interpretation);
44550 find mustInstanceOfENamedElement_class_DefinedPart(problem,interpretation,root);
44551 find mustExist(problem, interpretation, root);
44552}or{
44553 find interpretation(problem,interpretation);
44554 find mustInstanceOfENamedElement_class_UndefinedPart(problem,interpretation,root);
44555 find mustExist(problem, interpretation, root);
44556}or{
44557 find interpretation(problem,interpretation);
44558 find mustInstanceOfEPackage_class_DefinedPart(problem,interpretation,root);
44559 find mustExist(problem, interpretation, root);
44560}or{
44561 find interpretation(problem,interpretation);
44562 find mustInstanceOfEPackage_class_UndefinedPart(problem,interpretation,root);
44563 find mustExist(problem, interpretation, root);
44564}
44565pattern createObject_EEnum_class_by_eClassifiers_reference_EPackage_with_ePackage_reference_EClassifier(
44566 problem:LogicProblem, interpretation:PartialInterpretation,
44567 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
44568 container:DefinedElement)
44569{
44570 find interpretation(problem,interpretation);
44571 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
44572 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EEnum class");
44573 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
44574 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eClassifiers reference EPackage");
44575 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
44576 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"ePackage reference EClassifier");
44577 find mustInstanceOfEPackage_class(problem,interpretation,container);
44578 find mayInstanceOfEEnum_class(problem,interpretation,newObject);
44579 find mayInRelationeClassifiers_reference_EPackage(problem,interpretation,container,newObject);
44580 find mustExist(problem, interpretation, container);
44581 neg find mustExist(problem, interpretation, newObject);
44582}
44583pattern createObject_EEnum_class(
44584 problem:LogicProblem, interpretation:PartialInterpretation,
44585 typeInterpretation:PartialComplexTypeInterpretation)
44586{
44587 find interpretation(problem,interpretation);
44588 neg find hasElementInContainment(problem,interpretation);
44589 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
44590 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EEnum class");
44591 find mayInstanceOfEEnum_class(problem,interpretation,newObject);
44592 find mayExist(problem, interpretation, newObject);
44593 neg find mustExist(problem, interpretation, newObject);
44594}
44595pattern createObject_EAttribute_class_by_eStructuralFeatures_reference_EClass_with_eContainingClass_reference_EStructuralFeature(
44596 problem:LogicProblem, interpretation:PartialInterpretation,
44597 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
44598 container:DefinedElement)
44599{
44600 find interpretation(problem,interpretation);
44601 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
44602 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EAttribute class");
44603 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
44604 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eStructuralFeatures reference EClass");
44605 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
44606 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eContainingClass reference EStructuralFeature");
44607 find mustInstanceOfEClass_class(problem,interpretation,container);
44608 find mayInstanceOfEAttribute_class(problem,interpretation,newObject);
44609 find mayInRelationeStructuralFeatures_reference_EClass(problem,interpretation,container,newObject);
44610 find mustExist(problem, interpretation, container);
44611 neg find mustExist(problem, interpretation, newObject);
44612}
44613pattern createObject_EAttribute_class(
44614 problem:LogicProblem, interpretation:PartialInterpretation,
44615 typeInterpretation:PartialComplexTypeInterpretation)
44616{
44617 find interpretation(problem,interpretation);
44618 neg find hasElementInContainment(problem,interpretation);
44619 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
44620 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EAttribute class");
44621 find mayInstanceOfEAttribute_class(problem,interpretation,newObject);
44622 find mayExist(problem, interpretation, newObject);
44623 neg find mustExist(problem, interpretation, newObject);
44624}
44625pattern createObject_EObject_class_by_contents_reference_EAnnotation(
44626 problem:LogicProblem, interpretation:PartialInterpretation,
44627 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
44628 container:DefinedElement)
44629{
44630 find interpretation(problem,interpretation);
44631 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
44632 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EObject class");
44633 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
44634 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"contents reference EAnnotation");
44635 find mustInstanceOfEAnnotation_class(problem,interpretation,container);
44636 find mayInstanceOfEObject_class(problem,interpretation,newObject);
44637 find mayInRelationcontents_reference_EAnnotation(problem,interpretation,container,newObject);
44638 find mustExist(problem, interpretation, container);
44639 neg find mustExist(problem, interpretation, newObject);
44640}
44641pattern createObject_EObject_class(
44642 problem:LogicProblem, interpretation:PartialInterpretation,
44643 typeInterpretation:PartialComplexTypeInterpretation)
44644{
44645 find interpretation(problem,interpretation);
44646 neg find hasElementInContainment(problem,interpretation);
44647 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
44648 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EObject class");
44649 find mayInstanceOfEObject_class(problem,interpretation,newObject);
44650 find mayExist(problem, interpretation, newObject);
44651 neg find mustExist(problem, interpretation, newObject);
44652}
44653pattern createObject_EReference_class_by_eStructuralFeatures_reference_EClass_with_eContainingClass_reference_EStructuralFeature(
44654 problem:LogicProblem, interpretation:PartialInterpretation,
44655 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
44656 container:DefinedElement)
44657{
44658 find interpretation(problem,interpretation);
44659 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
44660 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EReference class");
44661 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
44662 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eStructuralFeatures reference EClass");
44663 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
44664 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eContainingClass reference EStructuralFeature");
44665 find mustInstanceOfEClass_class(problem,interpretation,container);
44666 find mayInstanceOfEReference_class(problem,interpretation,newObject);
44667 find mayInRelationeStructuralFeatures_reference_EClass(problem,interpretation,container,newObject);
44668 find mustExist(problem, interpretation, container);
44669 neg find mustExist(problem, interpretation, newObject);
44670}
44671pattern createObject_EReference_class(
44672 problem:LogicProblem, interpretation:PartialInterpretation,
44673 typeInterpretation:PartialComplexTypeInterpretation)
44674{
44675 find interpretation(problem,interpretation);
44676 neg find hasElementInContainment(problem,interpretation);
44677 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
44678 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EReference class");
44679 find mayInstanceOfEReference_class(problem,interpretation,newObject);
44680 find mayExist(problem, interpretation, newObject);
44681 neg find mustExist(problem, interpretation, newObject);
44682}
44683pattern createObject_EPackage_class_UndefinedPart_by_eSubpackages_reference_EPackage_with_eSuperPackage_reference_EPackage(
44684 problem:LogicProblem, interpretation:PartialInterpretation,
44685 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
44686 container:DefinedElement)
44687{
44688 find interpretation(problem,interpretation);
44689 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
44690 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EPackage class UndefinedPart");
44691 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
44692 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eSubpackages reference EPackage");
44693 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
44694 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eSuperPackage reference EPackage");
44695 find mustInstanceOfEPackage_class(problem,interpretation,container);
44696 find mayInstanceOfEPackage_class_UndefinedPart(problem,interpretation,newObject);
44697 find mayInRelationeSubpackages_reference_EPackage(problem,interpretation,container,newObject);
44698 find mustExist(problem, interpretation, container);
44699 neg find mustExist(problem, interpretation, newObject);
44700}
44701pattern createObject_EPackage_class_UndefinedPart(
44702 problem:LogicProblem, interpretation:PartialInterpretation,
44703 typeInterpretation:PartialComplexTypeInterpretation)
44704{
44705 find interpretation(problem,interpretation);
44706 neg find hasElementInContainment(problem,interpretation);
44707 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
44708 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EPackage class UndefinedPart");
44709 find mayInstanceOfEPackage_class_UndefinedPart(problem,interpretation,newObject);
44710 find mayExist(problem, interpretation, newObject);
44711 neg find mustExist(problem, interpretation, newObject);
44712}
44713pattern createObject_EAnnotation_class_by_eAnnotations_reference_EModelElement_with_eModelElement_reference_EAnnotation(
44714 problem:LogicProblem, interpretation:PartialInterpretation,
44715 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
44716 container:DefinedElement)
44717{
44718 find interpretation(problem,interpretation);
44719 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
44720 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EAnnotation class");
44721 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
44722 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eAnnotations reference EModelElement");
44723 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
44724 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eModelElement reference EAnnotation");
44725 find mustInstanceOfEModelElement_class(problem,interpretation,container);
44726 find mayInstanceOfEAnnotation_class(problem,interpretation,newObject);
44727 find mayInRelationeAnnotations_reference_EModelElement(problem,interpretation,container,newObject);
44728 find mustExist(problem, interpretation, container);
44729 neg find mustExist(problem, interpretation, newObject);
44730}
44731pattern createObject_EAnnotation_class(
44732 problem:LogicProblem, interpretation:PartialInterpretation,
44733 typeInterpretation:PartialComplexTypeInterpretation)
44734{
44735 find interpretation(problem,interpretation);
44736 neg find hasElementInContainment(problem,interpretation);
44737 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
44738 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EAnnotation class");
44739 find mayInstanceOfEAnnotation_class(problem,interpretation,newObject);
44740 find mayExist(problem, interpretation, newObject);
44741 neg find mustExist(problem, interpretation, newObject);
44742}
44743pattern createObject_EParameter_class_by_eParameters_reference_EOperation_with_eOperation_reference_EParameter(
44744 problem:LogicProblem, interpretation:PartialInterpretation,
44745 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
44746 container:DefinedElement)
44747{
44748 find interpretation(problem,interpretation);
44749 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
44750 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EParameter class");
44751 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
44752 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eParameters reference EOperation");
44753 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
44754 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eOperation reference EParameter");
44755 find mustInstanceOfEOperation_class(problem,interpretation,container);
44756 find mayInstanceOfEParameter_class(problem,interpretation,newObject);
44757 find mayInRelationeParameters_reference_EOperation(problem,interpretation,container,newObject);
44758 find mustExist(problem, interpretation, container);
44759 neg find mustExist(problem, interpretation, newObject);
44760}
44761pattern createObject_EParameter_class(
44762 problem:LogicProblem, interpretation:PartialInterpretation,
44763 typeInterpretation:PartialComplexTypeInterpretation)
44764{
44765 find interpretation(problem,interpretation);
44766 neg find hasElementInContainment(problem,interpretation);
44767 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
44768 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EParameter class");
44769 find mayInstanceOfEParameter_class(problem,interpretation,newObject);
44770 find mayExist(problem, interpretation, newObject);
44771 neg find mustExist(problem, interpretation, newObject);
44772}
44773pattern createObject_EDataType_class_by_eClassifiers_reference_EPackage_with_ePackage_reference_EClassifier(
44774 problem:LogicProblem, interpretation:PartialInterpretation,
44775 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
44776 container:DefinedElement)
44777{
44778 find interpretation(problem,interpretation);
44779 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
44780 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EDataType class");
44781 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
44782 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eClassifiers reference EPackage");
44783 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
44784 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"ePackage reference EClassifier");
44785 find mustInstanceOfEPackage_class(problem,interpretation,container);
44786 find mayInstanceOfEDataType_class(problem,interpretation,newObject);
44787 find mayInRelationeClassifiers_reference_EPackage(problem,interpretation,container,newObject);
44788 find mustExist(problem, interpretation, container);
44789 neg find mustExist(problem, interpretation, newObject);
44790}
44791pattern createObject_EDataType_class(
44792 problem:LogicProblem, interpretation:PartialInterpretation,
44793 typeInterpretation:PartialComplexTypeInterpretation)
44794{
44795 find interpretation(problem,interpretation);
44796 neg find hasElementInContainment(problem,interpretation);
44797 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
44798 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EDataType class");
44799 find mayInstanceOfEDataType_class(problem,interpretation,newObject);
44800 find mayExist(problem, interpretation, newObject);
44801 neg find mustExist(problem, interpretation, newObject);
44802}
44803pattern createObject_EOperation_class_by_eOperations_reference_EClass_with_eContainingClass_reference_EOperation(
44804 problem:LogicProblem, interpretation:PartialInterpretation,
44805 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
44806 container:DefinedElement)
44807{
44808 find interpretation(problem,interpretation);
44809 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
44810 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EOperation class");
44811 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
44812 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eOperations reference EClass");
44813 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
44814 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eContainingClass reference EOperation");
44815 find mustInstanceOfEClass_class(problem,interpretation,container);
44816 find mayInstanceOfEOperation_class(problem,interpretation,newObject);
44817 find mayInRelationeOperations_reference_EClass(problem,interpretation,container,newObject);
44818 find mustExist(problem, interpretation, container);
44819 neg find mustExist(problem, interpretation, newObject);
44820}
44821pattern createObject_EOperation_class(
44822 problem:LogicProblem, interpretation:PartialInterpretation,
44823 typeInterpretation:PartialComplexTypeInterpretation)
44824{
44825 find interpretation(problem,interpretation);
44826 neg find hasElementInContainment(problem,interpretation);
44827 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
44828 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EOperation class");
44829 find mayInstanceOfEOperation_class(problem,interpretation,newObject);
44830 find mayExist(problem, interpretation, newObject);
44831 neg find mustExist(problem, interpretation, newObject);
44832}
44833pattern createObject_EStringToStringMapEntry_class_by_details_reference_EAnnotation(
44834 problem:LogicProblem, interpretation:PartialInterpretation,
44835 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
44836 container:DefinedElement)
44837{
44838 find interpretation(problem,interpretation);
44839 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
44840 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EStringToStringMapEntry class");
44841 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
44842 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"details reference EAnnotation");
44843 find mustInstanceOfEAnnotation_class(problem,interpretation,container);
44844 find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,newObject);
44845 find mayInRelationdetails_reference_EAnnotation(problem,interpretation,container,newObject);
44846 find mustExist(problem, interpretation, container);
44847 neg find mustExist(problem, interpretation, newObject);
44848}
44849pattern createObject_EStringToStringMapEntry_class(
44850 problem:LogicProblem, interpretation:PartialInterpretation,
44851 typeInterpretation:PartialComplexTypeInterpretation)
44852{
44853 find interpretation(problem,interpretation);
44854 neg find hasElementInContainment(problem,interpretation);
44855 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
44856 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EStringToStringMapEntry class");
44857 find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,newObject);
44858 find mayExist(problem, interpretation, newObject);
44859 neg find mustExist(problem, interpretation, newObject);
44860}
44861pattern createObject_EEnumLiteral_class_by_eLiterals_reference_EEnum_with_eEnum_reference_EEnumLiteral(
44862 problem:LogicProblem, interpretation:PartialInterpretation,
44863 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
44864 container:DefinedElement)
44865{
44866 find interpretation(problem,interpretation);
44867 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
44868 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EEnumLiteral class");
44869 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
44870 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eLiterals reference EEnum");
44871 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
44872 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eEnum reference EEnumLiteral");
44873 find mustInstanceOfEEnum_class(problem,interpretation,container);
44874 find mayInstanceOfEEnumLiteral_class(problem,interpretation,newObject);
44875 find mayInRelationeLiterals_reference_EEnum(problem,interpretation,container,newObject);
44876 find mustExist(problem, interpretation, container);
44877 neg find mustExist(problem, interpretation, newObject);
44878}
44879pattern createObject_EEnumLiteral_class(
44880 problem:LogicProblem, interpretation:PartialInterpretation,
44881 typeInterpretation:PartialComplexTypeInterpretation)
44882{
44883 find interpretation(problem,interpretation);
44884 neg find hasElementInContainment(problem,interpretation);
44885 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
44886 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EEnumLiteral class");
44887 find mayInstanceOfEEnumLiteral_class(problem,interpretation,newObject);
44888 find mayExist(problem, interpretation, newObject);
44889 neg find mustExist(problem, interpretation, newObject);
44890}
44891pattern createObject_EClass_class_by_eClassifiers_reference_EPackage_with_ePackage_reference_EClassifier(
44892 problem:LogicProblem, interpretation:PartialInterpretation,
44893 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
44894 container:DefinedElement)
44895{
44896 find interpretation(problem,interpretation);
44897 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
44898 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EClass class");
44899 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
44900 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eClassifiers reference EPackage");
44901 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
44902 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"ePackage reference EClassifier");
44903 find mustInstanceOfEPackage_class(problem,interpretation,container);
44904 find mayInstanceOfEClass_class(problem,interpretation,newObject);
44905 find mayInRelationeClassifiers_reference_EPackage(problem,interpretation,container,newObject);
44906 find mustExist(problem, interpretation, container);
44907 neg find mustExist(problem, interpretation, newObject);
44908}
44909pattern createObject_EClass_class(
44910 problem:LogicProblem, interpretation:PartialInterpretation,
44911 typeInterpretation:PartialComplexTypeInterpretation)
44912{
44913 find interpretation(problem,interpretation);
44914 neg find hasElementInContainment(problem,interpretation);
44915 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
44916 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EClass class");
44917 find mayInstanceOfEClass_class(problem,interpretation,newObject);
44918 find mayExist(problem, interpretation, newObject);
44919 neg find mustExist(problem, interpretation, newObject);
44920}
44921pattern createObject_ETypeParameter_class_by_eTypeParameters_reference_EClassifier(
44922 problem:LogicProblem, interpretation:PartialInterpretation,
44923 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
44924 container:DefinedElement)
44925{
44926 find interpretation(problem,interpretation);
44927 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
44928 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"ETypeParameter class");
44929 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
44930 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eTypeParameters reference EClassifier");
44931 find mustInstanceOfEClassifier_class(problem,interpretation,container);
44932 find mayInstanceOfETypeParameter_class(problem,interpretation,newObject);
44933 find mayInRelationeTypeParameters_reference_EClassifier(problem,interpretation,container,newObject);
44934 find mustExist(problem, interpretation, container);
44935 neg find mustExist(problem, interpretation, newObject);
44936}
44937pattern createObject_ETypeParameter_class_by_eTypeParameters_reference_EOperation(
44938 problem:LogicProblem, interpretation:PartialInterpretation,
44939 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
44940 container:DefinedElement)
44941{
44942 find interpretation(problem,interpretation);
44943 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
44944 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"ETypeParameter class");
44945 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
44946 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eTypeParameters reference EOperation");
44947 find mustInstanceOfEOperation_class(problem,interpretation,container);
44948 find mayInstanceOfETypeParameter_class(problem,interpretation,newObject);
44949 find mayInRelationeTypeParameters_reference_EOperation(problem,interpretation,container,newObject);
44950 find mustExist(problem, interpretation, container);
44951 neg find mustExist(problem, interpretation, newObject);
44952}
44953pattern createObject_ETypeParameter_class(
44954 problem:LogicProblem, interpretation:PartialInterpretation,
44955 typeInterpretation:PartialComplexTypeInterpretation)
44956{
44957 find interpretation(problem,interpretation);
44958 neg find hasElementInContainment(problem,interpretation);
44959 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
44960 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"ETypeParameter class");
44961 find mayInstanceOfETypeParameter_class(problem,interpretation,newObject);
44962 find mayExist(problem, interpretation, newObject);
44963 neg find mustExist(problem, interpretation, newObject);
44964}
44965pattern createObject_EGenericType_class_by_eGenericSuperTypes_reference_EClass(
44966 problem:LogicProblem, interpretation:PartialInterpretation,
44967 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
44968 container:DefinedElement)
44969{
44970 find interpretation(problem,interpretation);
44971 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
44972 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class");
44973 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
44974 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eGenericSuperTypes reference EClass");
44975 find mustInstanceOfEClass_class(problem,interpretation,container);
44976 find mayInstanceOfEGenericType_class(problem,interpretation,newObject);
44977 find mayInRelationeGenericSuperTypes_reference_EClass(problem,interpretation,container,newObject);
44978 find mustExist(problem, interpretation, container);
44979 neg find mustExist(problem, interpretation, newObject);
44980}
44981pattern createObject_EGenericType_class_by_eGenericExceptions_reference_EOperation(
44982 problem:LogicProblem, interpretation:PartialInterpretation,
44983 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
44984 container:DefinedElement)
44985{
44986 find interpretation(problem,interpretation);
44987 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
44988 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class");
44989 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
44990 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eGenericExceptions reference EOperation");
44991 find mustInstanceOfEOperation_class(problem,interpretation,container);
44992 find mayInstanceOfEGenericType_class(problem,interpretation,newObject);
44993 find mayInRelationeGenericExceptions_reference_EOperation(problem,interpretation,container,newObject);
44994 find mustExist(problem, interpretation, container);
44995 neg find mustExist(problem, interpretation, newObject);
44996}
44997pattern createObject_EGenericType_class_by_eGenericType_reference_ETypedElement(
44998 problem:LogicProblem, interpretation:PartialInterpretation,
44999 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
45000 container:DefinedElement)
45001{
45002 find interpretation(problem,interpretation);
45003 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
45004 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class");
45005 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
45006 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eGenericType reference ETypedElement");
45007 find mustInstanceOfETypedElement_class(problem,interpretation,container);
45008 find mayInstanceOfEGenericType_class(problem,interpretation,newObject);
45009 find mayInRelationeGenericType_reference_ETypedElement(problem,interpretation,container,newObject);
45010 find mustExist(problem, interpretation, container);
45011 neg find mustExist(problem, interpretation, newObject);
45012}
45013pattern createObject_EGenericType_class_by_eUpperBound_reference_EGenericType(
45014 problem:LogicProblem, interpretation:PartialInterpretation,
45015 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
45016 container:DefinedElement)
45017{
45018 find interpretation(problem,interpretation);
45019 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
45020 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class");
45021 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
45022 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eUpperBound reference EGenericType");
45023 find mustInstanceOfEGenericType_class(problem,interpretation,container);
45024 find mayInstanceOfEGenericType_class(problem,interpretation,newObject);
45025 find mayInRelationeUpperBound_reference_EGenericType(problem,interpretation,container,newObject);
45026 find mustExist(problem, interpretation, container);
45027 neg find mustExist(problem, interpretation, newObject);
45028}
45029pattern createObject_EGenericType_class_by_eTypeArguments_reference_EGenericType(
45030 problem:LogicProblem, interpretation:PartialInterpretation,
45031 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
45032 container:DefinedElement)
45033{
45034 find interpretation(problem,interpretation);
45035 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
45036 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class");
45037 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
45038 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eTypeArguments reference EGenericType");
45039 find mustInstanceOfEGenericType_class(problem,interpretation,container);
45040 find mayInstanceOfEGenericType_class(problem,interpretation,newObject);
45041 find mayInRelationeTypeArguments_reference_EGenericType(problem,interpretation,container,newObject);
45042 find mustExist(problem, interpretation, container);
45043 neg find mustExist(problem, interpretation, newObject);
45044}
45045pattern createObject_EGenericType_class_by_eLowerBound_reference_EGenericType(
45046 problem:LogicProblem, interpretation:PartialInterpretation,
45047 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
45048 container:DefinedElement)
45049{
45050 find interpretation(problem,interpretation);
45051 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
45052 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class");
45053 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
45054 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eLowerBound reference EGenericType");
45055 find mustInstanceOfEGenericType_class(problem,interpretation,container);
45056 find mayInstanceOfEGenericType_class(problem,interpretation,newObject);
45057 find mayInRelationeLowerBound_reference_EGenericType(problem,interpretation,container,newObject);
45058 find mustExist(problem, interpretation, container);
45059 neg find mustExist(problem, interpretation, newObject);
45060}
45061pattern createObject_EGenericType_class_by_eBounds_reference_ETypeParameter(
45062 problem:LogicProblem, interpretation:PartialInterpretation,
45063 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
45064 container:DefinedElement)
45065{
45066 find interpretation(problem,interpretation);
45067 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
45068 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class");
45069 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
45070 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eBounds reference ETypeParameter");
45071 find mustInstanceOfETypeParameter_class(problem,interpretation,container);
45072 find mayInstanceOfEGenericType_class(problem,interpretation,newObject);
45073 find mayInRelationeBounds_reference_ETypeParameter(problem,interpretation,container,newObject);
45074 find mustExist(problem, interpretation, container);
45075 neg find mustExist(problem, interpretation, newObject);
45076}
45077pattern createObject_EGenericType_class(
45078 problem:LogicProblem, interpretation:PartialInterpretation,
45079 typeInterpretation:PartialComplexTypeInterpretation)
45080{
45081 find interpretation(problem,interpretation);
45082 neg find hasElementInContainment(problem,interpretation);
45083 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
45084 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class");
45085 find mayInstanceOfEGenericType_class(problem,interpretation,newObject);
45086 find mayExist(problem, interpretation, newObject);
45087 neg find mustExist(problem, interpretation, newObject);
45088}
45089
45090//////////
45091// 4.2 Type refinement
45092//////////
45093pattern refineTypeTo_EEnum_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
45094 find interpretation(problem,interpretation);
45095 PartialInterpretation.newElements(interpretation,element);
45096 find mayInstanceOfEEnum_class(problem,interpretation,element);
45097 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
45098 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
45099 neg find mustInstanceOfEEnum_class(problem,interpretation,element);
45100 neg find mustInstanceOfEObject_class(problem,interpretation,element);
45101 neg find mustInstanceOfEClass_class(problem,interpretation,element);
45102 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
45103 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
45104 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
45105 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
45106 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
45107}
45108pattern refineTypeTo_EAttribute_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
45109 find interpretation(problem,interpretation);
45110 PartialInterpretation.newElements(interpretation,element);
45111 find mayInstanceOfEAttribute_class(problem,interpretation,element);
45112 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
45113 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
45114 neg find mustInstanceOfEAttribute_class(problem,interpretation,element);
45115 neg find mustInstanceOfEObject_class(problem,interpretation,element);
45116 neg find mustInstanceOfEReference_class(problem,interpretation,element);
45117 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
45118 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
45119 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
45120 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
45121 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
45122 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
45123 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
45124}
45125pattern refineTypeTo_EObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
45126 find interpretation(problem,interpretation);
45127 PartialInterpretation.newElements(interpretation,element);
45128 find mayInstanceOfEObject_class(problem,interpretation,element);
45129 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
45130 neg find mustInstanceOfEObject_class(problem,interpretation,element);
45131 neg find mustInstanceOfEModelElement_class(problem,interpretation,element);
45132 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
45133}
45134pattern refineTypeTo_EReference_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
45135 find interpretation(problem,interpretation);
45136 PartialInterpretation.newElements(interpretation,element);
45137 find mayInstanceOfEReference_class(problem,interpretation,element);
45138 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
45139 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
45140 neg find mustInstanceOfEAttribute_class(problem,interpretation,element);
45141 neg find mustInstanceOfEObject_class(problem,interpretation,element);
45142 neg find mustInstanceOfEReference_class(problem,interpretation,element);
45143 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
45144 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
45145 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
45146 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
45147 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
45148 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
45149 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
45150}
45151pattern refineTypeTo_EPackage_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
45152 find interpretation(problem,interpretation);
45153 PartialInterpretation.newElements(interpretation,element);
45154 find mayInstanceOfEPackage_class_UndefinedPart(problem,interpretation,element);
45155 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
45156 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
45157 neg find mustInstanceOfEObject_class(problem,interpretation,element);
45158 neg find mustInstanceOfEPackage_class_UndefinedPart(problem,interpretation,element);
45159 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
45160 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
45161 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
45162 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
45163 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
45164}
45165pattern refineTypeTo_EAnnotation_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
45166 find interpretation(problem,interpretation);
45167 PartialInterpretation.newElements(interpretation,element);
45168 find mayInstanceOfEAnnotation_class(problem,interpretation,element);
45169 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
45170 neg find mustInstanceOfEObject_class(problem,interpretation,element);
45171 neg find mustInstanceOfENamedElement_class(problem,interpretation,element);
45172 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
45173 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
45174}
45175pattern refineTypeTo_EParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
45176 find interpretation(problem,interpretation);
45177 PartialInterpretation.newElements(interpretation,element);
45178 find mayInstanceOfEParameter_class(problem,interpretation,element);
45179 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
45180 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
45181 neg find mustInstanceOfEObject_class(problem,interpretation,element);
45182 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
45183 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
45184 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
45185 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
45186 neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element);
45187 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
45188 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
45189 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
45190}
45191pattern refineTypeTo_EDataType_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
45192 find interpretation(problem,interpretation);
45193 PartialInterpretation.newElements(interpretation,element);
45194 find mayInstanceOfEDataType_class(problem,interpretation,element);
45195 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
45196 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
45197 neg find mustInstanceOfEEnum_class(problem,interpretation,element);
45198 neg find mustInstanceOfEObject_class(problem,interpretation,element);
45199 neg find mustInstanceOfEClass_class(problem,interpretation,element);
45200 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
45201 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
45202 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
45203 neg find mustInstanceOfEDataType_class(problem,interpretation,element);
45204 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
45205 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
45206}
45207pattern refineTypeTo_EOperation_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
45208 find interpretation(problem,interpretation);
45209 PartialInterpretation.newElements(interpretation,element);
45210 find mayInstanceOfEOperation_class(problem,interpretation,element);
45211 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
45212 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
45213 neg find mustInstanceOfEObject_class(problem,interpretation,element);
45214 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
45215 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
45216 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
45217 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
45218 neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element);
45219 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
45220 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
45221 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
45222}
45223pattern refineTypeTo_EStringToStringMapEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
45224 find interpretation(problem,interpretation);
45225 PartialInterpretation.newElements(interpretation,element);
45226 find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
45227 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
45228 neg find mustInstanceOfEObject_class(problem,interpretation,element);
45229 neg find mustInstanceOfEModelElement_class(problem,interpretation,element);
45230 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
45231}
45232pattern refineTypeTo_EEnumLiteral_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
45233 find interpretation(problem,interpretation);
45234 PartialInterpretation.newElements(interpretation,element);
45235 find mayInstanceOfEEnumLiteral_class(problem,interpretation,element);
45236 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
45237 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
45238 neg find mustInstanceOfEObject_class(problem,interpretation,element);
45239 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
45240 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
45241 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
45242 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
45243 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
45244 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
45245}
45246pattern refineTypeTo_EClass_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
45247 find interpretation(problem,interpretation);
45248 PartialInterpretation.newElements(interpretation,element);
45249 find mayInstanceOfEClass_class(problem,interpretation,element);
45250 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
45251 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
45252 neg find mustInstanceOfEObject_class(problem,interpretation,element);
45253 neg find mustInstanceOfEClass_class(problem,interpretation,element);
45254 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
45255 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
45256 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
45257 neg find mustInstanceOfEDataType_class(problem,interpretation,element);
45258 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
45259 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
45260}
45261pattern refineTypeTo_ETypeParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
45262 find interpretation(problem,interpretation);
45263 PartialInterpretation.newElements(interpretation,element);
45264 find mayInstanceOfETypeParameter_class(problem,interpretation,element);
45265 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
45266 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
45267 neg find mustInstanceOfEObject_class(problem,interpretation,element);
45268 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
45269 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
45270 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
45271 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
45272 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
45273 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
45274}
45275pattern refineTypeTo_EGenericType_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
45276 find interpretation(problem,interpretation);
45277 PartialInterpretation.newElements(interpretation,element);
45278 find mayInstanceOfEGenericType_class(problem,interpretation,element);
45279 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
45280 neg find mustInstanceOfEObject_class(problem,interpretation,element);
45281 neg find mustInstanceOfEModelElement_class(problem,interpretation,element);
45282 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
45283}
45284
45285//////////
45286// 4.3 Relation refinement
45287//////////
45288pattern refineRelation_eAttributeType_reference_EAttribute(
45289 problem:LogicProblem, interpretation:PartialInterpretation,
45290 relationIterpretation:PartialRelationInterpretation,
45291 from: DefinedElement, to: DefinedElement)
45292{
45293 find interpretation(problem,interpretation);
45294 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
45295 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributeType reference EAttribute");
45296 find mustExist(problem, interpretation, from);
45297 find mustExist(problem, interpretation, to);
45298 find mustInstanceOfEAttribute_class(problem,interpretation,from);
45299 find mustInstanceOfEDataType_class(problem,interpretation,to);
45300 find mayInRelationeAttributeType_reference_EAttribute(problem,interpretation,from,to);
45301 neg find mustInRelationeAttributeType_reference_EAttribute(problem,interpretation,from,to);
45302}
45303pattern refineRelation_references_reference_EAnnotation(
45304 problem:LogicProblem, interpretation:PartialInterpretation,
45305 relationIterpretation:PartialRelationInterpretation,
45306 from: DefinedElement, to: DefinedElement)
45307{
45308 find interpretation(problem,interpretation);
45309 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
45310 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"references reference EAnnotation");
45311 find mustExist(problem, interpretation, from);
45312 find mustExist(problem, interpretation, to);
45313 find mustInstanceOfEAnnotation_class(problem,interpretation,from);
45314 find mustInstanceOfEObject_class(problem,interpretation,to);
45315 find mayInRelationreferences_reference_EAnnotation(problem,interpretation,from,to);
45316 neg find mustInRelationreferences_reference_EAnnotation(problem,interpretation,from,to);
45317}
45318pattern refineRelation_eSuperTypes_reference_EClass(
45319 problem:LogicProblem, interpretation:PartialInterpretation,
45320 relationIterpretation:PartialRelationInterpretation,
45321 from: DefinedElement, to: DefinedElement)
45322{
45323 find interpretation(problem,interpretation);
45324 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
45325 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eSuperTypes reference EClass");
45326 find mustExist(problem, interpretation, from);
45327 find mustExist(problem, interpretation, to);
45328 find mustInstanceOfEClass_class(problem,interpretation,from);
45329 find mustInstanceOfEClass_class(problem,interpretation,to);
45330 find mayInRelationeSuperTypes_reference_EClass(problem,interpretation,from,to);
45331 neg find mustInRelationeSuperTypes_reference_EClass(problem,interpretation,from,to);
45332}
45333pattern refineRelation_eAllAttributes_reference_EClass(
45334 problem:LogicProblem, interpretation:PartialInterpretation,
45335 relationIterpretation:PartialRelationInterpretation,
45336 from: DefinedElement, to: DefinedElement)
45337{
45338 find interpretation(problem,interpretation);
45339 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
45340 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllAttributes reference EClass");
45341 find mustExist(problem, interpretation, from);
45342 find mustExist(problem, interpretation, to);
45343 find mustInstanceOfEClass_class(problem,interpretation,from);
45344 find mustInstanceOfEAttribute_class(problem,interpretation,to);
45345 find mayInRelationeAllAttributes_reference_EClass(problem,interpretation,from,to);
45346 neg find mustInRelationeAllAttributes_reference_EClass(problem,interpretation,from,to);
45347}
45348pattern refineRelation_eAllReferences_reference_EClass(
45349 problem:LogicProblem, interpretation:PartialInterpretation,
45350 relationIterpretation:PartialRelationInterpretation,
45351 from: DefinedElement, to: DefinedElement)
45352{
45353 find interpretation(problem,interpretation);
45354 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
45355 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllReferences reference EClass");
45356 find mustExist(problem, interpretation, from);
45357 find mustExist(problem, interpretation, to);
45358 find mustInstanceOfEClass_class(problem,interpretation,from);
45359 find mustInstanceOfEReference_class(problem,interpretation,to);
45360 find mayInRelationeAllReferences_reference_EClass(problem,interpretation,from,to);
45361 neg find mustInRelationeAllReferences_reference_EClass(problem,interpretation,from,to);
45362}
45363pattern refineRelation_eReferences_reference_EClass(
45364 problem:LogicProblem, interpretation:PartialInterpretation,
45365 relationIterpretation:PartialRelationInterpretation,
45366 from: DefinedElement, to: DefinedElement)
45367{
45368 find interpretation(problem,interpretation);
45369 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
45370 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferences reference EClass");
45371 find mustExist(problem, interpretation, from);
45372 find mustExist(problem, interpretation, to);
45373 find mustInstanceOfEClass_class(problem,interpretation,from);
45374 find mustInstanceOfEReference_class(problem,interpretation,to);
45375 find mayInRelationeReferences_reference_EClass(problem,interpretation,from,to);
45376 neg find mustInRelationeReferences_reference_EClass(problem,interpretation,from,to);
45377}
45378pattern refineRelation_eAttributes_reference_EClass(
45379 problem:LogicProblem, interpretation:PartialInterpretation,
45380 relationIterpretation:PartialRelationInterpretation,
45381 from: DefinedElement, to: DefinedElement)
45382{
45383 find interpretation(problem,interpretation);
45384 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
45385 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributes reference EClass");
45386 find mustExist(problem, interpretation, from);
45387 find mustExist(problem, interpretation, to);
45388 find mustInstanceOfEClass_class(problem,interpretation,from);
45389 find mustInstanceOfEAttribute_class(problem,interpretation,to);
45390 find mayInRelationeAttributes_reference_EClass(problem,interpretation,from,to);
45391 neg find mustInRelationeAttributes_reference_EClass(problem,interpretation,from,to);
45392}
45393pattern refineRelation_eAllContainments_reference_EClass(
45394 problem:LogicProblem, interpretation:PartialInterpretation,
45395 relationIterpretation:PartialRelationInterpretation,
45396 from: DefinedElement, to: DefinedElement)
45397{
45398 find interpretation(problem,interpretation);
45399 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
45400 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllContainments reference EClass");
45401 find mustExist(problem, interpretation, from);
45402 find mustExist(problem, interpretation, to);
45403 find mustInstanceOfEClass_class(problem,interpretation,from);
45404 find mustInstanceOfEReference_class(problem,interpretation,to);
45405 find mayInRelationeAllContainments_reference_EClass(problem,interpretation,from,to);
45406 neg find mustInRelationeAllContainments_reference_EClass(problem,interpretation,from,to);
45407}
45408pattern refineRelation_eAllOperations_reference_EClass(
45409 problem:LogicProblem, interpretation:PartialInterpretation,
45410 relationIterpretation:PartialRelationInterpretation,
45411 from: DefinedElement, to: DefinedElement)
45412{
45413 find interpretation(problem,interpretation);
45414 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
45415 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllOperations reference EClass");
45416 find mustExist(problem, interpretation, from);
45417 find mustExist(problem, interpretation, to);
45418 find mustInstanceOfEClass_class(problem,interpretation,from);
45419 find mustInstanceOfEOperation_class(problem,interpretation,to);
45420 find mayInRelationeAllOperations_reference_EClass(problem,interpretation,from,to);
45421 neg find mustInRelationeAllOperations_reference_EClass(problem,interpretation,from,to);
45422}
45423pattern refineRelation_eAllStructuralFeatures_reference_EClass(
45424 problem:LogicProblem, interpretation:PartialInterpretation,
45425 relationIterpretation:PartialRelationInterpretation,
45426 from: DefinedElement, to: DefinedElement)
45427{
45428 find interpretation(problem,interpretation);
45429 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
45430 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllStructuralFeatures reference EClass");
45431 find mustExist(problem, interpretation, from);
45432 find mustExist(problem, interpretation, to);
45433 find mustInstanceOfEClass_class(problem,interpretation,from);
45434 find mustInstanceOfEStructuralFeature_class(problem,interpretation,to);
45435 find mayInRelationeAllStructuralFeatures_reference_EClass(problem,interpretation,from,to);
45436 neg find mustInRelationeAllStructuralFeatures_reference_EClass(problem,interpretation,from,to);
45437}
45438pattern refineRelation_eAllSuperTypes_reference_EClass(
45439 problem:LogicProblem, interpretation:PartialInterpretation,
45440 relationIterpretation:PartialRelationInterpretation,
45441 from: DefinedElement, to: DefinedElement)
45442{
45443 find interpretation(problem,interpretation);
45444 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
45445 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllSuperTypes reference EClass");
45446 find mustExist(problem, interpretation, from);
45447 find mustExist(problem, interpretation, to);
45448 find mustInstanceOfEClass_class(problem,interpretation,from);
45449 find mustInstanceOfEClass_class(problem,interpretation,to);
45450 find mayInRelationeAllSuperTypes_reference_EClass(problem,interpretation,from,to);
45451 neg find mustInRelationeAllSuperTypes_reference_EClass(problem,interpretation,from,to);
45452}
45453pattern refineRelation_eIDAttribute_reference_EClass(
45454 problem:LogicProblem, interpretation:PartialInterpretation,
45455 relationIterpretation:PartialRelationInterpretation,
45456 from: DefinedElement, to: DefinedElement)
45457{
45458 find interpretation(problem,interpretation);
45459 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
45460 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eIDAttribute reference EClass");
45461 find mustExist(problem, interpretation, from);
45462 find mustExist(problem, interpretation, to);
45463 find mustInstanceOfEClass_class(problem,interpretation,from);
45464 find mustInstanceOfEAttribute_class(problem,interpretation,to);
45465 find mayInRelationeIDAttribute_reference_EClass(problem,interpretation,from,to);
45466 neg find mustInRelationeIDAttribute_reference_EClass(problem,interpretation,from,to);
45467}
45468pattern refineRelation_eAllGenericSuperTypes_reference_EClass(
45469 problem:LogicProblem, interpretation:PartialInterpretation,
45470 relationIterpretation:PartialRelationInterpretation,
45471 from: DefinedElement, to: DefinedElement)
45472{
45473 find interpretation(problem,interpretation);
45474 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
45475 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllGenericSuperTypes reference EClass");
45476 find mustExist(problem, interpretation, from);
45477 find mustExist(problem, interpretation, to);
45478 find mustInstanceOfEClass_class(problem,interpretation,from);
45479 find mustInstanceOfEGenericType_class(problem,interpretation,to);
45480 find mayInRelationeAllGenericSuperTypes_reference_EClass(problem,interpretation,from,to);
45481 neg find mustInRelationeAllGenericSuperTypes_reference_EClass(problem,interpretation,from,to);
45482}
45483pattern refineRelation_eExceptions_reference_EOperation(
45484 problem:LogicProblem, interpretation:PartialInterpretation,
45485 relationIterpretation:PartialRelationInterpretation,
45486 from: DefinedElement, to: DefinedElement)
45487{
45488 find interpretation(problem,interpretation);
45489 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
45490 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eExceptions reference EOperation");
45491 find mustExist(problem, interpretation, from);
45492 find mustExist(problem, interpretation, to);
45493 find mustInstanceOfEOperation_class(problem,interpretation,from);
45494 find mustInstanceOfEClassifier_class(problem,interpretation,to);
45495 find mayInRelationeExceptions_reference_EOperation(problem,interpretation,from,to);
45496 neg find mustInRelationeExceptions_reference_EOperation(problem,interpretation,from,to);
45497}
45498pattern refineRelation_eOpposite_reference_EReference(
45499 problem:LogicProblem, interpretation:PartialInterpretation,
45500 relationIterpretation:PartialRelationInterpretation,
45501 from: DefinedElement, to: DefinedElement)
45502{
45503 find interpretation(problem,interpretation);
45504 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
45505 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eOpposite reference EReference");
45506 find mustExist(problem, interpretation, from);
45507 find mustExist(problem, interpretation, to);
45508 find mustInstanceOfEReference_class(problem,interpretation,from);
45509 find mustInstanceOfEReference_class(problem,interpretation,to);
45510 find mayInRelationeOpposite_reference_EReference(problem,interpretation,from,to);
45511 neg find mustInRelationeOpposite_reference_EReference(problem,interpretation,from,to);
45512}
45513pattern refineRelation_eReferenceType_reference_EReference(
45514 problem:LogicProblem, interpretation:PartialInterpretation,
45515 relationIterpretation:PartialRelationInterpretation,
45516 from: DefinedElement, to: DefinedElement)
45517{
45518 find interpretation(problem,interpretation);
45519 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
45520 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferenceType reference EReference");
45521 find mustExist(problem, interpretation, from);
45522 find mustExist(problem, interpretation, to);
45523 find mustInstanceOfEReference_class(problem,interpretation,from);
45524 find mustInstanceOfEClass_class(problem,interpretation,to);
45525 find mayInRelationeReferenceType_reference_EReference(problem,interpretation,from,to);
45526 neg find mustInRelationeReferenceType_reference_EReference(problem,interpretation,from,to);
45527}
45528pattern refineRelation_eKeys_reference_EReference(
45529 problem:LogicProblem, interpretation:PartialInterpretation,
45530 relationIterpretation:PartialRelationInterpretation,
45531 from: DefinedElement, to: DefinedElement)
45532{
45533 find interpretation(problem,interpretation);
45534 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
45535 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eKeys reference EReference");
45536 find mustExist(problem, interpretation, from);
45537 find mustExist(problem, interpretation, to);
45538 find mustInstanceOfEReference_class(problem,interpretation,from);
45539 find mustInstanceOfEAttribute_class(problem,interpretation,to);
45540 find mayInRelationeKeys_reference_EReference(problem,interpretation,from,to);
45541 neg find mustInRelationeKeys_reference_EReference(problem,interpretation,from,to);
45542}
45543pattern refineRelation_eType_reference_ETypedElement(
45544 problem:LogicProblem, interpretation:PartialInterpretation,
45545 relationIterpretation:PartialRelationInterpretation,
45546 from: DefinedElement, to: DefinedElement)
45547{
45548 find interpretation(problem,interpretation);
45549 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
45550 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eType reference ETypedElement");
45551 find mustExist(problem, interpretation, from);
45552 find mustExist(problem, interpretation, to);
45553 find mustInstanceOfETypedElement_class(problem,interpretation,from);
45554 find mustInstanceOfEClassifier_class(problem,interpretation,to);
45555 find mayInRelationeType_reference_ETypedElement(problem,interpretation,from,to);
45556 neg find mustInRelationeType_reference_ETypedElement(problem,interpretation,from,to);
45557}
45558pattern refineRelation_eRawType_reference_EGenericType(
45559 problem:LogicProblem, interpretation:PartialInterpretation,
45560 relationIterpretation:PartialRelationInterpretation,
45561 from: DefinedElement, to: DefinedElement)
45562{
45563 find interpretation(problem,interpretation);
45564 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
45565 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eRawType reference EGenericType");
45566 find mustExist(problem, interpretation, from);
45567 find mustExist(problem, interpretation, to);
45568 find mustInstanceOfEGenericType_class(problem,interpretation,from);
45569 find mustInstanceOfEClassifier_class(problem,interpretation,to);
45570 find mayInRelationeRawType_reference_EGenericType(problem,interpretation,from,to);
45571 neg find mustInRelationeRawType_reference_EGenericType(problem,interpretation,from,to);
45572}
45573pattern refineRelation_eTypeParameter_reference_EGenericType(
45574 problem:LogicProblem, interpretation:PartialInterpretation,
45575 relationIterpretation:PartialRelationInterpretation,
45576 from: DefinedElement, to: DefinedElement)
45577{
45578 find interpretation(problem,interpretation);
45579 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
45580 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeParameter reference EGenericType");
45581 find mustExist(problem, interpretation, from);
45582 find mustExist(problem, interpretation, to);
45583 find mustInstanceOfEGenericType_class(problem,interpretation,from);
45584 find mustInstanceOfETypeParameter_class(problem,interpretation,to);
45585 find mayInRelationeTypeParameter_reference_EGenericType(problem,interpretation,from,to);
45586 neg find mustInRelationeTypeParameter_reference_EGenericType(problem,interpretation,from,to);
45587}
45588pattern refineRelation_eClassifier_reference_EGenericType(
45589 problem:LogicProblem, interpretation:PartialInterpretation,
45590 relationIterpretation:PartialRelationInterpretation,
45591 from: DefinedElement, to: DefinedElement)
45592{
45593 find interpretation(problem,interpretation);
45594 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
45595 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eClassifier reference EGenericType");
45596 find mustExist(problem, interpretation, from);
45597 find mustExist(problem, interpretation, to);
45598 find mustInstanceOfEGenericType_class(problem,interpretation,from);
45599 find mustInstanceOfEClassifier_class(problem,interpretation,to);
45600 find mayInRelationeClassifier_reference_EGenericType(problem,interpretation,from,to);
45601 neg find mustInRelationeClassifier_reference_EGenericType(problem,interpretation,from,to);
45602}
45603pattern refineRelation_iD_attribute_EAttribute(
45604 problem:LogicProblem, interpretation:PartialInterpretation,
45605 relationIterpretation:PartialRelationInterpretation,
45606 from: DefinedElement, to: DefinedElement)
45607{
45608 find interpretation(problem,interpretation);
45609 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
45610 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"iD attribute EAttribute");
45611 find mustExist(problem, interpretation, from);
45612 find mustExist(problem, interpretation, to);
45613 find mustInstanceOfEAttribute_class(problem,interpretation,from);
45614 BooleanElement(to);
45615 find mayInRelationiD_attribute_EAttribute(problem,interpretation,from,to);
45616 neg find mustInRelationiD_attribute_EAttribute(problem,interpretation,from,to);
45617}
45618pattern refineRelation_source_attribute_EAnnotation(
45619 problem:LogicProblem, interpretation:PartialInterpretation,
45620 relationIterpretation:PartialRelationInterpretation,
45621 from: DefinedElement, to: DefinedElement)
45622{
45623 find interpretation(problem,interpretation);
45624 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
45625 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"source attribute EAnnotation");
45626 find mustExist(problem, interpretation, from);
45627 find mustExist(problem, interpretation, to);
45628 find mustInstanceOfEAnnotation_class(problem,interpretation,from);
45629 StringElement(to);
45630 find mayInRelationsource_attribute_EAnnotation(problem,interpretation,from,to);
45631 neg find mustInRelationsource_attribute_EAnnotation(problem,interpretation,from,to);
45632}
45633pattern refineRelation_abstract_attribute_EClass(
45634 problem:LogicProblem, interpretation:PartialInterpretation,
45635 relationIterpretation:PartialRelationInterpretation,
45636 from: DefinedElement, to: DefinedElement)
45637{
45638 find interpretation(problem,interpretation);
45639 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
45640 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"abstract attribute EClass");
45641 find mustExist(problem, interpretation, from);
45642 find mustExist(problem, interpretation, to);
45643 find mustInstanceOfEClass_class(problem,interpretation,from);
45644 BooleanElement(to);
45645 find mayInRelationabstract_attribute_EClass(problem,interpretation,from,to);
45646 neg find mustInRelationabstract_attribute_EClass(problem,interpretation,from,to);
45647}
45648pattern refineRelation_interface_attribute_EClass(
45649 problem:LogicProblem, interpretation:PartialInterpretation,
45650 relationIterpretation:PartialRelationInterpretation,
45651 from: DefinedElement, to: DefinedElement)
45652{
45653 find interpretation(problem,interpretation);
45654 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
45655 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface attribute EClass");
45656 find mustExist(problem, interpretation, from);
45657 find mustExist(problem, interpretation, to);
45658 find mustInstanceOfEClass_class(problem,interpretation,from);
45659 BooleanElement(to);
45660 find mayInRelationinterface_attribute_EClass(problem,interpretation,from,to);
45661 neg find mustInRelationinterface_attribute_EClass(problem,interpretation,from,to);
45662}
45663pattern refineRelation_instanceClassName_attribute_EClassifier(
45664 problem:LogicProblem, interpretation:PartialInterpretation,
45665 relationIterpretation:PartialRelationInterpretation,
45666 from: DefinedElement, to: DefinedElement)
45667{
45668 find interpretation(problem,interpretation);
45669 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
45670 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"instanceClassName attribute EClassifier");
45671 find mustExist(problem, interpretation, from);
45672 find mustExist(problem, interpretation, to);
45673 find mustInstanceOfEClassifier_class(problem,interpretation,from);
45674 StringElement(to);
45675 find mayInRelationinstanceClassName_attribute_EClassifier(problem,interpretation,from,to);
45676 neg find mustInRelationinstanceClassName_attribute_EClassifier(problem,interpretation,from,to);
45677}
45678pattern refineRelation_instanceTypeName_attribute_EClassifier(
45679 problem:LogicProblem, interpretation:PartialInterpretation,
45680 relationIterpretation:PartialRelationInterpretation,
45681 from: DefinedElement, to: DefinedElement)
45682{
45683 find interpretation(problem,interpretation);
45684 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
45685 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"instanceTypeName attribute EClassifier");
45686 find mustExist(problem, interpretation, from);
45687 find mustExist(problem, interpretation, to);
45688 find mustInstanceOfEClassifier_class(problem,interpretation,from);
45689 StringElement(to);
45690 find mayInRelationinstanceTypeName_attribute_EClassifier(problem,interpretation,from,to);
45691 neg find mustInRelationinstanceTypeName_attribute_EClassifier(problem,interpretation,from,to);
45692}
45693pattern refineRelation_serializable_attribute_EDataType(
45694 problem:LogicProblem, interpretation:PartialInterpretation,
45695 relationIterpretation:PartialRelationInterpretation,
45696 from: DefinedElement, to: DefinedElement)
45697{
45698 find interpretation(problem,interpretation);
45699 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
45700 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"serializable attribute EDataType");
45701 find mustExist(problem, interpretation, from);
45702 find mustExist(problem, interpretation, to);
45703 find mustInstanceOfEDataType_class(problem,interpretation,from);
45704 BooleanElement(to);
45705 find mayInRelationserializable_attribute_EDataType(problem,interpretation,from,to);
45706 neg find mustInRelationserializable_attribute_EDataType(problem,interpretation,from,to);
45707}
45708pattern refineRelation_value_attribute_EEnumLiteral(
45709 problem:LogicProblem, interpretation:PartialInterpretation,
45710 relationIterpretation:PartialRelationInterpretation,
45711 from: DefinedElement, to: DefinedElement)
45712{
45713 find interpretation(problem,interpretation);
45714 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
45715 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"value attribute EEnumLiteral");
45716 find mustExist(problem, interpretation, from);
45717 find mustExist(problem, interpretation, to);
45718 find mustInstanceOfEEnumLiteral_class(problem,interpretation,from);
45719 IntegerElement(to);
45720 find mayInRelationvalue_attribute_EEnumLiteral(problem,interpretation,from,to);
45721 neg find mustInRelationvalue_attribute_EEnumLiteral(problem,interpretation,from,to);
45722}
45723pattern refineRelation_literal_attribute_EEnumLiteral(
45724 problem:LogicProblem, interpretation:PartialInterpretation,
45725 relationIterpretation:PartialRelationInterpretation,
45726 from: DefinedElement, to: DefinedElement)
45727{
45728 find interpretation(problem,interpretation);
45729 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
45730 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"literal attribute EEnumLiteral");
45731 find mustExist(problem, interpretation, from);
45732 find mustExist(problem, interpretation, to);
45733 find mustInstanceOfEEnumLiteral_class(problem,interpretation,from);
45734 StringElement(to);
45735 find mayInRelationliteral_attribute_EEnumLiteral(problem,interpretation,from,to);
45736 neg find mustInRelationliteral_attribute_EEnumLiteral(problem,interpretation,from,to);
45737}
45738pattern refineRelation_name_attribute_ENamedElement(
45739 problem:LogicProblem, interpretation:PartialInterpretation,
45740 relationIterpretation:PartialRelationInterpretation,
45741 from: DefinedElement, to: DefinedElement)
45742{
45743 find interpretation(problem,interpretation);
45744 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
45745 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"name attribute ENamedElement");
45746 find mustExist(problem, interpretation, from);
45747 find mustExist(problem, interpretation, to);
45748 find mustInstanceOfENamedElement_class(problem,interpretation,from);
45749 StringElement(to);
45750 find mayInRelationname_attribute_ENamedElement(problem,interpretation,from,to);
45751 neg find mustInRelationname_attribute_ENamedElement(problem,interpretation,from,to);
45752}
45753pattern refineRelation_nsURI_attribute_EPackage(
45754 problem:LogicProblem, interpretation:PartialInterpretation,
45755 relationIterpretation:PartialRelationInterpretation,
45756 from: DefinedElement, to: DefinedElement)
45757{
45758 find interpretation(problem,interpretation);
45759 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
45760 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"nsURI attribute EPackage");
45761 find mustExist(problem, interpretation, from);
45762 find mustExist(problem, interpretation, to);
45763 find mustInstanceOfEPackage_class(problem,interpretation,from);
45764 StringElement(to);
45765 find mayInRelationnsURI_attribute_EPackage(problem,interpretation,from,to);
45766 neg find mustInRelationnsURI_attribute_EPackage(problem,interpretation,from,to);
45767}
45768pattern refineRelation_nsPrefix_attribute_EPackage(
45769 problem:LogicProblem, interpretation:PartialInterpretation,
45770 relationIterpretation:PartialRelationInterpretation,
45771 from: DefinedElement, to: DefinedElement)
45772{
45773 find interpretation(problem,interpretation);
45774 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
45775 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"nsPrefix attribute EPackage");
45776 find mustExist(problem, interpretation, from);
45777 find mustExist(problem, interpretation, to);
45778 find mustInstanceOfEPackage_class(problem,interpretation,from);
45779 StringElement(to);
45780 find mayInRelationnsPrefix_attribute_EPackage(problem,interpretation,from,to);
45781 neg find mustInRelationnsPrefix_attribute_EPackage(problem,interpretation,from,to);
45782}
45783pattern refineRelation_containment_attribute_EReference(
45784 problem:LogicProblem, interpretation:PartialInterpretation,
45785 relationIterpretation:PartialRelationInterpretation,
45786 from: DefinedElement, to: DefinedElement)
45787{
45788 find interpretation(problem,interpretation);
45789 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
45790 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"containment attribute EReference");
45791 find mustExist(problem, interpretation, from);
45792 find mustExist(problem, interpretation, to);
45793 find mustInstanceOfEReference_class(problem,interpretation,from);
45794 BooleanElement(to);
45795 find mayInRelationcontainment_attribute_EReference(problem,interpretation,from,to);
45796 neg find mustInRelationcontainment_attribute_EReference(problem,interpretation,from,to);
45797}
45798pattern refineRelation_container_attribute_EReference(
45799 problem:LogicProblem, interpretation:PartialInterpretation,
45800 relationIterpretation:PartialRelationInterpretation,
45801 from: DefinedElement, to: DefinedElement)
45802{
45803 find interpretation(problem,interpretation);
45804 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
45805 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"container attribute EReference");
45806 find mustExist(problem, interpretation, from);
45807 find mustExist(problem, interpretation, to);
45808 find mustInstanceOfEReference_class(problem,interpretation,from);
45809 BooleanElement(to);
45810 find mayInRelationcontainer_attribute_EReference(problem,interpretation,from,to);
45811 neg find mustInRelationcontainer_attribute_EReference(problem,interpretation,from,to);
45812}
45813pattern refineRelation_resolveProxies_attribute_EReference(
45814 problem:LogicProblem, interpretation:PartialInterpretation,
45815 relationIterpretation:PartialRelationInterpretation,
45816 from: DefinedElement, to: DefinedElement)
45817{
45818 find interpretation(problem,interpretation);
45819 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
45820 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"resolveProxies attribute EReference");
45821 find mustExist(problem, interpretation, from);
45822 find mustExist(problem, interpretation, to);
45823 find mustInstanceOfEReference_class(problem,interpretation,from);
45824 BooleanElement(to);
45825 find mayInRelationresolveProxies_attribute_EReference(problem,interpretation,from,to);
45826 neg find mustInRelationresolveProxies_attribute_EReference(problem,interpretation,from,to);
45827}
45828pattern refineRelation_changeable_attribute_EStructuralFeature(
45829 problem:LogicProblem, interpretation:PartialInterpretation,
45830 relationIterpretation:PartialRelationInterpretation,
45831 from: DefinedElement, to: DefinedElement)
45832{
45833 find interpretation(problem,interpretation);
45834 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
45835 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"changeable attribute EStructuralFeature");
45836 find mustExist(problem, interpretation, from);
45837 find mustExist(problem, interpretation, to);
45838 find mustInstanceOfEStructuralFeature_class(problem,interpretation,from);
45839 BooleanElement(to);
45840 find mayInRelationchangeable_attribute_EStructuralFeature(problem,interpretation,from,to);
45841 neg find mustInRelationchangeable_attribute_EStructuralFeature(problem,interpretation,from,to);
45842}
45843pattern refineRelation_volatile_attribute_EStructuralFeature(
45844 problem:LogicProblem, interpretation:PartialInterpretation,
45845 relationIterpretation:PartialRelationInterpretation,
45846 from: DefinedElement, to: DefinedElement)
45847{
45848 find interpretation(problem,interpretation);
45849 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
45850 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"volatile attribute EStructuralFeature");
45851 find mustExist(problem, interpretation, from);
45852 find mustExist(problem, interpretation, to);
45853 find mustInstanceOfEStructuralFeature_class(problem,interpretation,from);
45854 BooleanElement(to);
45855 find mayInRelationvolatile_attribute_EStructuralFeature(problem,interpretation,from,to);
45856 neg find mustInRelationvolatile_attribute_EStructuralFeature(problem,interpretation,from,to);
45857}
45858pattern refineRelation_transient_attribute_EStructuralFeature(
45859 problem:LogicProblem, interpretation:PartialInterpretation,
45860 relationIterpretation:PartialRelationInterpretation,
45861 from: DefinedElement, to: DefinedElement)
45862{
45863 find interpretation(problem,interpretation);
45864 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
45865 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"transient attribute EStructuralFeature");
45866 find mustExist(problem, interpretation, from);
45867 find mustExist(problem, interpretation, to);
45868 find mustInstanceOfEStructuralFeature_class(problem,interpretation,from);
45869 BooleanElement(to);
45870 find mayInRelationtransient_attribute_EStructuralFeature(problem,interpretation,from,to);
45871 neg find mustInRelationtransient_attribute_EStructuralFeature(problem,interpretation,from,to);
45872}
45873pattern refineRelation_defaultValueLiteral_attribute_EStructuralFeature(
45874 problem:LogicProblem, interpretation:PartialInterpretation,
45875 relationIterpretation:PartialRelationInterpretation,
45876 from: DefinedElement, to: DefinedElement)
45877{
45878 find interpretation(problem,interpretation);
45879 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
45880 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"defaultValueLiteral attribute EStructuralFeature");
45881 find mustExist(problem, interpretation, from);
45882 find mustExist(problem, interpretation, to);
45883 find mustInstanceOfEStructuralFeature_class(problem,interpretation,from);
45884 StringElement(to);
45885 find mayInRelationdefaultValueLiteral_attribute_EStructuralFeature(problem,interpretation,from,to);
45886 neg find mustInRelationdefaultValueLiteral_attribute_EStructuralFeature(problem,interpretation,from,to);
45887}
45888pattern refineRelation_unsettable_attribute_EStructuralFeature(
45889 problem:LogicProblem, interpretation:PartialInterpretation,
45890 relationIterpretation:PartialRelationInterpretation,
45891 from: DefinedElement, to: DefinedElement)
45892{
45893 find interpretation(problem,interpretation);
45894 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
45895 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"unsettable attribute EStructuralFeature");
45896 find mustExist(problem, interpretation, from);
45897 find mustExist(problem, interpretation, to);
45898 find mustInstanceOfEStructuralFeature_class(problem,interpretation,from);
45899 BooleanElement(to);
45900 find mayInRelationunsettable_attribute_EStructuralFeature(problem,interpretation,from,to);
45901 neg find mustInRelationunsettable_attribute_EStructuralFeature(problem,interpretation,from,to);
45902}
45903pattern refineRelation_derived_attribute_EStructuralFeature(
45904 problem:LogicProblem, interpretation:PartialInterpretation,
45905 relationIterpretation:PartialRelationInterpretation,
45906 from: DefinedElement, to: DefinedElement)
45907{
45908 find interpretation(problem,interpretation);
45909 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
45910 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"derived attribute EStructuralFeature");
45911 find mustExist(problem, interpretation, from);
45912 find mustExist(problem, interpretation, to);
45913 find mustInstanceOfEStructuralFeature_class(problem,interpretation,from);
45914 BooleanElement(to);
45915 find mayInRelationderived_attribute_EStructuralFeature(problem,interpretation,from,to);
45916 neg find mustInRelationderived_attribute_EStructuralFeature(problem,interpretation,from,to);
45917}
45918pattern refineRelation_ordered_attribute_ETypedElement(
45919 problem:LogicProblem, interpretation:PartialInterpretation,
45920 relationIterpretation:PartialRelationInterpretation,
45921 from: DefinedElement, to: DefinedElement)
45922{
45923 find interpretation(problem,interpretation);
45924 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
45925 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"ordered attribute ETypedElement");
45926 find mustExist(problem, interpretation, from);
45927 find mustExist(problem, interpretation, to);
45928 find mustInstanceOfETypedElement_class(problem,interpretation,from);
45929 BooleanElement(to);
45930 find mayInRelationordered_attribute_ETypedElement(problem,interpretation,from,to);
45931 neg find mustInRelationordered_attribute_ETypedElement(problem,interpretation,from,to);
45932}
45933pattern refineRelation_unique_attribute_ETypedElement(
45934 problem:LogicProblem, interpretation:PartialInterpretation,
45935 relationIterpretation:PartialRelationInterpretation,
45936 from: DefinedElement, to: DefinedElement)
45937{
45938 find interpretation(problem,interpretation);
45939 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
45940 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"unique attribute ETypedElement");
45941 find mustExist(problem, interpretation, from);
45942 find mustExist(problem, interpretation, to);
45943 find mustInstanceOfETypedElement_class(problem,interpretation,from);
45944 BooleanElement(to);
45945 find mayInRelationunique_attribute_ETypedElement(problem,interpretation,from,to);
45946 neg find mustInRelationunique_attribute_ETypedElement(problem,interpretation,from,to);
45947}
45948pattern refineRelation_lowerBound_attribute_ETypedElement(
45949 problem:LogicProblem, interpretation:PartialInterpretation,
45950 relationIterpretation:PartialRelationInterpretation,
45951 from: DefinedElement, to: DefinedElement)
45952{
45953 find interpretation(problem,interpretation);
45954 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
45955 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"lowerBound attribute ETypedElement");
45956 find mustExist(problem, interpretation, from);
45957 find mustExist(problem, interpretation, to);
45958 find mustInstanceOfETypedElement_class(problem,interpretation,from);
45959 IntegerElement(to);
45960 find mayInRelationlowerBound_attribute_ETypedElement(problem,interpretation,from,to);
45961 neg find mustInRelationlowerBound_attribute_ETypedElement(problem,interpretation,from,to);
45962}
45963pattern refineRelation_upperBound_attribute_ETypedElement(
45964 problem:LogicProblem, interpretation:PartialInterpretation,
45965 relationIterpretation:PartialRelationInterpretation,
45966 from: DefinedElement, to: DefinedElement)
45967{
45968 find interpretation(problem,interpretation);
45969 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
45970 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"upperBound attribute ETypedElement");
45971 find mustExist(problem, interpretation, from);
45972 find mustExist(problem, interpretation, to);
45973 find mustInstanceOfETypedElement_class(problem,interpretation,from);
45974 IntegerElement(to);
45975 find mayInRelationupperBound_attribute_ETypedElement(problem,interpretation,from,to);
45976 neg find mustInRelationupperBound_attribute_ETypedElement(problem,interpretation,from,to);
45977}
45978pattern refineRelation_many_attribute_ETypedElement(
45979 problem:LogicProblem, interpretation:PartialInterpretation,
45980 relationIterpretation:PartialRelationInterpretation,
45981 from: DefinedElement, to: DefinedElement)
45982{
45983 find interpretation(problem,interpretation);
45984 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
45985 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"many attribute ETypedElement");
45986 find mustExist(problem, interpretation, from);
45987 find mustExist(problem, interpretation, to);
45988 find mustInstanceOfETypedElement_class(problem,interpretation,from);
45989 BooleanElement(to);
45990 find mayInRelationmany_attribute_ETypedElement(problem,interpretation,from,to);
45991 neg find mustInRelationmany_attribute_ETypedElement(problem,interpretation,from,to);
45992}
45993pattern refineRelation_required_attribute_ETypedElement(
45994 problem:LogicProblem, interpretation:PartialInterpretation,
45995 relationIterpretation:PartialRelationInterpretation,
45996 from: DefinedElement, to: DefinedElement)
45997{
45998 find interpretation(problem,interpretation);
45999 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
46000 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"required attribute ETypedElement");
46001 find mustExist(problem, interpretation, from);
46002 find mustExist(problem, interpretation, to);
46003 find mustInstanceOfETypedElement_class(problem,interpretation,from);
46004 BooleanElement(to);
46005 find mayInRelationrequired_attribute_ETypedElement(problem,interpretation,from,to);
46006 neg find mustInRelationrequired_attribute_ETypedElement(problem,interpretation,from,to);
46007}
46008pattern refineRelation_key_attribute_EStringToStringMapEntry(
46009 problem:LogicProblem, interpretation:PartialInterpretation,
46010 relationIterpretation:PartialRelationInterpretation,
46011 from: DefinedElement, to: DefinedElement)
46012{
46013 find interpretation(problem,interpretation);
46014 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
46015 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"key attribute EStringToStringMapEntry");
46016 find mustExist(problem, interpretation, from);
46017 find mustExist(problem, interpretation, to);
46018 find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,from);
46019 StringElement(to);
46020 find mayInRelationkey_attribute_EStringToStringMapEntry(problem,interpretation,from,to);
46021 neg find mustInRelationkey_attribute_EStringToStringMapEntry(problem,interpretation,from,to);
46022}
46023pattern refineRelation_value_attribute_EStringToStringMapEntry(
46024 problem:LogicProblem, interpretation:PartialInterpretation,
46025 relationIterpretation:PartialRelationInterpretation,
46026 from: DefinedElement, to: DefinedElement)
46027{
46028 find interpretation(problem,interpretation);
46029 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
46030 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"value attribute EStringToStringMapEntry");
46031 find mustExist(problem, interpretation, from);
46032 find mustExist(problem, interpretation, to);
46033 find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,from);
46034 StringElement(to);
46035 find mayInRelationvalue_attribute_EStringToStringMapEntry(problem,interpretation,from,to);
46036 neg find mustInRelationvalue_attribute_EStringToStringMapEntry(problem,interpretation,from,to);
46037}
46038import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage"
46039import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem"
46040import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language"
46041
46042//////////
46043// 0. Util
46044//////////
46045private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) {
46046 PartialInterpretation.problem(interpretation,problem);
46047}
46048
46049/////////////////////////
46050// 0.1 Existence
46051/////////////////////////
46052private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
46053 find interpretation(problem,interpretation);
46054 LogicProblem.elements(problem,element);
46055} or {
46056 find interpretation(problem,interpretation);
46057 PartialInterpretation.newElements(interpretation,element);
46058}
46059
46060private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
46061 find mustExist(problem,interpretation,element);
46062} or {
46063 find interpretation(problem,interpretation);
46064 neg find elementCloseWorld(element);
46065 PartialInterpretation.openWorldElements(interpretation,element);
46066}
46067
46068private pattern elementCloseWorld(element:DefinedElement) {
46069 PartialInterpretation.openWorldElements(i,element);
46070 PartialInterpretation.maxNewElements(i,0);
46071} or {
46072 Scope.targetTypeInterpretation(scope,interpretation);
46073 PartialTypeInterpratation.elements(interpretation,element);
46074 Scope.maxNewElements(scope,0);
46075}
46076
46077////////////////////////
46078// 0.2 Equivalence
46079////////////////////////
46080pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) {
46081 find mayExist(problem,interpretation,a);
46082 find mayExist(problem,interpretation,b);
46083 a == b;
46084}
46085
46086////////////////////////
46087// 0.3 Required Patterns by TypeIndexer
46088////////////////////////
46089private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) {
46090 find interpretation(problem,interpretation);
46091 LogicProblem.types(problem,type);
46092 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
46093 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
46094}
46095
46096private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) {
46097 find interpretation(problem,interpretation);
46098 LogicProblem.types(problem,type);
46099 TypeDefinition.elements(type,element);
46100} or {
46101 find interpretation(problem,interpretation);
46102 find typeInterpretation(problem,interpretation,type,typeInterpretation);
46103 PartialComplexTypeInterpretation.elements(typeInterpretation,element);
46104}
46105
46106private pattern isPrimitive(element: PrimitiveElement) {
46107 PrimitiveElement(element);
46108}
46109
46110//////////
46111// 1. Problem-Specific Base Indexers
46112//////////
46113// 1.1 Type Indexers
46114//////////
46115// 1.1.1 primitive Type Indexers
46116//////////
46117
46118//////////
46119// 1.1.2 domain-specific Type Indexers
46120//////////
46121/**
46122 * An element must be an instance of type "EAttribute class".
46123 */
46124private pattern mustInstanceOfEAttribute_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
46125 Type.name(type,"EAttribute class");
46126 find directInstanceOf(problem,interpretation,element,type);
46127}
46128private pattern scopeDisallowsNewEAttribute_class(problem:LogicProblem, interpretation:PartialInterpretation) {
46129 find interpretation(problem,interpretation);
46130 PartialInterpretation.scopes(interpretation,scope);
46131 Scope.targetTypeInterpretation(scope,typeInterpretation);
46132 Scope.maxNewElements(scope,0);
46133 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
46134 Type.name(type,"EAttribute class");
46135}
46136
46137/**
46138 * An element may be an instance of type "EAttribute class".
46139 */
46140private pattern mayInstanceOfEAttribute_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
46141{
46142 find interpretation(problem,interpretation);
46143 PartialInterpretation.newElements(interpretation,element);
46144 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
46145 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
46146 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
46147 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
46148 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
46149 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
46150 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
46151 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
46152 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
46153 neg find mustInstanceOfEObject_class(problem,interpretation,element);
46154 neg find mustInstanceOfEReference_class(problem,interpretation,element);
46155 neg find scopeDisallowsNewEAttribute_class(problem, interpretation);
46156 neg find isPrimitive(element);
46157} or {
46158 find interpretation(problem,interpretation);
46159 PartialInterpretation.openWorldElements(interpretation,element);
46160 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
46161 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
46162 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
46163 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
46164 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
46165 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
46166 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
46167 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
46168 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
46169 neg find mustInstanceOfEObject_class(problem,interpretation,element);
46170 neg find mustInstanceOfEReference_class(problem,interpretation,element);
46171 neg find scopeDisallowsNewEAttribute_class(problem, interpretation);
46172 neg find isPrimitive(element);
46173} or
46174{ find mustInstanceOfEAttribute_class(problem,interpretation,element); }
46175/**
46176 * An element must be an instance of type "EAnnotation class".
46177 */
46178private pattern mustInstanceOfEAnnotation_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
46179 Type.name(type,"EAnnotation class");
46180 find directInstanceOf(problem,interpretation,element,type);
46181}
46182private pattern scopeDisallowsNewEAnnotation_class(problem:LogicProblem, interpretation:PartialInterpretation) {
46183 find interpretation(problem,interpretation);
46184 PartialInterpretation.scopes(interpretation,scope);
46185 Scope.targetTypeInterpretation(scope,typeInterpretation);
46186 Scope.maxNewElements(scope,0);
46187 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
46188 Type.name(type,"EAnnotation class");
46189}
46190
46191/**
46192 * An element may be an instance of type "EAnnotation class".
46193 */
46194private pattern mayInstanceOfEAnnotation_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
46195{
46196 find interpretation(problem,interpretation);
46197 PartialInterpretation.newElements(interpretation,element);
46198 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
46199 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
46200 neg find mustInstanceOfEObject_class(problem,interpretation,element);
46201 neg find mustInstanceOfENamedElement_class(problem,interpretation,element);
46202 neg find scopeDisallowsNewEAnnotation_class(problem, interpretation);
46203 neg find isPrimitive(element);
46204} or {
46205 find interpretation(problem,interpretation);
46206 PartialInterpretation.openWorldElements(interpretation,element);
46207 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
46208 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
46209 neg find mustInstanceOfEObject_class(problem,interpretation,element);
46210 neg find mustInstanceOfENamedElement_class(problem,interpretation,element);
46211 neg find scopeDisallowsNewEAnnotation_class(problem, interpretation);
46212 neg find isPrimitive(element);
46213} or
46214{ find mustInstanceOfEAnnotation_class(problem,interpretation,element); }
46215/**
46216 * An element must be an instance of type "EClass class".
46217 */
46218private pattern mustInstanceOfEClass_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
46219 Type.name(type,"EClass class");
46220 find directInstanceOf(problem,interpretation,element,type);
46221}
46222private pattern scopeDisallowsNewEClass_class(problem:LogicProblem, interpretation:PartialInterpretation) {
46223 find interpretation(problem,interpretation);
46224 PartialInterpretation.scopes(interpretation,scope);
46225 Scope.targetTypeInterpretation(scope,typeInterpretation);
46226 Scope.maxNewElements(scope,0);
46227 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
46228 Type.name(type,"EClass class");
46229}
46230
46231/**
46232 * An element may be an instance of type "EClass class".
46233 */
46234private pattern mayInstanceOfEClass_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
46235{
46236 find interpretation(problem,interpretation);
46237 PartialInterpretation.newElements(interpretation,element);
46238 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
46239 neg find mustInstanceOfEDataType_class(problem,interpretation,element);
46240 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
46241 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
46242 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
46243 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
46244 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
46245 neg find mustInstanceOfEObject_class(problem,interpretation,element);
46246 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
46247 neg find scopeDisallowsNewEClass_class(problem, interpretation);
46248 neg find isPrimitive(element);
46249} or {
46250 find interpretation(problem,interpretation);
46251 PartialInterpretation.openWorldElements(interpretation,element);
46252 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
46253 neg find mustInstanceOfEDataType_class(problem,interpretation,element);
46254 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
46255 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
46256 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
46257 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
46258 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
46259 neg find mustInstanceOfEObject_class(problem,interpretation,element);
46260 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
46261 neg find scopeDisallowsNewEClass_class(problem, interpretation);
46262 neg find isPrimitive(element);
46263} or
46264{ find mustInstanceOfEClass_class(problem,interpretation,element); }
46265/**
46266 * An element must be an instance of type "EClassifier class".
46267 */
46268private pattern mustInstanceOfEClassifier_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
46269 Type.name(type,"EClassifier class");
46270 find directInstanceOf(problem,interpretation,element,type);
46271}
46272private pattern scopeDisallowsNewEClassifier_class(problem:LogicProblem, interpretation:PartialInterpretation) {
46273 find interpretation(problem,interpretation);
46274 PartialInterpretation.scopes(interpretation,scope);
46275 Scope.targetTypeInterpretation(scope,typeInterpretation);
46276 Scope.maxNewElements(scope,0);
46277 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
46278 Type.name(type,"EClassifier class");
46279}
46280
46281/**
46282 * An element may be an instance of type "EClassifier class".
46283 */
46284private pattern mayInstanceOfEClassifier_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
46285{
46286 find interpretation(problem,interpretation);
46287 PartialInterpretation.newElements(interpretation,element);
46288 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
46289 neg find mustInstanceOfEDataType_class(problem,interpretation,element);
46290 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
46291 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
46292 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
46293 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
46294 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
46295 neg find mustInstanceOfEObject_class(problem,interpretation,element);
46296 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
46297 neg find mustInstanceOfEClass_class(problem,interpretation,element);
46298 neg find scopeDisallowsNewEClassifier_class(problem, interpretation);
46299 neg find isPrimitive(element);
46300} or {
46301 find interpretation(problem,interpretation);
46302 PartialInterpretation.openWorldElements(interpretation,element);
46303 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
46304 neg find mustInstanceOfEDataType_class(problem,interpretation,element);
46305 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
46306 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
46307 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
46308 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
46309 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
46310 neg find mustInstanceOfEObject_class(problem,interpretation,element);
46311 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
46312 neg find mustInstanceOfEClass_class(problem,interpretation,element);
46313 neg find scopeDisallowsNewEClassifier_class(problem, interpretation);
46314 neg find isPrimitive(element);
46315} or
46316{ find mustInstanceOfEClassifier_class(problem,interpretation,element); }
46317/**
46318 * An element must be an instance of type "EDataType class".
46319 */
46320private pattern mustInstanceOfEDataType_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
46321 Type.name(type,"EDataType class");
46322 find directInstanceOf(problem,interpretation,element,type);
46323}
46324private pattern scopeDisallowsNewEDataType_class(problem:LogicProblem, interpretation:PartialInterpretation) {
46325 find interpretation(problem,interpretation);
46326 PartialInterpretation.scopes(interpretation,scope);
46327 Scope.targetTypeInterpretation(scope,typeInterpretation);
46328 Scope.maxNewElements(scope,0);
46329 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
46330 Type.name(type,"EDataType class");
46331}
46332
46333/**
46334 * An element may be an instance of type "EDataType class".
46335 */
46336private pattern mayInstanceOfEDataType_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
46337{
46338 find interpretation(problem,interpretation);
46339 PartialInterpretation.newElements(interpretation,element);
46340 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
46341 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
46342 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
46343 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
46344 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
46345 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
46346 neg find mustInstanceOfEObject_class(problem,interpretation,element);
46347 neg find mustInstanceOfEEnum_class(problem,interpretation,element);
46348 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
46349 neg find mustInstanceOfEClass_class(problem,interpretation,element);
46350 neg find scopeDisallowsNewEDataType_class(problem, interpretation);
46351 neg find isPrimitive(element);
46352} or {
46353 find interpretation(problem,interpretation);
46354 PartialInterpretation.openWorldElements(interpretation,element);
46355 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
46356 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
46357 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
46358 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
46359 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
46360 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
46361 neg find mustInstanceOfEObject_class(problem,interpretation,element);
46362 neg find mustInstanceOfEEnum_class(problem,interpretation,element);
46363 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
46364 neg find mustInstanceOfEClass_class(problem,interpretation,element);
46365 neg find scopeDisallowsNewEDataType_class(problem, interpretation);
46366 neg find isPrimitive(element);
46367} or
46368{ find mustInstanceOfEDataType_class(problem,interpretation,element); }
46369/**
46370 * An element must be an instance of type "EEnum class".
46371 */
46372private pattern mustInstanceOfEEnum_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
46373 Type.name(type,"EEnum class");
46374 find directInstanceOf(problem,interpretation,element,type);
46375}
46376private pattern scopeDisallowsNewEEnum_class(problem:LogicProblem, interpretation:PartialInterpretation) {
46377 find interpretation(problem,interpretation);
46378 PartialInterpretation.scopes(interpretation,scope);
46379 Scope.targetTypeInterpretation(scope,typeInterpretation);
46380 Scope.maxNewElements(scope,0);
46381 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
46382 Type.name(type,"EEnum class");
46383}
46384
46385/**
46386 * An element may be an instance of type "EEnum class".
46387 */
46388private pattern mayInstanceOfEEnum_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
46389{
46390 find interpretation(problem,interpretation);
46391 PartialInterpretation.newElements(interpretation,element);
46392 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
46393 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
46394 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
46395 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
46396 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
46397 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
46398 neg find mustInstanceOfEObject_class(problem,interpretation,element);
46399 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
46400 neg find mustInstanceOfEClass_class(problem,interpretation,element);
46401 neg find scopeDisallowsNewEEnum_class(problem, interpretation);
46402 neg find isPrimitive(element);
46403} or {
46404 find interpretation(problem,interpretation);
46405 PartialInterpretation.openWorldElements(interpretation,element);
46406 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
46407 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
46408 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
46409 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
46410 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
46411 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
46412 neg find mustInstanceOfEObject_class(problem,interpretation,element);
46413 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
46414 neg find mustInstanceOfEClass_class(problem,interpretation,element);
46415 neg find scopeDisallowsNewEEnum_class(problem, interpretation);
46416 neg find isPrimitive(element);
46417} or
46418{ find mustInstanceOfEEnum_class(problem,interpretation,element); }
46419/**
46420 * An element must be an instance of type "EEnumLiteral class".
46421 */
46422private pattern mustInstanceOfEEnumLiteral_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
46423 Type.name(type,"EEnumLiteral class");
46424 find directInstanceOf(problem,interpretation,element,type);
46425}
46426private pattern scopeDisallowsNewEEnumLiteral_class(problem:LogicProblem, interpretation:PartialInterpretation) {
46427 find interpretation(problem,interpretation);
46428 PartialInterpretation.scopes(interpretation,scope);
46429 Scope.targetTypeInterpretation(scope,typeInterpretation);
46430 Scope.maxNewElements(scope,0);
46431 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
46432 Type.name(type,"EEnumLiteral class");
46433}
46434
46435/**
46436 * An element may be an instance of type "EEnumLiteral class".
46437 */
46438private pattern mayInstanceOfEEnumLiteral_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
46439{
46440 find interpretation(problem,interpretation);
46441 PartialInterpretation.newElements(interpretation,element);
46442 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
46443 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
46444 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
46445 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
46446 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
46447 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
46448 neg find mustInstanceOfEObject_class(problem,interpretation,element);
46449 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
46450 neg find scopeDisallowsNewEEnumLiteral_class(problem, interpretation);
46451 neg find isPrimitive(element);
46452} or {
46453 find interpretation(problem,interpretation);
46454 PartialInterpretation.openWorldElements(interpretation,element);
46455 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
46456 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
46457 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
46458 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
46459 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
46460 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
46461 neg find mustInstanceOfEObject_class(problem,interpretation,element);
46462 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
46463 neg find scopeDisallowsNewEEnumLiteral_class(problem, interpretation);
46464 neg find isPrimitive(element);
46465} or
46466{ find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); }
46467/**
46468 * An element must be an instance of type "EModelElement class".
46469 */
46470private pattern mustInstanceOfEModelElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
46471 Type.name(type,"EModelElement class");
46472 find directInstanceOf(problem,interpretation,element,type);
46473}
46474private pattern scopeDisallowsNewEModelElement_class(problem:LogicProblem, interpretation:PartialInterpretation) {
46475 find interpretation(problem,interpretation);
46476 PartialInterpretation.scopes(interpretation,scope);
46477 Scope.targetTypeInterpretation(scope,typeInterpretation);
46478 Scope.maxNewElements(scope,0);
46479 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
46480 Type.name(type,"EModelElement class");
46481}
46482
46483/**
46484 * An element may be an instance of type "EModelElement class".
46485 */
46486private pattern mayInstanceOfEModelElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
46487{
46488 find interpretation(problem,interpretation);
46489 PartialInterpretation.newElements(interpretation,element);
46490 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
46491 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
46492 neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element);
46493 neg find mustInstanceOfEObject_class(problem,interpretation,element);
46494 neg find mustInstanceOfENamedElement_class(problem,interpretation,element);
46495 neg find scopeDisallowsNewEModelElement_class(problem, interpretation);
46496 neg find isPrimitive(element);
46497} or {
46498 find interpretation(problem,interpretation);
46499 PartialInterpretation.openWorldElements(interpretation,element);
46500 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
46501 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
46502 neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element);
46503 neg find mustInstanceOfEObject_class(problem,interpretation,element);
46504 neg find mustInstanceOfENamedElement_class(problem,interpretation,element);
46505 neg find scopeDisallowsNewEModelElement_class(problem, interpretation);
46506 neg find isPrimitive(element);
46507} or
46508{ find mustInstanceOfEModelElement_class(problem,interpretation,element); }
46509/**
46510 * An element must be an instance of type "ENamedElement class".
46511 */
46512private pattern mustInstanceOfENamedElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
46513 Type.name(type,"ENamedElement class");
46514 find directInstanceOf(problem,interpretation,element,type);
46515}
46516private pattern scopeDisallowsNewENamedElement_class(problem:LogicProblem, interpretation:PartialInterpretation) {
46517 find interpretation(problem,interpretation);
46518 PartialInterpretation.scopes(interpretation,scope);
46519 Scope.targetTypeInterpretation(scope,typeInterpretation);
46520 Scope.maxNewElements(scope,0);
46521 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
46522 Type.name(type,"ENamedElement class");
46523}
46524
46525/**
46526 * An element may be an instance of type "ENamedElement class".
46527 */
46528private pattern mayInstanceOfENamedElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
46529{
46530 find interpretation(problem,interpretation);
46531 PartialInterpretation.newElements(interpretation,element);
46532 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
46533 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
46534 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
46535 neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element);
46536 neg find mustInstanceOfEObject_class(problem,interpretation,element);
46537 neg find scopeDisallowsNewENamedElement_class(problem, interpretation);
46538 neg find isPrimitive(element);
46539} or {
46540 find interpretation(problem,interpretation);
46541 PartialInterpretation.openWorldElements(interpretation,element);
46542 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
46543 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
46544 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
46545 neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element);
46546 neg find mustInstanceOfEObject_class(problem,interpretation,element);
46547 neg find scopeDisallowsNewENamedElement_class(problem, interpretation);
46548 neg find isPrimitive(element);
46549} or
46550{ find mustInstanceOfENamedElement_class(problem,interpretation,element); }
46551/**
46552 * An element must be an instance of type "EObject class".
46553 */
46554private pattern mustInstanceOfEObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
46555 Type.name(type,"EObject class");
46556 find directInstanceOf(problem,interpretation,element,type);
46557}
46558private pattern scopeDisallowsNewEObject_class(problem:LogicProblem, interpretation:PartialInterpretation) {
46559 find interpretation(problem,interpretation);
46560 PartialInterpretation.scopes(interpretation,scope);
46561 Scope.targetTypeInterpretation(scope,typeInterpretation);
46562 Scope.maxNewElements(scope,0);
46563 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
46564 Type.name(type,"EObject class");
46565}
46566
46567/**
46568 * An element may be an instance of type "EObject class".
46569 */
46570private pattern mayInstanceOfEObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
46571{
46572 find interpretation(problem,interpretation);
46573 PartialInterpretation.newElements(interpretation,element);
46574 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
46575 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
46576 neg find mustInstanceOfEModelElement_class(problem,interpretation,element);
46577 neg find scopeDisallowsNewEObject_class(problem, interpretation);
46578 neg find isPrimitive(element);
46579} or {
46580 find interpretation(problem,interpretation);
46581 PartialInterpretation.openWorldElements(interpretation,element);
46582 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
46583 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
46584 neg find mustInstanceOfEModelElement_class(problem,interpretation,element);
46585 neg find scopeDisallowsNewEObject_class(problem, interpretation);
46586 neg find isPrimitive(element);
46587} or
46588{ find mustInstanceOfEObject_class(problem,interpretation,element); }
46589/**
46590 * An element must be an instance of type "EOperation class".
46591 */
46592private pattern mustInstanceOfEOperation_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
46593 Type.name(type,"EOperation class");
46594 find directInstanceOf(problem,interpretation,element,type);
46595}
46596private pattern scopeDisallowsNewEOperation_class(problem:LogicProblem, interpretation:PartialInterpretation) {
46597 find interpretation(problem,interpretation);
46598 PartialInterpretation.scopes(interpretation,scope);
46599 Scope.targetTypeInterpretation(scope,typeInterpretation);
46600 Scope.maxNewElements(scope,0);
46601 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
46602 Type.name(type,"EOperation class");
46603}
46604
46605/**
46606 * An element may be an instance of type "EOperation class".
46607 */
46608private pattern mayInstanceOfEOperation_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
46609{
46610 find interpretation(problem,interpretation);
46611 PartialInterpretation.newElements(interpretation,element);
46612 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
46613 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
46614 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
46615 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
46616 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
46617 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
46618 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
46619 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
46620 neg find mustInstanceOfEObject_class(problem,interpretation,element);
46621 neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element);
46622 neg find scopeDisallowsNewEOperation_class(problem, interpretation);
46623 neg find isPrimitive(element);
46624} or {
46625 find interpretation(problem,interpretation);
46626 PartialInterpretation.openWorldElements(interpretation,element);
46627 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
46628 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
46629 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
46630 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
46631 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
46632 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
46633 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
46634 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
46635 neg find mustInstanceOfEObject_class(problem,interpretation,element);
46636 neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element);
46637 neg find scopeDisallowsNewEOperation_class(problem, interpretation);
46638 neg find isPrimitive(element);
46639} or
46640{ find mustInstanceOfEOperation_class(problem,interpretation,element); }
46641/**
46642 * An element must be an instance of type "EPackage class".
46643 */
46644private pattern mustInstanceOfEPackage_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
46645 Type.name(type,"EPackage class");
46646 find directInstanceOf(problem,interpretation,element,type);
46647}
46648private pattern scopeDisallowsNewEPackage_class(problem:LogicProblem, interpretation:PartialInterpretation) {
46649 find interpretation(problem,interpretation);
46650 PartialInterpretation.scopes(interpretation,scope);
46651 Scope.targetTypeInterpretation(scope,typeInterpretation);
46652 Scope.maxNewElements(scope,0);
46653 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
46654 Type.name(type,"EPackage class");
46655}
46656
46657/**
46658 * An element may be an instance of type "EPackage class".
46659 */
46660private pattern mayInstanceOfEPackage_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
46661{
46662 find interpretation(problem,interpretation);
46663 PartialInterpretation.newElements(interpretation,element);
46664 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
46665 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
46666 neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element);
46667 neg find mustInstanceOfEObject_class(problem,interpretation,element);
46668 neg find scopeDisallowsNewEPackage_class(problem, interpretation);
46669 neg find isPrimitive(element);
46670} or {
46671 find interpretation(problem,interpretation);
46672 PartialInterpretation.openWorldElements(interpretation,element);
46673 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
46674 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
46675 neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element);
46676 neg find mustInstanceOfEObject_class(problem,interpretation,element);
46677 neg find scopeDisallowsNewEPackage_class(problem, interpretation);
46678 neg find isPrimitive(element);
46679} or
46680{ find mustInstanceOfEPackage_class(problem,interpretation,element); }
46681/**
46682 * An element must be an instance of type "EParameter class".
46683 */
46684private pattern mustInstanceOfEParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
46685 Type.name(type,"EParameter class");
46686 find directInstanceOf(problem,interpretation,element,type);
46687}
46688private pattern scopeDisallowsNewEParameter_class(problem:LogicProblem, interpretation:PartialInterpretation) {
46689 find interpretation(problem,interpretation);
46690 PartialInterpretation.scopes(interpretation,scope);
46691 Scope.targetTypeInterpretation(scope,typeInterpretation);
46692 Scope.maxNewElements(scope,0);
46693 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
46694 Type.name(type,"EParameter class");
46695}
46696
46697/**
46698 * An element may be an instance of type "EParameter class".
46699 */
46700private pattern mayInstanceOfEParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
46701{
46702 find interpretation(problem,interpretation);
46703 PartialInterpretation.newElements(interpretation,element);
46704 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
46705 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
46706 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
46707 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
46708 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
46709 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
46710 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
46711 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
46712 neg find mustInstanceOfEObject_class(problem,interpretation,element);
46713 neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element);
46714 neg find scopeDisallowsNewEParameter_class(problem, interpretation);
46715 neg find isPrimitive(element);
46716} or {
46717 find interpretation(problem,interpretation);
46718 PartialInterpretation.openWorldElements(interpretation,element);
46719 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
46720 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
46721 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
46722 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
46723 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
46724 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
46725 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
46726 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
46727 neg find mustInstanceOfEObject_class(problem,interpretation,element);
46728 neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element);
46729 neg find scopeDisallowsNewEParameter_class(problem, interpretation);
46730 neg find isPrimitive(element);
46731} or
46732{ find mustInstanceOfEParameter_class(problem,interpretation,element); }
46733/**
46734 * An element must be an instance of type "EReference class".
46735 */
46736private pattern mustInstanceOfEReference_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
46737 Type.name(type,"EReference class");
46738 find directInstanceOf(problem,interpretation,element,type);
46739}
46740private pattern scopeDisallowsNewEReference_class(problem:LogicProblem, interpretation:PartialInterpretation) {
46741 find interpretation(problem,interpretation);
46742 PartialInterpretation.scopes(interpretation,scope);
46743 Scope.targetTypeInterpretation(scope,typeInterpretation);
46744 Scope.maxNewElements(scope,0);
46745 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
46746 Type.name(type,"EReference class");
46747}
46748
46749/**
46750 * An element may be an instance of type "EReference class".
46751 */
46752private pattern mayInstanceOfEReference_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
46753{
46754 find interpretation(problem,interpretation);
46755 PartialInterpretation.newElements(interpretation,element);
46756 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
46757 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
46758 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
46759 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
46760 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
46761 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
46762 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
46763 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
46764 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
46765 neg find mustInstanceOfEObject_class(problem,interpretation,element);
46766 neg find mustInstanceOfEAttribute_class(problem,interpretation,element);
46767 neg find scopeDisallowsNewEReference_class(problem, interpretation);
46768 neg find isPrimitive(element);
46769} or {
46770 find interpretation(problem,interpretation);
46771 PartialInterpretation.openWorldElements(interpretation,element);
46772 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
46773 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
46774 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
46775 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
46776 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
46777 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
46778 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
46779 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
46780 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
46781 neg find mustInstanceOfEObject_class(problem,interpretation,element);
46782 neg find mustInstanceOfEAttribute_class(problem,interpretation,element);
46783 neg find scopeDisallowsNewEReference_class(problem, interpretation);
46784 neg find isPrimitive(element);
46785} or
46786{ find mustInstanceOfEReference_class(problem,interpretation,element); }
46787/**
46788 * An element must be an instance of type "EStructuralFeature class".
46789 */
46790private pattern mustInstanceOfEStructuralFeature_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
46791 Type.name(type,"EStructuralFeature class");
46792 find directInstanceOf(problem,interpretation,element,type);
46793}
46794private pattern scopeDisallowsNewEStructuralFeature_class(problem:LogicProblem, interpretation:PartialInterpretation) {
46795 find interpretation(problem,interpretation);
46796 PartialInterpretation.scopes(interpretation,scope);
46797 Scope.targetTypeInterpretation(scope,typeInterpretation);
46798 Scope.maxNewElements(scope,0);
46799 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
46800 Type.name(type,"EStructuralFeature class");
46801}
46802
46803/**
46804 * An element may be an instance of type "EStructuralFeature class".
46805 */
46806private pattern mayInstanceOfEStructuralFeature_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
46807{
46808 find interpretation(problem,interpretation);
46809 PartialInterpretation.newElements(interpretation,element);
46810 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
46811 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
46812 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
46813 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
46814 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
46815 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
46816 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
46817 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
46818 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
46819 neg find mustInstanceOfEObject_class(problem,interpretation,element);
46820 neg find mustInstanceOfEReference_class(problem,interpretation,element);
46821 neg find mustInstanceOfEAttribute_class(problem,interpretation,element);
46822 neg find scopeDisallowsNewEStructuralFeature_class(problem, interpretation);
46823 neg find isPrimitive(element);
46824} or {
46825 find interpretation(problem,interpretation);
46826 PartialInterpretation.openWorldElements(interpretation,element);
46827 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
46828 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
46829 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
46830 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
46831 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
46832 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
46833 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
46834 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
46835 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
46836 neg find mustInstanceOfEObject_class(problem,interpretation,element);
46837 neg find mustInstanceOfEReference_class(problem,interpretation,element);
46838 neg find mustInstanceOfEAttribute_class(problem,interpretation,element);
46839 neg find scopeDisallowsNewEStructuralFeature_class(problem, interpretation);
46840 neg find isPrimitive(element);
46841} or
46842{ find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); }
46843/**
46844 * An element must be an instance of type "ETypedElement class".
46845 */
46846private pattern mustInstanceOfETypedElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
46847 Type.name(type,"ETypedElement class");
46848 find directInstanceOf(problem,interpretation,element,type);
46849}
46850private pattern scopeDisallowsNewETypedElement_class(problem:LogicProblem, interpretation:PartialInterpretation) {
46851 find interpretation(problem,interpretation);
46852 PartialInterpretation.scopes(interpretation,scope);
46853 Scope.targetTypeInterpretation(scope,typeInterpretation);
46854 Scope.maxNewElements(scope,0);
46855 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
46856 Type.name(type,"ETypedElement class");
46857}
46858
46859/**
46860 * An element may be an instance of type "ETypedElement class".
46861 */
46862private pattern mayInstanceOfETypedElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
46863{
46864 find interpretation(problem,interpretation);
46865 PartialInterpretation.newElements(interpretation,element);
46866 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
46867 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
46868 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
46869 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
46870 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
46871 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
46872 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
46873 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
46874 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
46875 neg find mustInstanceOfEObject_class(problem,interpretation,element);
46876 neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element);
46877 neg find scopeDisallowsNewETypedElement_class(problem, interpretation);
46878 neg find isPrimitive(element);
46879} or {
46880 find interpretation(problem,interpretation);
46881 PartialInterpretation.openWorldElements(interpretation,element);
46882 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
46883 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
46884 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
46885 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
46886 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
46887 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
46888 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
46889 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
46890 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
46891 neg find mustInstanceOfEObject_class(problem,interpretation,element);
46892 neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element);
46893 neg find scopeDisallowsNewETypedElement_class(problem, interpretation);
46894 neg find isPrimitive(element);
46895} or
46896{ find mustInstanceOfETypedElement_class(problem,interpretation,element); }
46897/**
46898 * An element must be an instance of type "EStringToStringMapEntry class".
46899 */
46900private pattern mustInstanceOfEStringToStringMapEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
46901 Type.name(type,"EStringToStringMapEntry class");
46902 find directInstanceOf(problem,interpretation,element,type);
46903}
46904private pattern scopeDisallowsNewEStringToStringMapEntry_class(problem:LogicProblem, interpretation:PartialInterpretation) {
46905 find interpretation(problem,interpretation);
46906 PartialInterpretation.scopes(interpretation,scope);
46907 Scope.targetTypeInterpretation(scope,typeInterpretation);
46908 Scope.maxNewElements(scope,0);
46909 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
46910 Type.name(type,"EStringToStringMapEntry class");
46911}
46912
46913/**
46914 * An element may be an instance of type "EStringToStringMapEntry class".
46915 */
46916private pattern mayInstanceOfEStringToStringMapEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
46917{
46918 find interpretation(problem,interpretation);
46919 PartialInterpretation.newElements(interpretation,element);
46920 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
46921 neg find mustInstanceOfEModelElement_class(problem,interpretation,element);
46922 neg find mustInstanceOfEObject_class(problem,interpretation,element);
46923 neg find scopeDisallowsNewEStringToStringMapEntry_class(problem, interpretation);
46924 neg find isPrimitive(element);
46925} or {
46926 find interpretation(problem,interpretation);
46927 PartialInterpretation.openWorldElements(interpretation,element);
46928 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
46929 neg find mustInstanceOfEModelElement_class(problem,interpretation,element);
46930 neg find mustInstanceOfEObject_class(problem,interpretation,element);
46931 neg find scopeDisallowsNewEStringToStringMapEntry_class(problem, interpretation);
46932 neg find isPrimitive(element);
46933} or
46934{ find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); }
46935/**
46936 * An element must be an instance of type "EGenericType class".
46937 */
46938private pattern mustInstanceOfEGenericType_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
46939 Type.name(type,"EGenericType class");
46940 find directInstanceOf(problem,interpretation,element,type);
46941}
46942private pattern scopeDisallowsNewEGenericType_class(problem:LogicProblem, interpretation:PartialInterpretation) {
46943 find interpretation(problem,interpretation);
46944 PartialInterpretation.scopes(interpretation,scope);
46945 Scope.targetTypeInterpretation(scope,typeInterpretation);
46946 Scope.maxNewElements(scope,0);
46947 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
46948 Type.name(type,"EGenericType class");
46949}
46950
46951/**
46952 * An element may be an instance of type "EGenericType class".
46953 */
46954private pattern mayInstanceOfEGenericType_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
46955{
46956 find interpretation(problem,interpretation);
46957 PartialInterpretation.newElements(interpretation,element);
46958 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
46959 neg find mustInstanceOfEModelElement_class(problem,interpretation,element);
46960 neg find mustInstanceOfEObject_class(problem,interpretation,element);
46961 neg find scopeDisallowsNewEGenericType_class(problem, interpretation);
46962 neg find isPrimitive(element);
46963} or {
46964 find interpretation(problem,interpretation);
46965 PartialInterpretation.openWorldElements(interpretation,element);
46966 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
46967 neg find mustInstanceOfEModelElement_class(problem,interpretation,element);
46968 neg find mustInstanceOfEObject_class(problem,interpretation,element);
46969 neg find scopeDisallowsNewEGenericType_class(problem, interpretation);
46970 neg find isPrimitive(element);
46971} or
46972{ find mustInstanceOfEGenericType_class(problem,interpretation,element); }
46973/**
46974 * An element must be an instance of type "ETypeParameter class".
46975 */
46976private pattern mustInstanceOfETypeParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
46977 Type.name(type,"ETypeParameter class");
46978 find directInstanceOf(problem,interpretation,element,type);
46979}
46980private pattern scopeDisallowsNewETypeParameter_class(problem:LogicProblem, interpretation:PartialInterpretation) {
46981 find interpretation(problem,interpretation);
46982 PartialInterpretation.scopes(interpretation,scope);
46983 Scope.targetTypeInterpretation(scope,typeInterpretation);
46984 Scope.maxNewElements(scope,0);
46985 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
46986 Type.name(type,"ETypeParameter class");
46987}
46988
46989/**
46990 * An element may be an instance of type "ETypeParameter class".
46991 */
46992private pattern mayInstanceOfETypeParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
46993{
46994 find interpretation(problem,interpretation);
46995 PartialInterpretation.newElements(interpretation,element);
46996 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
46997 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
46998 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
46999 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
47000 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
47001 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
47002 neg find mustInstanceOfEObject_class(problem,interpretation,element);
47003 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
47004 neg find scopeDisallowsNewETypeParameter_class(problem, interpretation);
47005 neg find isPrimitive(element);
47006} or {
47007 find interpretation(problem,interpretation);
47008 PartialInterpretation.openWorldElements(interpretation,element);
47009 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
47010 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
47011 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
47012 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
47013 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
47014 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
47015 neg find mustInstanceOfEObject_class(problem,interpretation,element);
47016 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
47017 neg find scopeDisallowsNewETypeParameter_class(problem, interpretation);
47018 neg find isPrimitive(element);
47019} or
47020{ find mustInstanceOfETypeParameter_class(problem,interpretation,element); }
47021/**
47022 * An element must be an instance of type "EModelElement class DefinedPart".
47023 */
47024private pattern mustInstanceOfEModelElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
47025 Type.name(type,"EModelElement class DefinedPart");
47026 find directInstanceOf(problem,interpretation,element,type);
47027}
47028private pattern scopeDisallowsNewEModelElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
47029 find interpretation(problem,interpretation);
47030 PartialInterpretation.scopes(interpretation,scope);
47031 Scope.targetTypeInterpretation(scope,typeInterpretation);
47032 Scope.maxNewElements(scope,0);
47033 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
47034 Type.name(type,"EModelElement class DefinedPart");
47035}
47036
47037/**
47038 * An element may be an instance of type "EModelElement class DefinedPart".
47039 */
47040private pattern mayInstanceOfEModelElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
47041{ find mustInstanceOfEModelElement_class_DefinedPart(problem,interpretation,element); }
47042/**
47043 * An element must be an instance of type "EModelElement class UndefinedPart".
47044 */
47045private pattern mustInstanceOfEModelElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
47046 Type.name(type,"EModelElement class UndefinedPart");
47047 find directInstanceOf(problem,interpretation,element,type);
47048}
47049private pattern scopeDisallowsNewEModelElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
47050 find interpretation(problem,interpretation);
47051 PartialInterpretation.scopes(interpretation,scope);
47052 Scope.targetTypeInterpretation(scope,typeInterpretation);
47053 Scope.maxNewElements(scope,0);
47054 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
47055 Type.name(type,"EModelElement class UndefinedPart");
47056}
47057
47058/**
47059 * An element may be an instance of type "EModelElement class UndefinedPart".
47060 */
47061private pattern mayInstanceOfEModelElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
47062{
47063 find interpretation(problem,interpretation);
47064 PartialInterpretation.newElements(interpretation,element);
47065 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
47066 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
47067 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
47068 neg find mustInstanceOfEObject_class(problem,interpretation,element);
47069 neg find mustInstanceOfENamedElement_class(problem,interpretation,element);
47070 neg find scopeDisallowsNewEModelElement_class_UndefinedPart(problem, interpretation);
47071 neg find isPrimitive(element);
47072} or {
47073 find interpretation(problem,interpretation);
47074 PartialInterpretation.openWorldElements(interpretation,element);
47075 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
47076 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
47077 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
47078 neg find mustInstanceOfEObject_class(problem,interpretation,element);
47079 neg find mustInstanceOfENamedElement_class(problem,interpretation,element);
47080 neg find scopeDisallowsNewEModelElement_class_UndefinedPart(problem, interpretation);
47081 neg find isPrimitive(element);
47082} or
47083{ find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); }
47084/**
47085 * An element must be an instance of type "ENamedElement class DefinedPart".
47086 */
47087private pattern mustInstanceOfENamedElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
47088 Type.name(type,"ENamedElement class DefinedPart");
47089 find directInstanceOf(problem,interpretation,element,type);
47090}
47091private pattern scopeDisallowsNewENamedElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
47092 find interpretation(problem,interpretation);
47093 PartialInterpretation.scopes(interpretation,scope);
47094 Scope.targetTypeInterpretation(scope,typeInterpretation);
47095 Scope.maxNewElements(scope,0);
47096 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
47097 Type.name(type,"ENamedElement class DefinedPart");
47098}
47099
47100/**
47101 * An element may be an instance of type "ENamedElement class DefinedPart".
47102 */
47103private pattern mayInstanceOfENamedElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
47104{ find mustInstanceOfENamedElement_class_DefinedPart(problem,interpretation,element); }
47105/**
47106 * An element must be an instance of type "ENamedElement class UndefinedPart".
47107 */
47108private pattern mustInstanceOfENamedElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
47109 Type.name(type,"ENamedElement class UndefinedPart");
47110 find directInstanceOf(problem,interpretation,element,type);
47111}
47112private pattern scopeDisallowsNewENamedElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
47113 find interpretation(problem,interpretation);
47114 PartialInterpretation.scopes(interpretation,scope);
47115 Scope.targetTypeInterpretation(scope,typeInterpretation);
47116 Scope.maxNewElements(scope,0);
47117 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
47118 Type.name(type,"ENamedElement class UndefinedPart");
47119}
47120
47121/**
47122 * An element may be an instance of type "ENamedElement class UndefinedPart".
47123 */
47124private pattern mayInstanceOfENamedElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
47125{
47126 find interpretation(problem,interpretation);
47127 PartialInterpretation.newElements(interpretation,element);
47128 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
47129 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
47130 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
47131 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
47132 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
47133 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
47134 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
47135 neg find mustInstanceOfEObject_class(problem,interpretation,element);
47136 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
47137 neg find scopeDisallowsNewENamedElement_class_UndefinedPart(problem, interpretation);
47138 neg find isPrimitive(element);
47139} or {
47140 find interpretation(problem,interpretation);
47141 PartialInterpretation.openWorldElements(interpretation,element);
47142 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
47143 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
47144 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
47145 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
47146 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
47147 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
47148 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
47149 neg find mustInstanceOfEObject_class(problem,interpretation,element);
47150 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
47151 neg find scopeDisallowsNewENamedElement_class_UndefinedPart(problem, interpretation);
47152 neg find isPrimitive(element);
47153} or
47154{ find mustInstanceOfENamedElement_class_UndefinedPart(problem,interpretation,element); }
47155/**
47156 * An element must be an instance of type "EPackage class DefinedPart".
47157 */
47158private pattern mustInstanceOfEPackage_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
47159 Type.name(type,"EPackage class DefinedPart");
47160 find directInstanceOf(problem,interpretation,element,type);
47161}
47162private pattern scopeDisallowsNewEPackage_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
47163 find interpretation(problem,interpretation);
47164 PartialInterpretation.scopes(interpretation,scope);
47165 Scope.targetTypeInterpretation(scope,typeInterpretation);
47166 Scope.maxNewElements(scope,0);
47167 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
47168 Type.name(type,"EPackage class DefinedPart");
47169}
47170
47171/**
47172 * An element may be an instance of type "EPackage class DefinedPart".
47173 */
47174private pattern mayInstanceOfEPackage_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
47175{ find mustInstanceOfEPackage_class_DefinedPart(problem,interpretation,element); }
47176/**
47177 * An element must be an instance of type "EPackage class UndefinedPart".
47178 */
47179private pattern mustInstanceOfEPackage_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
47180 Type.name(type,"EPackage class UndefinedPart");
47181 find directInstanceOf(problem,interpretation,element,type);
47182}
47183private pattern scopeDisallowsNewEPackage_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
47184 find interpretation(problem,interpretation);
47185 PartialInterpretation.scopes(interpretation,scope);
47186 Scope.targetTypeInterpretation(scope,typeInterpretation);
47187 Scope.maxNewElements(scope,0);
47188 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
47189 Type.name(type,"EPackage class UndefinedPart");
47190}
47191
47192/**
47193 * An element may be an instance of type "EPackage class UndefinedPart".
47194 */
47195private pattern mayInstanceOfEPackage_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
47196{
47197 find interpretation(problem,interpretation);
47198 PartialInterpretation.newElements(interpretation,element);
47199 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
47200 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
47201 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
47202 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
47203 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
47204 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
47205 neg find mustInstanceOfEObject_class(problem,interpretation,element);
47206 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
47207 neg find scopeDisallowsNewEPackage_class_UndefinedPart(problem, interpretation);
47208 neg find isPrimitive(element);
47209} or {
47210 find interpretation(problem,interpretation);
47211 PartialInterpretation.openWorldElements(interpretation,element);
47212 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
47213 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
47214 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
47215 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
47216 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
47217 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
47218 neg find mustInstanceOfEObject_class(problem,interpretation,element);
47219 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
47220 neg find scopeDisallowsNewEPackage_class_UndefinedPart(problem, interpretation);
47221 neg find isPrimitive(element);
47222} or
47223{ find mustInstanceOfEPackage_class_UndefinedPart(problem,interpretation,element); }
47224
47225//////////
47226// 1.2 Relation Declaration Indexers
47227//////////
47228/**
47229 * Matcher for detecting tuples t where []eAttributeType reference EAttribute(source,target)
47230 */
47231private pattern mustInRelationeAttributeType_reference_EAttribute(
47232 problem:LogicProblem, interpretation:PartialInterpretation,
47233 source: DefinedElement, target:DefinedElement)
47234{
47235 find interpretation(problem,interpretation);
47236 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
47237 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributeType reference EAttribute");
47238 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
47239 BinaryElementRelationLink.param1(link,source);
47240 BinaryElementRelationLink.param2(link,target);
47241}
47242/**
47243 * Matcher for detecting tuples t where <>eAttributeType reference EAttribute(source,target)
47244 */
47245private pattern mayInRelationeAttributeType_reference_EAttribute(
47246 problem:LogicProblem, interpretation:PartialInterpretation,
47247 source: DefinedElement, target:DefinedElement)
47248{
47249 find interpretation(problem,interpretation);
47250 // The two endpoint of the link have to exist
47251 find mayExist(problem, interpretation, source);
47252 find mayExist(problem, interpretation, target);
47253 // Type consistency
47254 find mayInstanceOfEAttribute_class(problem,interpretation,source);
47255 find mayInstanceOfEDataType_class(problem,interpretation,target);
47256 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
47257 // the upper bound of the multiplicity should be considered.
47258 numberOfExistingReferences == count find mustInRelationeAttributeType_reference_EAttribute(problem,interpretation,source,_);
47259 check(numberOfExistingReferences < 1);
47260} or {
47261 find mustInRelationeAttributeType_reference_EAttribute(problem,interpretation,source,target);
47262}
47263/**
47264 * Matcher for detecting tuples t where []details reference EAnnotation(source,target)
47265 */
47266private pattern mustInRelationdetails_reference_EAnnotation(
47267 problem:LogicProblem, interpretation:PartialInterpretation,
47268 source: DefinedElement, target:DefinedElement)
47269{
47270 find interpretation(problem,interpretation);
47271 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
47272 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"details reference EAnnotation");
47273 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
47274 BinaryElementRelationLink.param1(link,source);
47275 BinaryElementRelationLink.param2(link,target);
47276}
47277/**
47278 * Matcher for detecting tuples t where <>details reference EAnnotation(source,target)
47279 */
47280private pattern mayInRelationdetails_reference_EAnnotation(
47281 problem:LogicProblem, interpretation:PartialInterpretation,
47282 source: DefinedElement, target:DefinedElement)
47283{
47284 find interpretation(problem,interpretation);
47285 // The two endpoint of the link have to exist
47286 find mayExist(problem, interpretation, source);
47287 find mayExist(problem, interpretation, target);
47288 // Type consistency
47289 find mayInstanceOfEAnnotation_class(problem,interpretation,source);
47290 find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,target);
47291 // The reference is containment, then a new reference cannot be create if:
47292 // 1. Multiple parents
47293 neg find mustContains4(problem,interpretation,_,target);
47294 // 2. Circle in the containment hierarchy
47295 neg find mustTransitiveContains(source,target);
47296} or {
47297 find mustInRelationdetails_reference_EAnnotation(problem,interpretation,source,target);
47298}
47299/**
47300 * Matcher for detecting tuples t where []eModelElement reference EAnnotation(source,target)
47301 */
47302private pattern mustInRelationeModelElement_reference_EAnnotation(
47303 problem:LogicProblem, interpretation:PartialInterpretation,
47304 source: DefinedElement, target:DefinedElement)
47305{
47306 find interpretation(problem,interpretation);
47307 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
47308 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eModelElement reference EAnnotation");
47309 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
47310 BinaryElementRelationLink.param1(link,source);
47311 BinaryElementRelationLink.param2(link,target);
47312}
47313/**
47314 * Matcher for detecting tuples t where <>eModelElement reference EAnnotation(source,target)
47315 */
47316private pattern mayInRelationeModelElement_reference_EAnnotation(
47317 problem:LogicProblem, interpretation:PartialInterpretation,
47318 source: DefinedElement, target:DefinedElement)
47319{
47320 find interpretation(problem,interpretation);
47321 // The two endpoint of the link have to exist
47322 find mayExist(problem, interpretation, source);
47323 find mayExist(problem, interpretation, target);
47324 // Type consistency
47325 find mayInstanceOfEAnnotation_class(problem,interpretation,source);
47326 find mayInstanceOfEModelElement_class(problem,interpretation,target);
47327 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
47328 // the upper bound of the multiplicity should be considered.
47329 numberOfExistingReferences == count find mustInRelationeModelElement_reference_EAnnotation(problem,interpretation,source,_);
47330 check(numberOfExistingReferences < 1);
47331 // The eOpposite of the reference is containment, then a referene cannot be created if
47332 // 1. Multiple parents
47333 neg find mustContains4(problem,interpretation,source,_);
47334 // 2. Circle in the containment hierarchy
47335 neg find mustTransitiveContains(source,target);
47336} or {
47337 find mustInRelationeModelElement_reference_EAnnotation(problem,interpretation,source,target);
47338}
47339/**
47340 * Matcher for detecting tuples t where []contents reference EAnnotation(source,target)
47341 */
47342private pattern mustInRelationcontents_reference_EAnnotation(
47343 problem:LogicProblem, interpretation:PartialInterpretation,
47344 source: DefinedElement, target:DefinedElement)
47345{
47346 find interpretation(problem,interpretation);
47347 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
47348 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"contents reference EAnnotation");
47349 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
47350 BinaryElementRelationLink.param1(link,source);
47351 BinaryElementRelationLink.param2(link,target);
47352}
47353/**
47354 * Matcher for detecting tuples t where <>contents reference EAnnotation(source,target)
47355 */
47356private pattern mayInRelationcontents_reference_EAnnotation(
47357 problem:LogicProblem, interpretation:PartialInterpretation,
47358 source: DefinedElement, target:DefinedElement)
47359{
47360 find interpretation(problem,interpretation);
47361 // The two endpoint of the link have to exist
47362 find mayExist(problem, interpretation, source);
47363 find mayExist(problem, interpretation, target);
47364 // Type consistency
47365 find mayInstanceOfEAnnotation_class(problem,interpretation,source);
47366 find mayInstanceOfEObject_class(problem,interpretation,target);
47367 // The reference is containment, then a new reference cannot be create if:
47368 // 1. Multiple parents
47369 neg find mustContains4(problem,interpretation,_,target);
47370 // 2. Circle in the containment hierarchy
47371 neg find mustTransitiveContains(source,target);
47372} or {
47373 find mustInRelationcontents_reference_EAnnotation(problem,interpretation,source,target);
47374}
47375/**
47376 * Matcher for detecting tuples t where []references reference EAnnotation(source,target)
47377 */
47378private pattern mustInRelationreferences_reference_EAnnotation(
47379 problem:LogicProblem, interpretation:PartialInterpretation,
47380 source: DefinedElement, target:DefinedElement)
47381{
47382 find interpretation(problem,interpretation);
47383 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
47384 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"references reference EAnnotation");
47385 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
47386 BinaryElementRelationLink.param1(link,source);
47387 BinaryElementRelationLink.param2(link,target);
47388}
47389/**
47390 * Matcher for detecting tuples t where <>references reference EAnnotation(source,target)
47391 */
47392private pattern mayInRelationreferences_reference_EAnnotation(
47393 problem:LogicProblem, interpretation:PartialInterpretation,
47394 source: DefinedElement, target:DefinedElement)
47395{
47396 find interpretation(problem,interpretation);
47397 // The two endpoint of the link have to exist
47398 find mayExist(problem, interpretation, source);
47399 find mayExist(problem, interpretation, target);
47400 // Type consistency
47401 find mayInstanceOfEAnnotation_class(problem,interpretation,source);
47402 find mayInstanceOfEObject_class(problem,interpretation,target);
47403} or {
47404 find mustInRelationreferences_reference_EAnnotation(problem,interpretation,source,target);
47405}
47406/**
47407 * Matcher for detecting tuples t where []eSuperTypes reference EClass(source,target)
47408 */
47409private pattern mustInRelationeSuperTypes_reference_EClass(
47410 problem:LogicProblem, interpretation:PartialInterpretation,
47411 source: DefinedElement, target:DefinedElement)
47412{
47413 find interpretation(problem,interpretation);
47414 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
47415 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eSuperTypes reference EClass");
47416 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
47417 BinaryElementRelationLink.param1(link,source);
47418 BinaryElementRelationLink.param2(link,target);
47419}
47420/**
47421 * Matcher for detecting tuples t where <>eSuperTypes reference EClass(source,target)
47422 */
47423private pattern mayInRelationeSuperTypes_reference_EClass(
47424 problem:LogicProblem, interpretation:PartialInterpretation,
47425 source: DefinedElement, target:DefinedElement)
47426{
47427 find interpretation(problem,interpretation);
47428 // The two endpoint of the link have to exist
47429 find mayExist(problem, interpretation, source);
47430 find mayExist(problem, interpretation, target);
47431 // Type consistency
47432 find mayInstanceOfEClass_class(problem,interpretation,source);
47433 find mayInstanceOfEClass_class(problem,interpretation,target);
47434} or {
47435 find mustInRelationeSuperTypes_reference_EClass(problem,interpretation,source,target);
47436}
47437/**
47438 * Matcher for detecting tuples t where []eOperations reference EClass(source,target)
47439 */
47440private pattern mustInRelationeOperations_reference_EClass(
47441 problem:LogicProblem, interpretation:PartialInterpretation,
47442 source: DefinedElement, target:DefinedElement)
47443{
47444 find interpretation(problem,interpretation);
47445 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
47446 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eOperations reference EClass");
47447 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
47448 BinaryElementRelationLink.param1(link,source);
47449 BinaryElementRelationLink.param2(link,target);
47450}
47451/**
47452 * Matcher for detecting tuples t where <>eOperations reference EClass(source,target)
47453 */
47454private pattern mayInRelationeOperations_reference_EClass(
47455 problem:LogicProblem, interpretation:PartialInterpretation,
47456 source: DefinedElement, target:DefinedElement)
47457{
47458 find interpretation(problem,interpretation);
47459 // The two endpoint of the link have to exist
47460 find mayExist(problem, interpretation, source);
47461 find mayExist(problem, interpretation, target);
47462 // Type consistency
47463 find mayInstanceOfEClass_class(problem,interpretation,source);
47464 find mayInstanceOfEOperation_class(problem,interpretation,target);
47465 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
47466 // the upper bound of the opposite reference multiplicity should be considered.
47467 numberOfExistingOppositeReferences == count find mustInRelationeContainingClass_reference_EOperation(problem,interpretation,target,_);
47468 check(numberOfExistingOppositeReferences < 1);
47469 // The reference is containment, then a new reference cannot be create if:
47470 // 1. Multiple parents
47471 neg find mustContains4(problem,interpretation,_,target);
47472 // 2. Circle in the containment hierarchy
47473 neg find mustTransitiveContains(source,target);
47474} or {
47475 find mustInRelationeOperations_reference_EClass(problem,interpretation,source,target);
47476}
47477/**
47478 * Matcher for detecting tuples t where []eAllAttributes reference EClass(source,target)
47479 */
47480private pattern mustInRelationeAllAttributes_reference_EClass(
47481 problem:LogicProblem, interpretation:PartialInterpretation,
47482 source: DefinedElement, target:DefinedElement)
47483{
47484 find interpretation(problem,interpretation);
47485 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
47486 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllAttributes reference EClass");
47487 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
47488 BinaryElementRelationLink.param1(link,source);
47489 BinaryElementRelationLink.param2(link,target);
47490}
47491/**
47492 * Matcher for detecting tuples t where <>eAllAttributes reference EClass(source,target)
47493 */
47494private pattern mayInRelationeAllAttributes_reference_EClass(
47495 problem:LogicProblem, interpretation:PartialInterpretation,
47496 source: DefinedElement, target:DefinedElement)
47497{
47498 find interpretation(problem,interpretation);
47499 // The two endpoint of the link have to exist
47500 find mayExist(problem, interpretation, source);
47501 find mayExist(problem, interpretation, target);
47502 // Type consistency
47503 find mayInstanceOfEClass_class(problem,interpretation,source);
47504 find mayInstanceOfEAttribute_class(problem,interpretation,target);
47505} or {
47506 find mustInRelationeAllAttributes_reference_EClass(problem,interpretation,source,target);
47507}
47508/**
47509 * Matcher for detecting tuples t where []eAllReferences reference EClass(source,target)
47510 */
47511private pattern mustInRelationeAllReferences_reference_EClass(
47512 problem:LogicProblem, interpretation:PartialInterpretation,
47513 source: DefinedElement, target:DefinedElement)
47514{
47515 find interpretation(problem,interpretation);
47516 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
47517 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllReferences reference EClass");
47518 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
47519 BinaryElementRelationLink.param1(link,source);
47520 BinaryElementRelationLink.param2(link,target);
47521}
47522/**
47523 * Matcher for detecting tuples t where <>eAllReferences reference EClass(source,target)
47524 */
47525private pattern mayInRelationeAllReferences_reference_EClass(
47526 problem:LogicProblem, interpretation:PartialInterpretation,
47527 source: DefinedElement, target:DefinedElement)
47528{
47529 find interpretation(problem,interpretation);
47530 // The two endpoint of the link have to exist
47531 find mayExist(problem, interpretation, source);
47532 find mayExist(problem, interpretation, target);
47533 // Type consistency
47534 find mayInstanceOfEClass_class(problem,interpretation,source);
47535 find mayInstanceOfEReference_class(problem,interpretation,target);
47536} or {
47537 find mustInRelationeAllReferences_reference_EClass(problem,interpretation,source,target);
47538}
47539/**
47540 * Matcher for detecting tuples t where []eReferences reference EClass(source,target)
47541 */
47542private pattern mustInRelationeReferences_reference_EClass(
47543 problem:LogicProblem, interpretation:PartialInterpretation,
47544 source: DefinedElement, target:DefinedElement)
47545{
47546 find interpretation(problem,interpretation);
47547 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
47548 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferences reference EClass");
47549 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
47550 BinaryElementRelationLink.param1(link,source);
47551 BinaryElementRelationLink.param2(link,target);
47552}
47553/**
47554 * Matcher for detecting tuples t where <>eReferences reference EClass(source,target)
47555 */
47556private pattern mayInRelationeReferences_reference_EClass(
47557 problem:LogicProblem, interpretation:PartialInterpretation,
47558 source: DefinedElement, target:DefinedElement)
47559{
47560 find interpretation(problem,interpretation);
47561 // The two endpoint of the link have to exist
47562 find mayExist(problem, interpretation, source);
47563 find mayExist(problem, interpretation, target);
47564 // Type consistency
47565 find mayInstanceOfEClass_class(problem,interpretation,source);
47566 find mayInstanceOfEReference_class(problem,interpretation,target);
47567} or {
47568 find mustInRelationeReferences_reference_EClass(problem,interpretation,source,target);
47569}
47570/**
47571 * Matcher for detecting tuples t where []eAttributes reference EClass(source,target)
47572 */
47573private pattern mustInRelationeAttributes_reference_EClass(
47574 problem:LogicProblem, interpretation:PartialInterpretation,
47575 source: DefinedElement, target:DefinedElement)
47576{
47577 find interpretation(problem,interpretation);
47578 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
47579 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributes reference EClass");
47580 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
47581 BinaryElementRelationLink.param1(link,source);
47582 BinaryElementRelationLink.param2(link,target);
47583}
47584/**
47585 * Matcher for detecting tuples t where <>eAttributes reference EClass(source,target)
47586 */
47587private pattern mayInRelationeAttributes_reference_EClass(
47588 problem:LogicProblem, interpretation:PartialInterpretation,
47589 source: DefinedElement, target:DefinedElement)
47590{
47591 find interpretation(problem,interpretation);
47592 // The two endpoint of the link have to exist
47593 find mayExist(problem, interpretation, source);
47594 find mayExist(problem, interpretation, target);
47595 // Type consistency
47596 find mayInstanceOfEClass_class(problem,interpretation,source);
47597 find mayInstanceOfEAttribute_class(problem,interpretation,target);
47598} or {
47599 find mustInRelationeAttributes_reference_EClass(problem,interpretation,source,target);
47600}
47601/**
47602 * Matcher for detecting tuples t where []eAllContainments reference EClass(source,target)
47603 */
47604private pattern mustInRelationeAllContainments_reference_EClass(
47605 problem:LogicProblem, interpretation:PartialInterpretation,
47606 source: DefinedElement, target:DefinedElement)
47607{
47608 find interpretation(problem,interpretation);
47609 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
47610 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllContainments reference EClass");
47611 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
47612 BinaryElementRelationLink.param1(link,source);
47613 BinaryElementRelationLink.param2(link,target);
47614}
47615/**
47616 * Matcher for detecting tuples t where <>eAllContainments reference EClass(source,target)
47617 */
47618private pattern mayInRelationeAllContainments_reference_EClass(
47619 problem:LogicProblem, interpretation:PartialInterpretation,
47620 source: DefinedElement, target:DefinedElement)
47621{
47622 find interpretation(problem,interpretation);
47623 // The two endpoint of the link have to exist
47624 find mayExist(problem, interpretation, source);
47625 find mayExist(problem, interpretation, target);
47626 // Type consistency
47627 find mayInstanceOfEClass_class(problem,interpretation,source);
47628 find mayInstanceOfEReference_class(problem,interpretation,target);
47629} or {
47630 find mustInRelationeAllContainments_reference_EClass(problem,interpretation,source,target);
47631}
47632/**
47633 * Matcher for detecting tuples t where []eAllOperations reference EClass(source,target)
47634 */
47635private pattern mustInRelationeAllOperations_reference_EClass(
47636 problem:LogicProblem, interpretation:PartialInterpretation,
47637 source: DefinedElement, target:DefinedElement)
47638{
47639 find interpretation(problem,interpretation);
47640 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
47641 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllOperations reference EClass");
47642 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
47643 BinaryElementRelationLink.param1(link,source);
47644 BinaryElementRelationLink.param2(link,target);
47645}
47646/**
47647 * Matcher for detecting tuples t where <>eAllOperations reference EClass(source,target)
47648 */
47649private pattern mayInRelationeAllOperations_reference_EClass(
47650 problem:LogicProblem, interpretation:PartialInterpretation,
47651 source: DefinedElement, target:DefinedElement)
47652{
47653 find interpretation(problem,interpretation);
47654 // The two endpoint of the link have to exist
47655 find mayExist(problem, interpretation, source);
47656 find mayExist(problem, interpretation, target);
47657 // Type consistency
47658 find mayInstanceOfEClass_class(problem,interpretation,source);
47659 find mayInstanceOfEOperation_class(problem,interpretation,target);
47660} or {
47661 find mustInRelationeAllOperations_reference_EClass(problem,interpretation,source,target);
47662}
47663/**
47664 * Matcher for detecting tuples t where []eAllStructuralFeatures reference EClass(source,target)
47665 */
47666private pattern mustInRelationeAllStructuralFeatures_reference_EClass(
47667 problem:LogicProblem, interpretation:PartialInterpretation,
47668 source: DefinedElement, target:DefinedElement)
47669{
47670 find interpretation(problem,interpretation);
47671 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
47672 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllStructuralFeatures reference EClass");
47673 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
47674 BinaryElementRelationLink.param1(link,source);
47675 BinaryElementRelationLink.param2(link,target);
47676}
47677/**
47678 * Matcher for detecting tuples t where <>eAllStructuralFeatures reference EClass(source,target)
47679 */
47680private pattern mayInRelationeAllStructuralFeatures_reference_EClass(
47681 problem:LogicProblem, interpretation:PartialInterpretation,
47682 source: DefinedElement, target:DefinedElement)
47683{
47684 find interpretation(problem,interpretation);
47685 // The two endpoint of the link have to exist
47686 find mayExist(problem, interpretation, source);
47687 find mayExist(problem, interpretation, target);
47688 // Type consistency
47689 find mayInstanceOfEClass_class(problem,interpretation,source);
47690 find mayInstanceOfEStructuralFeature_class(problem,interpretation,target);
47691} or {
47692 find mustInRelationeAllStructuralFeatures_reference_EClass(problem,interpretation,source,target);
47693}
47694/**
47695 * Matcher for detecting tuples t where []eAllSuperTypes reference EClass(source,target)
47696 */
47697private pattern mustInRelationeAllSuperTypes_reference_EClass(
47698 problem:LogicProblem, interpretation:PartialInterpretation,
47699 source: DefinedElement, target:DefinedElement)
47700{
47701 find interpretation(problem,interpretation);
47702 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
47703 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllSuperTypes reference EClass");
47704 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
47705 BinaryElementRelationLink.param1(link,source);
47706 BinaryElementRelationLink.param2(link,target);
47707}
47708/**
47709 * Matcher for detecting tuples t where <>eAllSuperTypes reference EClass(source,target)
47710 */
47711private pattern mayInRelationeAllSuperTypes_reference_EClass(
47712 problem:LogicProblem, interpretation:PartialInterpretation,
47713 source: DefinedElement, target:DefinedElement)
47714{
47715 find interpretation(problem,interpretation);
47716 // The two endpoint of the link have to exist
47717 find mayExist(problem, interpretation, source);
47718 find mayExist(problem, interpretation, target);
47719 // Type consistency
47720 find mayInstanceOfEClass_class(problem,interpretation,source);
47721 find mayInstanceOfEClass_class(problem,interpretation,target);
47722} or {
47723 find mustInRelationeAllSuperTypes_reference_EClass(problem,interpretation,source,target);
47724}
47725/**
47726 * Matcher for detecting tuples t where []eIDAttribute reference EClass(source,target)
47727 */
47728private pattern mustInRelationeIDAttribute_reference_EClass(
47729 problem:LogicProblem, interpretation:PartialInterpretation,
47730 source: DefinedElement, target:DefinedElement)
47731{
47732 find interpretation(problem,interpretation);
47733 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
47734 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eIDAttribute reference EClass");
47735 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
47736 BinaryElementRelationLink.param1(link,source);
47737 BinaryElementRelationLink.param2(link,target);
47738}
47739/**
47740 * Matcher for detecting tuples t where <>eIDAttribute reference EClass(source,target)
47741 */
47742private pattern mayInRelationeIDAttribute_reference_EClass(
47743 problem:LogicProblem, interpretation:PartialInterpretation,
47744 source: DefinedElement, target:DefinedElement)
47745{
47746 find interpretation(problem,interpretation);
47747 // The two endpoint of the link have to exist
47748 find mayExist(problem, interpretation, source);
47749 find mayExist(problem, interpretation, target);
47750 // Type consistency
47751 find mayInstanceOfEClass_class(problem,interpretation,source);
47752 find mayInstanceOfEAttribute_class(problem,interpretation,target);
47753 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
47754 // the upper bound of the multiplicity should be considered.
47755 numberOfExistingReferences == count find mustInRelationeIDAttribute_reference_EClass(problem,interpretation,source,_);
47756 check(numberOfExistingReferences < 1);
47757} or {
47758 find mustInRelationeIDAttribute_reference_EClass(problem,interpretation,source,target);
47759}
47760/**
47761 * Matcher for detecting tuples t where []eStructuralFeatures reference EClass(source,target)
47762 */
47763private pattern mustInRelationeStructuralFeatures_reference_EClass(
47764 problem:LogicProblem, interpretation:PartialInterpretation,
47765 source: DefinedElement, target:DefinedElement)
47766{
47767 find interpretation(problem,interpretation);
47768 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
47769 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eStructuralFeatures reference EClass");
47770 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
47771 BinaryElementRelationLink.param1(link,source);
47772 BinaryElementRelationLink.param2(link,target);
47773}
47774/**
47775 * Matcher for detecting tuples t where <>eStructuralFeatures reference EClass(source,target)
47776 */
47777private pattern mayInRelationeStructuralFeatures_reference_EClass(
47778 problem:LogicProblem, interpretation:PartialInterpretation,
47779 source: DefinedElement, target:DefinedElement)
47780{
47781 find interpretation(problem,interpretation);
47782 // The two endpoint of the link have to exist
47783 find mayExist(problem, interpretation, source);
47784 find mayExist(problem, interpretation, target);
47785 // Type consistency
47786 find mayInstanceOfEClass_class(problem,interpretation,source);
47787 find mayInstanceOfEStructuralFeature_class(problem,interpretation,target);
47788 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
47789 // the upper bound of the opposite reference multiplicity should be considered.
47790 numberOfExistingOppositeReferences == count find mustInRelationeContainingClass_reference_EStructuralFeature(problem,interpretation,target,_);
47791 check(numberOfExistingOppositeReferences < 1);
47792 // The reference is containment, then a new reference cannot be create if:
47793 // 1. Multiple parents
47794 neg find mustContains4(problem,interpretation,_,target);
47795 // 2. Circle in the containment hierarchy
47796 neg find mustTransitiveContains(source,target);
47797} or {
47798 find mustInRelationeStructuralFeatures_reference_EClass(problem,interpretation,source,target);
47799}
47800/**
47801 * Matcher for detecting tuples t where []eGenericSuperTypes reference EClass(source,target)
47802 */
47803private pattern mustInRelationeGenericSuperTypes_reference_EClass(
47804 problem:LogicProblem, interpretation:PartialInterpretation,
47805 source: DefinedElement, target:DefinedElement)
47806{
47807 find interpretation(problem,interpretation);
47808 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
47809 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eGenericSuperTypes reference EClass");
47810 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
47811 BinaryElementRelationLink.param1(link,source);
47812 BinaryElementRelationLink.param2(link,target);
47813}
47814/**
47815 * Matcher for detecting tuples t where <>eGenericSuperTypes reference EClass(source,target)
47816 */
47817private pattern mayInRelationeGenericSuperTypes_reference_EClass(
47818 problem:LogicProblem, interpretation:PartialInterpretation,
47819 source: DefinedElement, target:DefinedElement)
47820{
47821 find interpretation(problem,interpretation);
47822 // The two endpoint of the link have to exist
47823 find mayExist(problem, interpretation, source);
47824 find mayExist(problem, interpretation, target);
47825 // Type consistency
47826 find mayInstanceOfEClass_class(problem,interpretation,source);
47827 find mayInstanceOfEGenericType_class(problem,interpretation,target);
47828 // The reference is containment, then a new reference cannot be create if:
47829 // 1. Multiple parents
47830 neg find mustContains4(problem,interpretation,_,target);
47831 // 2. Circle in the containment hierarchy
47832 neg find mustTransitiveContains(source,target);
47833} or {
47834 find mustInRelationeGenericSuperTypes_reference_EClass(problem,interpretation,source,target);
47835}
47836/**
47837 * Matcher for detecting tuples t where []eAllGenericSuperTypes reference EClass(source,target)
47838 */
47839private pattern mustInRelationeAllGenericSuperTypes_reference_EClass(
47840 problem:LogicProblem, interpretation:PartialInterpretation,
47841 source: DefinedElement, target:DefinedElement)
47842{
47843 find interpretation(problem,interpretation);
47844 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
47845 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllGenericSuperTypes reference EClass");
47846 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
47847 BinaryElementRelationLink.param1(link,source);
47848 BinaryElementRelationLink.param2(link,target);
47849}
47850/**
47851 * Matcher for detecting tuples t where <>eAllGenericSuperTypes reference EClass(source,target)
47852 */
47853private pattern mayInRelationeAllGenericSuperTypes_reference_EClass(
47854 problem:LogicProblem, interpretation:PartialInterpretation,
47855 source: DefinedElement, target:DefinedElement)
47856{
47857 find interpretation(problem,interpretation);
47858 // The two endpoint of the link have to exist
47859 find mayExist(problem, interpretation, source);
47860 find mayExist(problem, interpretation, target);
47861 // Type consistency
47862 find mayInstanceOfEClass_class(problem,interpretation,source);
47863 find mayInstanceOfEGenericType_class(problem,interpretation,target);
47864} or {
47865 find mustInRelationeAllGenericSuperTypes_reference_EClass(problem,interpretation,source,target);
47866}
47867/**
47868 * Matcher for detecting tuples t where []ePackage reference EClassifier(source,target)
47869 */
47870private pattern mustInRelationePackage_reference_EClassifier(
47871 problem:LogicProblem, interpretation:PartialInterpretation,
47872 source: DefinedElement, target:DefinedElement)
47873{
47874 find interpretation(problem,interpretation);
47875 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
47876 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"ePackage reference EClassifier");
47877 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
47878 BinaryElementRelationLink.param1(link,source);
47879 BinaryElementRelationLink.param2(link,target);
47880}
47881/**
47882 * Matcher for detecting tuples t where <>ePackage reference EClassifier(source,target)
47883 */
47884private pattern mayInRelationePackage_reference_EClassifier(
47885 problem:LogicProblem, interpretation:PartialInterpretation,
47886 source: DefinedElement, target:DefinedElement)
47887{
47888 find interpretation(problem,interpretation);
47889 // The two endpoint of the link have to exist
47890 find mayExist(problem, interpretation, source);
47891 find mayExist(problem, interpretation, target);
47892 // Type consistency
47893 find mayInstanceOfEClassifier_class(problem,interpretation,source);
47894 find mayInstanceOfEPackage_class(problem,interpretation,target);
47895 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
47896 // the upper bound of the multiplicity should be considered.
47897 numberOfExistingReferences == count find mustInRelationePackage_reference_EClassifier(problem,interpretation,source,_);
47898 check(numberOfExistingReferences < 1);
47899 // The eOpposite of the reference is containment, then a referene cannot be created if
47900 // 1. Multiple parents
47901 neg find mustContains4(problem,interpretation,source,_);
47902 // 2. Circle in the containment hierarchy
47903 neg find mustTransitiveContains(source,target);
47904} or {
47905 find mustInRelationePackage_reference_EClassifier(problem,interpretation,source,target);
47906}
47907/**
47908 * Matcher for detecting tuples t where []eTypeParameters reference EClassifier(source,target)
47909 */
47910private pattern mustInRelationeTypeParameters_reference_EClassifier(
47911 problem:LogicProblem, interpretation:PartialInterpretation,
47912 source: DefinedElement, target:DefinedElement)
47913{
47914 find interpretation(problem,interpretation);
47915 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
47916 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeParameters reference EClassifier");
47917 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
47918 BinaryElementRelationLink.param1(link,source);
47919 BinaryElementRelationLink.param2(link,target);
47920}
47921/**
47922 * Matcher for detecting tuples t where <>eTypeParameters reference EClassifier(source,target)
47923 */
47924private pattern mayInRelationeTypeParameters_reference_EClassifier(
47925 problem:LogicProblem, interpretation:PartialInterpretation,
47926 source: DefinedElement, target:DefinedElement)
47927{
47928 find interpretation(problem,interpretation);
47929 // The two endpoint of the link have to exist
47930 find mayExist(problem, interpretation, source);
47931 find mayExist(problem, interpretation, target);
47932 // Type consistency
47933 find mayInstanceOfEClassifier_class(problem,interpretation,source);
47934 find mayInstanceOfETypeParameter_class(problem,interpretation,target);
47935 // The reference is containment, then a new reference cannot be create if:
47936 // 1. Multiple parents
47937 neg find mustContains4(problem,interpretation,_,target);
47938 // 2. Circle in the containment hierarchy
47939 neg find mustTransitiveContains(source,target);
47940} or {
47941 find mustInRelationeTypeParameters_reference_EClassifier(problem,interpretation,source,target);
47942}
47943/**
47944 * Matcher for detecting tuples t where []eLiterals reference EEnum(source,target)
47945 */
47946private pattern mustInRelationeLiterals_reference_EEnum(
47947 problem:LogicProblem, interpretation:PartialInterpretation,
47948 source: DefinedElement, target:DefinedElement)
47949{
47950 find interpretation(problem,interpretation);
47951 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
47952 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eLiterals reference EEnum");
47953 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
47954 BinaryElementRelationLink.param1(link,source);
47955 BinaryElementRelationLink.param2(link,target);
47956}
47957/**
47958 * Matcher for detecting tuples t where <>eLiterals reference EEnum(source,target)
47959 */
47960private pattern mayInRelationeLiterals_reference_EEnum(
47961 problem:LogicProblem, interpretation:PartialInterpretation,
47962 source: DefinedElement, target:DefinedElement)
47963{
47964 find interpretation(problem,interpretation);
47965 // The two endpoint of the link have to exist
47966 find mayExist(problem, interpretation, source);
47967 find mayExist(problem, interpretation, target);
47968 // Type consistency
47969 find mayInstanceOfEEnum_class(problem,interpretation,source);
47970 find mayInstanceOfEEnumLiteral_class(problem,interpretation,target);
47971 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
47972 // the upper bound of the opposite reference multiplicity should be considered.
47973 numberOfExistingOppositeReferences == count find mustInRelationeEnum_reference_EEnumLiteral(problem,interpretation,target,_);
47974 check(numberOfExistingOppositeReferences < 1);
47975 // The reference is containment, then a new reference cannot be create if:
47976 // 1. Multiple parents
47977 neg find mustContains4(problem,interpretation,_,target);
47978 // 2. Circle in the containment hierarchy
47979 neg find mustTransitiveContains(source,target);
47980} or {
47981 find mustInRelationeLiterals_reference_EEnum(problem,interpretation,source,target);
47982}
47983/**
47984 * Matcher for detecting tuples t where []eEnum reference EEnumLiteral(source,target)
47985 */
47986private pattern mustInRelationeEnum_reference_EEnumLiteral(
47987 problem:LogicProblem, interpretation:PartialInterpretation,
47988 source: DefinedElement, target:DefinedElement)
47989{
47990 find interpretation(problem,interpretation);
47991 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
47992 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eEnum reference EEnumLiteral");
47993 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
47994 BinaryElementRelationLink.param1(link,source);
47995 BinaryElementRelationLink.param2(link,target);
47996}
47997/**
47998 * Matcher for detecting tuples t where <>eEnum reference EEnumLiteral(source,target)
47999 */
48000private pattern mayInRelationeEnum_reference_EEnumLiteral(
48001 problem:LogicProblem, interpretation:PartialInterpretation,
48002 source: DefinedElement, target:DefinedElement)
48003{
48004 find interpretation(problem,interpretation);
48005 // The two endpoint of the link have to exist
48006 find mayExist(problem, interpretation, source);
48007 find mayExist(problem, interpretation, target);
48008 // Type consistency
48009 find mayInstanceOfEEnumLiteral_class(problem,interpretation,source);
48010 find mayInstanceOfEEnum_class(problem,interpretation,target);
48011 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
48012 // the upper bound of the multiplicity should be considered.
48013 numberOfExistingReferences == count find mustInRelationeEnum_reference_EEnumLiteral(problem,interpretation,source,_);
48014 check(numberOfExistingReferences < 1);
48015 // The eOpposite of the reference is containment, then a referene cannot be created if
48016 // 1. Multiple parents
48017 neg find mustContains4(problem,interpretation,source,_);
48018 // 2. Circle in the containment hierarchy
48019 neg find mustTransitiveContains(source,target);
48020} or {
48021 find mustInRelationeEnum_reference_EEnumLiteral(problem,interpretation,source,target);
48022}
48023/**
48024 * Matcher for detecting tuples t where []eAnnotations reference EModelElement(source,target)
48025 */
48026private pattern mustInRelationeAnnotations_reference_EModelElement(
48027 problem:LogicProblem, interpretation:PartialInterpretation,
48028 source: DefinedElement, target:DefinedElement)
48029{
48030 find interpretation(problem,interpretation);
48031 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
48032 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAnnotations reference EModelElement");
48033 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
48034 BinaryElementRelationLink.param1(link,source);
48035 BinaryElementRelationLink.param2(link,target);
48036}
48037/**
48038 * Matcher for detecting tuples t where <>eAnnotations reference EModelElement(source,target)
48039 */
48040private pattern mayInRelationeAnnotations_reference_EModelElement(
48041 problem:LogicProblem, interpretation:PartialInterpretation,
48042 source: DefinedElement, target:DefinedElement)
48043{
48044 find interpretation(problem,interpretation);
48045 // The two endpoint of the link have to exist
48046 find mayExist(problem, interpretation, source);
48047 find mayExist(problem, interpretation, target);
48048 // Type consistency
48049 find mayInstanceOfEModelElement_class(problem,interpretation,source);
48050 find mayInstanceOfEAnnotation_class(problem,interpretation,target);
48051 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
48052 // the upper bound of the opposite reference multiplicity should be considered.
48053 numberOfExistingOppositeReferences == count find mustInRelationeModelElement_reference_EAnnotation(problem,interpretation,target,_);
48054 check(numberOfExistingOppositeReferences < 1);
48055 // The reference is containment, then a new reference cannot be create if:
48056 // 1. Multiple parents
48057 neg find mustContains4(problem,interpretation,_,target);
48058 // 2. Circle in the containment hierarchy
48059 neg find mustTransitiveContains(source,target);
48060} or {
48061 find mustInRelationeAnnotations_reference_EModelElement(problem,interpretation,source,target);
48062}
48063/**
48064 * Matcher for detecting tuples t where []eContainingClass reference EOperation(source,target)
48065 */
48066private pattern mustInRelationeContainingClass_reference_EOperation(
48067 problem:LogicProblem, interpretation:PartialInterpretation,
48068 source: DefinedElement, target:DefinedElement)
48069{
48070 find interpretation(problem,interpretation);
48071 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
48072 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eContainingClass reference EOperation");
48073 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
48074 BinaryElementRelationLink.param1(link,source);
48075 BinaryElementRelationLink.param2(link,target);
48076}
48077/**
48078 * Matcher for detecting tuples t where <>eContainingClass reference EOperation(source,target)
48079 */
48080private pattern mayInRelationeContainingClass_reference_EOperation(
48081 problem:LogicProblem, interpretation:PartialInterpretation,
48082 source: DefinedElement, target:DefinedElement)
48083{
48084 find interpretation(problem,interpretation);
48085 // The two endpoint of the link have to exist
48086 find mayExist(problem, interpretation, source);
48087 find mayExist(problem, interpretation, target);
48088 // Type consistency
48089 find mayInstanceOfEOperation_class(problem,interpretation,source);
48090 find mayInstanceOfEClass_class(problem,interpretation,target);
48091 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
48092 // the upper bound of the multiplicity should be considered.
48093 numberOfExistingReferences == count find mustInRelationeContainingClass_reference_EOperation(problem,interpretation,source,_);
48094 check(numberOfExistingReferences < 1);
48095 // The eOpposite of the reference is containment, then a referene cannot be created if
48096 // 1. Multiple parents
48097 neg find mustContains4(problem,interpretation,source,_);
48098 // 2. Circle in the containment hierarchy
48099 neg find mustTransitiveContains(source,target);
48100} or {
48101 find mustInRelationeContainingClass_reference_EOperation(problem,interpretation,source,target);
48102}
48103/**
48104 * Matcher for detecting tuples t where []eTypeParameters reference EOperation(source,target)
48105 */
48106private pattern mustInRelationeTypeParameters_reference_EOperation(
48107 problem:LogicProblem, interpretation:PartialInterpretation,
48108 source: DefinedElement, target:DefinedElement)
48109{
48110 find interpretation(problem,interpretation);
48111 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
48112 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeParameters reference EOperation");
48113 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
48114 BinaryElementRelationLink.param1(link,source);
48115 BinaryElementRelationLink.param2(link,target);
48116}
48117/**
48118 * Matcher for detecting tuples t where <>eTypeParameters reference EOperation(source,target)
48119 */
48120private pattern mayInRelationeTypeParameters_reference_EOperation(
48121 problem:LogicProblem, interpretation:PartialInterpretation,
48122 source: DefinedElement, target:DefinedElement)
48123{
48124 find interpretation(problem,interpretation);
48125 // The two endpoint of the link have to exist
48126 find mayExist(problem, interpretation, source);
48127 find mayExist(problem, interpretation, target);
48128 // Type consistency
48129 find mayInstanceOfEOperation_class(problem,interpretation,source);
48130 find mayInstanceOfETypeParameter_class(problem,interpretation,target);
48131 // The reference is containment, then a new reference cannot be create if:
48132 // 1. Multiple parents
48133 neg find mustContains4(problem,interpretation,_,target);
48134 // 2. Circle in the containment hierarchy
48135 neg find mustTransitiveContains(source,target);
48136} or {
48137 find mustInRelationeTypeParameters_reference_EOperation(problem,interpretation,source,target);
48138}
48139/**
48140 * Matcher for detecting tuples t where []eParameters reference EOperation(source,target)
48141 */
48142private pattern mustInRelationeParameters_reference_EOperation(
48143 problem:LogicProblem, interpretation:PartialInterpretation,
48144 source: DefinedElement, target:DefinedElement)
48145{
48146 find interpretation(problem,interpretation);
48147 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
48148 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eParameters reference EOperation");
48149 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
48150 BinaryElementRelationLink.param1(link,source);
48151 BinaryElementRelationLink.param2(link,target);
48152}
48153/**
48154 * Matcher for detecting tuples t where <>eParameters reference EOperation(source,target)
48155 */
48156private pattern mayInRelationeParameters_reference_EOperation(
48157 problem:LogicProblem, interpretation:PartialInterpretation,
48158 source: DefinedElement, target:DefinedElement)
48159{
48160 find interpretation(problem,interpretation);
48161 // The two endpoint of the link have to exist
48162 find mayExist(problem, interpretation, source);
48163 find mayExist(problem, interpretation, target);
48164 // Type consistency
48165 find mayInstanceOfEOperation_class(problem,interpretation,source);
48166 find mayInstanceOfEParameter_class(problem,interpretation,target);
48167 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
48168 // the upper bound of the opposite reference multiplicity should be considered.
48169 numberOfExistingOppositeReferences == count find mustInRelationeOperation_reference_EParameter(problem,interpretation,target,_);
48170 check(numberOfExistingOppositeReferences < 1);
48171 // The reference is containment, then a new reference cannot be create if:
48172 // 1. Multiple parents
48173 neg find mustContains4(problem,interpretation,_,target);
48174 // 2. Circle in the containment hierarchy
48175 neg find mustTransitiveContains(source,target);
48176} or {
48177 find mustInRelationeParameters_reference_EOperation(problem,interpretation,source,target);
48178}
48179/**
48180 * Matcher for detecting tuples t where []eExceptions reference EOperation(source,target)
48181 */
48182private pattern mustInRelationeExceptions_reference_EOperation(
48183 problem:LogicProblem, interpretation:PartialInterpretation,
48184 source: DefinedElement, target:DefinedElement)
48185{
48186 find interpretation(problem,interpretation);
48187 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
48188 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eExceptions reference EOperation");
48189 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
48190 BinaryElementRelationLink.param1(link,source);
48191 BinaryElementRelationLink.param2(link,target);
48192}
48193/**
48194 * Matcher for detecting tuples t where <>eExceptions reference EOperation(source,target)
48195 */
48196private pattern mayInRelationeExceptions_reference_EOperation(
48197 problem:LogicProblem, interpretation:PartialInterpretation,
48198 source: DefinedElement, target:DefinedElement)
48199{
48200 find interpretation(problem,interpretation);
48201 // The two endpoint of the link have to exist
48202 find mayExist(problem, interpretation, source);
48203 find mayExist(problem, interpretation, target);
48204 // Type consistency
48205 find mayInstanceOfEOperation_class(problem,interpretation,source);
48206 find mayInstanceOfEClassifier_class(problem,interpretation,target);
48207} or {
48208 find mustInRelationeExceptions_reference_EOperation(problem,interpretation,source,target);
48209}
48210/**
48211 * Matcher for detecting tuples t where []eGenericExceptions reference EOperation(source,target)
48212 */
48213private pattern mustInRelationeGenericExceptions_reference_EOperation(
48214 problem:LogicProblem, interpretation:PartialInterpretation,
48215 source: DefinedElement, target:DefinedElement)
48216{
48217 find interpretation(problem,interpretation);
48218 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
48219 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eGenericExceptions reference EOperation");
48220 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
48221 BinaryElementRelationLink.param1(link,source);
48222 BinaryElementRelationLink.param2(link,target);
48223}
48224/**
48225 * Matcher for detecting tuples t where <>eGenericExceptions reference EOperation(source,target)
48226 */
48227private pattern mayInRelationeGenericExceptions_reference_EOperation(
48228 problem:LogicProblem, interpretation:PartialInterpretation,
48229 source: DefinedElement, target:DefinedElement)
48230{
48231 find interpretation(problem,interpretation);
48232 // The two endpoint of the link have to exist
48233 find mayExist(problem, interpretation, source);
48234 find mayExist(problem, interpretation, target);
48235 // Type consistency
48236 find mayInstanceOfEOperation_class(problem,interpretation,source);
48237 find mayInstanceOfEGenericType_class(problem,interpretation,target);
48238 // The reference is containment, then a new reference cannot be create if:
48239 // 1. Multiple parents
48240 neg find mustContains4(problem,interpretation,_,target);
48241 // 2. Circle in the containment hierarchy
48242 neg find mustTransitiveContains(source,target);
48243} or {
48244 find mustInRelationeGenericExceptions_reference_EOperation(problem,interpretation,source,target);
48245}
48246/**
48247 * Matcher for detecting tuples t where []eClassifiers reference EPackage(source,target)
48248 */
48249private pattern mustInRelationeClassifiers_reference_EPackage(
48250 problem:LogicProblem, interpretation:PartialInterpretation,
48251 source: DefinedElement, target:DefinedElement)
48252{
48253 find interpretation(problem,interpretation);
48254 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
48255 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eClassifiers reference EPackage");
48256 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
48257 BinaryElementRelationLink.param1(link,source);
48258 BinaryElementRelationLink.param2(link,target);
48259}
48260/**
48261 * Matcher for detecting tuples t where <>eClassifiers reference EPackage(source,target)
48262 */
48263private pattern mayInRelationeClassifiers_reference_EPackage(
48264 problem:LogicProblem, interpretation:PartialInterpretation,
48265 source: DefinedElement, target:DefinedElement)
48266{
48267 find interpretation(problem,interpretation);
48268 // The two endpoint of the link have to exist
48269 find mayExist(problem, interpretation, source);
48270 find mayExist(problem, interpretation, target);
48271 // Type consistency
48272 find mayInstanceOfEPackage_class(problem,interpretation,source);
48273 find mayInstanceOfEClassifier_class(problem,interpretation,target);
48274 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
48275 // the upper bound of the opposite reference multiplicity should be considered.
48276 numberOfExistingOppositeReferences == count find mustInRelationePackage_reference_EClassifier(problem,interpretation,target,_);
48277 check(numberOfExistingOppositeReferences < 1);
48278 // The reference is containment, then a new reference cannot be create if:
48279 // 1. Multiple parents
48280 neg find mustContains4(problem,interpretation,_,target);
48281 // 2. Circle in the containment hierarchy
48282 neg find mustTransitiveContains(source,target);
48283} or {
48284 find mustInRelationeClassifiers_reference_EPackage(problem,interpretation,source,target);
48285}
48286/**
48287 * Matcher for detecting tuples t where []eSubpackages reference EPackage(source,target)
48288 */
48289private pattern mustInRelationeSubpackages_reference_EPackage(
48290 problem:LogicProblem, interpretation:PartialInterpretation,
48291 source: DefinedElement, target:DefinedElement)
48292{
48293 find interpretation(problem,interpretation);
48294 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
48295 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eSubpackages reference EPackage");
48296 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
48297 BinaryElementRelationLink.param1(link,source);
48298 BinaryElementRelationLink.param2(link,target);
48299}
48300/**
48301 * Matcher for detecting tuples t where <>eSubpackages reference EPackage(source,target)
48302 */
48303private pattern mayInRelationeSubpackages_reference_EPackage(
48304 problem:LogicProblem, interpretation:PartialInterpretation,
48305 source: DefinedElement, target:DefinedElement)
48306{
48307 find interpretation(problem,interpretation);
48308 // The two endpoint of the link have to exist
48309 find mayExist(problem, interpretation, source);
48310 find mayExist(problem, interpretation, target);
48311 // Type consistency
48312 find mayInstanceOfEPackage_class(problem,interpretation,source);
48313 find mayInstanceOfEPackage_class(problem,interpretation,target);
48314 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
48315 // the upper bound of the opposite reference multiplicity should be considered.
48316 numberOfExistingOppositeReferences == count find mustInRelationeSuperPackage_reference_EPackage(problem,interpretation,target,_);
48317 check(numberOfExistingOppositeReferences < 1);
48318 // The reference is containment, then a new reference cannot be create if:
48319 // 1. Multiple parents
48320 neg find mustContains4(problem,interpretation,_,target);
48321 // 2. Circle in the containment hierarchy
48322 neg find mustTransitiveContains(source,target);
48323} or {
48324 find mustInRelationeSubpackages_reference_EPackage(problem,interpretation,source,target);
48325}
48326/**
48327 * Matcher for detecting tuples t where []eSuperPackage reference EPackage(source,target)
48328 */
48329private pattern mustInRelationeSuperPackage_reference_EPackage(
48330 problem:LogicProblem, interpretation:PartialInterpretation,
48331 source: DefinedElement, target:DefinedElement)
48332{
48333 find interpretation(problem,interpretation);
48334 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
48335 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eSuperPackage reference EPackage");
48336 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
48337 BinaryElementRelationLink.param1(link,source);
48338 BinaryElementRelationLink.param2(link,target);
48339}
48340/**
48341 * Matcher for detecting tuples t where <>eSuperPackage reference EPackage(source,target)
48342 */
48343private pattern mayInRelationeSuperPackage_reference_EPackage(
48344 problem:LogicProblem, interpretation:PartialInterpretation,
48345 source: DefinedElement, target:DefinedElement)
48346{
48347 find interpretation(problem,interpretation);
48348 // The two endpoint of the link have to exist
48349 find mayExist(problem, interpretation, source);
48350 find mayExist(problem, interpretation, target);
48351 // Type consistency
48352 find mayInstanceOfEPackage_class(problem,interpretation,source);
48353 find mayInstanceOfEPackage_class(problem,interpretation,target);
48354 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
48355 // the upper bound of the multiplicity should be considered.
48356 numberOfExistingReferences == count find mustInRelationeSuperPackage_reference_EPackage(problem,interpretation,source,_);
48357 check(numberOfExistingReferences < 1);
48358 // The eOpposite of the reference is containment, then a referene cannot be created if
48359 // 1. Multiple parents
48360 neg find mustContains4(problem,interpretation,source,_);
48361 // 2. Circle in the containment hierarchy
48362 neg find mustTransitiveContains(source,target);
48363} or {
48364 find mustInRelationeSuperPackage_reference_EPackage(problem,interpretation,source,target);
48365}
48366/**
48367 * Matcher for detecting tuples t where []eOperation reference EParameter(source,target)
48368 */
48369private pattern mustInRelationeOperation_reference_EParameter(
48370 problem:LogicProblem, interpretation:PartialInterpretation,
48371 source: DefinedElement, target:DefinedElement)
48372{
48373 find interpretation(problem,interpretation);
48374 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
48375 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eOperation reference EParameter");
48376 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
48377 BinaryElementRelationLink.param1(link,source);
48378 BinaryElementRelationLink.param2(link,target);
48379}
48380/**
48381 * Matcher for detecting tuples t where <>eOperation reference EParameter(source,target)
48382 */
48383private pattern mayInRelationeOperation_reference_EParameter(
48384 problem:LogicProblem, interpretation:PartialInterpretation,
48385 source: DefinedElement, target:DefinedElement)
48386{
48387 find interpretation(problem,interpretation);
48388 // The two endpoint of the link have to exist
48389 find mayExist(problem, interpretation, source);
48390 find mayExist(problem, interpretation, target);
48391 // Type consistency
48392 find mayInstanceOfEParameter_class(problem,interpretation,source);
48393 find mayInstanceOfEOperation_class(problem,interpretation,target);
48394 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
48395 // the upper bound of the multiplicity should be considered.
48396 numberOfExistingReferences == count find mustInRelationeOperation_reference_EParameter(problem,interpretation,source,_);
48397 check(numberOfExistingReferences < 1);
48398 // The eOpposite of the reference is containment, then a referene cannot be created if
48399 // 1. Multiple parents
48400 neg find mustContains4(problem,interpretation,source,_);
48401 // 2. Circle in the containment hierarchy
48402 neg find mustTransitiveContains(source,target);
48403} or {
48404 find mustInRelationeOperation_reference_EParameter(problem,interpretation,source,target);
48405}
48406/**
48407 * Matcher for detecting tuples t where []eOpposite reference EReference(source,target)
48408 */
48409private pattern mustInRelationeOpposite_reference_EReference(
48410 problem:LogicProblem, interpretation:PartialInterpretation,
48411 source: DefinedElement, target:DefinedElement)
48412{
48413 find interpretation(problem,interpretation);
48414 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
48415 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eOpposite reference EReference");
48416 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
48417 BinaryElementRelationLink.param1(link,source);
48418 BinaryElementRelationLink.param2(link,target);
48419}
48420/**
48421 * Matcher for detecting tuples t where <>eOpposite reference EReference(source,target)
48422 */
48423private pattern mayInRelationeOpposite_reference_EReference(
48424 problem:LogicProblem, interpretation:PartialInterpretation,
48425 source: DefinedElement, target:DefinedElement)
48426{
48427 find interpretation(problem,interpretation);
48428 // The two endpoint of the link have to exist
48429 find mayExist(problem, interpretation, source);
48430 find mayExist(problem, interpretation, target);
48431 // Type consistency
48432 find mayInstanceOfEReference_class(problem,interpretation,source);
48433 find mayInstanceOfEReference_class(problem,interpretation,target);
48434 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
48435 // the upper bound of the multiplicity should be considered.
48436 numberOfExistingReferences == count find mustInRelationeOpposite_reference_EReference(problem,interpretation,source,_);
48437 check(numberOfExistingReferences < 1);
48438} or {
48439 find mustInRelationeOpposite_reference_EReference(problem,interpretation,source,target);
48440}
48441/**
48442 * Matcher for detecting tuples t where []eReferenceType reference EReference(source,target)
48443 */
48444private pattern mustInRelationeReferenceType_reference_EReference(
48445 problem:LogicProblem, interpretation:PartialInterpretation,
48446 source: DefinedElement, target:DefinedElement)
48447{
48448 find interpretation(problem,interpretation);
48449 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
48450 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferenceType reference EReference");
48451 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
48452 BinaryElementRelationLink.param1(link,source);
48453 BinaryElementRelationLink.param2(link,target);
48454}
48455/**
48456 * Matcher for detecting tuples t where <>eReferenceType reference EReference(source,target)
48457 */
48458private pattern mayInRelationeReferenceType_reference_EReference(
48459 problem:LogicProblem, interpretation:PartialInterpretation,
48460 source: DefinedElement, target:DefinedElement)
48461{
48462 find interpretation(problem,interpretation);
48463 // The two endpoint of the link have to exist
48464 find mayExist(problem, interpretation, source);
48465 find mayExist(problem, interpretation, target);
48466 // Type consistency
48467 find mayInstanceOfEReference_class(problem,interpretation,source);
48468 find mayInstanceOfEClass_class(problem,interpretation,target);
48469 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
48470 // the upper bound of the multiplicity should be considered.
48471 numberOfExistingReferences == count find mustInRelationeReferenceType_reference_EReference(problem,interpretation,source,_);
48472 check(numberOfExistingReferences < 1);
48473} or {
48474 find mustInRelationeReferenceType_reference_EReference(problem,interpretation,source,target);
48475}
48476/**
48477 * Matcher for detecting tuples t where []eKeys reference EReference(source,target)
48478 */
48479private pattern mustInRelationeKeys_reference_EReference(
48480 problem:LogicProblem, interpretation:PartialInterpretation,
48481 source: DefinedElement, target:DefinedElement)
48482{
48483 find interpretation(problem,interpretation);
48484 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
48485 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eKeys reference EReference");
48486 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
48487 BinaryElementRelationLink.param1(link,source);
48488 BinaryElementRelationLink.param2(link,target);
48489}
48490/**
48491 * Matcher for detecting tuples t where <>eKeys reference EReference(source,target)
48492 */
48493private pattern mayInRelationeKeys_reference_EReference(
48494 problem:LogicProblem, interpretation:PartialInterpretation,
48495 source: DefinedElement, target:DefinedElement)
48496{
48497 find interpretation(problem,interpretation);
48498 // The two endpoint of the link have to exist
48499 find mayExist(problem, interpretation, source);
48500 find mayExist(problem, interpretation, target);
48501 // Type consistency
48502 find mayInstanceOfEReference_class(problem,interpretation,source);
48503 find mayInstanceOfEAttribute_class(problem,interpretation,target);
48504} or {
48505 find mustInRelationeKeys_reference_EReference(problem,interpretation,source,target);
48506}
48507/**
48508 * Matcher for detecting tuples t where []eContainingClass reference EStructuralFeature(source,target)
48509 */
48510private pattern mustInRelationeContainingClass_reference_EStructuralFeature(
48511 problem:LogicProblem, interpretation:PartialInterpretation,
48512 source: DefinedElement, target:DefinedElement)
48513{
48514 find interpretation(problem,interpretation);
48515 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
48516 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eContainingClass reference EStructuralFeature");
48517 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
48518 BinaryElementRelationLink.param1(link,source);
48519 BinaryElementRelationLink.param2(link,target);
48520}
48521/**
48522 * Matcher for detecting tuples t where <>eContainingClass reference EStructuralFeature(source,target)
48523 */
48524private pattern mayInRelationeContainingClass_reference_EStructuralFeature(
48525 problem:LogicProblem, interpretation:PartialInterpretation,
48526 source: DefinedElement, target:DefinedElement)
48527{
48528 find interpretation(problem,interpretation);
48529 // The two endpoint of the link have to exist
48530 find mayExist(problem, interpretation, source);
48531 find mayExist(problem, interpretation, target);
48532 // Type consistency
48533 find mayInstanceOfEStructuralFeature_class(problem,interpretation,source);
48534 find mayInstanceOfEClass_class(problem,interpretation,target);
48535 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
48536 // the upper bound of the multiplicity should be considered.
48537 numberOfExistingReferences == count find mustInRelationeContainingClass_reference_EStructuralFeature(problem,interpretation,source,_);
48538 check(numberOfExistingReferences < 1);
48539 // The eOpposite of the reference is containment, then a referene cannot be created if
48540 // 1. Multiple parents
48541 neg find mustContains4(problem,interpretation,source,_);
48542 // 2. Circle in the containment hierarchy
48543 neg find mustTransitiveContains(source,target);
48544} or {
48545 find mustInRelationeContainingClass_reference_EStructuralFeature(problem,interpretation,source,target);
48546}
48547/**
48548 * Matcher for detecting tuples t where []eType reference ETypedElement(source,target)
48549 */
48550private pattern mustInRelationeType_reference_ETypedElement(
48551 problem:LogicProblem, interpretation:PartialInterpretation,
48552 source: DefinedElement, target:DefinedElement)
48553{
48554 find interpretation(problem,interpretation);
48555 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
48556 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eType reference ETypedElement");
48557 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
48558 BinaryElementRelationLink.param1(link,source);
48559 BinaryElementRelationLink.param2(link,target);
48560}
48561/**
48562 * Matcher for detecting tuples t where <>eType reference ETypedElement(source,target)
48563 */
48564private pattern mayInRelationeType_reference_ETypedElement(
48565 problem:LogicProblem, interpretation:PartialInterpretation,
48566 source: DefinedElement, target:DefinedElement)
48567{
48568 find interpretation(problem,interpretation);
48569 // The two endpoint of the link have to exist
48570 find mayExist(problem, interpretation, source);
48571 find mayExist(problem, interpretation, target);
48572 // Type consistency
48573 find mayInstanceOfETypedElement_class(problem,interpretation,source);
48574 find mayInstanceOfEClassifier_class(problem,interpretation,target);
48575 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
48576 // the upper bound of the multiplicity should be considered.
48577 numberOfExistingReferences == count find mustInRelationeType_reference_ETypedElement(problem,interpretation,source,_);
48578 check(numberOfExistingReferences < 1);
48579} or {
48580 find mustInRelationeType_reference_ETypedElement(problem,interpretation,source,target);
48581}
48582/**
48583 * Matcher for detecting tuples t where []eGenericType reference ETypedElement(source,target)
48584 */
48585private pattern mustInRelationeGenericType_reference_ETypedElement(
48586 problem:LogicProblem, interpretation:PartialInterpretation,
48587 source: DefinedElement, target:DefinedElement)
48588{
48589 find interpretation(problem,interpretation);
48590 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
48591 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eGenericType reference ETypedElement");
48592 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
48593 BinaryElementRelationLink.param1(link,source);
48594 BinaryElementRelationLink.param2(link,target);
48595}
48596/**
48597 * Matcher for detecting tuples t where <>eGenericType reference ETypedElement(source,target)
48598 */
48599private pattern mayInRelationeGenericType_reference_ETypedElement(
48600 problem:LogicProblem, interpretation:PartialInterpretation,
48601 source: DefinedElement, target:DefinedElement)
48602{
48603 find interpretation(problem,interpretation);
48604 // The two endpoint of the link have to exist
48605 find mayExist(problem, interpretation, source);
48606 find mayExist(problem, interpretation, target);
48607 // Type consistency
48608 find mayInstanceOfETypedElement_class(problem,interpretation,source);
48609 find mayInstanceOfEGenericType_class(problem,interpretation,target);
48610 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
48611 // the upper bound of the multiplicity should be considered.
48612 numberOfExistingReferences == count find mustInRelationeGenericType_reference_ETypedElement(problem,interpretation,source,_);
48613 check(numberOfExistingReferences < 1);
48614 // The reference is containment, then a new reference cannot be create if:
48615 // 1. Multiple parents
48616 neg find mustContains4(problem,interpretation,_,target);
48617 // 2. Circle in the containment hierarchy
48618 neg find mustTransitiveContains(source,target);
48619} or {
48620 find mustInRelationeGenericType_reference_ETypedElement(problem,interpretation,source,target);
48621}
48622/**
48623 * Matcher for detecting tuples t where []eUpperBound reference EGenericType(source,target)
48624 */
48625private pattern mustInRelationeUpperBound_reference_EGenericType(
48626 problem:LogicProblem, interpretation:PartialInterpretation,
48627 source: DefinedElement, target:DefinedElement)
48628{
48629 find interpretation(problem,interpretation);
48630 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
48631 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eUpperBound reference EGenericType");
48632 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
48633 BinaryElementRelationLink.param1(link,source);
48634 BinaryElementRelationLink.param2(link,target);
48635}
48636/**
48637 * Matcher for detecting tuples t where <>eUpperBound reference EGenericType(source,target)
48638 */
48639private pattern mayInRelationeUpperBound_reference_EGenericType(
48640 problem:LogicProblem, interpretation:PartialInterpretation,
48641 source: DefinedElement, target:DefinedElement)
48642{
48643 find interpretation(problem,interpretation);
48644 // The two endpoint of the link have to exist
48645 find mayExist(problem, interpretation, source);
48646 find mayExist(problem, interpretation, target);
48647 // Type consistency
48648 find mayInstanceOfEGenericType_class(problem,interpretation,source);
48649 find mayInstanceOfEGenericType_class(problem,interpretation,target);
48650 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
48651 // the upper bound of the multiplicity should be considered.
48652 numberOfExistingReferences == count find mustInRelationeUpperBound_reference_EGenericType(problem,interpretation,source,_);
48653 check(numberOfExistingReferences < 1);
48654 // The reference is containment, then a new reference cannot be create if:
48655 // 1. Multiple parents
48656 neg find mustContains4(problem,interpretation,_,target);
48657 // 2. Circle in the containment hierarchy
48658 neg find mustTransitiveContains(source,target);
48659} or {
48660 find mustInRelationeUpperBound_reference_EGenericType(problem,interpretation,source,target);
48661}
48662/**
48663 * Matcher for detecting tuples t where []eTypeArguments reference EGenericType(source,target)
48664 */
48665private pattern mustInRelationeTypeArguments_reference_EGenericType(
48666 problem:LogicProblem, interpretation:PartialInterpretation,
48667 source: DefinedElement, target:DefinedElement)
48668{
48669 find interpretation(problem,interpretation);
48670 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
48671 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeArguments reference EGenericType");
48672 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
48673 BinaryElementRelationLink.param1(link,source);
48674 BinaryElementRelationLink.param2(link,target);
48675}
48676/**
48677 * Matcher for detecting tuples t where <>eTypeArguments reference EGenericType(source,target)
48678 */
48679private pattern mayInRelationeTypeArguments_reference_EGenericType(
48680 problem:LogicProblem, interpretation:PartialInterpretation,
48681 source: DefinedElement, target:DefinedElement)
48682{
48683 find interpretation(problem,interpretation);
48684 // The two endpoint of the link have to exist
48685 find mayExist(problem, interpretation, source);
48686 find mayExist(problem, interpretation, target);
48687 // Type consistency
48688 find mayInstanceOfEGenericType_class(problem,interpretation,source);
48689 find mayInstanceOfEGenericType_class(problem,interpretation,target);
48690 // The reference is containment, then a new reference cannot be create if:
48691 // 1. Multiple parents
48692 neg find mustContains4(problem,interpretation,_,target);
48693 // 2. Circle in the containment hierarchy
48694 neg find mustTransitiveContains(source,target);
48695} or {
48696 find mustInRelationeTypeArguments_reference_EGenericType(problem,interpretation,source,target);
48697}
48698/**
48699 * Matcher for detecting tuples t where []eRawType reference EGenericType(source,target)
48700 */
48701private pattern mustInRelationeRawType_reference_EGenericType(
48702 problem:LogicProblem, interpretation:PartialInterpretation,
48703 source: DefinedElement, target:DefinedElement)
48704{
48705 find interpretation(problem,interpretation);
48706 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
48707 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eRawType reference EGenericType");
48708 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
48709 BinaryElementRelationLink.param1(link,source);
48710 BinaryElementRelationLink.param2(link,target);
48711}
48712/**
48713 * Matcher for detecting tuples t where <>eRawType reference EGenericType(source,target)
48714 */
48715private pattern mayInRelationeRawType_reference_EGenericType(
48716 problem:LogicProblem, interpretation:PartialInterpretation,
48717 source: DefinedElement, target:DefinedElement)
48718{
48719 find interpretation(problem,interpretation);
48720 // The two endpoint of the link have to exist
48721 find mayExist(problem, interpretation, source);
48722 find mayExist(problem, interpretation, target);
48723 // Type consistency
48724 find mayInstanceOfEGenericType_class(problem,interpretation,source);
48725 find mayInstanceOfEClassifier_class(problem,interpretation,target);
48726 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
48727 // the upper bound of the multiplicity should be considered.
48728 numberOfExistingReferences == count find mustInRelationeRawType_reference_EGenericType(problem,interpretation,source,_);
48729 check(numberOfExistingReferences < 1);
48730} or {
48731 find mustInRelationeRawType_reference_EGenericType(problem,interpretation,source,target);
48732}
48733/**
48734 * Matcher for detecting tuples t where []eLowerBound reference EGenericType(source,target)
48735 */
48736private pattern mustInRelationeLowerBound_reference_EGenericType(
48737 problem:LogicProblem, interpretation:PartialInterpretation,
48738 source: DefinedElement, target:DefinedElement)
48739{
48740 find interpretation(problem,interpretation);
48741 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
48742 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eLowerBound reference EGenericType");
48743 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
48744 BinaryElementRelationLink.param1(link,source);
48745 BinaryElementRelationLink.param2(link,target);
48746}
48747/**
48748 * Matcher for detecting tuples t where <>eLowerBound reference EGenericType(source,target)
48749 */
48750private pattern mayInRelationeLowerBound_reference_EGenericType(
48751 problem:LogicProblem, interpretation:PartialInterpretation,
48752 source: DefinedElement, target:DefinedElement)
48753{
48754 find interpretation(problem,interpretation);
48755 // The two endpoint of the link have to exist
48756 find mayExist(problem, interpretation, source);
48757 find mayExist(problem, interpretation, target);
48758 // Type consistency
48759 find mayInstanceOfEGenericType_class(problem,interpretation,source);
48760 find mayInstanceOfEGenericType_class(problem,interpretation,target);
48761 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
48762 // the upper bound of the multiplicity should be considered.
48763 numberOfExistingReferences == count find mustInRelationeLowerBound_reference_EGenericType(problem,interpretation,source,_);
48764 check(numberOfExistingReferences < 1);
48765 // The reference is containment, then a new reference cannot be create if:
48766 // 1. Multiple parents
48767 neg find mustContains4(problem,interpretation,_,target);
48768 // 2. Circle in the containment hierarchy
48769 neg find mustTransitiveContains(source,target);
48770} or {
48771 find mustInRelationeLowerBound_reference_EGenericType(problem,interpretation,source,target);
48772}
48773/**
48774 * Matcher for detecting tuples t where []eTypeParameter reference EGenericType(source,target)
48775 */
48776private pattern mustInRelationeTypeParameter_reference_EGenericType(
48777 problem:LogicProblem, interpretation:PartialInterpretation,
48778 source: DefinedElement, target:DefinedElement)
48779{
48780 find interpretation(problem,interpretation);
48781 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
48782 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeParameter reference EGenericType");
48783 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
48784 BinaryElementRelationLink.param1(link,source);
48785 BinaryElementRelationLink.param2(link,target);
48786}
48787/**
48788 * Matcher for detecting tuples t where <>eTypeParameter reference EGenericType(source,target)
48789 */
48790private pattern mayInRelationeTypeParameter_reference_EGenericType(
48791 problem:LogicProblem, interpretation:PartialInterpretation,
48792 source: DefinedElement, target:DefinedElement)
48793{
48794 find interpretation(problem,interpretation);
48795 // The two endpoint of the link have to exist
48796 find mayExist(problem, interpretation, source);
48797 find mayExist(problem, interpretation, target);
48798 // Type consistency
48799 find mayInstanceOfEGenericType_class(problem,interpretation,source);
48800 find mayInstanceOfETypeParameter_class(problem,interpretation,target);
48801 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
48802 // the upper bound of the multiplicity should be considered.
48803 numberOfExistingReferences == count find mustInRelationeTypeParameter_reference_EGenericType(problem,interpretation,source,_);
48804 check(numberOfExistingReferences < 1);
48805} or {
48806 find mustInRelationeTypeParameter_reference_EGenericType(problem,interpretation,source,target);
48807}
48808/**
48809 * Matcher for detecting tuples t where []eClassifier reference EGenericType(source,target)
48810 */
48811private pattern mustInRelationeClassifier_reference_EGenericType(
48812 problem:LogicProblem, interpretation:PartialInterpretation,
48813 source: DefinedElement, target:DefinedElement)
48814{
48815 find interpretation(problem,interpretation);
48816 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
48817 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eClassifier reference EGenericType");
48818 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
48819 BinaryElementRelationLink.param1(link,source);
48820 BinaryElementRelationLink.param2(link,target);
48821}
48822/**
48823 * Matcher for detecting tuples t where <>eClassifier reference EGenericType(source,target)
48824 */
48825private pattern mayInRelationeClassifier_reference_EGenericType(
48826 problem:LogicProblem, interpretation:PartialInterpretation,
48827 source: DefinedElement, target:DefinedElement)
48828{
48829 find interpretation(problem,interpretation);
48830 // The two endpoint of the link have to exist
48831 find mayExist(problem, interpretation, source);
48832 find mayExist(problem, interpretation, target);
48833 // Type consistency
48834 find mayInstanceOfEGenericType_class(problem,interpretation,source);
48835 find mayInstanceOfEClassifier_class(problem,interpretation,target);
48836 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
48837 // the upper bound of the multiplicity should be considered.
48838 numberOfExistingReferences == count find mustInRelationeClassifier_reference_EGenericType(problem,interpretation,source,_);
48839 check(numberOfExistingReferences < 1);
48840} or {
48841 find mustInRelationeClassifier_reference_EGenericType(problem,interpretation,source,target);
48842}
48843/**
48844 * Matcher for detecting tuples t where []eBounds reference ETypeParameter(source,target)
48845 */
48846private pattern mustInRelationeBounds_reference_ETypeParameter(
48847 problem:LogicProblem, interpretation:PartialInterpretation,
48848 source: DefinedElement, target:DefinedElement)
48849{
48850 find interpretation(problem,interpretation);
48851 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
48852 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eBounds reference ETypeParameter");
48853 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
48854 BinaryElementRelationLink.param1(link,source);
48855 BinaryElementRelationLink.param2(link,target);
48856}
48857/**
48858 * Matcher for detecting tuples t where <>eBounds reference ETypeParameter(source,target)
48859 */
48860private pattern mayInRelationeBounds_reference_ETypeParameter(
48861 problem:LogicProblem, interpretation:PartialInterpretation,
48862 source: DefinedElement, target:DefinedElement)
48863{
48864 find interpretation(problem,interpretation);
48865 // The two endpoint of the link have to exist
48866 find mayExist(problem, interpretation, source);
48867 find mayExist(problem, interpretation, target);
48868 // Type consistency
48869 find mayInstanceOfETypeParameter_class(problem,interpretation,source);
48870 find mayInstanceOfEGenericType_class(problem,interpretation,target);
48871 // The reference is containment, then a new reference cannot be create if:
48872 // 1. Multiple parents
48873 neg find mustContains4(problem,interpretation,_,target);
48874 // 2. Circle in the containment hierarchy
48875 neg find mustTransitiveContains(source,target);
48876} or {
48877 find mustInRelationeBounds_reference_ETypeParameter(problem,interpretation,source,target);
48878}
48879/**
48880 * Matcher for detecting tuples t where []iD attribute EAttribute(source,target)
48881 */
48882private pattern mustInRelationiD_attribute_EAttribute(
48883 problem:LogicProblem, interpretation:PartialInterpretation,
48884 source: DefinedElement, target:DefinedElement)
48885{
48886 find interpretation(problem,interpretation);
48887 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
48888 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"iD attribute EAttribute");
48889 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
48890 BinaryElementRelationLink.param1(link,source);
48891 BinaryElementRelationLink.param2(link,target);
48892}
48893/**
48894 * Matcher for detecting tuples t where <>iD attribute EAttribute(source,target)
48895 */
48896private pattern mayInRelationiD_attribute_EAttribute(
48897 problem:LogicProblem, interpretation:PartialInterpretation,
48898 source: DefinedElement, target:DefinedElement)
48899{
48900 find interpretation(problem,interpretation);
48901 // The two endpoint of the link have to exist
48902 find mayExist(problem, interpretation, source);
48903 find mayExist(problem, interpretation, target);
48904 // Type consistency
48905 find mayInstanceOfEAttribute_class(problem,interpretation,source);
48906 BooleanElement(target);
48907 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
48908 // the upper bound of the multiplicity should be considered.
48909 numberOfExistingReferences == count find mustInRelationiD_attribute_EAttribute(problem,interpretation,source,_);
48910 check(numberOfExistingReferences < 1);
48911} or {
48912 find mustInRelationiD_attribute_EAttribute(problem,interpretation,source,target);
48913}
48914/**
48915 * Matcher for detecting tuples t where []source attribute EAnnotation(source,target)
48916 */
48917private pattern mustInRelationsource_attribute_EAnnotation(
48918 problem:LogicProblem, interpretation:PartialInterpretation,
48919 source: DefinedElement, target:DefinedElement)
48920{
48921 find interpretation(problem,interpretation);
48922 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
48923 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"source attribute EAnnotation");
48924 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
48925 BinaryElementRelationLink.param1(link,source);
48926 BinaryElementRelationLink.param2(link,target);
48927}
48928/**
48929 * Matcher for detecting tuples t where <>source attribute EAnnotation(source,target)
48930 */
48931private pattern mayInRelationsource_attribute_EAnnotation(
48932 problem:LogicProblem, interpretation:PartialInterpretation,
48933 source: DefinedElement, target:DefinedElement)
48934{
48935 find interpretation(problem,interpretation);
48936 // The two endpoint of the link have to exist
48937 find mayExist(problem, interpretation, source);
48938 find mayExist(problem, interpretation, target);
48939 // Type consistency
48940 find mayInstanceOfEAnnotation_class(problem,interpretation,source);
48941 StringElement(target);
48942 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
48943 // the upper bound of the multiplicity should be considered.
48944 numberOfExistingReferences == count find mustInRelationsource_attribute_EAnnotation(problem,interpretation,source,_);
48945 check(numberOfExistingReferences < 1);
48946} or {
48947 find mustInRelationsource_attribute_EAnnotation(problem,interpretation,source,target);
48948}
48949/**
48950 * Matcher for detecting tuples t where []abstract attribute EClass(source,target)
48951 */
48952private pattern mustInRelationabstract_attribute_EClass(
48953 problem:LogicProblem, interpretation:PartialInterpretation,
48954 source: DefinedElement, target:DefinedElement)
48955{
48956 find interpretation(problem,interpretation);
48957 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
48958 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"abstract attribute EClass");
48959 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
48960 BinaryElementRelationLink.param1(link,source);
48961 BinaryElementRelationLink.param2(link,target);
48962}
48963/**
48964 * Matcher for detecting tuples t where <>abstract attribute EClass(source,target)
48965 */
48966private pattern mayInRelationabstract_attribute_EClass(
48967 problem:LogicProblem, interpretation:PartialInterpretation,
48968 source: DefinedElement, target:DefinedElement)
48969{
48970 find interpretation(problem,interpretation);
48971 // The two endpoint of the link have to exist
48972 find mayExist(problem, interpretation, source);
48973 find mayExist(problem, interpretation, target);
48974 // Type consistency
48975 find mayInstanceOfEClass_class(problem,interpretation,source);
48976 BooleanElement(target);
48977 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
48978 // the upper bound of the multiplicity should be considered.
48979 numberOfExistingReferences == count find mustInRelationabstract_attribute_EClass(problem,interpretation,source,_);
48980 check(numberOfExistingReferences < 1);
48981} or {
48982 find mustInRelationabstract_attribute_EClass(problem,interpretation,source,target);
48983}
48984/**
48985 * Matcher for detecting tuples t where []interface attribute EClass(source,target)
48986 */
48987private pattern mustInRelationinterface_attribute_EClass(
48988 problem:LogicProblem, interpretation:PartialInterpretation,
48989 source: DefinedElement, target:DefinedElement)
48990{
48991 find interpretation(problem,interpretation);
48992 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
48993 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface attribute EClass");
48994 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
48995 BinaryElementRelationLink.param1(link,source);
48996 BinaryElementRelationLink.param2(link,target);
48997}
48998/**
48999 * Matcher for detecting tuples t where <>interface attribute EClass(source,target)
49000 */
49001private pattern mayInRelationinterface_attribute_EClass(
49002 problem:LogicProblem, interpretation:PartialInterpretation,
49003 source: DefinedElement, target:DefinedElement)
49004{
49005 find interpretation(problem,interpretation);
49006 // The two endpoint of the link have to exist
49007 find mayExist(problem, interpretation, source);
49008 find mayExist(problem, interpretation, target);
49009 // Type consistency
49010 find mayInstanceOfEClass_class(problem,interpretation,source);
49011 BooleanElement(target);
49012 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
49013 // the upper bound of the multiplicity should be considered.
49014 numberOfExistingReferences == count find mustInRelationinterface_attribute_EClass(problem,interpretation,source,_);
49015 check(numberOfExistingReferences < 1);
49016} or {
49017 find mustInRelationinterface_attribute_EClass(problem,interpretation,source,target);
49018}
49019/**
49020 * Matcher for detecting tuples t where []instanceClassName attribute EClassifier(source,target)
49021 */
49022private pattern mustInRelationinstanceClassName_attribute_EClassifier(
49023 problem:LogicProblem, interpretation:PartialInterpretation,
49024 source: DefinedElement, target:DefinedElement)
49025{
49026 find interpretation(problem,interpretation);
49027 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
49028 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"instanceClassName attribute EClassifier");
49029 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
49030 BinaryElementRelationLink.param1(link,source);
49031 BinaryElementRelationLink.param2(link,target);
49032}
49033/**
49034 * Matcher for detecting tuples t where <>instanceClassName attribute EClassifier(source,target)
49035 */
49036private pattern mayInRelationinstanceClassName_attribute_EClassifier(
49037 problem:LogicProblem, interpretation:PartialInterpretation,
49038 source: DefinedElement, target:DefinedElement)
49039{
49040 find interpretation(problem,interpretation);
49041 // The two endpoint of the link have to exist
49042 find mayExist(problem, interpretation, source);
49043 find mayExist(problem, interpretation, target);
49044 // Type consistency
49045 find mayInstanceOfEClassifier_class(problem,interpretation,source);
49046 StringElement(target);
49047 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
49048 // the upper bound of the multiplicity should be considered.
49049 numberOfExistingReferences == count find mustInRelationinstanceClassName_attribute_EClassifier(problem,interpretation,source,_);
49050 check(numberOfExistingReferences < 1);
49051} or {
49052 find mustInRelationinstanceClassName_attribute_EClassifier(problem,interpretation,source,target);
49053}
49054/**
49055 * Matcher for detecting tuples t where []instanceTypeName attribute EClassifier(source,target)
49056 */
49057private pattern mustInRelationinstanceTypeName_attribute_EClassifier(
49058 problem:LogicProblem, interpretation:PartialInterpretation,
49059 source: DefinedElement, target:DefinedElement)
49060{
49061 find interpretation(problem,interpretation);
49062 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
49063 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"instanceTypeName attribute EClassifier");
49064 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
49065 BinaryElementRelationLink.param1(link,source);
49066 BinaryElementRelationLink.param2(link,target);
49067}
49068/**
49069 * Matcher for detecting tuples t where <>instanceTypeName attribute EClassifier(source,target)
49070 */
49071private pattern mayInRelationinstanceTypeName_attribute_EClassifier(
49072 problem:LogicProblem, interpretation:PartialInterpretation,
49073 source: DefinedElement, target:DefinedElement)
49074{
49075 find interpretation(problem,interpretation);
49076 // The two endpoint of the link have to exist
49077 find mayExist(problem, interpretation, source);
49078 find mayExist(problem, interpretation, target);
49079 // Type consistency
49080 find mayInstanceOfEClassifier_class(problem,interpretation,source);
49081 StringElement(target);
49082 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
49083 // the upper bound of the multiplicity should be considered.
49084 numberOfExistingReferences == count find mustInRelationinstanceTypeName_attribute_EClassifier(problem,interpretation,source,_);
49085 check(numberOfExistingReferences < 1);
49086} or {
49087 find mustInRelationinstanceTypeName_attribute_EClassifier(problem,interpretation,source,target);
49088}
49089/**
49090 * Matcher for detecting tuples t where []serializable attribute EDataType(source,target)
49091 */
49092private pattern mustInRelationserializable_attribute_EDataType(
49093 problem:LogicProblem, interpretation:PartialInterpretation,
49094 source: DefinedElement, target:DefinedElement)
49095{
49096 find interpretation(problem,interpretation);
49097 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
49098 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"serializable attribute EDataType");
49099 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
49100 BinaryElementRelationLink.param1(link,source);
49101 BinaryElementRelationLink.param2(link,target);
49102}
49103/**
49104 * Matcher for detecting tuples t where <>serializable attribute EDataType(source,target)
49105 */
49106private pattern mayInRelationserializable_attribute_EDataType(
49107 problem:LogicProblem, interpretation:PartialInterpretation,
49108 source: DefinedElement, target:DefinedElement)
49109{
49110 find interpretation(problem,interpretation);
49111 // The two endpoint of the link have to exist
49112 find mayExist(problem, interpretation, source);
49113 find mayExist(problem, interpretation, target);
49114 // Type consistency
49115 find mayInstanceOfEDataType_class(problem,interpretation,source);
49116 BooleanElement(target);
49117 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
49118 // the upper bound of the multiplicity should be considered.
49119 numberOfExistingReferences == count find mustInRelationserializable_attribute_EDataType(problem,interpretation,source,_);
49120 check(numberOfExistingReferences < 1);
49121} or {
49122 find mustInRelationserializable_attribute_EDataType(problem,interpretation,source,target);
49123}
49124/**
49125 * Matcher for detecting tuples t where []value attribute EEnumLiteral(source,target)
49126 */
49127private pattern mustInRelationvalue_attribute_EEnumLiteral(
49128 problem:LogicProblem, interpretation:PartialInterpretation,
49129 source: DefinedElement, target:DefinedElement)
49130{
49131 find interpretation(problem,interpretation);
49132 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
49133 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"value attribute EEnumLiteral");
49134 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
49135 BinaryElementRelationLink.param1(link,source);
49136 BinaryElementRelationLink.param2(link,target);
49137}
49138/**
49139 * Matcher for detecting tuples t where <>value attribute EEnumLiteral(source,target)
49140 */
49141private pattern mayInRelationvalue_attribute_EEnumLiteral(
49142 problem:LogicProblem, interpretation:PartialInterpretation,
49143 source: DefinedElement, target:DefinedElement)
49144{
49145 find interpretation(problem,interpretation);
49146 // The two endpoint of the link have to exist
49147 find mayExist(problem, interpretation, source);
49148 find mayExist(problem, interpretation, target);
49149 // Type consistency
49150 find mayInstanceOfEEnumLiteral_class(problem,interpretation,source);
49151 IntegerElement(target);
49152 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
49153 // the upper bound of the multiplicity should be considered.
49154 numberOfExistingReferences == count find mustInRelationvalue_attribute_EEnumLiteral(problem,interpretation,source,_);
49155 check(numberOfExistingReferences < 1);
49156} or {
49157 find mustInRelationvalue_attribute_EEnumLiteral(problem,interpretation,source,target);
49158}
49159/**
49160 * Matcher for detecting tuples t where []literal attribute EEnumLiteral(source,target)
49161 */
49162private pattern mustInRelationliteral_attribute_EEnumLiteral(
49163 problem:LogicProblem, interpretation:PartialInterpretation,
49164 source: DefinedElement, target:DefinedElement)
49165{
49166 find interpretation(problem,interpretation);
49167 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
49168 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"literal attribute EEnumLiteral");
49169 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
49170 BinaryElementRelationLink.param1(link,source);
49171 BinaryElementRelationLink.param2(link,target);
49172}
49173/**
49174 * Matcher for detecting tuples t where <>literal attribute EEnumLiteral(source,target)
49175 */
49176private pattern mayInRelationliteral_attribute_EEnumLiteral(
49177 problem:LogicProblem, interpretation:PartialInterpretation,
49178 source: DefinedElement, target:DefinedElement)
49179{
49180 find interpretation(problem,interpretation);
49181 // The two endpoint of the link have to exist
49182 find mayExist(problem, interpretation, source);
49183 find mayExist(problem, interpretation, target);
49184 // Type consistency
49185 find mayInstanceOfEEnumLiteral_class(problem,interpretation,source);
49186 StringElement(target);
49187 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
49188 // the upper bound of the multiplicity should be considered.
49189 numberOfExistingReferences == count find mustInRelationliteral_attribute_EEnumLiteral(problem,interpretation,source,_);
49190 check(numberOfExistingReferences < 1);
49191} or {
49192 find mustInRelationliteral_attribute_EEnumLiteral(problem,interpretation,source,target);
49193}
49194/**
49195 * Matcher for detecting tuples t where []name attribute ENamedElement(source,target)
49196 */
49197private pattern mustInRelationname_attribute_ENamedElement(
49198 problem:LogicProblem, interpretation:PartialInterpretation,
49199 source: DefinedElement, target:DefinedElement)
49200{
49201 find interpretation(problem,interpretation);
49202 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
49203 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"name attribute ENamedElement");
49204 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
49205 BinaryElementRelationLink.param1(link,source);
49206 BinaryElementRelationLink.param2(link,target);
49207}
49208/**
49209 * Matcher for detecting tuples t where <>name attribute ENamedElement(source,target)
49210 */
49211private pattern mayInRelationname_attribute_ENamedElement(
49212 problem:LogicProblem, interpretation:PartialInterpretation,
49213 source: DefinedElement, target:DefinedElement)
49214{
49215 find interpretation(problem,interpretation);
49216 // The two endpoint of the link have to exist
49217 find mayExist(problem, interpretation, source);
49218 find mayExist(problem, interpretation, target);
49219 // Type consistency
49220 find mayInstanceOfENamedElement_class(problem,interpretation,source);
49221 StringElement(target);
49222 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
49223 // the upper bound of the multiplicity should be considered.
49224 numberOfExistingReferences == count find mustInRelationname_attribute_ENamedElement(problem,interpretation,source,_);
49225 check(numberOfExistingReferences < 1);
49226} or {
49227 find mustInRelationname_attribute_ENamedElement(problem,interpretation,source,target);
49228}
49229/**
49230 * Matcher for detecting tuples t where []nsURI attribute EPackage(source,target)
49231 */
49232private pattern mustInRelationnsURI_attribute_EPackage(
49233 problem:LogicProblem, interpretation:PartialInterpretation,
49234 source: DefinedElement, target:DefinedElement)
49235{
49236 find interpretation(problem,interpretation);
49237 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
49238 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"nsURI attribute EPackage");
49239 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
49240 BinaryElementRelationLink.param1(link,source);
49241 BinaryElementRelationLink.param2(link,target);
49242}
49243/**
49244 * Matcher for detecting tuples t where <>nsURI attribute EPackage(source,target)
49245 */
49246private pattern mayInRelationnsURI_attribute_EPackage(
49247 problem:LogicProblem, interpretation:PartialInterpretation,
49248 source: DefinedElement, target:DefinedElement)
49249{
49250 find interpretation(problem,interpretation);
49251 // The two endpoint of the link have to exist
49252 find mayExist(problem, interpretation, source);
49253 find mayExist(problem, interpretation, target);
49254 // Type consistency
49255 find mayInstanceOfEPackage_class(problem,interpretation,source);
49256 StringElement(target);
49257 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
49258 // the upper bound of the multiplicity should be considered.
49259 numberOfExistingReferences == count find mustInRelationnsURI_attribute_EPackage(problem,interpretation,source,_);
49260 check(numberOfExistingReferences < 1);
49261} or {
49262 find mustInRelationnsURI_attribute_EPackage(problem,interpretation,source,target);
49263}
49264/**
49265 * Matcher for detecting tuples t where []nsPrefix attribute EPackage(source,target)
49266 */
49267private pattern mustInRelationnsPrefix_attribute_EPackage(
49268 problem:LogicProblem, interpretation:PartialInterpretation,
49269 source: DefinedElement, target:DefinedElement)
49270{
49271 find interpretation(problem,interpretation);
49272 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
49273 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"nsPrefix attribute EPackage");
49274 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
49275 BinaryElementRelationLink.param1(link,source);
49276 BinaryElementRelationLink.param2(link,target);
49277}
49278/**
49279 * Matcher for detecting tuples t where <>nsPrefix attribute EPackage(source,target)
49280 */
49281private pattern mayInRelationnsPrefix_attribute_EPackage(
49282 problem:LogicProblem, interpretation:PartialInterpretation,
49283 source: DefinedElement, target:DefinedElement)
49284{
49285 find interpretation(problem,interpretation);
49286 // The two endpoint of the link have to exist
49287 find mayExist(problem, interpretation, source);
49288 find mayExist(problem, interpretation, target);
49289 // Type consistency
49290 find mayInstanceOfEPackage_class(problem,interpretation,source);
49291 StringElement(target);
49292 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
49293 // the upper bound of the multiplicity should be considered.
49294 numberOfExistingReferences == count find mustInRelationnsPrefix_attribute_EPackage(problem,interpretation,source,_);
49295 check(numberOfExistingReferences < 1);
49296} or {
49297 find mustInRelationnsPrefix_attribute_EPackage(problem,interpretation,source,target);
49298}
49299/**
49300 * Matcher for detecting tuples t where []containment attribute EReference(source,target)
49301 */
49302private pattern mustInRelationcontainment_attribute_EReference(
49303 problem:LogicProblem, interpretation:PartialInterpretation,
49304 source: DefinedElement, target:DefinedElement)
49305{
49306 find interpretation(problem,interpretation);
49307 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
49308 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"containment attribute EReference");
49309 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
49310 BinaryElementRelationLink.param1(link,source);
49311 BinaryElementRelationLink.param2(link,target);
49312}
49313/**
49314 * Matcher for detecting tuples t where <>containment attribute EReference(source,target)
49315 */
49316private pattern mayInRelationcontainment_attribute_EReference(
49317 problem:LogicProblem, interpretation:PartialInterpretation,
49318 source: DefinedElement, target:DefinedElement)
49319{
49320 find interpretation(problem,interpretation);
49321 // The two endpoint of the link have to exist
49322 find mayExist(problem, interpretation, source);
49323 find mayExist(problem, interpretation, target);
49324 // Type consistency
49325 find mayInstanceOfEReference_class(problem,interpretation,source);
49326 BooleanElement(target);
49327 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
49328 // the upper bound of the multiplicity should be considered.
49329 numberOfExistingReferences == count find mustInRelationcontainment_attribute_EReference(problem,interpretation,source,_);
49330 check(numberOfExistingReferences < 1);
49331} or {
49332 find mustInRelationcontainment_attribute_EReference(problem,interpretation,source,target);
49333}
49334/**
49335 * Matcher for detecting tuples t where []container attribute EReference(source,target)
49336 */
49337private pattern mustInRelationcontainer_attribute_EReference(
49338 problem:LogicProblem, interpretation:PartialInterpretation,
49339 source: DefinedElement, target:DefinedElement)
49340{
49341 find interpretation(problem,interpretation);
49342 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
49343 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"container attribute EReference");
49344 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
49345 BinaryElementRelationLink.param1(link,source);
49346 BinaryElementRelationLink.param2(link,target);
49347}
49348/**
49349 * Matcher for detecting tuples t where <>container attribute EReference(source,target)
49350 */
49351private pattern mayInRelationcontainer_attribute_EReference(
49352 problem:LogicProblem, interpretation:PartialInterpretation,
49353 source: DefinedElement, target:DefinedElement)
49354{
49355 find interpretation(problem,interpretation);
49356 // The two endpoint of the link have to exist
49357 find mayExist(problem, interpretation, source);
49358 find mayExist(problem, interpretation, target);
49359 // Type consistency
49360 find mayInstanceOfEReference_class(problem,interpretation,source);
49361 BooleanElement(target);
49362 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
49363 // the upper bound of the multiplicity should be considered.
49364 numberOfExistingReferences == count find mustInRelationcontainer_attribute_EReference(problem,interpretation,source,_);
49365 check(numberOfExistingReferences < 1);
49366} or {
49367 find mustInRelationcontainer_attribute_EReference(problem,interpretation,source,target);
49368}
49369/**
49370 * Matcher for detecting tuples t where []resolveProxies attribute EReference(source,target)
49371 */
49372private pattern mustInRelationresolveProxies_attribute_EReference(
49373 problem:LogicProblem, interpretation:PartialInterpretation,
49374 source: DefinedElement, target:DefinedElement)
49375{
49376 find interpretation(problem,interpretation);
49377 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
49378 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"resolveProxies attribute EReference");
49379 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
49380 BinaryElementRelationLink.param1(link,source);
49381 BinaryElementRelationLink.param2(link,target);
49382}
49383/**
49384 * Matcher for detecting tuples t where <>resolveProxies attribute EReference(source,target)
49385 */
49386private pattern mayInRelationresolveProxies_attribute_EReference(
49387 problem:LogicProblem, interpretation:PartialInterpretation,
49388 source: DefinedElement, target:DefinedElement)
49389{
49390 find interpretation(problem,interpretation);
49391 // The two endpoint of the link have to exist
49392 find mayExist(problem, interpretation, source);
49393 find mayExist(problem, interpretation, target);
49394 // Type consistency
49395 find mayInstanceOfEReference_class(problem,interpretation,source);
49396 BooleanElement(target);
49397 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
49398 // the upper bound of the multiplicity should be considered.
49399 numberOfExistingReferences == count find mustInRelationresolveProxies_attribute_EReference(problem,interpretation,source,_);
49400 check(numberOfExistingReferences < 1);
49401} or {
49402 find mustInRelationresolveProxies_attribute_EReference(problem,interpretation,source,target);
49403}
49404/**
49405 * Matcher for detecting tuples t where []changeable attribute EStructuralFeature(source,target)
49406 */
49407private pattern mustInRelationchangeable_attribute_EStructuralFeature(
49408 problem:LogicProblem, interpretation:PartialInterpretation,
49409 source: DefinedElement, target:DefinedElement)
49410{
49411 find interpretation(problem,interpretation);
49412 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
49413 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"changeable attribute EStructuralFeature");
49414 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
49415 BinaryElementRelationLink.param1(link,source);
49416 BinaryElementRelationLink.param2(link,target);
49417}
49418/**
49419 * Matcher for detecting tuples t where <>changeable attribute EStructuralFeature(source,target)
49420 */
49421private pattern mayInRelationchangeable_attribute_EStructuralFeature(
49422 problem:LogicProblem, interpretation:PartialInterpretation,
49423 source: DefinedElement, target:DefinedElement)
49424{
49425 find interpretation(problem,interpretation);
49426 // The two endpoint of the link have to exist
49427 find mayExist(problem, interpretation, source);
49428 find mayExist(problem, interpretation, target);
49429 // Type consistency
49430 find mayInstanceOfEStructuralFeature_class(problem,interpretation,source);
49431 BooleanElement(target);
49432 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
49433 // the upper bound of the multiplicity should be considered.
49434 numberOfExistingReferences == count find mustInRelationchangeable_attribute_EStructuralFeature(problem,interpretation,source,_);
49435 check(numberOfExistingReferences < 1);
49436} or {
49437 find mustInRelationchangeable_attribute_EStructuralFeature(problem,interpretation,source,target);
49438}
49439/**
49440 * Matcher for detecting tuples t where []volatile attribute EStructuralFeature(source,target)
49441 */
49442private pattern mustInRelationvolatile_attribute_EStructuralFeature(
49443 problem:LogicProblem, interpretation:PartialInterpretation,
49444 source: DefinedElement, target:DefinedElement)
49445{
49446 find interpretation(problem,interpretation);
49447 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
49448 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"volatile attribute EStructuralFeature");
49449 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
49450 BinaryElementRelationLink.param1(link,source);
49451 BinaryElementRelationLink.param2(link,target);
49452}
49453/**
49454 * Matcher for detecting tuples t where <>volatile attribute EStructuralFeature(source,target)
49455 */
49456private pattern mayInRelationvolatile_attribute_EStructuralFeature(
49457 problem:LogicProblem, interpretation:PartialInterpretation,
49458 source: DefinedElement, target:DefinedElement)
49459{
49460 find interpretation(problem,interpretation);
49461 // The two endpoint of the link have to exist
49462 find mayExist(problem, interpretation, source);
49463 find mayExist(problem, interpretation, target);
49464 // Type consistency
49465 find mayInstanceOfEStructuralFeature_class(problem,interpretation,source);
49466 BooleanElement(target);
49467 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
49468 // the upper bound of the multiplicity should be considered.
49469 numberOfExistingReferences == count find mustInRelationvolatile_attribute_EStructuralFeature(problem,interpretation,source,_);
49470 check(numberOfExistingReferences < 1);
49471} or {
49472 find mustInRelationvolatile_attribute_EStructuralFeature(problem,interpretation,source,target);
49473}
49474/**
49475 * Matcher for detecting tuples t where []transient attribute EStructuralFeature(source,target)
49476 */
49477private pattern mustInRelationtransient_attribute_EStructuralFeature(
49478 problem:LogicProblem, interpretation:PartialInterpretation,
49479 source: DefinedElement, target:DefinedElement)
49480{
49481 find interpretation(problem,interpretation);
49482 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
49483 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"transient attribute EStructuralFeature");
49484 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
49485 BinaryElementRelationLink.param1(link,source);
49486 BinaryElementRelationLink.param2(link,target);
49487}
49488/**
49489 * Matcher for detecting tuples t where <>transient attribute EStructuralFeature(source,target)
49490 */
49491private pattern mayInRelationtransient_attribute_EStructuralFeature(
49492 problem:LogicProblem, interpretation:PartialInterpretation,
49493 source: DefinedElement, target:DefinedElement)
49494{
49495 find interpretation(problem,interpretation);
49496 // The two endpoint of the link have to exist
49497 find mayExist(problem, interpretation, source);
49498 find mayExist(problem, interpretation, target);
49499 // Type consistency
49500 find mayInstanceOfEStructuralFeature_class(problem,interpretation,source);
49501 BooleanElement(target);
49502 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
49503 // the upper bound of the multiplicity should be considered.
49504 numberOfExistingReferences == count find mustInRelationtransient_attribute_EStructuralFeature(problem,interpretation,source,_);
49505 check(numberOfExistingReferences < 1);
49506} or {
49507 find mustInRelationtransient_attribute_EStructuralFeature(problem,interpretation,source,target);
49508}
49509/**
49510 * Matcher for detecting tuples t where []defaultValueLiteral attribute EStructuralFeature(source,target)
49511 */
49512private pattern mustInRelationdefaultValueLiteral_attribute_EStructuralFeature(
49513 problem:LogicProblem, interpretation:PartialInterpretation,
49514 source: DefinedElement, target:DefinedElement)
49515{
49516 find interpretation(problem,interpretation);
49517 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
49518 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"defaultValueLiteral attribute EStructuralFeature");
49519 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
49520 BinaryElementRelationLink.param1(link,source);
49521 BinaryElementRelationLink.param2(link,target);
49522}
49523/**
49524 * Matcher for detecting tuples t where <>defaultValueLiteral attribute EStructuralFeature(source,target)
49525 */
49526private pattern mayInRelationdefaultValueLiteral_attribute_EStructuralFeature(
49527 problem:LogicProblem, interpretation:PartialInterpretation,
49528 source: DefinedElement, target:DefinedElement)
49529{
49530 find interpretation(problem,interpretation);
49531 // The two endpoint of the link have to exist
49532 find mayExist(problem, interpretation, source);
49533 find mayExist(problem, interpretation, target);
49534 // Type consistency
49535 find mayInstanceOfEStructuralFeature_class(problem,interpretation,source);
49536 StringElement(target);
49537 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
49538 // the upper bound of the multiplicity should be considered.
49539 numberOfExistingReferences == count find mustInRelationdefaultValueLiteral_attribute_EStructuralFeature(problem,interpretation,source,_);
49540 check(numberOfExistingReferences < 1);
49541} or {
49542 find mustInRelationdefaultValueLiteral_attribute_EStructuralFeature(problem,interpretation,source,target);
49543}
49544/**
49545 * Matcher for detecting tuples t where []unsettable attribute EStructuralFeature(source,target)
49546 */
49547private pattern mustInRelationunsettable_attribute_EStructuralFeature(
49548 problem:LogicProblem, interpretation:PartialInterpretation,
49549 source: DefinedElement, target:DefinedElement)
49550{
49551 find interpretation(problem,interpretation);
49552 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
49553 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"unsettable attribute EStructuralFeature");
49554 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
49555 BinaryElementRelationLink.param1(link,source);
49556 BinaryElementRelationLink.param2(link,target);
49557}
49558/**
49559 * Matcher for detecting tuples t where <>unsettable attribute EStructuralFeature(source,target)
49560 */
49561private pattern mayInRelationunsettable_attribute_EStructuralFeature(
49562 problem:LogicProblem, interpretation:PartialInterpretation,
49563 source: DefinedElement, target:DefinedElement)
49564{
49565 find interpretation(problem,interpretation);
49566 // The two endpoint of the link have to exist
49567 find mayExist(problem, interpretation, source);
49568 find mayExist(problem, interpretation, target);
49569 // Type consistency
49570 find mayInstanceOfEStructuralFeature_class(problem,interpretation,source);
49571 BooleanElement(target);
49572 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
49573 // the upper bound of the multiplicity should be considered.
49574 numberOfExistingReferences == count find mustInRelationunsettable_attribute_EStructuralFeature(problem,interpretation,source,_);
49575 check(numberOfExistingReferences < 1);
49576} or {
49577 find mustInRelationunsettable_attribute_EStructuralFeature(problem,interpretation,source,target);
49578}
49579/**
49580 * Matcher for detecting tuples t where []derived attribute EStructuralFeature(source,target)
49581 */
49582private pattern mustInRelationderived_attribute_EStructuralFeature(
49583 problem:LogicProblem, interpretation:PartialInterpretation,
49584 source: DefinedElement, target:DefinedElement)
49585{
49586 find interpretation(problem,interpretation);
49587 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
49588 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"derived attribute EStructuralFeature");
49589 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
49590 BinaryElementRelationLink.param1(link,source);
49591 BinaryElementRelationLink.param2(link,target);
49592}
49593/**
49594 * Matcher for detecting tuples t where <>derived attribute EStructuralFeature(source,target)
49595 */
49596private pattern mayInRelationderived_attribute_EStructuralFeature(
49597 problem:LogicProblem, interpretation:PartialInterpretation,
49598 source: DefinedElement, target:DefinedElement)
49599{
49600 find interpretation(problem,interpretation);
49601 // The two endpoint of the link have to exist
49602 find mayExist(problem, interpretation, source);
49603 find mayExist(problem, interpretation, target);
49604 // Type consistency
49605 find mayInstanceOfEStructuralFeature_class(problem,interpretation,source);
49606 BooleanElement(target);
49607 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
49608 // the upper bound of the multiplicity should be considered.
49609 numberOfExistingReferences == count find mustInRelationderived_attribute_EStructuralFeature(problem,interpretation,source,_);
49610 check(numberOfExistingReferences < 1);
49611} or {
49612 find mustInRelationderived_attribute_EStructuralFeature(problem,interpretation,source,target);
49613}
49614/**
49615 * Matcher for detecting tuples t where []ordered attribute ETypedElement(source,target)
49616 */
49617private pattern mustInRelationordered_attribute_ETypedElement(
49618 problem:LogicProblem, interpretation:PartialInterpretation,
49619 source: DefinedElement, target:DefinedElement)
49620{
49621 find interpretation(problem,interpretation);
49622 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
49623 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"ordered attribute ETypedElement");
49624 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
49625 BinaryElementRelationLink.param1(link,source);
49626 BinaryElementRelationLink.param2(link,target);
49627}
49628/**
49629 * Matcher for detecting tuples t where <>ordered attribute ETypedElement(source,target)
49630 */
49631private pattern mayInRelationordered_attribute_ETypedElement(
49632 problem:LogicProblem, interpretation:PartialInterpretation,
49633 source: DefinedElement, target:DefinedElement)
49634{
49635 find interpretation(problem,interpretation);
49636 // The two endpoint of the link have to exist
49637 find mayExist(problem, interpretation, source);
49638 find mayExist(problem, interpretation, target);
49639 // Type consistency
49640 find mayInstanceOfETypedElement_class(problem,interpretation,source);
49641 BooleanElement(target);
49642 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
49643 // the upper bound of the multiplicity should be considered.
49644 numberOfExistingReferences == count find mustInRelationordered_attribute_ETypedElement(problem,interpretation,source,_);
49645 check(numberOfExistingReferences < 1);
49646} or {
49647 find mustInRelationordered_attribute_ETypedElement(problem,interpretation,source,target);
49648}
49649/**
49650 * Matcher for detecting tuples t where []unique attribute ETypedElement(source,target)
49651 */
49652private pattern mustInRelationunique_attribute_ETypedElement(
49653 problem:LogicProblem, interpretation:PartialInterpretation,
49654 source: DefinedElement, target:DefinedElement)
49655{
49656 find interpretation(problem,interpretation);
49657 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
49658 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"unique attribute ETypedElement");
49659 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
49660 BinaryElementRelationLink.param1(link,source);
49661 BinaryElementRelationLink.param2(link,target);
49662}
49663/**
49664 * Matcher for detecting tuples t where <>unique attribute ETypedElement(source,target)
49665 */
49666private pattern mayInRelationunique_attribute_ETypedElement(
49667 problem:LogicProblem, interpretation:PartialInterpretation,
49668 source: DefinedElement, target:DefinedElement)
49669{
49670 find interpretation(problem,interpretation);
49671 // The two endpoint of the link have to exist
49672 find mayExist(problem, interpretation, source);
49673 find mayExist(problem, interpretation, target);
49674 // Type consistency
49675 find mayInstanceOfETypedElement_class(problem,interpretation,source);
49676 BooleanElement(target);
49677 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
49678 // the upper bound of the multiplicity should be considered.
49679 numberOfExistingReferences == count find mustInRelationunique_attribute_ETypedElement(problem,interpretation,source,_);
49680 check(numberOfExistingReferences < 1);
49681} or {
49682 find mustInRelationunique_attribute_ETypedElement(problem,interpretation,source,target);
49683}
49684/**
49685 * Matcher for detecting tuples t where []lowerBound attribute ETypedElement(source,target)
49686 */
49687private pattern mustInRelationlowerBound_attribute_ETypedElement(
49688 problem:LogicProblem, interpretation:PartialInterpretation,
49689 source: DefinedElement, target:DefinedElement)
49690{
49691 find interpretation(problem,interpretation);
49692 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
49693 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"lowerBound attribute ETypedElement");
49694 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
49695 BinaryElementRelationLink.param1(link,source);
49696 BinaryElementRelationLink.param2(link,target);
49697}
49698/**
49699 * Matcher for detecting tuples t where <>lowerBound attribute ETypedElement(source,target)
49700 */
49701private pattern mayInRelationlowerBound_attribute_ETypedElement(
49702 problem:LogicProblem, interpretation:PartialInterpretation,
49703 source: DefinedElement, target:DefinedElement)
49704{
49705 find interpretation(problem,interpretation);
49706 // The two endpoint of the link have to exist
49707 find mayExist(problem, interpretation, source);
49708 find mayExist(problem, interpretation, target);
49709 // Type consistency
49710 find mayInstanceOfETypedElement_class(problem,interpretation,source);
49711 IntegerElement(target);
49712 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
49713 // the upper bound of the multiplicity should be considered.
49714 numberOfExistingReferences == count find mustInRelationlowerBound_attribute_ETypedElement(problem,interpretation,source,_);
49715 check(numberOfExistingReferences < 1);
49716} or {
49717 find mustInRelationlowerBound_attribute_ETypedElement(problem,interpretation,source,target);
49718}
49719/**
49720 * Matcher for detecting tuples t where []upperBound attribute ETypedElement(source,target)
49721 */
49722private pattern mustInRelationupperBound_attribute_ETypedElement(
49723 problem:LogicProblem, interpretation:PartialInterpretation,
49724 source: DefinedElement, target:DefinedElement)
49725{
49726 find interpretation(problem,interpretation);
49727 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
49728 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"upperBound attribute ETypedElement");
49729 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
49730 BinaryElementRelationLink.param1(link,source);
49731 BinaryElementRelationLink.param2(link,target);
49732}
49733/**
49734 * Matcher for detecting tuples t where <>upperBound attribute ETypedElement(source,target)
49735 */
49736private pattern mayInRelationupperBound_attribute_ETypedElement(
49737 problem:LogicProblem, interpretation:PartialInterpretation,
49738 source: DefinedElement, target:DefinedElement)
49739{
49740 find interpretation(problem,interpretation);
49741 // The two endpoint of the link have to exist
49742 find mayExist(problem, interpretation, source);
49743 find mayExist(problem, interpretation, target);
49744 // Type consistency
49745 find mayInstanceOfETypedElement_class(problem,interpretation,source);
49746 IntegerElement(target);
49747 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
49748 // the upper bound of the multiplicity should be considered.
49749 numberOfExistingReferences == count find mustInRelationupperBound_attribute_ETypedElement(problem,interpretation,source,_);
49750 check(numberOfExistingReferences < 1);
49751} or {
49752 find mustInRelationupperBound_attribute_ETypedElement(problem,interpretation,source,target);
49753}
49754/**
49755 * Matcher for detecting tuples t where []many attribute ETypedElement(source,target)
49756 */
49757private pattern mustInRelationmany_attribute_ETypedElement(
49758 problem:LogicProblem, interpretation:PartialInterpretation,
49759 source: DefinedElement, target:DefinedElement)
49760{
49761 find interpretation(problem,interpretation);
49762 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
49763 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"many attribute ETypedElement");
49764 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
49765 BinaryElementRelationLink.param1(link,source);
49766 BinaryElementRelationLink.param2(link,target);
49767}
49768/**
49769 * Matcher for detecting tuples t where <>many attribute ETypedElement(source,target)
49770 */
49771private pattern mayInRelationmany_attribute_ETypedElement(
49772 problem:LogicProblem, interpretation:PartialInterpretation,
49773 source: DefinedElement, target:DefinedElement)
49774{
49775 find interpretation(problem,interpretation);
49776 // The two endpoint of the link have to exist
49777 find mayExist(problem, interpretation, source);
49778 find mayExist(problem, interpretation, target);
49779 // Type consistency
49780 find mayInstanceOfETypedElement_class(problem,interpretation,source);
49781 BooleanElement(target);
49782 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
49783 // the upper bound of the multiplicity should be considered.
49784 numberOfExistingReferences == count find mustInRelationmany_attribute_ETypedElement(problem,interpretation,source,_);
49785 check(numberOfExistingReferences < 1);
49786} or {
49787 find mustInRelationmany_attribute_ETypedElement(problem,interpretation,source,target);
49788}
49789/**
49790 * Matcher for detecting tuples t where []required attribute ETypedElement(source,target)
49791 */
49792private pattern mustInRelationrequired_attribute_ETypedElement(
49793 problem:LogicProblem, interpretation:PartialInterpretation,
49794 source: DefinedElement, target:DefinedElement)
49795{
49796 find interpretation(problem,interpretation);
49797 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
49798 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"required attribute ETypedElement");
49799 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
49800 BinaryElementRelationLink.param1(link,source);
49801 BinaryElementRelationLink.param2(link,target);
49802}
49803/**
49804 * Matcher for detecting tuples t where <>required attribute ETypedElement(source,target)
49805 */
49806private pattern mayInRelationrequired_attribute_ETypedElement(
49807 problem:LogicProblem, interpretation:PartialInterpretation,
49808 source: DefinedElement, target:DefinedElement)
49809{
49810 find interpretation(problem,interpretation);
49811 // The two endpoint of the link have to exist
49812 find mayExist(problem, interpretation, source);
49813 find mayExist(problem, interpretation, target);
49814 // Type consistency
49815 find mayInstanceOfETypedElement_class(problem,interpretation,source);
49816 BooleanElement(target);
49817 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
49818 // the upper bound of the multiplicity should be considered.
49819 numberOfExistingReferences == count find mustInRelationrequired_attribute_ETypedElement(problem,interpretation,source,_);
49820 check(numberOfExistingReferences < 1);
49821} or {
49822 find mustInRelationrequired_attribute_ETypedElement(problem,interpretation,source,target);
49823}
49824/**
49825 * Matcher for detecting tuples t where []key attribute EStringToStringMapEntry(source,target)
49826 */
49827private pattern mustInRelationkey_attribute_EStringToStringMapEntry(
49828 problem:LogicProblem, interpretation:PartialInterpretation,
49829 source: DefinedElement, target:DefinedElement)
49830{
49831 find interpretation(problem,interpretation);
49832 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
49833 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"key attribute EStringToStringMapEntry");
49834 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
49835 BinaryElementRelationLink.param1(link,source);
49836 BinaryElementRelationLink.param2(link,target);
49837}
49838/**
49839 * Matcher for detecting tuples t where <>key attribute EStringToStringMapEntry(source,target)
49840 */
49841private pattern mayInRelationkey_attribute_EStringToStringMapEntry(
49842 problem:LogicProblem, interpretation:PartialInterpretation,
49843 source: DefinedElement, target:DefinedElement)
49844{
49845 find interpretation(problem,interpretation);
49846 // The two endpoint of the link have to exist
49847 find mayExist(problem, interpretation, source);
49848 find mayExist(problem, interpretation, target);
49849 // Type consistency
49850 find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,source);
49851 StringElement(target);
49852 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
49853 // the upper bound of the multiplicity should be considered.
49854 numberOfExistingReferences == count find mustInRelationkey_attribute_EStringToStringMapEntry(problem,interpretation,source,_);
49855 check(numberOfExistingReferences < 1);
49856} or {
49857 find mustInRelationkey_attribute_EStringToStringMapEntry(problem,interpretation,source,target);
49858}
49859/**
49860 * Matcher for detecting tuples t where []value attribute EStringToStringMapEntry(source,target)
49861 */
49862private pattern mustInRelationvalue_attribute_EStringToStringMapEntry(
49863 problem:LogicProblem, interpretation:PartialInterpretation,
49864 source: DefinedElement, target:DefinedElement)
49865{
49866 find interpretation(problem,interpretation);
49867 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
49868 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"value attribute EStringToStringMapEntry");
49869 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
49870 BinaryElementRelationLink.param1(link,source);
49871 BinaryElementRelationLink.param2(link,target);
49872}
49873/**
49874 * Matcher for detecting tuples t where <>value attribute EStringToStringMapEntry(source,target)
49875 */
49876private pattern mayInRelationvalue_attribute_EStringToStringMapEntry(
49877 problem:LogicProblem, interpretation:PartialInterpretation,
49878 source: DefinedElement, target:DefinedElement)
49879{
49880 find interpretation(problem,interpretation);
49881 // The two endpoint of the link have to exist
49882 find mayExist(problem, interpretation, source);
49883 find mayExist(problem, interpretation, target);
49884 // Type consistency
49885 find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,source);
49886 StringElement(target);
49887 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
49888 // the upper bound of the multiplicity should be considered.
49889 numberOfExistingReferences == count find mustInRelationvalue_attribute_EStringToStringMapEntry(problem,interpretation,source,_);
49890 check(numberOfExistingReferences < 1);
49891} or {
49892 find mustInRelationvalue_attribute_EStringToStringMapEntry(problem,interpretation,source,target);
49893}
49894
49895//////////
49896// 1.3 Relation Definition Indexers
49897//////////
49898
49899//////////
49900// 1.4 Containment Indexer
49901//////////
49902private pattern mustContains2(source: DefinedElement, target: DefinedElement) {
49903 find mustContains4(_,_,source,target);
49904}
49905
49906private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation,
49907 source: DefinedElement, target: DefinedElement)
49908 { find mustInRelationdetails_reference_EAnnotation(problem,interpretation,source,target); }or
49909
49910 { find mustInRelationcontents_reference_EAnnotation(problem,interpretation,source,target); }or
49911
49912 { find mustInRelationeOperations_reference_EClass(problem,interpretation,source,target); }or
49913
49914 { find mustInRelationeStructuralFeatures_reference_EClass(problem,interpretation,source,target); }or
49915
49916 { find mustInRelationeGenericSuperTypes_reference_EClass(problem,interpretation,source,target); }or
49917
49918 { find mustInRelationeTypeParameters_reference_EClassifier(problem,interpretation,source,target); }or
49919
49920 { find mustInRelationeLiterals_reference_EEnum(problem,interpretation,source,target); }or
49921
49922 { find mustInRelationeAnnotations_reference_EModelElement(problem,interpretation,source,target); }or
49923
49924 { find mustInRelationeTypeParameters_reference_EOperation(problem,interpretation,source,target); }or
49925
49926 { find mustInRelationeParameters_reference_EOperation(problem,interpretation,source,target); }or
49927
49928 { find mustInRelationeGenericExceptions_reference_EOperation(problem,interpretation,source,target); }or
49929
49930 { find mustInRelationeClassifiers_reference_EPackage(problem,interpretation,source,target); }or
49931
49932 { find mustInRelationeSubpackages_reference_EPackage(problem,interpretation,source,target); }or
49933
49934 { find mustInRelationeGenericType_reference_ETypedElement(problem,interpretation,source,target); }or
49935
49936 { find mustInRelationeUpperBound_reference_EGenericType(problem,interpretation,source,target); }or
49937
49938 { find mustInRelationeTypeArguments_reference_EGenericType(problem,interpretation,source,target); }or
49939
49940 { find mustInRelationeLowerBound_reference_EGenericType(problem,interpretation,source,target); }or
49941
49942 { find mustInRelationeBounds_reference_ETypeParameter(problem,interpretation,source,target); }
49943
49944private pattern mustTransitiveContains(source,target) {
49945 find mustContains2+(source,target);
49946}
49947
49948//////////
49949// 2. Invalidation Indexers
49950//////////
49951// 2.1 Invalidated by WF Queries
49952//////////
49953
49954//////////
49955// 3. Unfinishedness Indexers
49956//////////
49957// 3.1 Unfinishedness Measured by Multiplicity
49958//////////
49959pattern unfinishedLowerMultiplicity_eAttributeType_reference_EAttribute(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) {
49960 find interpretation(problem,interpretation);
49961 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
49962 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributeType reference EAttribute");
49963 find mustInstanceOfEAttribute_class(problem,interpretation,object);
49964 numberOfExistingReferences == count find mustInRelationeAttributeType_reference_EAttribute(problem,interpretation,object,_);
49965 check(numberOfExistingReferences < 1);
49966 missingMultiplicity == eval(1-numberOfExistingReferences);
49967}
49968pattern unfinishedLowerMultiplicity_eReferenceType_reference_EReference(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) {
49969 find interpretation(problem,interpretation);
49970 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
49971 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferenceType reference EReference");
49972 find mustInstanceOfEReference_class(problem,interpretation,object);
49973 numberOfExistingReferences == count find mustInRelationeReferenceType_reference_EReference(problem,interpretation,object,_);
49974 check(numberOfExistingReferences < 1);
49975 missingMultiplicity == eval(1-numberOfExistingReferences);
49976}
49977pattern unfinishedLowerMultiplicity_eRawType_reference_EGenericType(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) {
49978 find interpretation(problem,interpretation);
49979 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
49980 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eRawType reference EGenericType");
49981 find mustInstanceOfEGenericType_class(problem,interpretation,object);
49982 numberOfExistingReferences == count find mustInRelationeRawType_reference_EGenericType(problem,interpretation,object,_);
49983 check(numberOfExistingReferences < 1);
49984 missingMultiplicity == eval(1-numberOfExistingReferences);
49985}
49986
49987//////////
49988// 3.2 Unfinishedness Measured by WF Queries
49989//////////
49990
49991//////////
49992// 4. Refinement Indexers
49993//////////
49994// 4.1 Object constructors
49995//////////
49996private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation)
49997{
49998 find interpretation(problem,interpretation);
49999 find mustInstanceOfEOperation_class(problem,interpretation,root);
50000 find mustExist(problem, interpretation, root);
50001}or{
50002 find interpretation(problem,interpretation);
50003 find mustInstanceOfENamedElement_class(problem,interpretation,root);
50004 find mustExist(problem, interpretation, root);
50005}or{
50006 find interpretation(problem,interpretation);
50007 find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,root);
50008 find mustExist(problem, interpretation, root);
50009}or{
50010 find interpretation(problem,interpretation);
50011 find mustInstanceOfEEnumLiteral_class(problem,interpretation,root);
50012 find mustExist(problem, interpretation, root);
50013}or{
50014 find interpretation(problem,interpretation);
50015 find mustInstanceOfEGenericType_class(problem,interpretation,root);
50016 find mustExist(problem, interpretation, root);
50017}or{
50018 find interpretation(problem,interpretation);
50019 find mustInstanceOfEObject_class(problem,interpretation,root);
50020 find mustExist(problem, interpretation, root);
50021}or{
50022 find interpretation(problem,interpretation);
50023 find mustInstanceOfEAttribute_class(problem,interpretation,root);
50024 find mustExist(problem, interpretation, root);
50025}or{
50026 find interpretation(problem,interpretation);
50027 find mustInstanceOfEPackage_class(problem,interpretation,root);
50028 find mustExist(problem, interpretation, root);
50029}or{
50030 find interpretation(problem,interpretation);
50031 find mustInstanceOfEParameter_class(problem,interpretation,root);
50032 find mustExist(problem, interpretation, root);
50033}or{
50034 find interpretation(problem,interpretation);
50035 find mustInstanceOfEDataType_class(problem,interpretation,root);
50036 find mustExist(problem, interpretation, root);
50037}or{
50038 find interpretation(problem,interpretation);
50039 find mustInstanceOfEClassifier_class(problem,interpretation,root);
50040 find mustExist(problem, interpretation, root);
50041}or{
50042 find interpretation(problem,interpretation);
50043 find mustInstanceOfEStructuralFeature_class(problem,interpretation,root);
50044 find mustExist(problem, interpretation, root);
50045}or{
50046 find interpretation(problem,interpretation);
50047 find mustInstanceOfEModelElement_class(problem,interpretation,root);
50048 find mustExist(problem, interpretation, root);
50049}or{
50050 find interpretation(problem,interpretation);
50051 find mustInstanceOfEAnnotation_class(problem,interpretation,root);
50052 find mustExist(problem, interpretation, root);
50053}or{
50054 find interpretation(problem,interpretation);
50055 find mustInstanceOfETypeParameter_class(problem,interpretation,root);
50056 find mustExist(problem, interpretation, root);
50057}or{
50058 find interpretation(problem,interpretation);
50059 find mustInstanceOfEReference_class(problem,interpretation,root);
50060 find mustExist(problem, interpretation, root);
50061}or{
50062 find interpretation(problem,interpretation);
50063 find mustInstanceOfEEnum_class(problem,interpretation,root);
50064 find mustExist(problem, interpretation, root);
50065}or{
50066 find interpretation(problem,interpretation);
50067 find mustInstanceOfETypedElement_class(problem,interpretation,root);
50068 find mustExist(problem, interpretation, root);
50069}or{
50070 find interpretation(problem,interpretation);
50071 find mustInstanceOfEClass_class(problem,interpretation,root);
50072 find mustExist(problem, interpretation, root);
50073}or{
50074 find interpretation(problem,interpretation);
50075 find mustInstanceOfEModelElement_class_DefinedPart(problem,interpretation,root);
50076 find mustExist(problem, interpretation, root);
50077}or{
50078 find interpretation(problem,interpretation);
50079 find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,root);
50080 find mustExist(problem, interpretation, root);
50081}or{
50082 find interpretation(problem,interpretation);
50083 find mustInstanceOfENamedElement_class_DefinedPart(problem,interpretation,root);
50084 find mustExist(problem, interpretation, root);
50085}or{
50086 find interpretation(problem,interpretation);
50087 find mustInstanceOfENamedElement_class_UndefinedPart(problem,interpretation,root);
50088 find mustExist(problem, interpretation, root);
50089}or{
50090 find interpretation(problem,interpretation);
50091 find mustInstanceOfEPackage_class_DefinedPart(problem,interpretation,root);
50092 find mustExist(problem, interpretation, root);
50093}or{
50094 find interpretation(problem,interpretation);
50095 find mustInstanceOfEPackage_class_UndefinedPart(problem,interpretation,root);
50096 find mustExist(problem, interpretation, root);
50097}
50098pattern createObject_EStringToStringMapEntry_class_by_details_reference_EAnnotation(
50099 problem:LogicProblem, interpretation:PartialInterpretation,
50100 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
50101 container:DefinedElement)
50102{
50103 find interpretation(problem,interpretation);
50104 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
50105 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EStringToStringMapEntry class");
50106 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
50107 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"details reference EAnnotation");
50108 find mustInstanceOfEAnnotation_class(problem,interpretation,container);
50109 find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,newObject);
50110 find mayInRelationdetails_reference_EAnnotation(problem,interpretation,container,newObject);
50111 find mustExist(problem, interpretation, container);
50112 neg find mustExist(problem, interpretation, newObject);
50113}
50114pattern createObject_EStringToStringMapEntry_class(
50115 problem:LogicProblem, interpretation:PartialInterpretation,
50116 typeInterpretation:PartialComplexTypeInterpretation)
50117{
50118 find interpretation(problem,interpretation);
50119 neg find hasElementInContainment(problem,interpretation);
50120 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
50121 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EStringToStringMapEntry class");
50122 find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,newObject);
50123 find mayExist(problem, interpretation, newObject);
50124 neg find mustExist(problem, interpretation, newObject);
50125}
50126pattern createObject_EGenericType_class_by_eGenericSuperTypes_reference_EClass(
50127 problem:LogicProblem, interpretation:PartialInterpretation,
50128 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
50129 container:DefinedElement)
50130{
50131 find interpretation(problem,interpretation);
50132 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
50133 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class");
50134 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
50135 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eGenericSuperTypes reference EClass");
50136 find mustInstanceOfEClass_class(problem,interpretation,container);
50137 find mayInstanceOfEGenericType_class(problem,interpretation,newObject);
50138 find mayInRelationeGenericSuperTypes_reference_EClass(problem,interpretation,container,newObject);
50139 find mustExist(problem, interpretation, container);
50140 neg find mustExist(problem, interpretation, newObject);
50141}
50142pattern createObject_EGenericType_class_by_eGenericExceptions_reference_EOperation(
50143 problem:LogicProblem, interpretation:PartialInterpretation,
50144 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
50145 container:DefinedElement)
50146{
50147 find interpretation(problem,interpretation);
50148 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
50149 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class");
50150 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
50151 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eGenericExceptions reference EOperation");
50152 find mustInstanceOfEOperation_class(problem,interpretation,container);
50153 find mayInstanceOfEGenericType_class(problem,interpretation,newObject);
50154 find mayInRelationeGenericExceptions_reference_EOperation(problem,interpretation,container,newObject);
50155 find mustExist(problem, interpretation, container);
50156 neg find mustExist(problem, interpretation, newObject);
50157}
50158pattern createObject_EGenericType_class_by_eGenericType_reference_ETypedElement(
50159 problem:LogicProblem, interpretation:PartialInterpretation,
50160 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
50161 container:DefinedElement)
50162{
50163 find interpretation(problem,interpretation);
50164 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
50165 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class");
50166 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
50167 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eGenericType reference ETypedElement");
50168 find mustInstanceOfETypedElement_class(problem,interpretation,container);
50169 find mayInstanceOfEGenericType_class(problem,interpretation,newObject);
50170 find mayInRelationeGenericType_reference_ETypedElement(problem,interpretation,container,newObject);
50171 find mustExist(problem, interpretation, container);
50172 neg find mustExist(problem, interpretation, newObject);
50173}
50174pattern createObject_EGenericType_class_by_eUpperBound_reference_EGenericType(
50175 problem:LogicProblem, interpretation:PartialInterpretation,
50176 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
50177 container:DefinedElement)
50178{
50179 find interpretation(problem,interpretation);
50180 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
50181 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class");
50182 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
50183 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eUpperBound reference EGenericType");
50184 find mustInstanceOfEGenericType_class(problem,interpretation,container);
50185 find mayInstanceOfEGenericType_class(problem,interpretation,newObject);
50186 find mayInRelationeUpperBound_reference_EGenericType(problem,interpretation,container,newObject);
50187 find mustExist(problem, interpretation, container);
50188 neg find mustExist(problem, interpretation, newObject);
50189}
50190pattern createObject_EGenericType_class_by_eTypeArguments_reference_EGenericType(
50191 problem:LogicProblem, interpretation:PartialInterpretation,
50192 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
50193 container:DefinedElement)
50194{
50195 find interpretation(problem,interpretation);
50196 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
50197 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class");
50198 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
50199 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eTypeArguments reference EGenericType");
50200 find mustInstanceOfEGenericType_class(problem,interpretation,container);
50201 find mayInstanceOfEGenericType_class(problem,interpretation,newObject);
50202 find mayInRelationeTypeArguments_reference_EGenericType(problem,interpretation,container,newObject);
50203 find mustExist(problem, interpretation, container);
50204 neg find mustExist(problem, interpretation, newObject);
50205}
50206pattern createObject_EGenericType_class_by_eLowerBound_reference_EGenericType(
50207 problem:LogicProblem, interpretation:PartialInterpretation,
50208 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
50209 container:DefinedElement)
50210{
50211 find interpretation(problem,interpretation);
50212 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
50213 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class");
50214 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
50215 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eLowerBound reference EGenericType");
50216 find mustInstanceOfEGenericType_class(problem,interpretation,container);
50217 find mayInstanceOfEGenericType_class(problem,interpretation,newObject);
50218 find mayInRelationeLowerBound_reference_EGenericType(problem,interpretation,container,newObject);
50219 find mustExist(problem, interpretation, container);
50220 neg find mustExist(problem, interpretation, newObject);
50221}
50222pattern createObject_EGenericType_class_by_eBounds_reference_ETypeParameter(
50223 problem:LogicProblem, interpretation:PartialInterpretation,
50224 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
50225 container:DefinedElement)
50226{
50227 find interpretation(problem,interpretation);
50228 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
50229 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class");
50230 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
50231 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eBounds reference ETypeParameter");
50232 find mustInstanceOfETypeParameter_class(problem,interpretation,container);
50233 find mayInstanceOfEGenericType_class(problem,interpretation,newObject);
50234 find mayInRelationeBounds_reference_ETypeParameter(problem,interpretation,container,newObject);
50235 find mustExist(problem, interpretation, container);
50236 neg find mustExist(problem, interpretation, newObject);
50237}
50238pattern createObject_EGenericType_class(
50239 problem:LogicProblem, interpretation:PartialInterpretation,
50240 typeInterpretation:PartialComplexTypeInterpretation)
50241{
50242 find interpretation(problem,interpretation);
50243 neg find hasElementInContainment(problem,interpretation);
50244 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
50245 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class");
50246 find mayInstanceOfEGenericType_class(problem,interpretation,newObject);
50247 find mayExist(problem, interpretation, newObject);
50248 neg find mustExist(problem, interpretation, newObject);
50249}
50250pattern createObject_EEnumLiteral_class_by_eLiterals_reference_EEnum_with_eEnum_reference_EEnumLiteral(
50251 problem:LogicProblem, interpretation:PartialInterpretation,
50252 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
50253 container:DefinedElement)
50254{
50255 find interpretation(problem,interpretation);
50256 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
50257 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EEnumLiteral class");
50258 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
50259 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eLiterals reference EEnum");
50260 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
50261 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eEnum reference EEnumLiteral");
50262 find mustInstanceOfEEnum_class(problem,interpretation,container);
50263 find mayInstanceOfEEnumLiteral_class(problem,interpretation,newObject);
50264 find mayInRelationeLiterals_reference_EEnum(problem,interpretation,container,newObject);
50265 find mustExist(problem, interpretation, container);
50266 neg find mustExist(problem, interpretation, newObject);
50267}
50268pattern createObject_EEnumLiteral_class(
50269 problem:LogicProblem, interpretation:PartialInterpretation,
50270 typeInterpretation:PartialComplexTypeInterpretation)
50271{
50272 find interpretation(problem,interpretation);
50273 neg find hasElementInContainment(problem,interpretation);
50274 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
50275 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EEnumLiteral class");
50276 find mayInstanceOfEEnumLiteral_class(problem,interpretation,newObject);
50277 find mayExist(problem, interpretation, newObject);
50278 neg find mustExist(problem, interpretation, newObject);
50279}
50280pattern createObject_ETypeParameter_class_by_eTypeParameters_reference_EClassifier(
50281 problem:LogicProblem, interpretation:PartialInterpretation,
50282 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
50283 container:DefinedElement)
50284{
50285 find interpretation(problem,interpretation);
50286 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
50287 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"ETypeParameter class");
50288 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
50289 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eTypeParameters reference EClassifier");
50290 find mustInstanceOfEClassifier_class(problem,interpretation,container);
50291 find mayInstanceOfETypeParameter_class(problem,interpretation,newObject);
50292 find mayInRelationeTypeParameters_reference_EClassifier(problem,interpretation,container,newObject);
50293 find mustExist(problem, interpretation, container);
50294 neg find mustExist(problem, interpretation, newObject);
50295}
50296pattern createObject_ETypeParameter_class_by_eTypeParameters_reference_EOperation(
50297 problem:LogicProblem, interpretation:PartialInterpretation,
50298 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
50299 container:DefinedElement)
50300{
50301 find interpretation(problem,interpretation);
50302 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
50303 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"ETypeParameter class");
50304 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
50305 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eTypeParameters reference EOperation");
50306 find mustInstanceOfEOperation_class(problem,interpretation,container);
50307 find mayInstanceOfETypeParameter_class(problem,interpretation,newObject);
50308 find mayInRelationeTypeParameters_reference_EOperation(problem,interpretation,container,newObject);
50309 find mustExist(problem, interpretation, container);
50310 neg find mustExist(problem, interpretation, newObject);
50311}
50312pattern createObject_ETypeParameter_class(
50313 problem:LogicProblem, interpretation:PartialInterpretation,
50314 typeInterpretation:PartialComplexTypeInterpretation)
50315{
50316 find interpretation(problem,interpretation);
50317 neg find hasElementInContainment(problem,interpretation);
50318 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
50319 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"ETypeParameter class");
50320 find mayInstanceOfETypeParameter_class(problem,interpretation,newObject);
50321 find mayExist(problem, interpretation, newObject);
50322 neg find mustExist(problem, interpretation, newObject);
50323}
50324pattern createObject_EAttribute_class_by_eStructuralFeatures_reference_EClass_with_eContainingClass_reference_EStructuralFeature(
50325 problem:LogicProblem, interpretation:PartialInterpretation,
50326 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
50327 container:DefinedElement)
50328{
50329 find interpretation(problem,interpretation);
50330 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
50331 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EAttribute class");
50332 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
50333 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eStructuralFeatures reference EClass");
50334 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
50335 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eContainingClass reference EStructuralFeature");
50336 find mustInstanceOfEClass_class(problem,interpretation,container);
50337 find mayInstanceOfEAttribute_class(problem,interpretation,newObject);
50338 find mayInRelationeStructuralFeatures_reference_EClass(problem,interpretation,container,newObject);
50339 find mustExist(problem, interpretation, container);
50340 neg find mustExist(problem, interpretation, newObject);
50341}
50342pattern createObject_EAttribute_class(
50343 problem:LogicProblem, interpretation:PartialInterpretation,
50344 typeInterpretation:PartialComplexTypeInterpretation)
50345{
50346 find interpretation(problem,interpretation);
50347 neg find hasElementInContainment(problem,interpretation);
50348 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
50349 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EAttribute class");
50350 find mayInstanceOfEAttribute_class(problem,interpretation,newObject);
50351 find mayExist(problem, interpretation, newObject);
50352 neg find mustExist(problem, interpretation, newObject);
50353}
50354pattern createObject_EClass_class_by_eClassifiers_reference_EPackage_with_ePackage_reference_EClassifier(
50355 problem:LogicProblem, interpretation:PartialInterpretation,
50356 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
50357 container:DefinedElement)
50358{
50359 find interpretation(problem,interpretation);
50360 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
50361 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EClass class");
50362 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
50363 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eClassifiers reference EPackage");
50364 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
50365 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"ePackage reference EClassifier");
50366 find mustInstanceOfEPackage_class(problem,interpretation,container);
50367 find mayInstanceOfEClass_class(problem,interpretation,newObject);
50368 find mayInRelationeClassifiers_reference_EPackage(problem,interpretation,container,newObject);
50369 find mustExist(problem, interpretation, container);
50370 neg find mustExist(problem, interpretation, newObject);
50371}
50372pattern createObject_EClass_class(
50373 problem:LogicProblem, interpretation:PartialInterpretation,
50374 typeInterpretation:PartialComplexTypeInterpretation)
50375{
50376 find interpretation(problem,interpretation);
50377 neg find hasElementInContainment(problem,interpretation);
50378 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
50379 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EClass class");
50380 find mayInstanceOfEClass_class(problem,interpretation,newObject);
50381 find mayExist(problem, interpretation, newObject);
50382 neg find mustExist(problem, interpretation, newObject);
50383}
50384pattern createObject_EDataType_class_by_eClassifiers_reference_EPackage_with_ePackage_reference_EClassifier(
50385 problem:LogicProblem, interpretation:PartialInterpretation,
50386 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
50387 container:DefinedElement)
50388{
50389 find interpretation(problem,interpretation);
50390 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
50391 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EDataType class");
50392 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
50393 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eClassifiers reference EPackage");
50394 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
50395 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"ePackage reference EClassifier");
50396 find mustInstanceOfEPackage_class(problem,interpretation,container);
50397 find mayInstanceOfEDataType_class(problem,interpretation,newObject);
50398 find mayInRelationeClassifiers_reference_EPackage(problem,interpretation,container,newObject);
50399 find mustExist(problem, interpretation, container);
50400 neg find mustExist(problem, interpretation, newObject);
50401}
50402pattern createObject_EDataType_class(
50403 problem:LogicProblem, interpretation:PartialInterpretation,
50404 typeInterpretation:PartialComplexTypeInterpretation)
50405{
50406 find interpretation(problem,interpretation);
50407 neg find hasElementInContainment(problem,interpretation);
50408 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
50409 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EDataType class");
50410 find mayInstanceOfEDataType_class(problem,interpretation,newObject);
50411 find mayExist(problem, interpretation, newObject);
50412 neg find mustExist(problem, interpretation, newObject);
50413}
50414pattern createObject_EOperation_class_by_eOperations_reference_EClass_with_eContainingClass_reference_EOperation(
50415 problem:LogicProblem, interpretation:PartialInterpretation,
50416 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
50417 container:DefinedElement)
50418{
50419 find interpretation(problem,interpretation);
50420 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
50421 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EOperation class");
50422 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
50423 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eOperations reference EClass");
50424 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
50425 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eContainingClass reference EOperation");
50426 find mustInstanceOfEClass_class(problem,interpretation,container);
50427 find mayInstanceOfEOperation_class(problem,interpretation,newObject);
50428 find mayInRelationeOperations_reference_EClass(problem,interpretation,container,newObject);
50429 find mustExist(problem, interpretation, container);
50430 neg find mustExist(problem, interpretation, newObject);
50431}
50432pattern createObject_EOperation_class(
50433 problem:LogicProblem, interpretation:PartialInterpretation,
50434 typeInterpretation:PartialComplexTypeInterpretation)
50435{
50436 find interpretation(problem,interpretation);
50437 neg find hasElementInContainment(problem,interpretation);
50438 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
50439 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EOperation class");
50440 find mayInstanceOfEOperation_class(problem,interpretation,newObject);
50441 find mayExist(problem, interpretation, newObject);
50442 neg find mustExist(problem, interpretation, newObject);
50443}
50444pattern createObject_EAnnotation_class_by_eAnnotations_reference_EModelElement_with_eModelElement_reference_EAnnotation(
50445 problem:LogicProblem, interpretation:PartialInterpretation,
50446 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
50447 container:DefinedElement)
50448{
50449 find interpretation(problem,interpretation);
50450 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
50451 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EAnnotation class");
50452 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
50453 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eAnnotations reference EModelElement");
50454 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
50455 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eModelElement reference EAnnotation");
50456 find mustInstanceOfEModelElement_class(problem,interpretation,container);
50457 find mayInstanceOfEAnnotation_class(problem,interpretation,newObject);
50458 find mayInRelationeAnnotations_reference_EModelElement(problem,interpretation,container,newObject);
50459 find mustExist(problem, interpretation, container);
50460 neg find mustExist(problem, interpretation, newObject);
50461}
50462pattern createObject_EAnnotation_class(
50463 problem:LogicProblem, interpretation:PartialInterpretation,
50464 typeInterpretation:PartialComplexTypeInterpretation)
50465{
50466 find interpretation(problem,interpretation);
50467 neg find hasElementInContainment(problem,interpretation);
50468 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
50469 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EAnnotation class");
50470 find mayInstanceOfEAnnotation_class(problem,interpretation,newObject);
50471 find mayExist(problem, interpretation, newObject);
50472 neg find mustExist(problem, interpretation, newObject);
50473}
50474pattern createObject_EParameter_class_by_eParameters_reference_EOperation_with_eOperation_reference_EParameter(
50475 problem:LogicProblem, interpretation:PartialInterpretation,
50476 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
50477 container:DefinedElement)
50478{
50479 find interpretation(problem,interpretation);
50480 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
50481 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EParameter class");
50482 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
50483 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eParameters reference EOperation");
50484 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
50485 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eOperation reference EParameter");
50486 find mustInstanceOfEOperation_class(problem,interpretation,container);
50487 find mayInstanceOfEParameter_class(problem,interpretation,newObject);
50488 find mayInRelationeParameters_reference_EOperation(problem,interpretation,container,newObject);
50489 find mustExist(problem, interpretation, container);
50490 neg find mustExist(problem, interpretation, newObject);
50491}
50492pattern createObject_EParameter_class(
50493 problem:LogicProblem, interpretation:PartialInterpretation,
50494 typeInterpretation:PartialComplexTypeInterpretation)
50495{
50496 find interpretation(problem,interpretation);
50497 neg find hasElementInContainment(problem,interpretation);
50498 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
50499 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EParameter class");
50500 find mayInstanceOfEParameter_class(problem,interpretation,newObject);
50501 find mayExist(problem, interpretation, newObject);
50502 neg find mustExist(problem, interpretation, newObject);
50503}
50504pattern createObject_EObject_class_by_contents_reference_EAnnotation(
50505 problem:LogicProblem, interpretation:PartialInterpretation,
50506 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
50507 container:DefinedElement)
50508{
50509 find interpretation(problem,interpretation);
50510 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
50511 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EObject class");
50512 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
50513 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"contents reference EAnnotation");
50514 find mustInstanceOfEAnnotation_class(problem,interpretation,container);
50515 find mayInstanceOfEObject_class(problem,interpretation,newObject);
50516 find mayInRelationcontents_reference_EAnnotation(problem,interpretation,container,newObject);
50517 find mustExist(problem, interpretation, container);
50518 neg find mustExist(problem, interpretation, newObject);
50519}
50520pattern createObject_EObject_class(
50521 problem:LogicProblem, interpretation:PartialInterpretation,
50522 typeInterpretation:PartialComplexTypeInterpretation)
50523{
50524 find interpretation(problem,interpretation);
50525 neg find hasElementInContainment(problem,interpretation);
50526 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
50527 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EObject class");
50528 find mayInstanceOfEObject_class(problem,interpretation,newObject);
50529 find mayExist(problem, interpretation, newObject);
50530 neg find mustExist(problem, interpretation, newObject);
50531}
50532pattern createObject_EReference_class_by_eStructuralFeatures_reference_EClass_with_eContainingClass_reference_EStructuralFeature(
50533 problem:LogicProblem, interpretation:PartialInterpretation,
50534 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
50535 container:DefinedElement)
50536{
50537 find interpretation(problem,interpretation);
50538 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
50539 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EReference class");
50540 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
50541 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eStructuralFeatures reference EClass");
50542 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
50543 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eContainingClass reference EStructuralFeature");
50544 find mustInstanceOfEClass_class(problem,interpretation,container);
50545 find mayInstanceOfEReference_class(problem,interpretation,newObject);
50546 find mayInRelationeStructuralFeatures_reference_EClass(problem,interpretation,container,newObject);
50547 find mustExist(problem, interpretation, container);
50548 neg find mustExist(problem, interpretation, newObject);
50549}
50550pattern createObject_EReference_class(
50551 problem:LogicProblem, interpretation:PartialInterpretation,
50552 typeInterpretation:PartialComplexTypeInterpretation)
50553{
50554 find interpretation(problem,interpretation);
50555 neg find hasElementInContainment(problem,interpretation);
50556 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
50557 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EReference class");
50558 find mayInstanceOfEReference_class(problem,interpretation,newObject);
50559 find mayExist(problem, interpretation, newObject);
50560 neg find mustExist(problem, interpretation, newObject);
50561}
50562pattern createObject_EEnum_class_by_eClassifiers_reference_EPackage_with_ePackage_reference_EClassifier(
50563 problem:LogicProblem, interpretation:PartialInterpretation,
50564 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
50565 container:DefinedElement)
50566{
50567 find interpretation(problem,interpretation);
50568 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
50569 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EEnum class");
50570 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
50571 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eClassifiers reference EPackage");
50572 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
50573 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"ePackage reference EClassifier");
50574 find mustInstanceOfEPackage_class(problem,interpretation,container);
50575 find mayInstanceOfEEnum_class(problem,interpretation,newObject);
50576 find mayInRelationeClassifiers_reference_EPackage(problem,interpretation,container,newObject);
50577 find mustExist(problem, interpretation, container);
50578 neg find mustExist(problem, interpretation, newObject);
50579}
50580pattern createObject_EEnum_class(
50581 problem:LogicProblem, interpretation:PartialInterpretation,
50582 typeInterpretation:PartialComplexTypeInterpretation)
50583{
50584 find interpretation(problem,interpretation);
50585 neg find hasElementInContainment(problem,interpretation);
50586 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
50587 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EEnum class");
50588 find mayInstanceOfEEnum_class(problem,interpretation,newObject);
50589 find mayExist(problem, interpretation, newObject);
50590 neg find mustExist(problem, interpretation, newObject);
50591}
50592pattern createObject_EPackage_class_UndefinedPart_by_eSubpackages_reference_EPackage_with_eSuperPackage_reference_EPackage(
50593 problem:LogicProblem, interpretation:PartialInterpretation,
50594 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
50595 container:DefinedElement)
50596{
50597 find interpretation(problem,interpretation);
50598 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
50599 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EPackage class UndefinedPart");
50600 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
50601 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eSubpackages reference EPackage");
50602 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
50603 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eSuperPackage reference EPackage");
50604 find mustInstanceOfEPackage_class(problem,interpretation,container);
50605 find mayInstanceOfEPackage_class_UndefinedPart(problem,interpretation,newObject);
50606 find mayInRelationeSubpackages_reference_EPackage(problem,interpretation,container,newObject);
50607 find mustExist(problem, interpretation, container);
50608 neg find mustExist(problem, interpretation, newObject);
50609}
50610pattern createObject_EPackage_class_UndefinedPart(
50611 problem:LogicProblem, interpretation:PartialInterpretation,
50612 typeInterpretation:PartialComplexTypeInterpretation)
50613{
50614 find interpretation(problem,interpretation);
50615 neg find hasElementInContainment(problem,interpretation);
50616 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
50617 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EPackage class UndefinedPart");
50618 find mayInstanceOfEPackage_class_UndefinedPart(problem,interpretation,newObject);
50619 find mayExist(problem, interpretation, newObject);
50620 neg find mustExist(problem, interpretation, newObject);
50621}
50622
50623//////////
50624// 4.2 Type refinement
50625//////////
50626pattern refineTypeTo_EStringToStringMapEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
50627 find interpretation(problem,interpretation);
50628 PartialInterpretation.newElements(interpretation,element);
50629 find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
50630 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
50631 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
50632 neg find mustInstanceOfEModelElement_class(problem,interpretation,element);
50633 neg find mustInstanceOfEObject_class(problem,interpretation,element);
50634}
50635pattern refineTypeTo_EGenericType_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
50636 find interpretation(problem,interpretation);
50637 PartialInterpretation.newElements(interpretation,element);
50638 find mayInstanceOfEGenericType_class(problem,interpretation,element);
50639 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
50640 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
50641 neg find mustInstanceOfEModelElement_class(problem,interpretation,element);
50642 neg find mustInstanceOfEObject_class(problem,interpretation,element);
50643}
50644pattern refineTypeTo_EEnumLiteral_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
50645 find interpretation(problem,interpretation);
50646 PartialInterpretation.newElements(interpretation,element);
50647 find mayInstanceOfEEnumLiteral_class(problem,interpretation,element);
50648 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
50649 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
50650 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
50651 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
50652 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
50653 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
50654 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
50655 neg find mustInstanceOfEObject_class(problem,interpretation,element);
50656 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
50657}
50658pattern refineTypeTo_ETypeParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
50659 find interpretation(problem,interpretation);
50660 PartialInterpretation.newElements(interpretation,element);
50661 find mayInstanceOfETypeParameter_class(problem,interpretation,element);
50662 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
50663 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
50664 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
50665 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
50666 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
50667 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
50668 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
50669 neg find mustInstanceOfEObject_class(problem,interpretation,element);
50670 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
50671}
50672pattern refineTypeTo_EAttribute_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
50673 find interpretation(problem,interpretation);
50674 PartialInterpretation.newElements(interpretation,element);
50675 find mayInstanceOfEAttribute_class(problem,interpretation,element);
50676 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
50677 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
50678 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
50679 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
50680 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
50681 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
50682 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
50683 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
50684 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
50685 neg find mustInstanceOfEObject_class(problem,interpretation,element);
50686 neg find mustInstanceOfEReference_class(problem,interpretation,element);
50687 neg find mustInstanceOfEAttribute_class(problem,interpretation,element);
50688}
50689pattern refineTypeTo_EClass_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
50690 find interpretation(problem,interpretation);
50691 PartialInterpretation.newElements(interpretation,element);
50692 find mayInstanceOfEClass_class(problem,interpretation,element);
50693 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
50694 neg find mustInstanceOfEDataType_class(problem,interpretation,element);
50695 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
50696 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
50697 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
50698 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
50699 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
50700 neg find mustInstanceOfEObject_class(problem,interpretation,element);
50701 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
50702 neg find mustInstanceOfEClass_class(problem,interpretation,element);
50703}
50704pattern refineTypeTo_EDataType_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
50705 find interpretation(problem,interpretation);
50706 PartialInterpretation.newElements(interpretation,element);
50707 find mayInstanceOfEDataType_class(problem,interpretation,element);
50708 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
50709 neg find mustInstanceOfEDataType_class(problem,interpretation,element);
50710 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
50711 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
50712 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
50713 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
50714 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
50715 neg find mustInstanceOfEObject_class(problem,interpretation,element);
50716 neg find mustInstanceOfEEnum_class(problem,interpretation,element);
50717 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
50718 neg find mustInstanceOfEClass_class(problem,interpretation,element);
50719}
50720pattern refineTypeTo_EOperation_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
50721 find interpretation(problem,interpretation);
50722 PartialInterpretation.newElements(interpretation,element);
50723 find mayInstanceOfEOperation_class(problem,interpretation,element);
50724 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
50725 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
50726 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
50727 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
50728 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
50729 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
50730 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
50731 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
50732 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
50733 neg find mustInstanceOfEObject_class(problem,interpretation,element);
50734 neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element);
50735}
50736pattern refineTypeTo_EAnnotation_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
50737 find interpretation(problem,interpretation);
50738 PartialInterpretation.newElements(interpretation,element);
50739 find mayInstanceOfEAnnotation_class(problem,interpretation,element);
50740 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
50741 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
50742 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
50743 neg find mustInstanceOfEObject_class(problem,interpretation,element);
50744 neg find mustInstanceOfENamedElement_class(problem,interpretation,element);
50745}
50746pattern refineTypeTo_EParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
50747 find interpretation(problem,interpretation);
50748 PartialInterpretation.newElements(interpretation,element);
50749 find mayInstanceOfEParameter_class(problem,interpretation,element);
50750 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
50751 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
50752 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
50753 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
50754 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
50755 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
50756 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
50757 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
50758 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
50759 neg find mustInstanceOfEObject_class(problem,interpretation,element);
50760 neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element);
50761}
50762pattern refineTypeTo_EObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
50763 find interpretation(problem,interpretation);
50764 PartialInterpretation.newElements(interpretation,element);
50765 find mayInstanceOfEObject_class(problem,interpretation,element);
50766 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
50767 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
50768 neg find mustInstanceOfEModelElement_class(problem,interpretation,element);
50769 neg find mustInstanceOfEObject_class(problem,interpretation,element);
50770}
50771pattern refineTypeTo_EReference_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
50772 find interpretation(problem,interpretation);
50773 PartialInterpretation.newElements(interpretation,element);
50774 find mayInstanceOfEReference_class(problem,interpretation,element);
50775 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
50776 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
50777 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
50778 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
50779 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
50780 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
50781 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
50782 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
50783 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
50784 neg find mustInstanceOfEObject_class(problem,interpretation,element);
50785 neg find mustInstanceOfEReference_class(problem,interpretation,element);
50786 neg find mustInstanceOfEAttribute_class(problem,interpretation,element);
50787}
50788pattern refineTypeTo_EEnum_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
50789 find interpretation(problem,interpretation);
50790 PartialInterpretation.newElements(interpretation,element);
50791 find mayInstanceOfEEnum_class(problem,interpretation,element);
50792 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
50793 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
50794 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
50795 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
50796 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
50797 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
50798 neg find mustInstanceOfEObject_class(problem,interpretation,element);
50799 neg find mustInstanceOfEEnum_class(problem,interpretation,element);
50800 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
50801 neg find mustInstanceOfEClass_class(problem,interpretation,element);
50802}
50803pattern refineTypeTo_EPackage_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
50804 find interpretation(problem,interpretation);
50805 PartialInterpretation.newElements(interpretation,element);
50806 find mayInstanceOfEPackage_class_UndefinedPart(problem,interpretation,element);
50807 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
50808 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
50809 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
50810 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
50811 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
50812 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
50813 neg find mustInstanceOfEObject_class(problem,interpretation,element);
50814 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
50815 neg find mustInstanceOfEPackage_class_UndefinedPart(problem,interpretation,element);
50816}
50817
50818//////////
50819// 4.3 Relation refinement
50820//////////
50821pattern refineRelation_eAttributeType_reference_EAttribute(
50822 problem:LogicProblem, interpretation:PartialInterpretation,
50823 relationIterpretation:PartialRelationInterpretation,
50824 from: DefinedElement, to: DefinedElement)
50825{
50826 find interpretation(problem,interpretation);
50827 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
50828 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributeType reference EAttribute");
50829 find mustExist(problem, interpretation, from);
50830 find mustExist(problem, interpretation, to);
50831 find mustInstanceOfEAttribute_class(problem,interpretation,from);
50832 find mustInstanceOfEDataType_class(problem,interpretation,to);
50833 find mayInRelationeAttributeType_reference_EAttribute(problem,interpretation,from,to);
50834 neg find mustInRelationeAttributeType_reference_EAttribute(problem,interpretation,from,to);
50835}
50836pattern refineRelation_references_reference_EAnnotation(
50837 problem:LogicProblem, interpretation:PartialInterpretation,
50838 relationIterpretation:PartialRelationInterpretation,
50839 from: DefinedElement, to: DefinedElement)
50840{
50841 find interpretation(problem,interpretation);
50842 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
50843 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"references reference EAnnotation");
50844 find mustExist(problem, interpretation, from);
50845 find mustExist(problem, interpretation, to);
50846 find mustInstanceOfEAnnotation_class(problem,interpretation,from);
50847 find mustInstanceOfEObject_class(problem,interpretation,to);
50848 find mayInRelationreferences_reference_EAnnotation(problem,interpretation,from,to);
50849 neg find mustInRelationreferences_reference_EAnnotation(problem,interpretation,from,to);
50850}
50851pattern refineRelation_eSuperTypes_reference_EClass(
50852 problem:LogicProblem, interpretation:PartialInterpretation,
50853 relationIterpretation:PartialRelationInterpretation,
50854 from: DefinedElement, to: DefinedElement)
50855{
50856 find interpretation(problem,interpretation);
50857 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
50858 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eSuperTypes reference EClass");
50859 find mustExist(problem, interpretation, from);
50860 find mustExist(problem, interpretation, to);
50861 find mustInstanceOfEClass_class(problem,interpretation,from);
50862 find mustInstanceOfEClass_class(problem,interpretation,to);
50863 find mayInRelationeSuperTypes_reference_EClass(problem,interpretation,from,to);
50864 neg find mustInRelationeSuperTypes_reference_EClass(problem,interpretation,from,to);
50865}
50866pattern refineRelation_eAllAttributes_reference_EClass(
50867 problem:LogicProblem, interpretation:PartialInterpretation,
50868 relationIterpretation:PartialRelationInterpretation,
50869 from: DefinedElement, to: DefinedElement)
50870{
50871 find interpretation(problem,interpretation);
50872 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
50873 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllAttributes reference EClass");
50874 find mustExist(problem, interpretation, from);
50875 find mustExist(problem, interpretation, to);
50876 find mustInstanceOfEClass_class(problem,interpretation,from);
50877 find mustInstanceOfEAttribute_class(problem,interpretation,to);
50878 find mayInRelationeAllAttributes_reference_EClass(problem,interpretation,from,to);
50879 neg find mustInRelationeAllAttributes_reference_EClass(problem,interpretation,from,to);
50880}
50881pattern refineRelation_eAllReferences_reference_EClass(
50882 problem:LogicProblem, interpretation:PartialInterpretation,
50883 relationIterpretation:PartialRelationInterpretation,
50884 from: DefinedElement, to: DefinedElement)
50885{
50886 find interpretation(problem,interpretation);
50887 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
50888 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllReferences reference EClass");
50889 find mustExist(problem, interpretation, from);
50890 find mustExist(problem, interpretation, to);
50891 find mustInstanceOfEClass_class(problem,interpretation,from);
50892 find mustInstanceOfEReference_class(problem,interpretation,to);
50893 find mayInRelationeAllReferences_reference_EClass(problem,interpretation,from,to);
50894 neg find mustInRelationeAllReferences_reference_EClass(problem,interpretation,from,to);
50895}
50896pattern refineRelation_eReferences_reference_EClass(
50897 problem:LogicProblem, interpretation:PartialInterpretation,
50898 relationIterpretation:PartialRelationInterpretation,
50899 from: DefinedElement, to: DefinedElement)
50900{
50901 find interpretation(problem,interpretation);
50902 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
50903 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferences reference EClass");
50904 find mustExist(problem, interpretation, from);
50905 find mustExist(problem, interpretation, to);
50906 find mustInstanceOfEClass_class(problem,interpretation,from);
50907 find mustInstanceOfEReference_class(problem,interpretation,to);
50908 find mayInRelationeReferences_reference_EClass(problem,interpretation,from,to);
50909 neg find mustInRelationeReferences_reference_EClass(problem,interpretation,from,to);
50910}
50911pattern refineRelation_eAttributes_reference_EClass(
50912 problem:LogicProblem, interpretation:PartialInterpretation,
50913 relationIterpretation:PartialRelationInterpretation,
50914 from: DefinedElement, to: DefinedElement)
50915{
50916 find interpretation(problem,interpretation);
50917 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
50918 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributes reference EClass");
50919 find mustExist(problem, interpretation, from);
50920 find mustExist(problem, interpretation, to);
50921 find mustInstanceOfEClass_class(problem,interpretation,from);
50922 find mustInstanceOfEAttribute_class(problem,interpretation,to);
50923 find mayInRelationeAttributes_reference_EClass(problem,interpretation,from,to);
50924 neg find mustInRelationeAttributes_reference_EClass(problem,interpretation,from,to);
50925}
50926pattern refineRelation_eAllContainments_reference_EClass(
50927 problem:LogicProblem, interpretation:PartialInterpretation,
50928 relationIterpretation:PartialRelationInterpretation,
50929 from: DefinedElement, to: DefinedElement)
50930{
50931 find interpretation(problem,interpretation);
50932 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
50933 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllContainments reference EClass");
50934 find mustExist(problem, interpretation, from);
50935 find mustExist(problem, interpretation, to);
50936 find mustInstanceOfEClass_class(problem,interpretation,from);
50937 find mustInstanceOfEReference_class(problem,interpretation,to);
50938 find mayInRelationeAllContainments_reference_EClass(problem,interpretation,from,to);
50939 neg find mustInRelationeAllContainments_reference_EClass(problem,interpretation,from,to);
50940}
50941pattern refineRelation_eAllOperations_reference_EClass(
50942 problem:LogicProblem, interpretation:PartialInterpretation,
50943 relationIterpretation:PartialRelationInterpretation,
50944 from: DefinedElement, to: DefinedElement)
50945{
50946 find interpretation(problem,interpretation);
50947 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
50948 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllOperations reference EClass");
50949 find mustExist(problem, interpretation, from);
50950 find mustExist(problem, interpretation, to);
50951 find mustInstanceOfEClass_class(problem,interpretation,from);
50952 find mustInstanceOfEOperation_class(problem,interpretation,to);
50953 find mayInRelationeAllOperations_reference_EClass(problem,interpretation,from,to);
50954 neg find mustInRelationeAllOperations_reference_EClass(problem,interpretation,from,to);
50955}
50956pattern refineRelation_eAllStructuralFeatures_reference_EClass(
50957 problem:LogicProblem, interpretation:PartialInterpretation,
50958 relationIterpretation:PartialRelationInterpretation,
50959 from: DefinedElement, to: DefinedElement)
50960{
50961 find interpretation(problem,interpretation);
50962 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
50963 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllStructuralFeatures reference EClass");
50964 find mustExist(problem, interpretation, from);
50965 find mustExist(problem, interpretation, to);
50966 find mustInstanceOfEClass_class(problem,interpretation,from);
50967 find mustInstanceOfEStructuralFeature_class(problem,interpretation,to);
50968 find mayInRelationeAllStructuralFeatures_reference_EClass(problem,interpretation,from,to);
50969 neg find mustInRelationeAllStructuralFeatures_reference_EClass(problem,interpretation,from,to);
50970}
50971pattern refineRelation_eAllSuperTypes_reference_EClass(
50972 problem:LogicProblem, interpretation:PartialInterpretation,
50973 relationIterpretation:PartialRelationInterpretation,
50974 from: DefinedElement, to: DefinedElement)
50975{
50976 find interpretation(problem,interpretation);
50977 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
50978 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllSuperTypes reference EClass");
50979 find mustExist(problem, interpretation, from);
50980 find mustExist(problem, interpretation, to);
50981 find mustInstanceOfEClass_class(problem,interpretation,from);
50982 find mustInstanceOfEClass_class(problem,interpretation,to);
50983 find mayInRelationeAllSuperTypes_reference_EClass(problem,interpretation,from,to);
50984 neg find mustInRelationeAllSuperTypes_reference_EClass(problem,interpretation,from,to);
50985}
50986pattern refineRelation_eIDAttribute_reference_EClass(
50987 problem:LogicProblem, interpretation:PartialInterpretation,
50988 relationIterpretation:PartialRelationInterpretation,
50989 from: DefinedElement, to: DefinedElement)
50990{
50991 find interpretation(problem,interpretation);
50992 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
50993 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eIDAttribute reference EClass");
50994 find mustExist(problem, interpretation, from);
50995 find mustExist(problem, interpretation, to);
50996 find mustInstanceOfEClass_class(problem,interpretation,from);
50997 find mustInstanceOfEAttribute_class(problem,interpretation,to);
50998 find mayInRelationeIDAttribute_reference_EClass(problem,interpretation,from,to);
50999 neg find mustInRelationeIDAttribute_reference_EClass(problem,interpretation,from,to);
51000}
51001pattern refineRelation_eAllGenericSuperTypes_reference_EClass(
51002 problem:LogicProblem, interpretation:PartialInterpretation,
51003 relationIterpretation:PartialRelationInterpretation,
51004 from: DefinedElement, to: DefinedElement)
51005{
51006 find interpretation(problem,interpretation);
51007 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
51008 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllGenericSuperTypes reference EClass");
51009 find mustExist(problem, interpretation, from);
51010 find mustExist(problem, interpretation, to);
51011 find mustInstanceOfEClass_class(problem,interpretation,from);
51012 find mustInstanceOfEGenericType_class(problem,interpretation,to);
51013 find mayInRelationeAllGenericSuperTypes_reference_EClass(problem,interpretation,from,to);
51014 neg find mustInRelationeAllGenericSuperTypes_reference_EClass(problem,interpretation,from,to);
51015}
51016pattern refineRelation_eExceptions_reference_EOperation(
51017 problem:LogicProblem, interpretation:PartialInterpretation,
51018 relationIterpretation:PartialRelationInterpretation,
51019 from: DefinedElement, to: DefinedElement)
51020{
51021 find interpretation(problem,interpretation);
51022 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
51023 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eExceptions reference EOperation");
51024 find mustExist(problem, interpretation, from);
51025 find mustExist(problem, interpretation, to);
51026 find mustInstanceOfEOperation_class(problem,interpretation,from);
51027 find mustInstanceOfEClassifier_class(problem,interpretation,to);
51028 find mayInRelationeExceptions_reference_EOperation(problem,interpretation,from,to);
51029 neg find mustInRelationeExceptions_reference_EOperation(problem,interpretation,from,to);
51030}
51031pattern refineRelation_eOpposite_reference_EReference(
51032 problem:LogicProblem, interpretation:PartialInterpretation,
51033 relationIterpretation:PartialRelationInterpretation,
51034 from: DefinedElement, to: DefinedElement)
51035{
51036 find interpretation(problem,interpretation);
51037 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
51038 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eOpposite reference EReference");
51039 find mustExist(problem, interpretation, from);
51040 find mustExist(problem, interpretation, to);
51041 find mustInstanceOfEReference_class(problem,interpretation,from);
51042 find mustInstanceOfEReference_class(problem,interpretation,to);
51043 find mayInRelationeOpposite_reference_EReference(problem,interpretation,from,to);
51044 neg find mustInRelationeOpposite_reference_EReference(problem,interpretation,from,to);
51045}
51046pattern refineRelation_eReferenceType_reference_EReference(
51047 problem:LogicProblem, interpretation:PartialInterpretation,
51048 relationIterpretation:PartialRelationInterpretation,
51049 from: DefinedElement, to: DefinedElement)
51050{
51051 find interpretation(problem,interpretation);
51052 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
51053 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferenceType reference EReference");
51054 find mustExist(problem, interpretation, from);
51055 find mustExist(problem, interpretation, to);
51056 find mustInstanceOfEReference_class(problem,interpretation,from);
51057 find mustInstanceOfEClass_class(problem,interpretation,to);
51058 find mayInRelationeReferenceType_reference_EReference(problem,interpretation,from,to);
51059 neg find mustInRelationeReferenceType_reference_EReference(problem,interpretation,from,to);
51060}
51061pattern refineRelation_eKeys_reference_EReference(
51062 problem:LogicProblem, interpretation:PartialInterpretation,
51063 relationIterpretation:PartialRelationInterpretation,
51064 from: DefinedElement, to: DefinedElement)
51065{
51066 find interpretation(problem,interpretation);
51067 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
51068 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eKeys reference EReference");
51069 find mustExist(problem, interpretation, from);
51070 find mustExist(problem, interpretation, to);
51071 find mustInstanceOfEReference_class(problem,interpretation,from);
51072 find mustInstanceOfEAttribute_class(problem,interpretation,to);
51073 find mayInRelationeKeys_reference_EReference(problem,interpretation,from,to);
51074 neg find mustInRelationeKeys_reference_EReference(problem,interpretation,from,to);
51075}
51076pattern refineRelation_eType_reference_ETypedElement(
51077 problem:LogicProblem, interpretation:PartialInterpretation,
51078 relationIterpretation:PartialRelationInterpretation,
51079 from: DefinedElement, to: DefinedElement)
51080{
51081 find interpretation(problem,interpretation);
51082 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
51083 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eType reference ETypedElement");
51084 find mustExist(problem, interpretation, from);
51085 find mustExist(problem, interpretation, to);
51086 find mustInstanceOfETypedElement_class(problem,interpretation,from);
51087 find mustInstanceOfEClassifier_class(problem,interpretation,to);
51088 find mayInRelationeType_reference_ETypedElement(problem,interpretation,from,to);
51089 neg find mustInRelationeType_reference_ETypedElement(problem,interpretation,from,to);
51090}
51091pattern refineRelation_eRawType_reference_EGenericType(
51092 problem:LogicProblem, interpretation:PartialInterpretation,
51093 relationIterpretation:PartialRelationInterpretation,
51094 from: DefinedElement, to: DefinedElement)
51095{
51096 find interpretation(problem,interpretation);
51097 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
51098 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eRawType reference EGenericType");
51099 find mustExist(problem, interpretation, from);
51100 find mustExist(problem, interpretation, to);
51101 find mustInstanceOfEGenericType_class(problem,interpretation,from);
51102 find mustInstanceOfEClassifier_class(problem,interpretation,to);
51103 find mayInRelationeRawType_reference_EGenericType(problem,interpretation,from,to);
51104 neg find mustInRelationeRawType_reference_EGenericType(problem,interpretation,from,to);
51105}
51106pattern refineRelation_eTypeParameter_reference_EGenericType(
51107 problem:LogicProblem, interpretation:PartialInterpretation,
51108 relationIterpretation:PartialRelationInterpretation,
51109 from: DefinedElement, to: DefinedElement)
51110{
51111 find interpretation(problem,interpretation);
51112 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
51113 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeParameter reference EGenericType");
51114 find mustExist(problem, interpretation, from);
51115 find mustExist(problem, interpretation, to);
51116 find mustInstanceOfEGenericType_class(problem,interpretation,from);
51117 find mustInstanceOfETypeParameter_class(problem,interpretation,to);
51118 find mayInRelationeTypeParameter_reference_EGenericType(problem,interpretation,from,to);
51119 neg find mustInRelationeTypeParameter_reference_EGenericType(problem,interpretation,from,to);
51120}
51121pattern refineRelation_eClassifier_reference_EGenericType(
51122 problem:LogicProblem, interpretation:PartialInterpretation,
51123 relationIterpretation:PartialRelationInterpretation,
51124 from: DefinedElement, to: DefinedElement)
51125{
51126 find interpretation(problem,interpretation);
51127 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
51128 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eClassifier reference EGenericType");
51129 find mustExist(problem, interpretation, from);
51130 find mustExist(problem, interpretation, to);
51131 find mustInstanceOfEGenericType_class(problem,interpretation,from);
51132 find mustInstanceOfEClassifier_class(problem,interpretation,to);
51133 find mayInRelationeClassifier_reference_EGenericType(problem,interpretation,from,to);
51134 neg find mustInRelationeClassifier_reference_EGenericType(problem,interpretation,from,to);
51135}
51136pattern refineRelation_iD_attribute_EAttribute(
51137 problem:LogicProblem, interpretation:PartialInterpretation,
51138 relationIterpretation:PartialRelationInterpretation,
51139 from: DefinedElement, to: DefinedElement)
51140{
51141 find interpretation(problem,interpretation);
51142 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
51143 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"iD attribute EAttribute");
51144 find mustExist(problem, interpretation, from);
51145 find mustExist(problem, interpretation, to);
51146 find mustInstanceOfEAttribute_class(problem,interpretation,from);
51147 BooleanElement(to);
51148 find mayInRelationiD_attribute_EAttribute(problem,interpretation,from,to);
51149 neg find mustInRelationiD_attribute_EAttribute(problem,interpretation,from,to);
51150}
51151pattern refineRelation_source_attribute_EAnnotation(
51152 problem:LogicProblem, interpretation:PartialInterpretation,
51153 relationIterpretation:PartialRelationInterpretation,
51154 from: DefinedElement, to: DefinedElement)
51155{
51156 find interpretation(problem,interpretation);
51157 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
51158 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"source attribute EAnnotation");
51159 find mustExist(problem, interpretation, from);
51160 find mustExist(problem, interpretation, to);
51161 find mustInstanceOfEAnnotation_class(problem,interpretation,from);
51162 StringElement(to);
51163 find mayInRelationsource_attribute_EAnnotation(problem,interpretation,from,to);
51164 neg find mustInRelationsource_attribute_EAnnotation(problem,interpretation,from,to);
51165}
51166pattern refineRelation_abstract_attribute_EClass(
51167 problem:LogicProblem, interpretation:PartialInterpretation,
51168 relationIterpretation:PartialRelationInterpretation,
51169 from: DefinedElement, to: DefinedElement)
51170{
51171 find interpretation(problem,interpretation);
51172 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
51173 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"abstract attribute EClass");
51174 find mustExist(problem, interpretation, from);
51175 find mustExist(problem, interpretation, to);
51176 find mustInstanceOfEClass_class(problem,interpretation,from);
51177 BooleanElement(to);
51178 find mayInRelationabstract_attribute_EClass(problem,interpretation,from,to);
51179 neg find mustInRelationabstract_attribute_EClass(problem,interpretation,from,to);
51180}
51181pattern refineRelation_interface_attribute_EClass(
51182 problem:LogicProblem, interpretation:PartialInterpretation,
51183 relationIterpretation:PartialRelationInterpretation,
51184 from: DefinedElement, to: DefinedElement)
51185{
51186 find interpretation(problem,interpretation);
51187 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
51188 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface attribute EClass");
51189 find mustExist(problem, interpretation, from);
51190 find mustExist(problem, interpretation, to);
51191 find mustInstanceOfEClass_class(problem,interpretation,from);
51192 BooleanElement(to);
51193 find mayInRelationinterface_attribute_EClass(problem,interpretation,from,to);
51194 neg find mustInRelationinterface_attribute_EClass(problem,interpretation,from,to);
51195}
51196pattern refineRelation_instanceClassName_attribute_EClassifier(
51197 problem:LogicProblem, interpretation:PartialInterpretation,
51198 relationIterpretation:PartialRelationInterpretation,
51199 from: DefinedElement, to: DefinedElement)
51200{
51201 find interpretation(problem,interpretation);
51202 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
51203 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"instanceClassName attribute EClassifier");
51204 find mustExist(problem, interpretation, from);
51205 find mustExist(problem, interpretation, to);
51206 find mustInstanceOfEClassifier_class(problem,interpretation,from);
51207 StringElement(to);
51208 find mayInRelationinstanceClassName_attribute_EClassifier(problem,interpretation,from,to);
51209 neg find mustInRelationinstanceClassName_attribute_EClassifier(problem,interpretation,from,to);
51210}
51211pattern refineRelation_instanceTypeName_attribute_EClassifier(
51212 problem:LogicProblem, interpretation:PartialInterpretation,
51213 relationIterpretation:PartialRelationInterpretation,
51214 from: DefinedElement, to: DefinedElement)
51215{
51216 find interpretation(problem,interpretation);
51217 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
51218 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"instanceTypeName attribute EClassifier");
51219 find mustExist(problem, interpretation, from);
51220 find mustExist(problem, interpretation, to);
51221 find mustInstanceOfEClassifier_class(problem,interpretation,from);
51222 StringElement(to);
51223 find mayInRelationinstanceTypeName_attribute_EClassifier(problem,interpretation,from,to);
51224 neg find mustInRelationinstanceTypeName_attribute_EClassifier(problem,interpretation,from,to);
51225}
51226pattern refineRelation_serializable_attribute_EDataType(
51227 problem:LogicProblem, interpretation:PartialInterpretation,
51228 relationIterpretation:PartialRelationInterpretation,
51229 from: DefinedElement, to: DefinedElement)
51230{
51231 find interpretation(problem,interpretation);
51232 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
51233 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"serializable attribute EDataType");
51234 find mustExist(problem, interpretation, from);
51235 find mustExist(problem, interpretation, to);
51236 find mustInstanceOfEDataType_class(problem,interpretation,from);
51237 BooleanElement(to);
51238 find mayInRelationserializable_attribute_EDataType(problem,interpretation,from,to);
51239 neg find mustInRelationserializable_attribute_EDataType(problem,interpretation,from,to);
51240}
51241pattern refineRelation_value_attribute_EEnumLiteral(
51242 problem:LogicProblem, interpretation:PartialInterpretation,
51243 relationIterpretation:PartialRelationInterpretation,
51244 from: DefinedElement, to: DefinedElement)
51245{
51246 find interpretation(problem,interpretation);
51247 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
51248 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"value attribute EEnumLiteral");
51249 find mustExist(problem, interpretation, from);
51250 find mustExist(problem, interpretation, to);
51251 find mustInstanceOfEEnumLiteral_class(problem,interpretation,from);
51252 IntegerElement(to);
51253 find mayInRelationvalue_attribute_EEnumLiteral(problem,interpretation,from,to);
51254 neg find mustInRelationvalue_attribute_EEnumLiteral(problem,interpretation,from,to);
51255}
51256pattern refineRelation_literal_attribute_EEnumLiteral(
51257 problem:LogicProblem, interpretation:PartialInterpretation,
51258 relationIterpretation:PartialRelationInterpretation,
51259 from: DefinedElement, to: DefinedElement)
51260{
51261 find interpretation(problem,interpretation);
51262 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
51263 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"literal attribute EEnumLiteral");
51264 find mustExist(problem, interpretation, from);
51265 find mustExist(problem, interpretation, to);
51266 find mustInstanceOfEEnumLiteral_class(problem,interpretation,from);
51267 StringElement(to);
51268 find mayInRelationliteral_attribute_EEnumLiteral(problem,interpretation,from,to);
51269 neg find mustInRelationliteral_attribute_EEnumLiteral(problem,interpretation,from,to);
51270}
51271pattern refineRelation_name_attribute_ENamedElement(
51272 problem:LogicProblem, interpretation:PartialInterpretation,
51273 relationIterpretation:PartialRelationInterpretation,
51274 from: DefinedElement, to: DefinedElement)
51275{
51276 find interpretation(problem,interpretation);
51277 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
51278 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"name attribute ENamedElement");
51279 find mustExist(problem, interpretation, from);
51280 find mustExist(problem, interpretation, to);
51281 find mustInstanceOfENamedElement_class(problem,interpretation,from);
51282 StringElement(to);
51283 find mayInRelationname_attribute_ENamedElement(problem,interpretation,from,to);
51284 neg find mustInRelationname_attribute_ENamedElement(problem,interpretation,from,to);
51285}
51286pattern refineRelation_nsURI_attribute_EPackage(
51287 problem:LogicProblem, interpretation:PartialInterpretation,
51288 relationIterpretation:PartialRelationInterpretation,
51289 from: DefinedElement, to: DefinedElement)
51290{
51291 find interpretation(problem,interpretation);
51292 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
51293 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"nsURI attribute EPackage");
51294 find mustExist(problem, interpretation, from);
51295 find mustExist(problem, interpretation, to);
51296 find mustInstanceOfEPackage_class(problem,interpretation,from);
51297 StringElement(to);
51298 find mayInRelationnsURI_attribute_EPackage(problem,interpretation,from,to);
51299 neg find mustInRelationnsURI_attribute_EPackage(problem,interpretation,from,to);
51300}
51301pattern refineRelation_nsPrefix_attribute_EPackage(
51302 problem:LogicProblem, interpretation:PartialInterpretation,
51303 relationIterpretation:PartialRelationInterpretation,
51304 from: DefinedElement, to: DefinedElement)
51305{
51306 find interpretation(problem,interpretation);
51307 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
51308 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"nsPrefix attribute EPackage");
51309 find mustExist(problem, interpretation, from);
51310 find mustExist(problem, interpretation, to);
51311 find mustInstanceOfEPackage_class(problem,interpretation,from);
51312 StringElement(to);
51313 find mayInRelationnsPrefix_attribute_EPackage(problem,interpretation,from,to);
51314 neg find mustInRelationnsPrefix_attribute_EPackage(problem,interpretation,from,to);
51315}
51316pattern refineRelation_containment_attribute_EReference(
51317 problem:LogicProblem, interpretation:PartialInterpretation,
51318 relationIterpretation:PartialRelationInterpretation,
51319 from: DefinedElement, to: DefinedElement)
51320{
51321 find interpretation(problem,interpretation);
51322 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
51323 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"containment attribute EReference");
51324 find mustExist(problem, interpretation, from);
51325 find mustExist(problem, interpretation, to);
51326 find mustInstanceOfEReference_class(problem,interpretation,from);
51327 BooleanElement(to);
51328 find mayInRelationcontainment_attribute_EReference(problem,interpretation,from,to);
51329 neg find mustInRelationcontainment_attribute_EReference(problem,interpretation,from,to);
51330}
51331pattern refineRelation_container_attribute_EReference(
51332 problem:LogicProblem, interpretation:PartialInterpretation,
51333 relationIterpretation:PartialRelationInterpretation,
51334 from: DefinedElement, to: DefinedElement)
51335{
51336 find interpretation(problem,interpretation);
51337 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
51338 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"container attribute EReference");
51339 find mustExist(problem, interpretation, from);
51340 find mustExist(problem, interpretation, to);
51341 find mustInstanceOfEReference_class(problem,interpretation,from);
51342 BooleanElement(to);
51343 find mayInRelationcontainer_attribute_EReference(problem,interpretation,from,to);
51344 neg find mustInRelationcontainer_attribute_EReference(problem,interpretation,from,to);
51345}
51346pattern refineRelation_resolveProxies_attribute_EReference(
51347 problem:LogicProblem, interpretation:PartialInterpretation,
51348 relationIterpretation:PartialRelationInterpretation,
51349 from: DefinedElement, to: DefinedElement)
51350{
51351 find interpretation(problem,interpretation);
51352 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
51353 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"resolveProxies attribute EReference");
51354 find mustExist(problem, interpretation, from);
51355 find mustExist(problem, interpretation, to);
51356 find mustInstanceOfEReference_class(problem,interpretation,from);
51357 BooleanElement(to);
51358 find mayInRelationresolveProxies_attribute_EReference(problem,interpretation,from,to);
51359 neg find mustInRelationresolveProxies_attribute_EReference(problem,interpretation,from,to);
51360}
51361pattern refineRelation_changeable_attribute_EStructuralFeature(
51362 problem:LogicProblem, interpretation:PartialInterpretation,
51363 relationIterpretation:PartialRelationInterpretation,
51364 from: DefinedElement, to: DefinedElement)
51365{
51366 find interpretation(problem,interpretation);
51367 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
51368 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"changeable attribute EStructuralFeature");
51369 find mustExist(problem, interpretation, from);
51370 find mustExist(problem, interpretation, to);
51371 find mustInstanceOfEStructuralFeature_class(problem,interpretation,from);
51372 BooleanElement(to);
51373 find mayInRelationchangeable_attribute_EStructuralFeature(problem,interpretation,from,to);
51374 neg find mustInRelationchangeable_attribute_EStructuralFeature(problem,interpretation,from,to);
51375}
51376pattern refineRelation_volatile_attribute_EStructuralFeature(
51377 problem:LogicProblem, interpretation:PartialInterpretation,
51378 relationIterpretation:PartialRelationInterpretation,
51379 from: DefinedElement, to: DefinedElement)
51380{
51381 find interpretation(problem,interpretation);
51382 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
51383 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"volatile attribute EStructuralFeature");
51384 find mustExist(problem, interpretation, from);
51385 find mustExist(problem, interpretation, to);
51386 find mustInstanceOfEStructuralFeature_class(problem,interpretation,from);
51387 BooleanElement(to);
51388 find mayInRelationvolatile_attribute_EStructuralFeature(problem,interpretation,from,to);
51389 neg find mustInRelationvolatile_attribute_EStructuralFeature(problem,interpretation,from,to);
51390}
51391pattern refineRelation_transient_attribute_EStructuralFeature(
51392 problem:LogicProblem, interpretation:PartialInterpretation,
51393 relationIterpretation:PartialRelationInterpretation,
51394 from: DefinedElement, to: DefinedElement)
51395{
51396 find interpretation(problem,interpretation);
51397 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
51398 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"transient attribute EStructuralFeature");
51399 find mustExist(problem, interpretation, from);
51400 find mustExist(problem, interpretation, to);
51401 find mustInstanceOfEStructuralFeature_class(problem,interpretation,from);
51402 BooleanElement(to);
51403 find mayInRelationtransient_attribute_EStructuralFeature(problem,interpretation,from,to);
51404 neg find mustInRelationtransient_attribute_EStructuralFeature(problem,interpretation,from,to);
51405}
51406pattern refineRelation_defaultValueLiteral_attribute_EStructuralFeature(
51407 problem:LogicProblem, interpretation:PartialInterpretation,
51408 relationIterpretation:PartialRelationInterpretation,
51409 from: DefinedElement, to: DefinedElement)
51410{
51411 find interpretation(problem,interpretation);
51412 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
51413 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"defaultValueLiteral attribute EStructuralFeature");
51414 find mustExist(problem, interpretation, from);
51415 find mustExist(problem, interpretation, to);
51416 find mustInstanceOfEStructuralFeature_class(problem,interpretation,from);
51417 StringElement(to);
51418 find mayInRelationdefaultValueLiteral_attribute_EStructuralFeature(problem,interpretation,from,to);
51419 neg find mustInRelationdefaultValueLiteral_attribute_EStructuralFeature(problem,interpretation,from,to);
51420}
51421pattern refineRelation_unsettable_attribute_EStructuralFeature(
51422 problem:LogicProblem, interpretation:PartialInterpretation,
51423 relationIterpretation:PartialRelationInterpretation,
51424 from: DefinedElement, to: DefinedElement)
51425{
51426 find interpretation(problem,interpretation);
51427 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
51428 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"unsettable attribute EStructuralFeature");
51429 find mustExist(problem, interpretation, from);
51430 find mustExist(problem, interpretation, to);
51431 find mustInstanceOfEStructuralFeature_class(problem,interpretation,from);
51432 BooleanElement(to);
51433 find mayInRelationunsettable_attribute_EStructuralFeature(problem,interpretation,from,to);
51434 neg find mustInRelationunsettable_attribute_EStructuralFeature(problem,interpretation,from,to);
51435}
51436pattern refineRelation_derived_attribute_EStructuralFeature(
51437 problem:LogicProblem, interpretation:PartialInterpretation,
51438 relationIterpretation:PartialRelationInterpretation,
51439 from: DefinedElement, to: DefinedElement)
51440{
51441 find interpretation(problem,interpretation);
51442 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
51443 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"derived attribute EStructuralFeature");
51444 find mustExist(problem, interpretation, from);
51445 find mustExist(problem, interpretation, to);
51446 find mustInstanceOfEStructuralFeature_class(problem,interpretation,from);
51447 BooleanElement(to);
51448 find mayInRelationderived_attribute_EStructuralFeature(problem,interpretation,from,to);
51449 neg find mustInRelationderived_attribute_EStructuralFeature(problem,interpretation,from,to);
51450}
51451pattern refineRelation_ordered_attribute_ETypedElement(
51452 problem:LogicProblem, interpretation:PartialInterpretation,
51453 relationIterpretation:PartialRelationInterpretation,
51454 from: DefinedElement, to: DefinedElement)
51455{
51456 find interpretation(problem,interpretation);
51457 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
51458 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"ordered attribute ETypedElement");
51459 find mustExist(problem, interpretation, from);
51460 find mustExist(problem, interpretation, to);
51461 find mustInstanceOfETypedElement_class(problem,interpretation,from);
51462 BooleanElement(to);
51463 find mayInRelationordered_attribute_ETypedElement(problem,interpretation,from,to);
51464 neg find mustInRelationordered_attribute_ETypedElement(problem,interpretation,from,to);
51465}
51466pattern refineRelation_unique_attribute_ETypedElement(
51467 problem:LogicProblem, interpretation:PartialInterpretation,
51468 relationIterpretation:PartialRelationInterpretation,
51469 from: DefinedElement, to: DefinedElement)
51470{
51471 find interpretation(problem,interpretation);
51472 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
51473 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"unique attribute ETypedElement");
51474 find mustExist(problem, interpretation, from);
51475 find mustExist(problem, interpretation, to);
51476 find mustInstanceOfETypedElement_class(problem,interpretation,from);
51477 BooleanElement(to);
51478 find mayInRelationunique_attribute_ETypedElement(problem,interpretation,from,to);
51479 neg find mustInRelationunique_attribute_ETypedElement(problem,interpretation,from,to);
51480}
51481pattern refineRelation_lowerBound_attribute_ETypedElement(
51482 problem:LogicProblem, interpretation:PartialInterpretation,
51483 relationIterpretation:PartialRelationInterpretation,
51484 from: DefinedElement, to: DefinedElement)
51485{
51486 find interpretation(problem,interpretation);
51487 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
51488 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"lowerBound attribute ETypedElement");
51489 find mustExist(problem, interpretation, from);
51490 find mustExist(problem, interpretation, to);
51491 find mustInstanceOfETypedElement_class(problem,interpretation,from);
51492 IntegerElement(to);
51493 find mayInRelationlowerBound_attribute_ETypedElement(problem,interpretation,from,to);
51494 neg find mustInRelationlowerBound_attribute_ETypedElement(problem,interpretation,from,to);
51495}
51496pattern refineRelation_upperBound_attribute_ETypedElement(
51497 problem:LogicProblem, interpretation:PartialInterpretation,
51498 relationIterpretation:PartialRelationInterpretation,
51499 from: DefinedElement, to: DefinedElement)
51500{
51501 find interpretation(problem,interpretation);
51502 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
51503 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"upperBound attribute ETypedElement");
51504 find mustExist(problem, interpretation, from);
51505 find mustExist(problem, interpretation, to);
51506 find mustInstanceOfETypedElement_class(problem,interpretation,from);
51507 IntegerElement(to);
51508 find mayInRelationupperBound_attribute_ETypedElement(problem,interpretation,from,to);
51509 neg find mustInRelationupperBound_attribute_ETypedElement(problem,interpretation,from,to);
51510}
51511pattern refineRelation_many_attribute_ETypedElement(
51512 problem:LogicProblem, interpretation:PartialInterpretation,
51513 relationIterpretation:PartialRelationInterpretation,
51514 from: DefinedElement, to: DefinedElement)
51515{
51516 find interpretation(problem,interpretation);
51517 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
51518 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"many attribute ETypedElement");
51519 find mustExist(problem, interpretation, from);
51520 find mustExist(problem, interpretation, to);
51521 find mustInstanceOfETypedElement_class(problem,interpretation,from);
51522 BooleanElement(to);
51523 find mayInRelationmany_attribute_ETypedElement(problem,interpretation,from,to);
51524 neg find mustInRelationmany_attribute_ETypedElement(problem,interpretation,from,to);
51525}
51526pattern refineRelation_required_attribute_ETypedElement(
51527 problem:LogicProblem, interpretation:PartialInterpretation,
51528 relationIterpretation:PartialRelationInterpretation,
51529 from: DefinedElement, to: DefinedElement)
51530{
51531 find interpretation(problem,interpretation);
51532 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
51533 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"required attribute ETypedElement");
51534 find mustExist(problem, interpretation, from);
51535 find mustExist(problem, interpretation, to);
51536 find mustInstanceOfETypedElement_class(problem,interpretation,from);
51537 BooleanElement(to);
51538 find mayInRelationrequired_attribute_ETypedElement(problem,interpretation,from,to);
51539 neg find mustInRelationrequired_attribute_ETypedElement(problem,interpretation,from,to);
51540}
51541pattern refineRelation_key_attribute_EStringToStringMapEntry(
51542 problem:LogicProblem, interpretation:PartialInterpretation,
51543 relationIterpretation:PartialRelationInterpretation,
51544 from: DefinedElement, to: DefinedElement)
51545{
51546 find interpretation(problem,interpretation);
51547 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
51548 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"key attribute EStringToStringMapEntry");
51549 find mustExist(problem, interpretation, from);
51550 find mustExist(problem, interpretation, to);
51551 find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,from);
51552 StringElement(to);
51553 find mayInRelationkey_attribute_EStringToStringMapEntry(problem,interpretation,from,to);
51554 neg find mustInRelationkey_attribute_EStringToStringMapEntry(problem,interpretation,from,to);
51555}
51556pattern refineRelation_value_attribute_EStringToStringMapEntry(
51557 problem:LogicProblem, interpretation:PartialInterpretation,
51558 relationIterpretation:PartialRelationInterpretation,
51559 from: DefinedElement, to: DefinedElement)
51560{
51561 find interpretation(problem,interpretation);
51562 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
51563 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"value attribute EStringToStringMapEntry");
51564 find mustExist(problem, interpretation, from);
51565 find mustExist(problem, interpretation, to);
51566 find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,from);
51567 StringElement(to);
51568 find mayInRelationvalue_attribute_EStringToStringMapEntry(problem,interpretation,from,to);
51569 neg find mustInRelationvalue_attribute_EStringToStringMapEntry(problem,interpretation,from,to);
51570}
51571import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage"
51572import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem"
51573import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language"
51574
51575//////////
51576// 0. Util
51577//////////
51578private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) {
51579 PartialInterpretation.problem(interpretation,problem);
51580}
51581
51582/////////////////////////
51583// 0.1 Existence
51584/////////////////////////
51585private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
51586 find interpretation(problem,interpretation);
51587 LogicProblem.elements(problem,element);
51588} or {
51589 find interpretation(problem,interpretation);
51590 PartialInterpretation.newElements(interpretation,element);
51591}
51592
51593private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
51594 find mustExist(problem,interpretation,element);
51595} or {
51596 find interpretation(problem,interpretation);
51597 neg find elementCloseWorld(element);
51598 PartialInterpretation.openWorldElements(interpretation,element);
51599}
51600
51601private pattern elementCloseWorld(element:DefinedElement) {
51602 PartialInterpretation.openWorldElements(i,element);
51603 PartialInterpretation.maxNewElements(i,0);
51604} or {
51605 Scope.targetTypeInterpretation(scope,interpretation);
51606 PartialTypeInterpratation.elements(interpretation,element);
51607 Scope.maxNewElements(scope,0);
51608}
51609
51610////////////////////////
51611// 0.2 Equivalence
51612////////////////////////
51613pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) {
51614 find mayExist(problem,interpretation,a);
51615 find mayExist(problem,interpretation,b);
51616 a == b;
51617}
51618
51619////////////////////////
51620// 0.3 Required Patterns by TypeIndexer
51621////////////////////////
51622private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) {
51623 find interpretation(problem,interpretation);
51624 LogicProblem.types(problem,type);
51625 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
51626 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
51627}
51628
51629private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) {
51630 find interpretation(problem,interpretation);
51631 LogicProblem.types(problem,type);
51632 TypeDefinition.elements(type,element);
51633} or {
51634 find interpretation(problem,interpretation);
51635 find typeInterpretation(problem,interpretation,type,typeInterpretation);
51636 PartialComplexTypeInterpretation.elements(typeInterpretation,element);
51637}
51638
51639private pattern isPrimitive(element: PrimitiveElement) {
51640 PrimitiveElement(element);
51641}
51642
51643//////////
51644// 1. Problem-Specific Base Indexers
51645//////////
51646// 1.1 Type Indexers
51647//////////
51648// 1.1.1 primitive Type Indexers
51649//////////
51650
51651//////////
51652// 1.1.2 domain-specific Type Indexers
51653//////////
51654/**
51655 * An element must be an instance of type "EAttribute class".
51656 */
51657private pattern mustInstanceOfEAttribute_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
51658 Type.name(type,"EAttribute class");
51659 find directInstanceOf(problem,interpretation,element,type);
51660}
51661private pattern scopeDisallowsNewEAttribute_class(problem:LogicProblem, interpretation:PartialInterpretation) {
51662 find interpretation(problem,interpretation);
51663 PartialInterpretation.scopes(interpretation,scope);
51664 Scope.targetTypeInterpretation(scope,typeInterpretation);
51665 Scope.maxNewElements(scope,0);
51666 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
51667 Type.name(type,"EAttribute class");
51668}
51669
51670/**
51671 * An element may be an instance of type "EAttribute class".
51672 */
51673private pattern mayInstanceOfEAttribute_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
51674{
51675 find interpretation(problem,interpretation);
51676 PartialInterpretation.newElements(interpretation,element);
51677 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
51678 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
51679 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
51680 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
51681 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
51682 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
51683 neg find mustInstanceOfEReference_class(problem,interpretation,element);
51684 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
51685 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
51686 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
51687 neg find mustInstanceOfEObject_class(problem,interpretation,element);
51688 neg find scopeDisallowsNewEAttribute_class(problem, interpretation);
51689 neg find isPrimitive(element);
51690} or {
51691 find interpretation(problem,interpretation);
51692 PartialInterpretation.openWorldElements(interpretation,element);
51693 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
51694 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
51695 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
51696 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
51697 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
51698 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
51699 neg find mustInstanceOfEReference_class(problem,interpretation,element);
51700 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
51701 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
51702 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
51703 neg find mustInstanceOfEObject_class(problem,interpretation,element);
51704 neg find scopeDisallowsNewEAttribute_class(problem, interpretation);
51705 neg find isPrimitive(element);
51706} or
51707{ find mustInstanceOfEAttribute_class(problem,interpretation,element); }
51708/**
51709 * An element must be an instance of type "EAnnotation class".
51710 */
51711private pattern mustInstanceOfEAnnotation_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
51712 Type.name(type,"EAnnotation class");
51713 find directInstanceOf(problem,interpretation,element,type);
51714}
51715private pattern scopeDisallowsNewEAnnotation_class(problem:LogicProblem, interpretation:PartialInterpretation) {
51716 find interpretation(problem,interpretation);
51717 PartialInterpretation.scopes(interpretation,scope);
51718 Scope.targetTypeInterpretation(scope,typeInterpretation);
51719 Scope.maxNewElements(scope,0);
51720 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
51721 Type.name(type,"EAnnotation class");
51722}
51723
51724/**
51725 * An element may be an instance of type "EAnnotation class".
51726 */
51727private pattern mayInstanceOfEAnnotation_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
51728{
51729 find interpretation(problem,interpretation);
51730 PartialInterpretation.newElements(interpretation,element);
51731 neg find mustInstanceOfENamedElement_class(problem,interpretation,element);
51732 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
51733 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
51734 neg find mustInstanceOfEObject_class(problem,interpretation,element);
51735 neg find scopeDisallowsNewEAnnotation_class(problem, interpretation);
51736 neg find isPrimitive(element);
51737} or {
51738 find interpretation(problem,interpretation);
51739 PartialInterpretation.openWorldElements(interpretation,element);
51740 neg find mustInstanceOfENamedElement_class(problem,interpretation,element);
51741 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
51742 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
51743 neg find mustInstanceOfEObject_class(problem,interpretation,element);
51744 neg find scopeDisallowsNewEAnnotation_class(problem, interpretation);
51745 neg find isPrimitive(element);
51746} or
51747{ find mustInstanceOfEAnnotation_class(problem,interpretation,element); }
51748/**
51749 * An element must be an instance of type "EClass class".
51750 */
51751private pattern mustInstanceOfEClass_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
51752 Type.name(type,"EClass class");
51753 find directInstanceOf(problem,interpretation,element,type);
51754}
51755private pattern scopeDisallowsNewEClass_class(problem:LogicProblem, interpretation:PartialInterpretation) {
51756 find interpretation(problem,interpretation);
51757 PartialInterpretation.scopes(interpretation,scope);
51758 Scope.targetTypeInterpretation(scope,typeInterpretation);
51759 Scope.maxNewElements(scope,0);
51760 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
51761 Type.name(type,"EClass class");
51762}
51763
51764/**
51765 * An element may be an instance of type "EClass class".
51766 */
51767private pattern mayInstanceOfEClass_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
51768{
51769 find interpretation(problem,interpretation);
51770 PartialInterpretation.newElements(interpretation,element);
51771 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
51772 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
51773 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
51774 neg find mustInstanceOfEDataType_class(problem,interpretation,element);
51775 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
51776 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
51777 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
51778 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
51779 neg find mustInstanceOfEObject_class(problem,interpretation,element);
51780 neg find scopeDisallowsNewEClass_class(problem, interpretation);
51781 neg find isPrimitive(element);
51782} or {
51783 find interpretation(problem,interpretation);
51784 PartialInterpretation.openWorldElements(interpretation,element);
51785 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
51786 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
51787 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
51788 neg find mustInstanceOfEDataType_class(problem,interpretation,element);
51789 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
51790 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
51791 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
51792 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
51793 neg find mustInstanceOfEObject_class(problem,interpretation,element);
51794 neg find scopeDisallowsNewEClass_class(problem, interpretation);
51795 neg find isPrimitive(element);
51796} or
51797{ find mustInstanceOfEClass_class(problem,interpretation,element); }
51798/**
51799 * An element must be an instance of type "EClassifier class".
51800 */
51801private pattern mustInstanceOfEClassifier_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
51802 Type.name(type,"EClassifier class");
51803 find directInstanceOf(problem,interpretation,element,type);
51804}
51805private pattern scopeDisallowsNewEClassifier_class(problem:LogicProblem, interpretation:PartialInterpretation) {
51806 find interpretation(problem,interpretation);
51807 PartialInterpretation.scopes(interpretation,scope);
51808 Scope.targetTypeInterpretation(scope,typeInterpretation);
51809 Scope.maxNewElements(scope,0);
51810 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
51811 Type.name(type,"EClassifier class");
51812}
51813
51814/**
51815 * An element may be an instance of type "EClassifier class".
51816 */
51817private pattern mayInstanceOfEClassifier_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
51818{
51819 find interpretation(problem,interpretation);
51820 PartialInterpretation.newElements(interpretation,element);
51821 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
51822 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
51823 neg find mustInstanceOfEDataType_class(problem,interpretation,element);
51824 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
51825 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
51826 neg find mustInstanceOfEClass_class(problem,interpretation,element);
51827 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
51828 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
51829 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
51830 neg find mustInstanceOfEObject_class(problem,interpretation,element);
51831 neg find scopeDisallowsNewEClassifier_class(problem, interpretation);
51832 neg find isPrimitive(element);
51833} or {
51834 find interpretation(problem,interpretation);
51835 PartialInterpretation.openWorldElements(interpretation,element);
51836 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
51837 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
51838 neg find mustInstanceOfEDataType_class(problem,interpretation,element);
51839 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
51840 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
51841 neg find mustInstanceOfEClass_class(problem,interpretation,element);
51842 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
51843 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
51844 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
51845 neg find mustInstanceOfEObject_class(problem,interpretation,element);
51846 neg find scopeDisallowsNewEClassifier_class(problem, interpretation);
51847 neg find isPrimitive(element);
51848} or
51849{ find mustInstanceOfEClassifier_class(problem,interpretation,element); }
51850/**
51851 * An element must be an instance of type "EDataType class".
51852 */
51853private pattern mustInstanceOfEDataType_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
51854 Type.name(type,"EDataType class");
51855 find directInstanceOf(problem,interpretation,element,type);
51856}
51857private pattern scopeDisallowsNewEDataType_class(problem:LogicProblem, interpretation:PartialInterpretation) {
51858 find interpretation(problem,interpretation);
51859 PartialInterpretation.scopes(interpretation,scope);
51860 Scope.targetTypeInterpretation(scope,typeInterpretation);
51861 Scope.maxNewElements(scope,0);
51862 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
51863 Type.name(type,"EDataType class");
51864}
51865
51866/**
51867 * An element may be an instance of type "EDataType class".
51868 */
51869private pattern mayInstanceOfEDataType_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
51870{
51871 find interpretation(problem,interpretation);
51872 PartialInterpretation.newElements(interpretation,element);
51873 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
51874 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
51875 neg find mustInstanceOfEEnum_class(problem,interpretation,element);
51876 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
51877 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
51878 neg find mustInstanceOfEClass_class(problem,interpretation,element);
51879 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
51880 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
51881 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
51882 neg find mustInstanceOfEObject_class(problem,interpretation,element);
51883 neg find scopeDisallowsNewEDataType_class(problem, interpretation);
51884 neg find isPrimitive(element);
51885} or {
51886 find interpretation(problem,interpretation);
51887 PartialInterpretation.openWorldElements(interpretation,element);
51888 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
51889 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
51890 neg find mustInstanceOfEEnum_class(problem,interpretation,element);
51891 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
51892 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
51893 neg find mustInstanceOfEClass_class(problem,interpretation,element);
51894 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
51895 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
51896 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
51897 neg find mustInstanceOfEObject_class(problem,interpretation,element);
51898 neg find scopeDisallowsNewEDataType_class(problem, interpretation);
51899 neg find isPrimitive(element);
51900} or
51901{ find mustInstanceOfEDataType_class(problem,interpretation,element); }
51902/**
51903 * An element must be an instance of type "EEnum class".
51904 */
51905private pattern mustInstanceOfEEnum_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
51906 Type.name(type,"EEnum class");
51907 find directInstanceOf(problem,interpretation,element,type);
51908}
51909private pattern scopeDisallowsNewEEnum_class(problem:LogicProblem, interpretation:PartialInterpretation) {
51910 find interpretation(problem,interpretation);
51911 PartialInterpretation.scopes(interpretation,scope);
51912 Scope.targetTypeInterpretation(scope,typeInterpretation);
51913 Scope.maxNewElements(scope,0);
51914 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
51915 Type.name(type,"EEnum class");
51916}
51917
51918/**
51919 * An element may be an instance of type "EEnum class".
51920 */
51921private pattern mayInstanceOfEEnum_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
51922{
51923 find interpretation(problem,interpretation);
51924 PartialInterpretation.newElements(interpretation,element);
51925 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
51926 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
51927 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
51928 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
51929 neg find mustInstanceOfEClass_class(problem,interpretation,element);
51930 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
51931 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
51932 neg find mustInstanceOfEObject_class(problem,interpretation,element);
51933 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
51934 neg find scopeDisallowsNewEEnum_class(problem, interpretation);
51935 neg find isPrimitive(element);
51936} or {
51937 find interpretation(problem,interpretation);
51938 PartialInterpretation.openWorldElements(interpretation,element);
51939 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
51940 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
51941 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
51942 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
51943 neg find mustInstanceOfEClass_class(problem,interpretation,element);
51944 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
51945 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
51946 neg find mustInstanceOfEObject_class(problem,interpretation,element);
51947 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
51948 neg find scopeDisallowsNewEEnum_class(problem, interpretation);
51949 neg find isPrimitive(element);
51950} or
51951{ find mustInstanceOfEEnum_class(problem,interpretation,element); }
51952/**
51953 * An element must be an instance of type "EEnumLiteral class".
51954 */
51955private pattern mustInstanceOfEEnumLiteral_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
51956 Type.name(type,"EEnumLiteral class");
51957 find directInstanceOf(problem,interpretation,element,type);
51958}
51959private pattern scopeDisallowsNewEEnumLiteral_class(problem:LogicProblem, interpretation:PartialInterpretation) {
51960 find interpretation(problem,interpretation);
51961 PartialInterpretation.scopes(interpretation,scope);
51962 Scope.targetTypeInterpretation(scope,typeInterpretation);
51963 Scope.maxNewElements(scope,0);
51964 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
51965 Type.name(type,"EEnumLiteral class");
51966}
51967
51968/**
51969 * An element may be an instance of type "EEnumLiteral class".
51970 */
51971private pattern mayInstanceOfEEnumLiteral_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
51972{
51973 find interpretation(problem,interpretation);
51974 PartialInterpretation.newElements(interpretation,element);
51975 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
51976 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
51977 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
51978 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
51979 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
51980 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
51981 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
51982 neg find mustInstanceOfEObject_class(problem,interpretation,element);
51983 neg find scopeDisallowsNewEEnumLiteral_class(problem, interpretation);
51984 neg find isPrimitive(element);
51985} or {
51986 find interpretation(problem,interpretation);
51987 PartialInterpretation.openWorldElements(interpretation,element);
51988 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
51989 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
51990 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
51991 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
51992 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
51993 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
51994 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
51995 neg find mustInstanceOfEObject_class(problem,interpretation,element);
51996 neg find scopeDisallowsNewEEnumLiteral_class(problem, interpretation);
51997 neg find isPrimitive(element);
51998} or
51999{ find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); }
52000/**
52001 * An element must be an instance of type "EModelElement class".
52002 */
52003private pattern mustInstanceOfEModelElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
52004 Type.name(type,"EModelElement class");
52005 find directInstanceOf(problem,interpretation,element,type);
52006}
52007private pattern scopeDisallowsNewEModelElement_class(problem:LogicProblem, interpretation:PartialInterpretation) {
52008 find interpretation(problem,interpretation);
52009 PartialInterpretation.scopes(interpretation,scope);
52010 Scope.targetTypeInterpretation(scope,typeInterpretation);
52011 Scope.maxNewElements(scope,0);
52012 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
52013 Type.name(type,"EModelElement class");
52014}
52015
52016/**
52017 * An element may be an instance of type "EModelElement class".
52018 */
52019private pattern mayInstanceOfEModelElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
52020{
52021 find interpretation(problem,interpretation);
52022 PartialInterpretation.newElements(interpretation,element);
52023 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
52024 neg find mustInstanceOfENamedElement_class(problem,interpretation,element);
52025 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
52026 neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element);
52027 neg find mustInstanceOfEObject_class(problem,interpretation,element);
52028 neg find scopeDisallowsNewEModelElement_class(problem, interpretation);
52029 neg find isPrimitive(element);
52030} or {
52031 find interpretation(problem,interpretation);
52032 PartialInterpretation.openWorldElements(interpretation,element);
52033 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
52034 neg find mustInstanceOfENamedElement_class(problem,interpretation,element);
52035 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
52036 neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element);
52037 neg find mustInstanceOfEObject_class(problem,interpretation,element);
52038 neg find scopeDisallowsNewEModelElement_class(problem, interpretation);
52039 neg find isPrimitive(element);
52040} or
52041{ find mustInstanceOfEModelElement_class(problem,interpretation,element); }
52042/**
52043 * An element must be an instance of type "ENamedElement class".
52044 */
52045private pattern mustInstanceOfENamedElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
52046 Type.name(type,"ENamedElement class");
52047 find directInstanceOf(problem,interpretation,element,type);
52048}
52049private pattern scopeDisallowsNewENamedElement_class(problem:LogicProblem, interpretation:PartialInterpretation) {
52050 find interpretation(problem,interpretation);
52051 PartialInterpretation.scopes(interpretation,scope);
52052 Scope.targetTypeInterpretation(scope,typeInterpretation);
52053 Scope.maxNewElements(scope,0);
52054 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
52055 Type.name(type,"ENamedElement class");
52056}
52057
52058/**
52059 * An element may be an instance of type "ENamedElement class".
52060 */
52061private pattern mayInstanceOfENamedElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
52062{
52063 find interpretation(problem,interpretation);
52064 PartialInterpretation.newElements(interpretation,element);
52065 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
52066 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
52067 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
52068 neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element);
52069 neg find mustInstanceOfEObject_class(problem,interpretation,element);
52070 neg find scopeDisallowsNewENamedElement_class(problem, interpretation);
52071 neg find isPrimitive(element);
52072} or {
52073 find interpretation(problem,interpretation);
52074 PartialInterpretation.openWorldElements(interpretation,element);
52075 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
52076 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
52077 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
52078 neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element);
52079 neg find mustInstanceOfEObject_class(problem,interpretation,element);
52080 neg find scopeDisallowsNewENamedElement_class(problem, interpretation);
52081 neg find isPrimitive(element);
52082} or
52083{ find mustInstanceOfENamedElement_class(problem,interpretation,element); }
52084/**
52085 * An element must be an instance of type "EObject class".
52086 */
52087private pattern mustInstanceOfEObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
52088 Type.name(type,"EObject class");
52089 find directInstanceOf(problem,interpretation,element,type);
52090}
52091private pattern scopeDisallowsNewEObject_class(problem:LogicProblem, interpretation:PartialInterpretation) {
52092 find interpretation(problem,interpretation);
52093 PartialInterpretation.scopes(interpretation,scope);
52094 Scope.targetTypeInterpretation(scope,typeInterpretation);
52095 Scope.maxNewElements(scope,0);
52096 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
52097 Type.name(type,"EObject class");
52098}
52099
52100/**
52101 * An element may be an instance of type "EObject class".
52102 */
52103private pattern mayInstanceOfEObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
52104{
52105 find interpretation(problem,interpretation);
52106 PartialInterpretation.newElements(interpretation,element);
52107 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
52108 neg find mustInstanceOfEModelElement_class(problem,interpretation,element);
52109 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
52110 neg find scopeDisallowsNewEObject_class(problem, interpretation);
52111 neg find isPrimitive(element);
52112} or {
52113 find interpretation(problem,interpretation);
52114 PartialInterpretation.openWorldElements(interpretation,element);
52115 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
52116 neg find mustInstanceOfEModelElement_class(problem,interpretation,element);
52117 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
52118 neg find scopeDisallowsNewEObject_class(problem, interpretation);
52119 neg find isPrimitive(element);
52120} or
52121{ find mustInstanceOfEObject_class(problem,interpretation,element); }
52122/**
52123 * An element must be an instance of type "EOperation class".
52124 */
52125private pattern mustInstanceOfEOperation_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
52126 Type.name(type,"EOperation class");
52127 find directInstanceOf(problem,interpretation,element,type);
52128}
52129private pattern scopeDisallowsNewEOperation_class(problem:LogicProblem, interpretation:PartialInterpretation) {
52130 find interpretation(problem,interpretation);
52131 PartialInterpretation.scopes(interpretation,scope);
52132 Scope.targetTypeInterpretation(scope,typeInterpretation);
52133 Scope.maxNewElements(scope,0);
52134 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
52135 Type.name(type,"EOperation class");
52136}
52137
52138/**
52139 * An element may be an instance of type "EOperation class".
52140 */
52141private pattern mayInstanceOfEOperation_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
52142{
52143 find interpretation(problem,interpretation);
52144 PartialInterpretation.newElements(interpretation,element);
52145 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
52146 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
52147 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
52148 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
52149 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
52150 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
52151 neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element);
52152 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
52153 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
52154 neg find mustInstanceOfEObject_class(problem,interpretation,element);
52155 neg find scopeDisallowsNewEOperation_class(problem, interpretation);
52156 neg find isPrimitive(element);
52157} or {
52158 find interpretation(problem,interpretation);
52159 PartialInterpretation.openWorldElements(interpretation,element);
52160 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
52161 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
52162 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
52163 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
52164 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
52165 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
52166 neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element);
52167 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
52168 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
52169 neg find mustInstanceOfEObject_class(problem,interpretation,element);
52170 neg find scopeDisallowsNewEOperation_class(problem, interpretation);
52171 neg find isPrimitive(element);
52172} or
52173{ find mustInstanceOfEOperation_class(problem,interpretation,element); }
52174/**
52175 * An element must be an instance of type "EPackage class".
52176 */
52177private pattern mustInstanceOfEPackage_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
52178 Type.name(type,"EPackage class");
52179 find directInstanceOf(problem,interpretation,element,type);
52180}
52181private pattern scopeDisallowsNewEPackage_class(problem:LogicProblem, interpretation:PartialInterpretation) {
52182 find interpretation(problem,interpretation);
52183 PartialInterpretation.scopes(interpretation,scope);
52184 Scope.targetTypeInterpretation(scope,typeInterpretation);
52185 Scope.maxNewElements(scope,0);
52186 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
52187 Type.name(type,"EPackage class");
52188}
52189
52190/**
52191 * An element may be an instance of type "EPackage class".
52192 */
52193private pattern mayInstanceOfEPackage_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
52194{
52195 find interpretation(problem,interpretation);
52196 PartialInterpretation.newElements(interpretation,element);
52197 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
52198 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
52199 neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element);
52200 neg find mustInstanceOfEObject_class(problem,interpretation,element);
52201 neg find scopeDisallowsNewEPackage_class(problem, interpretation);
52202 neg find isPrimitive(element);
52203} or {
52204 find interpretation(problem,interpretation);
52205 PartialInterpretation.openWorldElements(interpretation,element);
52206 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
52207 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
52208 neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element);
52209 neg find mustInstanceOfEObject_class(problem,interpretation,element);
52210 neg find scopeDisallowsNewEPackage_class(problem, interpretation);
52211 neg find isPrimitive(element);
52212} or
52213{ find mustInstanceOfEPackage_class(problem,interpretation,element); }
52214/**
52215 * An element must be an instance of type "EParameter class".
52216 */
52217private pattern mustInstanceOfEParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
52218 Type.name(type,"EParameter class");
52219 find directInstanceOf(problem,interpretation,element,type);
52220}
52221private pattern scopeDisallowsNewEParameter_class(problem:LogicProblem, interpretation:PartialInterpretation) {
52222 find interpretation(problem,interpretation);
52223 PartialInterpretation.scopes(interpretation,scope);
52224 Scope.targetTypeInterpretation(scope,typeInterpretation);
52225 Scope.maxNewElements(scope,0);
52226 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
52227 Type.name(type,"EParameter class");
52228}
52229
52230/**
52231 * An element may be an instance of type "EParameter class".
52232 */
52233private pattern mayInstanceOfEParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
52234{
52235 find interpretation(problem,interpretation);
52236 PartialInterpretation.newElements(interpretation,element);
52237 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
52238 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
52239 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
52240 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
52241 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
52242 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
52243 neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element);
52244 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
52245 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
52246 neg find mustInstanceOfEObject_class(problem,interpretation,element);
52247 neg find scopeDisallowsNewEParameter_class(problem, interpretation);
52248 neg find isPrimitive(element);
52249} or {
52250 find interpretation(problem,interpretation);
52251 PartialInterpretation.openWorldElements(interpretation,element);
52252 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
52253 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
52254 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
52255 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
52256 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
52257 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
52258 neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element);
52259 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
52260 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
52261 neg find mustInstanceOfEObject_class(problem,interpretation,element);
52262 neg find scopeDisallowsNewEParameter_class(problem, interpretation);
52263 neg find isPrimitive(element);
52264} or
52265{ find mustInstanceOfEParameter_class(problem,interpretation,element); }
52266/**
52267 * An element must be an instance of type "EReference class".
52268 */
52269private pattern mustInstanceOfEReference_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
52270 Type.name(type,"EReference class");
52271 find directInstanceOf(problem,interpretation,element,type);
52272}
52273private pattern scopeDisallowsNewEReference_class(problem:LogicProblem, interpretation:PartialInterpretation) {
52274 find interpretation(problem,interpretation);
52275 PartialInterpretation.scopes(interpretation,scope);
52276 Scope.targetTypeInterpretation(scope,typeInterpretation);
52277 Scope.maxNewElements(scope,0);
52278 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
52279 Type.name(type,"EReference class");
52280}
52281
52282/**
52283 * An element may be an instance of type "EReference class".
52284 */
52285private pattern mayInstanceOfEReference_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
52286{
52287 find interpretation(problem,interpretation);
52288 PartialInterpretation.newElements(interpretation,element);
52289 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
52290 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
52291 neg find mustInstanceOfEAttribute_class(problem,interpretation,element);
52292 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
52293 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
52294 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
52295 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
52296 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
52297 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
52298 neg find mustInstanceOfEObject_class(problem,interpretation,element);
52299 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
52300 neg find scopeDisallowsNewEReference_class(problem, interpretation);
52301 neg find isPrimitive(element);
52302} or {
52303 find interpretation(problem,interpretation);
52304 PartialInterpretation.openWorldElements(interpretation,element);
52305 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
52306 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
52307 neg find mustInstanceOfEAttribute_class(problem,interpretation,element);
52308 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
52309 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
52310 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
52311 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
52312 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
52313 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
52314 neg find mustInstanceOfEObject_class(problem,interpretation,element);
52315 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
52316 neg find scopeDisallowsNewEReference_class(problem, interpretation);
52317 neg find isPrimitive(element);
52318} or
52319{ find mustInstanceOfEReference_class(problem,interpretation,element); }
52320/**
52321 * An element must be an instance of type "EStructuralFeature class".
52322 */
52323private pattern mustInstanceOfEStructuralFeature_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
52324 Type.name(type,"EStructuralFeature class");
52325 find directInstanceOf(problem,interpretation,element,type);
52326}
52327private pattern scopeDisallowsNewEStructuralFeature_class(problem:LogicProblem, interpretation:PartialInterpretation) {
52328 find interpretation(problem,interpretation);
52329 PartialInterpretation.scopes(interpretation,scope);
52330 Scope.targetTypeInterpretation(scope,typeInterpretation);
52331 Scope.maxNewElements(scope,0);
52332 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
52333 Type.name(type,"EStructuralFeature class");
52334}
52335
52336/**
52337 * An element may be an instance of type "EStructuralFeature class".
52338 */
52339private pattern mayInstanceOfEStructuralFeature_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
52340{
52341 find interpretation(problem,interpretation);
52342 PartialInterpretation.newElements(interpretation,element);
52343 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
52344 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
52345 neg find mustInstanceOfEAttribute_class(problem,interpretation,element);
52346 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
52347 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
52348 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
52349 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
52350 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
52351 neg find mustInstanceOfEReference_class(problem,interpretation,element);
52352 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
52353 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
52354 neg find mustInstanceOfEObject_class(problem,interpretation,element);
52355 neg find scopeDisallowsNewEStructuralFeature_class(problem, interpretation);
52356 neg find isPrimitive(element);
52357} or {
52358 find interpretation(problem,interpretation);
52359 PartialInterpretation.openWorldElements(interpretation,element);
52360 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
52361 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
52362 neg find mustInstanceOfEAttribute_class(problem,interpretation,element);
52363 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
52364 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
52365 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
52366 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
52367 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
52368 neg find mustInstanceOfEReference_class(problem,interpretation,element);
52369 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
52370 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
52371 neg find mustInstanceOfEObject_class(problem,interpretation,element);
52372 neg find scopeDisallowsNewEStructuralFeature_class(problem, interpretation);
52373 neg find isPrimitive(element);
52374} or
52375{ find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); }
52376/**
52377 * An element must be an instance of type "ETypedElement class".
52378 */
52379private pattern mustInstanceOfETypedElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
52380 Type.name(type,"ETypedElement class");
52381 find directInstanceOf(problem,interpretation,element,type);
52382}
52383private pattern scopeDisallowsNewETypedElement_class(problem:LogicProblem, interpretation:PartialInterpretation) {
52384 find interpretation(problem,interpretation);
52385 PartialInterpretation.scopes(interpretation,scope);
52386 Scope.targetTypeInterpretation(scope,typeInterpretation);
52387 Scope.maxNewElements(scope,0);
52388 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
52389 Type.name(type,"ETypedElement class");
52390}
52391
52392/**
52393 * An element may be an instance of type "ETypedElement class".
52394 */
52395private pattern mayInstanceOfETypedElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
52396{
52397 find interpretation(problem,interpretation);
52398 PartialInterpretation.newElements(interpretation,element);
52399 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
52400 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
52401 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
52402 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
52403 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
52404 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
52405 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
52406 neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element);
52407 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
52408 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
52409 neg find mustInstanceOfEObject_class(problem,interpretation,element);
52410 neg find scopeDisallowsNewETypedElement_class(problem, interpretation);
52411 neg find isPrimitive(element);
52412} or {
52413 find interpretation(problem,interpretation);
52414 PartialInterpretation.openWorldElements(interpretation,element);
52415 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
52416 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
52417 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
52418 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
52419 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
52420 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
52421 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
52422 neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element);
52423 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
52424 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
52425 neg find mustInstanceOfEObject_class(problem,interpretation,element);
52426 neg find scopeDisallowsNewETypedElement_class(problem, interpretation);
52427 neg find isPrimitive(element);
52428} or
52429{ find mustInstanceOfETypedElement_class(problem,interpretation,element); }
52430/**
52431 * An element must be an instance of type "EStringToStringMapEntry class".
52432 */
52433private pattern mustInstanceOfEStringToStringMapEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
52434 Type.name(type,"EStringToStringMapEntry class");
52435 find directInstanceOf(problem,interpretation,element,type);
52436}
52437private pattern scopeDisallowsNewEStringToStringMapEntry_class(problem:LogicProblem, interpretation:PartialInterpretation) {
52438 find interpretation(problem,interpretation);
52439 PartialInterpretation.scopes(interpretation,scope);
52440 Scope.targetTypeInterpretation(scope,typeInterpretation);
52441 Scope.maxNewElements(scope,0);
52442 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
52443 Type.name(type,"EStringToStringMapEntry class");
52444}
52445
52446/**
52447 * An element may be an instance of type "EStringToStringMapEntry class".
52448 */
52449private pattern mayInstanceOfEStringToStringMapEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
52450{
52451 find interpretation(problem,interpretation);
52452 PartialInterpretation.newElements(interpretation,element);
52453 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
52454 neg find mustInstanceOfEModelElement_class(problem,interpretation,element);
52455 neg find mustInstanceOfEObject_class(problem,interpretation,element);
52456 neg find scopeDisallowsNewEStringToStringMapEntry_class(problem, interpretation);
52457 neg find isPrimitive(element);
52458} or {
52459 find interpretation(problem,interpretation);
52460 PartialInterpretation.openWorldElements(interpretation,element);
52461 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
52462 neg find mustInstanceOfEModelElement_class(problem,interpretation,element);
52463 neg find mustInstanceOfEObject_class(problem,interpretation,element);
52464 neg find scopeDisallowsNewEStringToStringMapEntry_class(problem, interpretation);
52465 neg find isPrimitive(element);
52466} or
52467{ find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); }
52468/**
52469 * An element must be an instance of type "EGenericType class".
52470 */
52471private pattern mustInstanceOfEGenericType_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
52472 Type.name(type,"EGenericType class");
52473 find directInstanceOf(problem,interpretation,element,type);
52474}
52475private pattern scopeDisallowsNewEGenericType_class(problem:LogicProblem, interpretation:PartialInterpretation) {
52476 find interpretation(problem,interpretation);
52477 PartialInterpretation.scopes(interpretation,scope);
52478 Scope.targetTypeInterpretation(scope,typeInterpretation);
52479 Scope.maxNewElements(scope,0);
52480 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
52481 Type.name(type,"EGenericType class");
52482}
52483
52484/**
52485 * An element may be an instance of type "EGenericType class".
52486 */
52487private pattern mayInstanceOfEGenericType_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
52488{
52489 find interpretation(problem,interpretation);
52490 PartialInterpretation.newElements(interpretation,element);
52491 neg find mustInstanceOfEModelElement_class(problem,interpretation,element);
52492 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
52493 neg find mustInstanceOfEObject_class(problem,interpretation,element);
52494 neg find scopeDisallowsNewEGenericType_class(problem, interpretation);
52495 neg find isPrimitive(element);
52496} or {
52497 find interpretation(problem,interpretation);
52498 PartialInterpretation.openWorldElements(interpretation,element);
52499 neg find mustInstanceOfEModelElement_class(problem,interpretation,element);
52500 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
52501 neg find mustInstanceOfEObject_class(problem,interpretation,element);
52502 neg find scopeDisallowsNewEGenericType_class(problem, interpretation);
52503 neg find isPrimitive(element);
52504} or
52505{ find mustInstanceOfEGenericType_class(problem,interpretation,element); }
52506/**
52507 * An element must be an instance of type "ETypeParameter class".
52508 */
52509private pattern mustInstanceOfETypeParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
52510 Type.name(type,"ETypeParameter class");
52511 find directInstanceOf(problem,interpretation,element,type);
52512}
52513private pattern scopeDisallowsNewETypeParameter_class(problem:LogicProblem, interpretation:PartialInterpretation) {
52514 find interpretation(problem,interpretation);
52515 PartialInterpretation.scopes(interpretation,scope);
52516 Scope.targetTypeInterpretation(scope,typeInterpretation);
52517 Scope.maxNewElements(scope,0);
52518 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
52519 Type.name(type,"ETypeParameter class");
52520}
52521
52522/**
52523 * An element may be an instance of type "ETypeParameter class".
52524 */
52525private pattern mayInstanceOfETypeParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
52526{
52527 find interpretation(problem,interpretation);
52528 PartialInterpretation.newElements(interpretation,element);
52529 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
52530 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
52531 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
52532 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
52533 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
52534 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
52535 neg find mustInstanceOfEObject_class(problem,interpretation,element);
52536 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
52537 neg find scopeDisallowsNewETypeParameter_class(problem, interpretation);
52538 neg find isPrimitive(element);
52539} or {
52540 find interpretation(problem,interpretation);
52541 PartialInterpretation.openWorldElements(interpretation,element);
52542 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
52543 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
52544 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
52545 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
52546 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
52547 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
52548 neg find mustInstanceOfEObject_class(problem,interpretation,element);
52549 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
52550 neg find scopeDisallowsNewETypeParameter_class(problem, interpretation);
52551 neg find isPrimitive(element);
52552} or
52553{ find mustInstanceOfETypeParameter_class(problem,interpretation,element); }
52554/**
52555 * An element must be an instance of type "EModelElement class DefinedPart".
52556 */
52557private pattern mustInstanceOfEModelElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
52558 Type.name(type,"EModelElement class DefinedPart");
52559 find directInstanceOf(problem,interpretation,element,type);
52560}
52561private pattern scopeDisallowsNewEModelElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
52562 find interpretation(problem,interpretation);
52563 PartialInterpretation.scopes(interpretation,scope);
52564 Scope.targetTypeInterpretation(scope,typeInterpretation);
52565 Scope.maxNewElements(scope,0);
52566 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
52567 Type.name(type,"EModelElement class DefinedPart");
52568}
52569
52570/**
52571 * An element may be an instance of type "EModelElement class DefinedPart".
52572 */
52573private pattern mayInstanceOfEModelElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
52574{ find mustInstanceOfEModelElement_class_DefinedPart(problem,interpretation,element); }
52575/**
52576 * An element must be an instance of type "EModelElement class UndefinedPart".
52577 */
52578private pattern mustInstanceOfEModelElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
52579 Type.name(type,"EModelElement class UndefinedPart");
52580 find directInstanceOf(problem,interpretation,element,type);
52581}
52582private pattern scopeDisallowsNewEModelElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
52583 find interpretation(problem,interpretation);
52584 PartialInterpretation.scopes(interpretation,scope);
52585 Scope.targetTypeInterpretation(scope,typeInterpretation);
52586 Scope.maxNewElements(scope,0);
52587 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
52588 Type.name(type,"EModelElement class UndefinedPart");
52589}
52590
52591/**
52592 * An element may be an instance of type "EModelElement class UndefinedPart".
52593 */
52594private pattern mayInstanceOfEModelElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
52595{
52596 find interpretation(problem,interpretation);
52597 PartialInterpretation.newElements(interpretation,element);
52598 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
52599 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
52600 neg find mustInstanceOfENamedElement_class(problem,interpretation,element);
52601 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
52602 neg find mustInstanceOfEObject_class(problem,interpretation,element);
52603 neg find scopeDisallowsNewEModelElement_class_UndefinedPart(problem, interpretation);
52604 neg find isPrimitive(element);
52605} or {
52606 find interpretation(problem,interpretation);
52607 PartialInterpretation.openWorldElements(interpretation,element);
52608 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
52609 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
52610 neg find mustInstanceOfENamedElement_class(problem,interpretation,element);
52611 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
52612 neg find mustInstanceOfEObject_class(problem,interpretation,element);
52613 neg find scopeDisallowsNewEModelElement_class_UndefinedPart(problem, interpretation);
52614 neg find isPrimitive(element);
52615} or
52616{ find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); }
52617/**
52618 * An element must be an instance of type "ENamedElement class DefinedPart".
52619 */
52620private pattern mustInstanceOfENamedElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
52621 Type.name(type,"ENamedElement class DefinedPart");
52622 find directInstanceOf(problem,interpretation,element,type);
52623}
52624private pattern scopeDisallowsNewENamedElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
52625 find interpretation(problem,interpretation);
52626 PartialInterpretation.scopes(interpretation,scope);
52627 Scope.targetTypeInterpretation(scope,typeInterpretation);
52628 Scope.maxNewElements(scope,0);
52629 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
52630 Type.name(type,"ENamedElement class DefinedPart");
52631}
52632
52633/**
52634 * An element may be an instance of type "ENamedElement class DefinedPart".
52635 */
52636private pattern mayInstanceOfENamedElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
52637{ find mustInstanceOfENamedElement_class_DefinedPart(problem,interpretation,element); }
52638/**
52639 * An element must be an instance of type "ENamedElement class UndefinedPart".
52640 */
52641private pattern mustInstanceOfENamedElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
52642 Type.name(type,"ENamedElement class UndefinedPart");
52643 find directInstanceOf(problem,interpretation,element,type);
52644}
52645private pattern scopeDisallowsNewENamedElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
52646 find interpretation(problem,interpretation);
52647 PartialInterpretation.scopes(interpretation,scope);
52648 Scope.targetTypeInterpretation(scope,typeInterpretation);
52649 Scope.maxNewElements(scope,0);
52650 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
52651 Type.name(type,"ENamedElement class UndefinedPart");
52652}
52653
52654/**
52655 * An element may be an instance of type "ENamedElement class UndefinedPart".
52656 */
52657private pattern mayInstanceOfENamedElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
52658{
52659 find interpretation(problem,interpretation);
52660 PartialInterpretation.newElements(interpretation,element);
52661 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
52662 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
52663 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
52664 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
52665 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
52666 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
52667 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
52668 neg find mustInstanceOfEObject_class(problem,interpretation,element);
52669 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
52670 neg find scopeDisallowsNewENamedElement_class_UndefinedPart(problem, interpretation);
52671 neg find isPrimitive(element);
52672} or {
52673 find interpretation(problem,interpretation);
52674 PartialInterpretation.openWorldElements(interpretation,element);
52675 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
52676 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
52677 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
52678 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
52679 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
52680 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
52681 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
52682 neg find mustInstanceOfEObject_class(problem,interpretation,element);
52683 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
52684 neg find scopeDisallowsNewENamedElement_class_UndefinedPart(problem, interpretation);
52685 neg find isPrimitive(element);
52686} or
52687{ find mustInstanceOfENamedElement_class_UndefinedPart(problem,interpretation,element); }
52688/**
52689 * An element must be an instance of type "EPackage class DefinedPart".
52690 */
52691private pattern mustInstanceOfEPackage_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
52692 Type.name(type,"EPackage class DefinedPart");
52693 find directInstanceOf(problem,interpretation,element,type);
52694}
52695private pattern scopeDisallowsNewEPackage_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
52696 find interpretation(problem,interpretation);
52697 PartialInterpretation.scopes(interpretation,scope);
52698 Scope.targetTypeInterpretation(scope,typeInterpretation);
52699 Scope.maxNewElements(scope,0);
52700 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
52701 Type.name(type,"EPackage class DefinedPart");
52702}
52703
52704/**
52705 * An element may be an instance of type "EPackage class DefinedPart".
52706 */
52707private pattern mayInstanceOfEPackage_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
52708{ find mustInstanceOfEPackage_class_DefinedPart(problem,interpretation,element); }
52709/**
52710 * An element must be an instance of type "EPackage class UndefinedPart".
52711 */
52712private pattern mustInstanceOfEPackage_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
52713 Type.name(type,"EPackage class UndefinedPart");
52714 find directInstanceOf(problem,interpretation,element,type);
52715}
52716private pattern scopeDisallowsNewEPackage_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
52717 find interpretation(problem,interpretation);
52718 PartialInterpretation.scopes(interpretation,scope);
52719 Scope.targetTypeInterpretation(scope,typeInterpretation);
52720 Scope.maxNewElements(scope,0);
52721 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
52722 Type.name(type,"EPackage class UndefinedPart");
52723}
52724
52725/**
52726 * An element may be an instance of type "EPackage class UndefinedPart".
52727 */
52728private pattern mayInstanceOfEPackage_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
52729{
52730 find interpretation(problem,interpretation);
52731 PartialInterpretation.newElements(interpretation,element);
52732 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
52733 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
52734 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
52735 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
52736 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
52737 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
52738 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
52739 neg find mustInstanceOfEObject_class(problem,interpretation,element);
52740 neg find scopeDisallowsNewEPackage_class_UndefinedPart(problem, interpretation);
52741 neg find isPrimitive(element);
52742} or {
52743 find interpretation(problem,interpretation);
52744 PartialInterpretation.openWorldElements(interpretation,element);
52745 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
52746 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
52747 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
52748 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
52749 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
52750 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
52751 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
52752 neg find mustInstanceOfEObject_class(problem,interpretation,element);
52753 neg find scopeDisallowsNewEPackage_class_UndefinedPart(problem, interpretation);
52754 neg find isPrimitive(element);
52755} or
52756{ find mustInstanceOfEPackage_class_UndefinedPart(problem,interpretation,element); }
52757
52758//////////
52759// 1.2 Relation Declaration Indexers
52760//////////
52761/**
52762 * Matcher for detecting tuples t where []eAttributeType reference EAttribute(source,target)
52763 */
52764private pattern mustInRelationeAttributeType_reference_EAttribute(
52765 problem:LogicProblem, interpretation:PartialInterpretation,
52766 source: DefinedElement, target:DefinedElement)
52767{
52768 find interpretation(problem,interpretation);
52769 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
52770 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributeType reference EAttribute");
52771 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
52772 BinaryElementRelationLink.param1(link,source);
52773 BinaryElementRelationLink.param2(link,target);
52774}
52775/**
52776 * Matcher for detecting tuples t where <>eAttributeType reference EAttribute(source,target)
52777 */
52778private pattern mayInRelationeAttributeType_reference_EAttribute(
52779 problem:LogicProblem, interpretation:PartialInterpretation,
52780 source: DefinedElement, target:DefinedElement)
52781{
52782 find interpretation(problem,interpretation);
52783 // The two endpoint of the link have to exist
52784 find mayExist(problem, interpretation, source);
52785 find mayExist(problem, interpretation, target);
52786 // Type consistency
52787 find mayInstanceOfEAttribute_class(problem,interpretation,source);
52788 find mayInstanceOfEDataType_class(problem,interpretation,target);
52789 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
52790 // the upper bound of the multiplicity should be considered.
52791 numberOfExistingReferences == count find mustInRelationeAttributeType_reference_EAttribute(problem,interpretation,source,_);
52792 check(numberOfExistingReferences < 1);
52793} or {
52794 find mustInRelationeAttributeType_reference_EAttribute(problem,interpretation,source,target);
52795}
52796/**
52797 * Matcher for detecting tuples t where []details reference EAnnotation(source,target)
52798 */
52799private pattern mustInRelationdetails_reference_EAnnotation(
52800 problem:LogicProblem, interpretation:PartialInterpretation,
52801 source: DefinedElement, target:DefinedElement)
52802{
52803 find interpretation(problem,interpretation);
52804 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
52805 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"details reference EAnnotation");
52806 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
52807 BinaryElementRelationLink.param1(link,source);
52808 BinaryElementRelationLink.param2(link,target);
52809}
52810/**
52811 * Matcher for detecting tuples t where <>details reference EAnnotation(source,target)
52812 */
52813private pattern mayInRelationdetails_reference_EAnnotation(
52814 problem:LogicProblem, interpretation:PartialInterpretation,
52815 source: DefinedElement, target:DefinedElement)
52816{
52817 find interpretation(problem,interpretation);
52818 // The two endpoint of the link have to exist
52819 find mayExist(problem, interpretation, source);
52820 find mayExist(problem, interpretation, target);
52821 // Type consistency
52822 find mayInstanceOfEAnnotation_class(problem,interpretation,source);
52823 find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,target);
52824 // The reference is containment, then a new reference cannot be create if:
52825 // 1. Multiple parents
52826 neg find mustContains4(problem,interpretation,_,target);
52827 // 2. Circle in the containment hierarchy
52828 neg find mustTransitiveContains(source,target);
52829} or {
52830 find mustInRelationdetails_reference_EAnnotation(problem,interpretation,source,target);
52831}
52832/**
52833 * Matcher for detecting tuples t where []eModelElement reference EAnnotation(source,target)
52834 */
52835private pattern mustInRelationeModelElement_reference_EAnnotation(
52836 problem:LogicProblem, interpretation:PartialInterpretation,
52837 source: DefinedElement, target:DefinedElement)
52838{
52839 find interpretation(problem,interpretation);
52840 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
52841 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eModelElement reference EAnnotation");
52842 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
52843 BinaryElementRelationLink.param1(link,source);
52844 BinaryElementRelationLink.param2(link,target);
52845}
52846/**
52847 * Matcher for detecting tuples t where <>eModelElement reference EAnnotation(source,target)
52848 */
52849private pattern mayInRelationeModelElement_reference_EAnnotation(
52850 problem:LogicProblem, interpretation:PartialInterpretation,
52851 source: DefinedElement, target:DefinedElement)
52852{
52853 find interpretation(problem,interpretation);
52854 // The two endpoint of the link have to exist
52855 find mayExist(problem, interpretation, source);
52856 find mayExist(problem, interpretation, target);
52857 // Type consistency
52858 find mayInstanceOfEAnnotation_class(problem,interpretation,source);
52859 find mayInstanceOfEModelElement_class(problem,interpretation,target);
52860 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
52861 // the upper bound of the multiplicity should be considered.
52862 numberOfExistingReferences == count find mustInRelationeModelElement_reference_EAnnotation(problem,interpretation,source,_);
52863 check(numberOfExistingReferences < 1);
52864 // The eOpposite of the reference is containment, then a referene cannot be created if
52865 // 1. Multiple parents
52866 neg find mustContains4(problem,interpretation,source,_);
52867 // 2. Circle in the containment hierarchy
52868 neg find mustTransitiveContains(source,target);
52869} or {
52870 find mustInRelationeModelElement_reference_EAnnotation(problem,interpretation,source,target);
52871}
52872/**
52873 * Matcher for detecting tuples t where []contents reference EAnnotation(source,target)
52874 */
52875private pattern mustInRelationcontents_reference_EAnnotation(
52876 problem:LogicProblem, interpretation:PartialInterpretation,
52877 source: DefinedElement, target:DefinedElement)
52878{
52879 find interpretation(problem,interpretation);
52880 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
52881 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"contents reference EAnnotation");
52882 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
52883 BinaryElementRelationLink.param1(link,source);
52884 BinaryElementRelationLink.param2(link,target);
52885}
52886/**
52887 * Matcher for detecting tuples t where <>contents reference EAnnotation(source,target)
52888 */
52889private pattern mayInRelationcontents_reference_EAnnotation(
52890 problem:LogicProblem, interpretation:PartialInterpretation,
52891 source: DefinedElement, target:DefinedElement)
52892{
52893 find interpretation(problem,interpretation);
52894 // The two endpoint of the link have to exist
52895 find mayExist(problem, interpretation, source);
52896 find mayExist(problem, interpretation, target);
52897 // Type consistency
52898 find mayInstanceOfEAnnotation_class(problem,interpretation,source);
52899 find mayInstanceOfEObject_class(problem,interpretation,target);
52900 // The reference is containment, then a new reference cannot be create if:
52901 // 1. Multiple parents
52902 neg find mustContains4(problem,interpretation,_,target);
52903 // 2. Circle in the containment hierarchy
52904 neg find mustTransitiveContains(source,target);
52905} or {
52906 find mustInRelationcontents_reference_EAnnotation(problem,interpretation,source,target);
52907}
52908/**
52909 * Matcher for detecting tuples t where []references reference EAnnotation(source,target)
52910 */
52911private pattern mustInRelationreferences_reference_EAnnotation(
52912 problem:LogicProblem, interpretation:PartialInterpretation,
52913 source: DefinedElement, target:DefinedElement)
52914{
52915 find interpretation(problem,interpretation);
52916 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
52917 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"references reference EAnnotation");
52918 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
52919 BinaryElementRelationLink.param1(link,source);
52920 BinaryElementRelationLink.param2(link,target);
52921}
52922/**
52923 * Matcher for detecting tuples t where <>references reference EAnnotation(source,target)
52924 */
52925private pattern mayInRelationreferences_reference_EAnnotation(
52926 problem:LogicProblem, interpretation:PartialInterpretation,
52927 source: DefinedElement, target:DefinedElement)
52928{
52929 find interpretation(problem,interpretation);
52930 // The two endpoint of the link have to exist
52931 find mayExist(problem, interpretation, source);
52932 find mayExist(problem, interpretation, target);
52933 // Type consistency
52934 find mayInstanceOfEAnnotation_class(problem,interpretation,source);
52935 find mayInstanceOfEObject_class(problem,interpretation,target);
52936} or {
52937 find mustInRelationreferences_reference_EAnnotation(problem,interpretation,source,target);
52938}
52939/**
52940 * Matcher for detecting tuples t where []eSuperTypes reference EClass(source,target)
52941 */
52942private pattern mustInRelationeSuperTypes_reference_EClass(
52943 problem:LogicProblem, interpretation:PartialInterpretation,
52944 source: DefinedElement, target:DefinedElement)
52945{
52946 find interpretation(problem,interpretation);
52947 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
52948 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eSuperTypes reference EClass");
52949 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
52950 BinaryElementRelationLink.param1(link,source);
52951 BinaryElementRelationLink.param2(link,target);
52952}
52953/**
52954 * Matcher for detecting tuples t where <>eSuperTypes reference EClass(source,target)
52955 */
52956private pattern mayInRelationeSuperTypes_reference_EClass(
52957 problem:LogicProblem, interpretation:PartialInterpretation,
52958 source: DefinedElement, target:DefinedElement)
52959{
52960 find interpretation(problem,interpretation);
52961 // The two endpoint of the link have to exist
52962 find mayExist(problem, interpretation, source);
52963 find mayExist(problem, interpretation, target);
52964 // Type consistency
52965 find mayInstanceOfEClass_class(problem,interpretation,source);
52966 find mayInstanceOfEClass_class(problem,interpretation,target);
52967} or {
52968 find mustInRelationeSuperTypes_reference_EClass(problem,interpretation,source,target);
52969}
52970/**
52971 * Matcher for detecting tuples t where []eOperations reference EClass(source,target)
52972 */
52973private pattern mustInRelationeOperations_reference_EClass(
52974 problem:LogicProblem, interpretation:PartialInterpretation,
52975 source: DefinedElement, target:DefinedElement)
52976{
52977 find interpretation(problem,interpretation);
52978 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
52979 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eOperations reference EClass");
52980 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
52981 BinaryElementRelationLink.param1(link,source);
52982 BinaryElementRelationLink.param2(link,target);
52983}
52984/**
52985 * Matcher for detecting tuples t where <>eOperations reference EClass(source,target)
52986 */
52987private pattern mayInRelationeOperations_reference_EClass(
52988 problem:LogicProblem, interpretation:PartialInterpretation,
52989 source: DefinedElement, target:DefinedElement)
52990{
52991 find interpretation(problem,interpretation);
52992 // The two endpoint of the link have to exist
52993 find mayExist(problem, interpretation, source);
52994 find mayExist(problem, interpretation, target);
52995 // Type consistency
52996 find mayInstanceOfEClass_class(problem,interpretation,source);
52997 find mayInstanceOfEOperation_class(problem,interpretation,target);
52998 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
52999 // the upper bound of the opposite reference multiplicity should be considered.
53000 numberOfExistingOppositeReferences == count find mustInRelationeContainingClass_reference_EOperation(problem,interpretation,target,_);
53001 check(numberOfExistingOppositeReferences < 1);
53002 // The reference is containment, then a new reference cannot be create if:
53003 // 1. Multiple parents
53004 neg find mustContains4(problem,interpretation,_,target);
53005 // 2. Circle in the containment hierarchy
53006 neg find mustTransitiveContains(source,target);
53007} or {
53008 find mustInRelationeOperations_reference_EClass(problem,interpretation,source,target);
53009}
53010/**
53011 * Matcher for detecting tuples t where []eAllAttributes reference EClass(source,target)
53012 */
53013private pattern mustInRelationeAllAttributes_reference_EClass(
53014 problem:LogicProblem, interpretation:PartialInterpretation,
53015 source: DefinedElement, target:DefinedElement)
53016{
53017 find interpretation(problem,interpretation);
53018 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
53019 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllAttributes reference EClass");
53020 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
53021 BinaryElementRelationLink.param1(link,source);
53022 BinaryElementRelationLink.param2(link,target);
53023}
53024/**
53025 * Matcher for detecting tuples t where <>eAllAttributes reference EClass(source,target)
53026 */
53027private pattern mayInRelationeAllAttributes_reference_EClass(
53028 problem:LogicProblem, interpretation:PartialInterpretation,
53029 source: DefinedElement, target:DefinedElement)
53030{
53031 find interpretation(problem,interpretation);
53032 // The two endpoint of the link have to exist
53033 find mayExist(problem, interpretation, source);
53034 find mayExist(problem, interpretation, target);
53035 // Type consistency
53036 find mayInstanceOfEClass_class(problem,interpretation,source);
53037 find mayInstanceOfEAttribute_class(problem,interpretation,target);
53038} or {
53039 find mustInRelationeAllAttributes_reference_EClass(problem,interpretation,source,target);
53040}
53041/**
53042 * Matcher for detecting tuples t where []eAllReferences reference EClass(source,target)
53043 */
53044private pattern mustInRelationeAllReferences_reference_EClass(
53045 problem:LogicProblem, interpretation:PartialInterpretation,
53046 source: DefinedElement, target:DefinedElement)
53047{
53048 find interpretation(problem,interpretation);
53049 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
53050 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllReferences reference EClass");
53051 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
53052 BinaryElementRelationLink.param1(link,source);
53053 BinaryElementRelationLink.param2(link,target);
53054}
53055/**
53056 * Matcher for detecting tuples t where <>eAllReferences reference EClass(source,target)
53057 */
53058private pattern mayInRelationeAllReferences_reference_EClass(
53059 problem:LogicProblem, interpretation:PartialInterpretation,
53060 source: DefinedElement, target:DefinedElement)
53061{
53062 find interpretation(problem,interpretation);
53063 // The two endpoint of the link have to exist
53064 find mayExist(problem, interpretation, source);
53065 find mayExist(problem, interpretation, target);
53066 // Type consistency
53067 find mayInstanceOfEClass_class(problem,interpretation,source);
53068 find mayInstanceOfEReference_class(problem,interpretation,target);
53069} or {
53070 find mustInRelationeAllReferences_reference_EClass(problem,interpretation,source,target);
53071}
53072/**
53073 * Matcher for detecting tuples t where []eReferences reference EClass(source,target)
53074 */
53075private pattern mustInRelationeReferences_reference_EClass(
53076 problem:LogicProblem, interpretation:PartialInterpretation,
53077 source: DefinedElement, target:DefinedElement)
53078{
53079 find interpretation(problem,interpretation);
53080 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
53081 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferences reference EClass");
53082 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
53083 BinaryElementRelationLink.param1(link,source);
53084 BinaryElementRelationLink.param2(link,target);
53085}
53086/**
53087 * Matcher for detecting tuples t where <>eReferences reference EClass(source,target)
53088 */
53089private pattern mayInRelationeReferences_reference_EClass(
53090 problem:LogicProblem, interpretation:PartialInterpretation,
53091 source: DefinedElement, target:DefinedElement)
53092{
53093 find interpretation(problem,interpretation);
53094 // The two endpoint of the link have to exist
53095 find mayExist(problem, interpretation, source);
53096 find mayExist(problem, interpretation, target);
53097 // Type consistency
53098 find mayInstanceOfEClass_class(problem,interpretation,source);
53099 find mayInstanceOfEReference_class(problem,interpretation,target);
53100} or {
53101 find mustInRelationeReferences_reference_EClass(problem,interpretation,source,target);
53102}
53103/**
53104 * Matcher for detecting tuples t where []eAttributes reference EClass(source,target)
53105 */
53106private pattern mustInRelationeAttributes_reference_EClass(
53107 problem:LogicProblem, interpretation:PartialInterpretation,
53108 source: DefinedElement, target:DefinedElement)
53109{
53110 find interpretation(problem,interpretation);
53111 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
53112 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributes reference EClass");
53113 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
53114 BinaryElementRelationLink.param1(link,source);
53115 BinaryElementRelationLink.param2(link,target);
53116}
53117/**
53118 * Matcher for detecting tuples t where <>eAttributes reference EClass(source,target)
53119 */
53120private pattern mayInRelationeAttributes_reference_EClass(
53121 problem:LogicProblem, interpretation:PartialInterpretation,
53122 source: DefinedElement, target:DefinedElement)
53123{
53124 find interpretation(problem,interpretation);
53125 // The two endpoint of the link have to exist
53126 find mayExist(problem, interpretation, source);
53127 find mayExist(problem, interpretation, target);
53128 // Type consistency
53129 find mayInstanceOfEClass_class(problem,interpretation,source);
53130 find mayInstanceOfEAttribute_class(problem,interpretation,target);
53131} or {
53132 find mustInRelationeAttributes_reference_EClass(problem,interpretation,source,target);
53133}
53134/**
53135 * Matcher for detecting tuples t where []eAllContainments reference EClass(source,target)
53136 */
53137private pattern mustInRelationeAllContainments_reference_EClass(
53138 problem:LogicProblem, interpretation:PartialInterpretation,
53139 source: DefinedElement, target:DefinedElement)
53140{
53141 find interpretation(problem,interpretation);
53142 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
53143 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllContainments reference EClass");
53144 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
53145 BinaryElementRelationLink.param1(link,source);
53146 BinaryElementRelationLink.param2(link,target);
53147}
53148/**
53149 * Matcher for detecting tuples t where <>eAllContainments reference EClass(source,target)
53150 */
53151private pattern mayInRelationeAllContainments_reference_EClass(
53152 problem:LogicProblem, interpretation:PartialInterpretation,
53153 source: DefinedElement, target:DefinedElement)
53154{
53155 find interpretation(problem,interpretation);
53156 // The two endpoint of the link have to exist
53157 find mayExist(problem, interpretation, source);
53158 find mayExist(problem, interpretation, target);
53159 // Type consistency
53160 find mayInstanceOfEClass_class(problem,interpretation,source);
53161 find mayInstanceOfEReference_class(problem,interpretation,target);
53162} or {
53163 find mustInRelationeAllContainments_reference_EClass(problem,interpretation,source,target);
53164}
53165/**
53166 * Matcher for detecting tuples t where []eAllOperations reference EClass(source,target)
53167 */
53168private pattern mustInRelationeAllOperations_reference_EClass(
53169 problem:LogicProblem, interpretation:PartialInterpretation,
53170 source: DefinedElement, target:DefinedElement)
53171{
53172 find interpretation(problem,interpretation);
53173 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
53174 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllOperations reference EClass");
53175 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
53176 BinaryElementRelationLink.param1(link,source);
53177 BinaryElementRelationLink.param2(link,target);
53178}
53179/**
53180 * Matcher for detecting tuples t where <>eAllOperations reference EClass(source,target)
53181 */
53182private pattern mayInRelationeAllOperations_reference_EClass(
53183 problem:LogicProblem, interpretation:PartialInterpretation,
53184 source: DefinedElement, target:DefinedElement)
53185{
53186 find interpretation(problem,interpretation);
53187 // The two endpoint of the link have to exist
53188 find mayExist(problem, interpretation, source);
53189 find mayExist(problem, interpretation, target);
53190 // Type consistency
53191 find mayInstanceOfEClass_class(problem,interpretation,source);
53192 find mayInstanceOfEOperation_class(problem,interpretation,target);
53193} or {
53194 find mustInRelationeAllOperations_reference_EClass(problem,interpretation,source,target);
53195}
53196/**
53197 * Matcher for detecting tuples t where []eAllStructuralFeatures reference EClass(source,target)
53198 */
53199private pattern mustInRelationeAllStructuralFeatures_reference_EClass(
53200 problem:LogicProblem, interpretation:PartialInterpretation,
53201 source: DefinedElement, target:DefinedElement)
53202{
53203 find interpretation(problem,interpretation);
53204 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
53205 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllStructuralFeatures reference EClass");
53206 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
53207 BinaryElementRelationLink.param1(link,source);
53208 BinaryElementRelationLink.param2(link,target);
53209}
53210/**
53211 * Matcher for detecting tuples t where <>eAllStructuralFeatures reference EClass(source,target)
53212 */
53213private pattern mayInRelationeAllStructuralFeatures_reference_EClass(
53214 problem:LogicProblem, interpretation:PartialInterpretation,
53215 source: DefinedElement, target:DefinedElement)
53216{
53217 find interpretation(problem,interpretation);
53218 // The two endpoint of the link have to exist
53219 find mayExist(problem, interpretation, source);
53220 find mayExist(problem, interpretation, target);
53221 // Type consistency
53222 find mayInstanceOfEClass_class(problem,interpretation,source);
53223 find mayInstanceOfEStructuralFeature_class(problem,interpretation,target);
53224} or {
53225 find mustInRelationeAllStructuralFeatures_reference_EClass(problem,interpretation,source,target);
53226}
53227/**
53228 * Matcher for detecting tuples t where []eAllSuperTypes reference EClass(source,target)
53229 */
53230private pattern mustInRelationeAllSuperTypes_reference_EClass(
53231 problem:LogicProblem, interpretation:PartialInterpretation,
53232 source: DefinedElement, target:DefinedElement)
53233{
53234 find interpretation(problem,interpretation);
53235 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
53236 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllSuperTypes reference EClass");
53237 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
53238 BinaryElementRelationLink.param1(link,source);
53239 BinaryElementRelationLink.param2(link,target);
53240}
53241/**
53242 * Matcher for detecting tuples t where <>eAllSuperTypes reference EClass(source,target)
53243 */
53244private pattern mayInRelationeAllSuperTypes_reference_EClass(
53245 problem:LogicProblem, interpretation:PartialInterpretation,
53246 source: DefinedElement, target:DefinedElement)
53247{
53248 find interpretation(problem,interpretation);
53249 // The two endpoint of the link have to exist
53250 find mayExist(problem, interpretation, source);
53251 find mayExist(problem, interpretation, target);
53252 // Type consistency
53253 find mayInstanceOfEClass_class(problem,interpretation,source);
53254 find mayInstanceOfEClass_class(problem,interpretation,target);
53255} or {
53256 find mustInRelationeAllSuperTypes_reference_EClass(problem,interpretation,source,target);
53257}
53258/**
53259 * Matcher for detecting tuples t where []eIDAttribute reference EClass(source,target)
53260 */
53261private pattern mustInRelationeIDAttribute_reference_EClass(
53262 problem:LogicProblem, interpretation:PartialInterpretation,
53263 source: DefinedElement, target:DefinedElement)
53264{
53265 find interpretation(problem,interpretation);
53266 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
53267 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eIDAttribute reference EClass");
53268 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
53269 BinaryElementRelationLink.param1(link,source);
53270 BinaryElementRelationLink.param2(link,target);
53271}
53272/**
53273 * Matcher for detecting tuples t where <>eIDAttribute reference EClass(source,target)
53274 */
53275private pattern mayInRelationeIDAttribute_reference_EClass(
53276 problem:LogicProblem, interpretation:PartialInterpretation,
53277 source: DefinedElement, target:DefinedElement)
53278{
53279 find interpretation(problem,interpretation);
53280 // The two endpoint of the link have to exist
53281 find mayExist(problem, interpretation, source);
53282 find mayExist(problem, interpretation, target);
53283 // Type consistency
53284 find mayInstanceOfEClass_class(problem,interpretation,source);
53285 find mayInstanceOfEAttribute_class(problem,interpretation,target);
53286 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
53287 // the upper bound of the multiplicity should be considered.
53288 numberOfExistingReferences == count find mustInRelationeIDAttribute_reference_EClass(problem,interpretation,source,_);
53289 check(numberOfExistingReferences < 1);
53290} or {
53291 find mustInRelationeIDAttribute_reference_EClass(problem,interpretation,source,target);
53292}
53293/**
53294 * Matcher for detecting tuples t where []eStructuralFeatures reference EClass(source,target)
53295 */
53296private pattern mustInRelationeStructuralFeatures_reference_EClass(
53297 problem:LogicProblem, interpretation:PartialInterpretation,
53298 source: DefinedElement, target:DefinedElement)
53299{
53300 find interpretation(problem,interpretation);
53301 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
53302 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eStructuralFeatures reference EClass");
53303 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
53304 BinaryElementRelationLink.param1(link,source);
53305 BinaryElementRelationLink.param2(link,target);
53306}
53307/**
53308 * Matcher for detecting tuples t where <>eStructuralFeatures reference EClass(source,target)
53309 */
53310private pattern mayInRelationeStructuralFeatures_reference_EClass(
53311 problem:LogicProblem, interpretation:PartialInterpretation,
53312 source: DefinedElement, target:DefinedElement)
53313{
53314 find interpretation(problem,interpretation);
53315 // The two endpoint of the link have to exist
53316 find mayExist(problem, interpretation, source);
53317 find mayExist(problem, interpretation, target);
53318 // Type consistency
53319 find mayInstanceOfEClass_class(problem,interpretation,source);
53320 find mayInstanceOfEStructuralFeature_class(problem,interpretation,target);
53321 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
53322 // the upper bound of the opposite reference multiplicity should be considered.
53323 numberOfExistingOppositeReferences == count find mustInRelationeContainingClass_reference_EStructuralFeature(problem,interpretation,target,_);
53324 check(numberOfExistingOppositeReferences < 1);
53325 // The reference is containment, then a new reference cannot be create if:
53326 // 1. Multiple parents
53327 neg find mustContains4(problem,interpretation,_,target);
53328 // 2. Circle in the containment hierarchy
53329 neg find mustTransitiveContains(source,target);
53330} or {
53331 find mustInRelationeStructuralFeatures_reference_EClass(problem,interpretation,source,target);
53332}
53333/**
53334 * Matcher for detecting tuples t where []eGenericSuperTypes reference EClass(source,target)
53335 */
53336private pattern mustInRelationeGenericSuperTypes_reference_EClass(
53337 problem:LogicProblem, interpretation:PartialInterpretation,
53338 source: DefinedElement, target:DefinedElement)
53339{
53340 find interpretation(problem,interpretation);
53341 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
53342 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eGenericSuperTypes reference EClass");
53343 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
53344 BinaryElementRelationLink.param1(link,source);
53345 BinaryElementRelationLink.param2(link,target);
53346}
53347/**
53348 * Matcher for detecting tuples t where <>eGenericSuperTypes reference EClass(source,target)
53349 */
53350private pattern mayInRelationeGenericSuperTypes_reference_EClass(
53351 problem:LogicProblem, interpretation:PartialInterpretation,
53352 source: DefinedElement, target:DefinedElement)
53353{
53354 find interpretation(problem,interpretation);
53355 // The two endpoint of the link have to exist
53356 find mayExist(problem, interpretation, source);
53357 find mayExist(problem, interpretation, target);
53358 // Type consistency
53359 find mayInstanceOfEClass_class(problem,interpretation,source);
53360 find mayInstanceOfEGenericType_class(problem,interpretation,target);
53361 // The reference is containment, then a new reference cannot be create if:
53362 // 1. Multiple parents
53363 neg find mustContains4(problem,interpretation,_,target);
53364 // 2. Circle in the containment hierarchy
53365 neg find mustTransitiveContains(source,target);
53366} or {
53367 find mustInRelationeGenericSuperTypes_reference_EClass(problem,interpretation,source,target);
53368}
53369/**
53370 * Matcher for detecting tuples t where []eAllGenericSuperTypes reference EClass(source,target)
53371 */
53372private pattern mustInRelationeAllGenericSuperTypes_reference_EClass(
53373 problem:LogicProblem, interpretation:PartialInterpretation,
53374 source: DefinedElement, target:DefinedElement)
53375{
53376 find interpretation(problem,interpretation);
53377 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
53378 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllGenericSuperTypes reference EClass");
53379 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
53380 BinaryElementRelationLink.param1(link,source);
53381 BinaryElementRelationLink.param2(link,target);
53382}
53383/**
53384 * Matcher for detecting tuples t where <>eAllGenericSuperTypes reference EClass(source,target)
53385 */
53386private pattern mayInRelationeAllGenericSuperTypes_reference_EClass(
53387 problem:LogicProblem, interpretation:PartialInterpretation,
53388 source: DefinedElement, target:DefinedElement)
53389{
53390 find interpretation(problem,interpretation);
53391 // The two endpoint of the link have to exist
53392 find mayExist(problem, interpretation, source);
53393 find mayExist(problem, interpretation, target);
53394 // Type consistency
53395 find mayInstanceOfEClass_class(problem,interpretation,source);
53396 find mayInstanceOfEGenericType_class(problem,interpretation,target);
53397} or {
53398 find mustInRelationeAllGenericSuperTypes_reference_EClass(problem,interpretation,source,target);
53399}
53400/**
53401 * Matcher for detecting tuples t where []ePackage reference EClassifier(source,target)
53402 */
53403private pattern mustInRelationePackage_reference_EClassifier(
53404 problem:LogicProblem, interpretation:PartialInterpretation,
53405 source: DefinedElement, target:DefinedElement)
53406{
53407 find interpretation(problem,interpretation);
53408 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
53409 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"ePackage reference EClassifier");
53410 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
53411 BinaryElementRelationLink.param1(link,source);
53412 BinaryElementRelationLink.param2(link,target);
53413}
53414/**
53415 * Matcher for detecting tuples t where <>ePackage reference EClassifier(source,target)
53416 */
53417private pattern mayInRelationePackage_reference_EClassifier(
53418 problem:LogicProblem, interpretation:PartialInterpretation,
53419 source: DefinedElement, target:DefinedElement)
53420{
53421 find interpretation(problem,interpretation);
53422 // The two endpoint of the link have to exist
53423 find mayExist(problem, interpretation, source);
53424 find mayExist(problem, interpretation, target);
53425 // Type consistency
53426 find mayInstanceOfEClassifier_class(problem,interpretation,source);
53427 find mayInstanceOfEPackage_class(problem,interpretation,target);
53428 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
53429 // the upper bound of the multiplicity should be considered.
53430 numberOfExistingReferences == count find mustInRelationePackage_reference_EClassifier(problem,interpretation,source,_);
53431 check(numberOfExistingReferences < 1);
53432 // The eOpposite of the reference is containment, then a referene cannot be created if
53433 // 1. Multiple parents
53434 neg find mustContains4(problem,interpretation,source,_);
53435 // 2. Circle in the containment hierarchy
53436 neg find mustTransitiveContains(source,target);
53437} or {
53438 find mustInRelationePackage_reference_EClassifier(problem,interpretation,source,target);
53439}
53440/**
53441 * Matcher for detecting tuples t where []eTypeParameters reference EClassifier(source,target)
53442 */
53443private pattern mustInRelationeTypeParameters_reference_EClassifier(
53444 problem:LogicProblem, interpretation:PartialInterpretation,
53445 source: DefinedElement, target:DefinedElement)
53446{
53447 find interpretation(problem,interpretation);
53448 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
53449 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeParameters reference EClassifier");
53450 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
53451 BinaryElementRelationLink.param1(link,source);
53452 BinaryElementRelationLink.param2(link,target);
53453}
53454/**
53455 * Matcher for detecting tuples t where <>eTypeParameters reference EClassifier(source,target)
53456 */
53457private pattern mayInRelationeTypeParameters_reference_EClassifier(
53458 problem:LogicProblem, interpretation:PartialInterpretation,
53459 source: DefinedElement, target:DefinedElement)
53460{
53461 find interpretation(problem,interpretation);
53462 // The two endpoint of the link have to exist
53463 find mayExist(problem, interpretation, source);
53464 find mayExist(problem, interpretation, target);
53465 // Type consistency
53466 find mayInstanceOfEClassifier_class(problem,interpretation,source);
53467 find mayInstanceOfETypeParameter_class(problem,interpretation,target);
53468 // The reference is containment, then a new reference cannot be create if:
53469 // 1. Multiple parents
53470 neg find mustContains4(problem,interpretation,_,target);
53471 // 2. Circle in the containment hierarchy
53472 neg find mustTransitiveContains(source,target);
53473} or {
53474 find mustInRelationeTypeParameters_reference_EClassifier(problem,interpretation,source,target);
53475}
53476/**
53477 * Matcher for detecting tuples t where []eLiterals reference EEnum(source,target)
53478 */
53479private pattern mustInRelationeLiterals_reference_EEnum(
53480 problem:LogicProblem, interpretation:PartialInterpretation,
53481 source: DefinedElement, target:DefinedElement)
53482{
53483 find interpretation(problem,interpretation);
53484 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
53485 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eLiterals reference EEnum");
53486 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
53487 BinaryElementRelationLink.param1(link,source);
53488 BinaryElementRelationLink.param2(link,target);
53489}
53490/**
53491 * Matcher for detecting tuples t where <>eLiterals reference EEnum(source,target)
53492 */
53493private pattern mayInRelationeLiterals_reference_EEnum(
53494 problem:LogicProblem, interpretation:PartialInterpretation,
53495 source: DefinedElement, target:DefinedElement)
53496{
53497 find interpretation(problem,interpretation);
53498 // The two endpoint of the link have to exist
53499 find mayExist(problem, interpretation, source);
53500 find mayExist(problem, interpretation, target);
53501 // Type consistency
53502 find mayInstanceOfEEnum_class(problem,interpretation,source);
53503 find mayInstanceOfEEnumLiteral_class(problem,interpretation,target);
53504 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
53505 // the upper bound of the opposite reference multiplicity should be considered.
53506 numberOfExistingOppositeReferences == count find mustInRelationeEnum_reference_EEnumLiteral(problem,interpretation,target,_);
53507 check(numberOfExistingOppositeReferences < 1);
53508 // The reference is containment, then a new reference cannot be create if:
53509 // 1. Multiple parents
53510 neg find mustContains4(problem,interpretation,_,target);
53511 // 2. Circle in the containment hierarchy
53512 neg find mustTransitiveContains(source,target);
53513} or {
53514 find mustInRelationeLiterals_reference_EEnum(problem,interpretation,source,target);
53515}
53516/**
53517 * Matcher for detecting tuples t where []eEnum reference EEnumLiteral(source,target)
53518 */
53519private pattern mustInRelationeEnum_reference_EEnumLiteral(
53520 problem:LogicProblem, interpretation:PartialInterpretation,
53521 source: DefinedElement, target:DefinedElement)
53522{
53523 find interpretation(problem,interpretation);
53524 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
53525 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eEnum reference EEnumLiteral");
53526 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
53527 BinaryElementRelationLink.param1(link,source);
53528 BinaryElementRelationLink.param2(link,target);
53529}
53530/**
53531 * Matcher for detecting tuples t where <>eEnum reference EEnumLiteral(source,target)
53532 */
53533private pattern mayInRelationeEnum_reference_EEnumLiteral(
53534 problem:LogicProblem, interpretation:PartialInterpretation,
53535 source: DefinedElement, target:DefinedElement)
53536{
53537 find interpretation(problem,interpretation);
53538 // The two endpoint of the link have to exist
53539 find mayExist(problem, interpretation, source);
53540 find mayExist(problem, interpretation, target);
53541 // Type consistency
53542 find mayInstanceOfEEnumLiteral_class(problem,interpretation,source);
53543 find mayInstanceOfEEnum_class(problem,interpretation,target);
53544 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
53545 // the upper bound of the multiplicity should be considered.
53546 numberOfExistingReferences == count find mustInRelationeEnum_reference_EEnumLiteral(problem,interpretation,source,_);
53547 check(numberOfExistingReferences < 1);
53548 // The eOpposite of the reference is containment, then a referene cannot be created if
53549 // 1. Multiple parents
53550 neg find mustContains4(problem,interpretation,source,_);
53551 // 2. Circle in the containment hierarchy
53552 neg find mustTransitiveContains(source,target);
53553} or {
53554 find mustInRelationeEnum_reference_EEnumLiteral(problem,interpretation,source,target);
53555}
53556/**
53557 * Matcher for detecting tuples t where []eAnnotations reference EModelElement(source,target)
53558 */
53559private pattern mustInRelationeAnnotations_reference_EModelElement(
53560 problem:LogicProblem, interpretation:PartialInterpretation,
53561 source: DefinedElement, target:DefinedElement)
53562{
53563 find interpretation(problem,interpretation);
53564 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
53565 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAnnotations reference EModelElement");
53566 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
53567 BinaryElementRelationLink.param1(link,source);
53568 BinaryElementRelationLink.param2(link,target);
53569}
53570/**
53571 * Matcher for detecting tuples t where <>eAnnotations reference EModelElement(source,target)
53572 */
53573private pattern mayInRelationeAnnotations_reference_EModelElement(
53574 problem:LogicProblem, interpretation:PartialInterpretation,
53575 source: DefinedElement, target:DefinedElement)
53576{
53577 find interpretation(problem,interpretation);
53578 // The two endpoint of the link have to exist
53579 find mayExist(problem, interpretation, source);
53580 find mayExist(problem, interpretation, target);
53581 // Type consistency
53582 find mayInstanceOfEModelElement_class(problem,interpretation,source);
53583 find mayInstanceOfEAnnotation_class(problem,interpretation,target);
53584 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
53585 // the upper bound of the opposite reference multiplicity should be considered.
53586 numberOfExistingOppositeReferences == count find mustInRelationeModelElement_reference_EAnnotation(problem,interpretation,target,_);
53587 check(numberOfExistingOppositeReferences < 1);
53588 // The reference is containment, then a new reference cannot be create if:
53589 // 1. Multiple parents
53590 neg find mustContains4(problem,interpretation,_,target);
53591 // 2. Circle in the containment hierarchy
53592 neg find mustTransitiveContains(source,target);
53593} or {
53594 find mustInRelationeAnnotations_reference_EModelElement(problem,interpretation,source,target);
53595}
53596/**
53597 * Matcher for detecting tuples t where []eContainingClass reference EOperation(source,target)
53598 */
53599private pattern mustInRelationeContainingClass_reference_EOperation(
53600 problem:LogicProblem, interpretation:PartialInterpretation,
53601 source: DefinedElement, target:DefinedElement)
53602{
53603 find interpretation(problem,interpretation);
53604 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
53605 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eContainingClass reference EOperation");
53606 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
53607 BinaryElementRelationLink.param1(link,source);
53608 BinaryElementRelationLink.param2(link,target);
53609}
53610/**
53611 * Matcher for detecting tuples t where <>eContainingClass reference EOperation(source,target)
53612 */
53613private pattern mayInRelationeContainingClass_reference_EOperation(
53614 problem:LogicProblem, interpretation:PartialInterpretation,
53615 source: DefinedElement, target:DefinedElement)
53616{
53617 find interpretation(problem,interpretation);
53618 // The two endpoint of the link have to exist
53619 find mayExist(problem, interpretation, source);
53620 find mayExist(problem, interpretation, target);
53621 // Type consistency
53622 find mayInstanceOfEOperation_class(problem,interpretation,source);
53623 find mayInstanceOfEClass_class(problem,interpretation,target);
53624 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
53625 // the upper bound of the multiplicity should be considered.
53626 numberOfExistingReferences == count find mustInRelationeContainingClass_reference_EOperation(problem,interpretation,source,_);
53627 check(numberOfExistingReferences < 1);
53628 // The eOpposite of the reference is containment, then a referene cannot be created if
53629 // 1. Multiple parents
53630 neg find mustContains4(problem,interpretation,source,_);
53631 // 2. Circle in the containment hierarchy
53632 neg find mustTransitiveContains(source,target);
53633} or {
53634 find mustInRelationeContainingClass_reference_EOperation(problem,interpretation,source,target);
53635}
53636/**
53637 * Matcher for detecting tuples t where []eTypeParameters reference EOperation(source,target)
53638 */
53639private pattern mustInRelationeTypeParameters_reference_EOperation(
53640 problem:LogicProblem, interpretation:PartialInterpretation,
53641 source: DefinedElement, target:DefinedElement)
53642{
53643 find interpretation(problem,interpretation);
53644 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
53645 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeParameters reference EOperation");
53646 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
53647 BinaryElementRelationLink.param1(link,source);
53648 BinaryElementRelationLink.param2(link,target);
53649}
53650/**
53651 * Matcher for detecting tuples t where <>eTypeParameters reference EOperation(source,target)
53652 */
53653private pattern mayInRelationeTypeParameters_reference_EOperation(
53654 problem:LogicProblem, interpretation:PartialInterpretation,
53655 source: DefinedElement, target:DefinedElement)
53656{
53657 find interpretation(problem,interpretation);
53658 // The two endpoint of the link have to exist
53659 find mayExist(problem, interpretation, source);
53660 find mayExist(problem, interpretation, target);
53661 // Type consistency
53662 find mayInstanceOfEOperation_class(problem,interpretation,source);
53663 find mayInstanceOfETypeParameter_class(problem,interpretation,target);
53664 // The reference is containment, then a new reference cannot be create if:
53665 // 1. Multiple parents
53666 neg find mustContains4(problem,interpretation,_,target);
53667 // 2. Circle in the containment hierarchy
53668 neg find mustTransitiveContains(source,target);
53669} or {
53670 find mustInRelationeTypeParameters_reference_EOperation(problem,interpretation,source,target);
53671}
53672/**
53673 * Matcher for detecting tuples t where []eParameters reference EOperation(source,target)
53674 */
53675private pattern mustInRelationeParameters_reference_EOperation(
53676 problem:LogicProblem, interpretation:PartialInterpretation,
53677 source: DefinedElement, target:DefinedElement)
53678{
53679 find interpretation(problem,interpretation);
53680 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
53681 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eParameters reference EOperation");
53682 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
53683 BinaryElementRelationLink.param1(link,source);
53684 BinaryElementRelationLink.param2(link,target);
53685}
53686/**
53687 * Matcher for detecting tuples t where <>eParameters reference EOperation(source,target)
53688 */
53689private pattern mayInRelationeParameters_reference_EOperation(
53690 problem:LogicProblem, interpretation:PartialInterpretation,
53691 source: DefinedElement, target:DefinedElement)
53692{
53693 find interpretation(problem,interpretation);
53694 // The two endpoint of the link have to exist
53695 find mayExist(problem, interpretation, source);
53696 find mayExist(problem, interpretation, target);
53697 // Type consistency
53698 find mayInstanceOfEOperation_class(problem,interpretation,source);
53699 find mayInstanceOfEParameter_class(problem,interpretation,target);
53700 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
53701 // the upper bound of the opposite reference multiplicity should be considered.
53702 numberOfExistingOppositeReferences == count find mustInRelationeOperation_reference_EParameter(problem,interpretation,target,_);
53703 check(numberOfExistingOppositeReferences < 1);
53704 // The reference is containment, then a new reference cannot be create if:
53705 // 1. Multiple parents
53706 neg find mustContains4(problem,interpretation,_,target);
53707 // 2. Circle in the containment hierarchy
53708 neg find mustTransitiveContains(source,target);
53709} or {
53710 find mustInRelationeParameters_reference_EOperation(problem,interpretation,source,target);
53711}
53712/**
53713 * Matcher for detecting tuples t where []eExceptions reference EOperation(source,target)
53714 */
53715private pattern mustInRelationeExceptions_reference_EOperation(
53716 problem:LogicProblem, interpretation:PartialInterpretation,
53717 source: DefinedElement, target:DefinedElement)
53718{
53719 find interpretation(problem,interpretation);
53720 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
53721 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eExceptions reference EOperation");
53722 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
53723 BinaryElementRelationLink.param1(link,source);
53724 BinaryElementRelationLink.param2(link,target);
53725}
53726/**
53727 * Matcher for detecting tuples t where <>eExceptions reference EOperation(source,target)
53728 */
53729private pattern mayInRelationeExceptions_reference_EOperation(
53730 problem:LogicProblem, interpretation:PartialInterpretation,
53731 source: DefinedElement, target:DefinedElement)
53732{
53733 find interpretation(problem,interpretation);
53734 // The two endpoint of the link have to exist
53735 find mayExist(problem, interpretation, source);
53736 find mayExist(problem, interpretation, target);
53737 // Type consistency
53738 find mayInstanceOfEOperation_class(problem,interpretation,source);
53739 find mayInstanceOfEClassifier_class(problem,interpretation,target);
53740} or {
53741 find mustInRelationeExceptions_reference_EOperation(problem,interpretation,source,target);
53742}
53743/**
53744 * Matcher for detecting tuples t where []eGenericExceptions reference EOperation(source,target)
53745 */
53746private pattern mustInRelationeGenericExceptions_reference_EOperation(
53747 problem:LogicProblem, interpretation:PartialInterpretation,
53748 source: DefinedElement, target:DefinedElement)
53749{
53750 find interpretation(problem,interpretation);
53751 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
53752 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eGenericExceptions reference EOperation");
53753 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
53754 BinaryElementRelationLink.param1(link,source);
53755 BinaryElementRelationLink.param2(link,target);
53756}
53757/**
53758 * Matcher for detecting tuples t where <>eGenericExceptions reference EOperation(source,target)
53759 */
53760private pattern mayInRelationeGenericExceptions_reference_EOperation(
53761 problem:LogicProblem, interpretation:PartialInterpretation,
53762 source: DefinedElement, target:DefinedElement)
53763{
53764 find interpretation(problem,interpretation);
53765 // The two endpoint of the link have to exist
53766 find mayExist(problem, interpretation, source);
53767 find mayExist(problem, interpretation, target);
53768 // Type consistency
53769 find mayInstanceOfEOperation_class(problem,interpretation,source);
53770 find mayInstanceOfEGenericType_class(problem,interpretation,target);
53771 // The reference is containment, then a new reference cannot be create if:
53772 // 1. Multiple parents
53773 neg find mustContains4(problem,interpretation,_,target);
53774 // 2. Circle in the containment hierarchy
53775 neg find mustTransitiveContains(source,target);
53776} or {
53777 find mustInRelationeGenericExceptions_reference_EOperation(problem,interpretation,source,target);
53778}
53779/**
53780 * Matcher for detecting tuples t where []eClassifiers reference EPackage(source,target)
53781 */
53782private pattern mustInRelationeClassifiers_reference_EPackage(
53783 problem:LogicProblem, interpretation:PartialInterpretation,
53784 source: DefinedElement, target:DefinedElement)
53785{
53786 find interpretation(problem,interpretation);
53787 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
53788 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eClassifiers reference EPackage");
53789 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
53790 BinaryElementRelationLink.param1(link,source);
53791 BinaryElementRelationLink.param2(link,target);
53792}
53793/**
53794 * Matcher for detecting tuples t where <>eClassifiers reference EPackage(source,target)
53795 */
53796private pattern mayInRelationeClassifiers_reference_EPackage(
53797 problem:LogicProblem, interpretation:PartialInterpretation,
53798 source: DefinedElement, target:DefinedElement)
53799{
53800 find interpretation(problem,interpretation);
53801 // The two endpoint of the link have to exist
53802 find mayExist(problem, interpretation, source);
53803 find mayExist(problem, interpretation, target);
53804 // Type consistency
53805 find mayInstanceOfEPackage_class(problem,interpretation,source);
53806 find mayInstanceOfEClassifier_class(problem,interpretation,target);
53807 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
53808 // the upper bound of the opposite reference multiplicity should be considered.
53809 numberOfExistingOppositeReferences == count find mustInRelationePackage_reference_EClassifier(problem,interpretation,target,_);
53810 check(numberOfExistingOppositeReferences < 1);
53811 // The reference is containment, then a new reference cannot be create if:
53812 // 1. Multiple parents
53813 neg find mustContains4(problem,interpretation,_,target);
53814 // 2. Circle in the containment hierarchy
53815 neg find mustTransitiveContains(source,target);
53816} or {
53817 find mustInRelationeClassifiers_reference_EPackage(problem,interpretation,source,target);
53818}
53819/**
53820 * Matcher for detecting tuples t where []eSubpackages reference EPackage(source,target)
53821 */
53822private pattern mustInRelationeSubpackages_reference_EPackage(
53823 problem:LogicProblem, interpretation:PartialInterpretation,
53824 source: DefinedElement, target:DefinedElement)
53825{
53826 find interpretation(problem,interpretation);
53827 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
53828 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eSubpackages reference EPackage");
53829 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
53830 BinaryElementRelationLink.param1(link,source);
53831 BinaryElementRelationLink.param2(link,target);
53832}
53833/**
53834 * Matcher for detecting tuples t where <>eSubpackages reference EPackage(source,target)
53835 */
53836private pattern mayInRelationeSubpackages_reference_EPackage(
53837 problem:LogicProblem, interpretation:PartialInterpretation,
53838 source: DefinedElement, target:DefinedElement)
53839{
53840 find interpretation(problem,interpretation);
53841 // The two endpoint of the link have to exist
53842 find mayExist(problem, interpretation, source);
53843 find mayExist(problem, interpretation, target);
53844 // Type consistency
53845 find mayInstanceOfEPackage_class(problem,interpretation,source);
53846 find mayInstanceOfEPackage_class(problem,interpretation,target);
53847 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
53848 // the upper bound of the opposite reference multiplicity should be considered.
53849 numberOfExistingOppositeReferences == count find mustInRelationeSuperPackage_reference_EPackage(problem,interpretation,target,_);
53850 check(numberOfExistingOppositeReferences < 1);
53851 // The reference is containment, then a new reference cannot be create if:
53852 // 1. Multiple parents
53853 neg find mustContains4(problem,interpretation,_,target);
53854 // 2. Circle in the containment hierarchy
53855 neg find mustTransitiveContains(source,target);
53856} or {
53857 find mustInRelationeSubpackages_reference_EPackage(problem,interpretation,source,target);
53858}
53859/**
53860 * Matcher for detecting tuples t where []eSuperPackage reference EPackage(source,target)
53861 */
53862private pattern mustInRelationeSuperPackage_reference_EPackage(
53863 problem:LogicProblem, interpretation:PartialInterpretation,
53864 source: DefinedElement, target:DefinedElement)
53865{
53866 find interpretation(problem,interpretation);
53867 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
53868 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eSuperPackage reference EPackage");
53869 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
53870 BinaryElementRelationLink.param1(link,source);
53871 BinaryElementRelationLink.param2(link,target);
53872}
53873/**
53874 * Matcher for detecting tuples t where <>eSuperPackage reference EPackage(source,target)
53875 */
53876private pattern mayInRelationeSuperPackage_reference_EPackage(
53877 problem:LogicProblem, interpretation:PartialInterpretation,
53878 source: DefinedElement, target:DefinedElement)
53879{
53880 find interpretation(problem,interpretation);
53881 // The two endpoint of the link have to exist
53882 find mayExist(problem, interpretation, source);
53883 find mayExist(problem, interpretation, target);
53884 // Type consistency
53885 find mayInstanceOfEPackage_class(problem,interpretation,source);
53886 find mayInstanceOfEPackage_class(problem,interpretation,target);
53887 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
53888 // the upper bound of the multiplicity should be considered.
53889 numberOfExistingReferences == count find mustInRelationeSuperPackage_reference_EPackage(problem,interpretation,source,_);
53890 check(numberOfExistingReferences < 1);
53891 // The eOpposite of the reference is containment, then a referene cannot be created if
53892 // 1. Multiple parents
53893 neg find mustContains4(problem,interpretation,source,_);
53894 // 2. Circle in the containment hierarchy
53895 neg find mustTransitiveContains(source,target);
53896} or {
53897 find mustInRelationeSuperPackage_reference_EPackage(problem,interpretation,source,target);
53898}
53899/**
53900 * Matcher for detecting tuples t where []eOperation reference EParameter(source,target)
53901 */
53902private pattern mustInRelationeOperation_reference_EParameter(
53903 problem:LogicProblem, interpretation:PartialInterpretation,
53904 source: DefinedElement, target:DefinedElement)
53905{
53906 find interpretation(problem,interpretation);
53907 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
53908 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eOperation reference EParameter");
53909 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
53910 BinaryElementRelationLink.param1(link,source);
53911 BinaryElementRelationLink.param2(link,target);
53912}
53913/**
53914 * Matcher for detecting tuples t where <>eOperation reference EParameter(source,target)
53915 */
53916private pattern mayInRelationeOperation_reference_EParameter(
53917 problem:LogicProblem, interpretation:PartialInterpretation,
53918 source: DefinedElement, target:DefinedElement)
53919{
53920 find interpretation(problem,interpretation);
53921 // The two endpoint of the link have to exist
53922 find mayExist(problem, interpretation, source);
53923 find mayExist(problem, interpretation, target);
53924 // Type consistency
53925 find mayInstanceOfEParameter_class(problem,interpretation,source);
53926 find mayInstanceOfEOperation_class(problem,interpretation,target);
53927 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
53928 // the upper bound of the multiplicity should be considered.
53929 numberOfExistingReferences == count find mustInRelationeOperation_reference_EParameter(problem,interpretation,source,_);
53930 check(numberOfExistingReferences < 1);
53931 // The eOpposite of the reference is containment, then a referene cannot be created if
53932 // 1. Multiple parents
53933 neg find mustContains4(problem,interpretation,source,_);
53934 // 2. Circle in the containment hierarchy
53935 neg find mustTransitiveContains(source,target);
53936} or {
53937 find mustInRelationeOperation_reference_EParameter(problem,interpretation,source,target);
53938}
53939/**
53940 * Matcher for detecting tuples t where []eOpposite reference EReference(source,target)
53941 */
53942private pattern mustInRelationeOpposite_reference_EReference(
53943 problem:LogicProblem, interpretation:PartialInterpretation,
53944 source: DefinedElement, target:DefinedElement)
53945{
53946 find interpretation(problem,interpretation);
53947 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
53948 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eOpposite reference EReference");
53949 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
53950 BinaryElementRelationLink.param1(link,source);
53951 BinaryElementRelationLink.param2(link,target);
53952}
53953/**
53954 * Matcher for detecting tuples t where <>eOpposite reference EReference(source,target)
53955 */
53956private pattern mayInRelationeOpposite_reference_EReference(
53957 problem:LogicProblem, interpretation:PartialInterpretation,
53958 source: DefinedElement, target:DefinedElement)
53959{
53960 find interpretation(problem,interpretation);
53961 // The two endpoint of the link have to exist
53962 find mayExist(problem, interpretation, source);
53963 find mayExist(problem, interpretation, target);
53964 // Type consistency
53965 find mayInstanceOfEReference_class(problem,interpretation,source);
53966 find mayInstanceOfEReference_class(problem,interpretation,target);
53967 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
53968 // the upper bound of the multiplicity should be considered.
53969 numberOfExistingReferences == count find mustInRelationeOpposite_reference_EReference(problem,interpretation,source,_);
53970 check(numberOfExistingReferences < 1);
53971} or {
53972 find mustInRelationeOpposite_reference_EReference(problem,interpretation,source,target);
53973}
53974/**
53975 * Matcher for detecting tuples t where []eReferenceType reference EReference(source,target)
53976 */
53977private pattern mustInRelationeReferenceType_reference_EReference(
53978 problem:LogicProblem, interpretation:PartialInterpretation,
53979 source: DefinedElement, target:DefinedElement)
53980{
53981 find interpretation(problem,interpretation);
53982 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
53983 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferenceType reference EReference");
53984 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
53985 BinaryElementRelationLink.param1(link,source);
53986 BinaryElementRelationLink.param2(link,target);
53987}
53988/**
53989 * Matcher for detecting tuples t where <>eReferenceType reference EReference(source,target)
53990 */
53991private pattern mayInRelationeReferenceType_reference_EReference(
53992 problem:LogicProblem, interpretation:PartialInterpretation,
53993 source: DefinedElement, target:DefinedElement)
53994{
53995 find interpretation(problem,interpretation);
53996 // The two endpoint of the link have to exist
53997 find mayExist(problem, interpretation, source);
53998 find mayExist(problem, interpretation, target);
53999 // Type consistency
54000 find mayInstanceOfEReference_class(problem,interpretation,source);
54001 find mayInstanceOfEClass_class(problem,interpretation,target);
54002 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
54003 // the upper bound of the multiplicity should be considered.
54004 numberOfExistingReferences == count find mustInRelationeReferenceType_reference_EReference(problem,interpretation,source,_);
54005 check(numberOfExistingReferences < 1);
54006} or {
54007 find mustInRelationeReferenceType_reference_EReference(problem,interpretation,source,target);
54008}
54009/**
54010 * Matcher for detecting tuples t where []eKeys reference EReference(source,target)
54011 */
54012private pattern mustInRelationeKeys_reference_EReference(
54013 problem:LogicProblem, interpretation:PartialInterpretation,
54014 source: DefinedElement, target:DefinedElement)
54015{
54016 find interpretation(problem,interpretation);
54017 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
54018 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eKeys reference EReference");
54019 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
54020 BinaryElementRelationLink.param1(link,source);
54021 BinaryElementRelationLink.param2(link,target);
54022}
54023/**
54024 * Matcher for detecting tuples t where <>eKeys reference EReference(source,target)
54025 */
54026private pattern mayInRelationeKeys_reference_EReference(
54027 problem:LogicProblem, interpretation:PartialInterpretation,
54028 source: DefinedElement, target:DefinedElement)
54029{
54030 find interpretation(problem,interpretation);
54031 // The two endpoint of the link have to exist
54032 find mayExist(problem, interpretation, source);
54033 find mayExist(problem, interpretation, target);
54034 // Type consistency
54035 find mayInstanceOfEReference_class(problem,interpretation,source);
54036 find mayInstanceOfEAttribute_class(problem,interpretation,target);
54037} or {
54038 find mustInRelationeKeys_reference_EReference(problem,interpretation,source,target);
54039}
54040/**
54041 * Matcher for detecting tuples t where []eContainingClass reference EStructuralFeature(source,target)
54042 */
54043private pattern mustInRelationeContainingClass_reference_EStructuralFeature(
54044 problem:LogicProblem, interpretation:PartialInterpretation,
54045 source: DefinedElement, target:DefinedElement)
54046{
54047 find interpretation(problem,interpretation);
54048 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
54049 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eContainingClass reference EStructuralFeature");
54050 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
54051 BinaryElementRelationLink.param1(link,source);
54052 BinaryElementRelationLink.param2(link,target);
54053}
54054/**
54055 * Matcher for detecting tuples t where <>eContainingClass reference EStructuralFeature(source,target)
54056 */
54057private pattern mayInRelationeContainingClass_reference_EStructuralFeature(
54058 problem:LogicProblem, interpretation:PartialInterpretation,
54059 source: DefinedElement, target:DefinedElement)
54060{
54061 find interpretation(problem,interpretation);
54062 // The two endpoint of the link have to exist
54063 find mayExist(problem, interpretation, source);
54064 find mayExist(problem, interpretation, target);
54065 // Type consistency
54066 find mayInstanceOfEStructuralFeature_class(problem,interpretation,source);
54067 find mayInstanceOfEClass_class(problem,interpretation,target);
54068 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
54069 // the upper bound of the multiplicity should be considered.
54070 numberOfExistingReferences == count find mustInRelationeContainingClass_reference_EStructuralFeature(problem,interpretation,source,_);
54071 check(numberOfExistingReferences < 1);
54072 // The eOpposite of the reference is containment, then a referene cannot be created if
54073 // 1. Multiple parents
54074 neg find mustContains4(problem,interpretation,source,_);
54075 // 2. Circle in the containment hierarchy
54076 neg find mustTransitiveContains(source,target);
54077} or {
54078 find mustInRelationeContainingClass_reference_EStructuralFeature(problem,interpretation,source,target);
54079}
54080/**
54081 * Matcher for detecting tuples t where []eType reference ETypedElement(source,target)
54082 */
54083private pattern mustInRelationeType_reference_ETypedElement(
54084 problem:LogicProblem, interpretation:PartialInterpretation,
54085 source: DefinedElement, target:DefinedElement)
54086{
54087 find interpretation(problem,interpretation);
54088 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
54089 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eType reference ETypedElement");
54090 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
54091 BinaryElementRelationLink.param1(link,source);
54092 BinaryElementRelationLink.param2(link,target);
54093}
54094/**
54095 * Matcher for detecting tuples t where <>eType reference ETypedElement(source,target)
54096 */
54097private pattern mayInRelationeType_reference_ETypedElement(
54098 problem:LogicProblem, interpretation:PartialInterpretation,
54099 source: DefinedElement, target:DefinedElement)
54100{
54101 find interpretation(problem,interpretation);
54102 // The two endpoint of the link have to exist
54103 find mayExist(problem, interpretation, source);
54104 find mayExist(problem, interpretation, target);
54105 // Type consistency
54106 find mayInstanceOfETypedElement_class(problem,interpretation,source);
54107 find mayInstanceOfEClassifier_class(problem,interpretation,target);
54108 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
54109 // the upper bound of the multiplicity should be considered.
54110 numberOfExistingReferences == count find mustInRelationeType_reference_ETypedElement(problem,interpretation,source,_);
54111 check(numberOfExistingReferences < 1);
54112} or {
54113 find mustInRelationeType_reference_ETypedElement(problem,interpretation,source,target);
54114}
54115/**
54116 * Matcher for detecting tuples t where []eGenericType reference ETypedElement(source,target)
54117 */
54118private pattern mustInRelationeGenericType_reference_ETypedElement(
54119 problem:LogicProblem, interpretation:PartialInterpretation,
54120 source: DefinedElement, target:DefinedElement)
54121{
54122 find interpretation(problem,interpretation);
54123 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
54124 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eGenericType reference ETypedElement");
54125 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
54126 BinaryElementRelationLink.param1(link,source);
54127 BinaryElementRelationLink.param2(link,target);
54128}
54129/**
54130 * Matcher for detecting tuples t where <>eGenericType reference ETypedElement(source,target)
54131 */
54132private pattern mayInRelationeGenericType_reference_ETypedElement(
54133 problem:LogicProblem, interpretation:PartialInterpretation,
54134 source: DefinedElement, target:DefinedElement)
54135{
54136 find interpretation(problem,interpretation);
54137 // The two endpoint of the link have to exist
54138 find mayExist(problem, interpretation, source);
54139 find mayExist(problem, interpretation, target);
54140 // Type consistency
54141 find mayInstanceOfETypedElement_class(problem,interpretation,source);
54142 find mayInstanceOfEGenericType_class(problem,interpretation,target);
54143 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
54144 // the upper bound of the multiplicity should be considered.
54145 numberOfExistingReferences == count find mustInRelationeGenericType_reference_ETypedElement(problem,interpretation,source,_);
54146 check(numberOfExistingReferences < 1);
54147 // The reference is containment, then a new reference cannot be create if:
54148 // 1. Multiple parents
54149 neg find mustContains4(problem,interpretation,_,target);
54150 // 2. Circle in the containment hierarchy
54151 neg find mustTransitiveContains(source,target);
54152} or {
54153 find mustInRelationeGenericType_reference_ETypedElement(problem,interpretation,source,target);
54154}
54155/**
54156 * Matcher for detecting tuples t where []eUpperBound reference EGenericType(source,target)
54157 */
54158private pattern mustInRelationeUpperBound_reference_EGenericType(
54159 problem:LogicProblem, interpretation:PartialInterpretation,
54160 source: DefinedElement, target:DefinedElement)
54161{
54162 find interpretation(problem,interpretation);
54163 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
54164 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eUpperBound reference EGenericType");
54165 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
54166 BinaryElementRelationLink.param1(link,source);
54167 BinaryElementRelationLink.param2(link,target);
54168}
54169/**
54170 * Matcher for detecting tuples t where <>eUpperBound reference EGenericType(source,target)
54171 */
54172private pattern mayInRelationeUpperBound_reference_EGenericType(
54173 problem:LogicProblem, interpretation:PartialInterpretation,
54174 source: DefinedElement, target:DefinedElement)
54175{
54176 find interpretation(problem,interpretation);
54177 // The two endpoint of the link have to exist
54178 find mayExist(problem, interpretation, source);
54179 find mayExist(problem, interpretation, target);
54180 // Type consistency
54181 find mayInstanceOfEGenericType_class(problem,interpretation,source);
54182 find mayInstanceOfEGenericType_class(problem,interpretation,target);
54183 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
54184 // the upper bound of the multiplicity should be considered.
54185 numberOfExistingReferences == count find mustInRelationeUpperBound_reference_EGenericType(problem,interpretation,source,_);
54186 check(numberOfExistingReferences < 1);
54187 // The reference is containment, then a new reference cannot be create if:
54188 // 1. Multiple parents
54189 neg find mustContains4(problem,interpretation,_,target);
54190 // 2. Circle in the containment hierarchy
54191 neg find mustTransitiveContains(source,target);
54192} or {
54193 find mustInRelationeUpperBound_reference_EGenericType(problem,interpretation,source,target);
54194}
54195/**
54196 * Matcher for detecting tuples t where []eTypeArguments reference EGenericType(source,target)
54197 */
54198private pattern mustInRelationeTypeArguments_reference_EGenericType(
54199 problem:LogicProblem, interpretation:PartialInterpretation,
54200 source: DefinedElement, target:DefinedElement)
54201{
54202 find interpretation(problem,interpretation);
54203 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
54204 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeArguments reference EGenericType");
54205 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
54206 BinaryElementRelationLink.param1(link,source);
54207 BinaryElementRelationLink.param2(link,target);
54208}
54209/**
54210 * Matcher for detecting tuples t where <>eTypeArguments reference EGenericType(source,target)
54211 */
54212private pattern mayInRelationeTypeArguments_reference_EGenericType(
54213 problem:LogicProblem, interpretation:PartialInterpretation,
54214 source: DefinedElement, target:DefinedElement)
54215{
54216 find interpretation(problem,interpretation);
54217 // The two endpoint of the link have to exist
54218 find mayExist(problem, interpretation, source);
54219 find mayExist(problem, interpretation, target);
54220 // Type consistency
54221 find mayInstanceOfEGenericType_class(problem,interpretation,source);
54222 find mayInstanceOfEGenericType_class(problem,interpretation,target);
54223 // The reference is containment, then a new reference cannot be create if:
54224 // 1. Multiple parents
54225 neg find mustContains4(problem,interpretation,_,target);
54226 // 2. Circle in the containment hierarchy
54227 neg find mustTransitiveContains(source,target);
54228} or {
54229 find mustInRelationeTypeArguments_reference_EGenericType(problem,interpretation,source,target);
54230}
54231/**
54232 * Matcher for detecting tuples t where []eRawType reference EGenericType(source,target)
54233 */
54234private pattern mustInRelationeRawType_reference_EGenericType(
54235 problem:LogicProblem, interpretation:PartialInterpretation,
54236 source: DefinedElement, target:DefinedElement)
54237{
54238 find interpretation(problem,interpretation);
54239 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
54240 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eRawType reference EGenericType");
54241 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
54242 BinaryElementRelationLink.param1(link,source);
54243 BinaryElementRelationLink.param2(link,target);
54244}
54245/**
54246 * Matcher for detecting tuples t where <>eRawType reference EGenericType(source,target)
54247 */
54248private pattern mayInRelationeRawType_reference_EGenericType(
54249 problem:LogicProblem, interpretation:PartialInterpretation,
54250 source: DefinedElement, target:DefinedElement)
54251{
54252 find interpretation(problem,interpretation);
54253 // The two endpoint of the link have to exist
54254 find mayExist(problem, interpretation, source);
54255 find mayExist(problem, interpretation, target);
54256 // Type consistency
54257 find mayInstanceOfEGenericType_class(problem,interpretation,source);
54258 find mayInstanceOfEClassifier_class(problem,interpretation,target);
54259 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
54260 // the upper bound of the multiplicity should be considered.
54261 numberOfExistingReferences == count find mustInRelationeRawType_reference_EGenericType(problem,interpretation,source,_);
54262 check(numberOfExistingReferences < 1);
54263} or {
54264 find mustInRelationeRawType_reference_EGenericType(problem,interpretation,source,target);
54265}
54266/**
54267 * Matcher for detecting tuples t where []eLowerBound reference EGenericType(source,target)
54268 */
54269private pattern mustInRelationeLowerBound_reference_EGenericType(
54270 problem:LogicProblem, interpretation:PartialInterpretation,
54271 source: DefinedElement, target:DefinedElement)
54272{
54273 find interpretation(problem,interpretation);
54274 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
54275 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eLowerBound reference EGenericType");
54276 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
54277 BinaryElementRelationLink.param1(link,source);
54278 BinaryElementRelationLink.param2(link,target);
54279}
54280/**
54281 * Matcher for detecting tuples t where <>eLowerBound reference EGenericType(source,target)
54282 */
54283private pattern mayInRelationeLowerBound_reference_EGenericType(
54284 problem:LogicProblem, interpretation:PartialInterpretation,
54285 source: DefinedElement, target:DefinedElement)
54286{
54287 find interpretation(problem,interpretation);
54288 // The two endpoint of the link have to exist
54289 find mayExist(problem, interpretation, source);
54290 find mayExist(problem, interpretation, target);
54291 // Type consistency
54292 find mayInstanceOfEGenericType_class(problem,interpretation,source);
54293 find mayInstanceOfEGenericType_class(problem,interpretation,target);
54294 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
54295 // the upper bound of the multiplicity should be considered.
54296 numberOfExistingReferences == count find mustInRelationeLowerBound_reference_EGenericType(problem,interpretation,source,_);
54297 check(numberOfExistingReferences < 1);
54298 // The reference is containment, then a new reference cannot be create if:
54299 // 1. Multiple parents
54300 neg find mustContains4(problem,interpretation,_,target);
54301 // 2. Circle in the containment hierarchy
54302 neg find mustTransitiveContains(source,target);
54303} or {
54304 find mustInRelationeLowerBound_reference_EGenericType(problem,interpretation,source,target);
54305}
54306/**
54307 * Matcher for detecting tuples t where []eTypeParameter reference EGenericType(source,target)
54308 */
54309private pattern mustInRelationeTypeParameter_reference_EGenericType(
54310 problem:LogicProblem, interpretation:PartialInterpretation,
54311 source: DefinedElement, target:DefinedElement)
54312{
54313 find interpretation(problem,interpretation);
54314 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
54315 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeParameter reference EGenericType");
54316 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
54317 BinaryElementRelationLink.param1(link,source);
54318 BinaryElementRelationLink.param2(link,target);
54319}
54320/**
54321 * Matcher for detecting tuples t where <>eTypeParameter reference EGenericType(source,target)
54322 */
54323private pattern mayInRelationeTypeParameter_reference_EGenericType(
54324 problem:LogicProblem, interpretation:PartialInterpretation,
54325 source: DefinedElement, target:DefinedElement)
54326{
54327 find interpretation(problem,interpretation);
54328 // The two endpoint of the link have to exist
54329 find mayExist(problem, interpretation, source);
54330 find mayExist(problem, interpretation, target);
54331 // Type consistency
54332 find mayInstanceOfEGenericType_class(problem,interpretation,source);
54333 find mayInstanceOfETypeParameter_class(problem,interpretation,target);
54334 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
54335 // the upper bound of the multiplicity should be considered.
54336 numberOfExistingReferences == count find mustInRelationeTypeParameter_reference_EGenericType(problem,interpretation,source,_);
54337 check(numberOfExistingReferences < 1);
54338} or {
54339 find mustInRelationeTypeParameter_reference_EGenericType(problem,interpretation,source,target);
54340}
54341/**
54342 * Matcher for detecting tuples t where []eClassifier reference EGenericType(source,target)
54343 */
54344private pattern mustInRelationeClassifier_reference_EGenericType(
54345 problem:LogicProblem, interpretation:PartialInterpretation,
54346 source: DefinedElement, target:DefinedElement)
54347{
54348 find interpretation(problem,interpretation);
54349 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
54350 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eClassifier reference EGenericType");
54351 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
54352 BinaryElementRelationLink.param1(link,source);
54353 BinaryElementRelationLink.param2(link,target);
54354}
54355/**
54356 * Matcher for detecting tuples t where <>eClassifier reference EGenericType(source,target)
54357 */
54358private pattern mayInRelationeClassifier_reference_EGenericType(
54359 problem:LogicProblem, interpretation:PartialInterpretation,
54360 source: DefinedElement, target:DefinedElement)
54361{
54362 find interpretation(problem,interpretation);
54363 // The two endpoint of the link have to exist
54364 find mayExist(problem, interpretation, source);
54365 find mayExist(problem, interpretation, target);
54366 // Type consistency
54367 find mayInstanceOfEGenericType_class(problem,interpretation,source);
54368 find mayInstanceOfEClassifier_class(problem,interpretation,target);
54369 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
54370 // the upper bound of the multiplicity should be considered.
54371 numberOfExistingReferences == count find mustInRelationeClassifier_reference_EGenericType(problem,interpretation,source,_);
54372 check(numberOfExistingReferences < 1);
54373} or {
54374 find mustInRelationeClassifier_reference_EGenericType(problem,interpretation,source,target);
54375}
54376/**
54377 * Matcher for detecting tuples t where []eBounds reference ETypeParameter(source,target)
54378 */
54379private pattern mustInRelationeBounds_reference_ETypeParameter(
54380 problem:LogicProblem, interpretation:PartialInterpretation,
54381 source: DefinedElement, target:DefinedElement)
54382{
54383 find interpretation(problem,interpretation);
54384 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
54385 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eBounds reference ETypeParameter");
54386 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
54387 BinaryElementRelationLink.param1(link,source);
54388 BinaryElementRelationLink.param2(link,target);
54389}
54390/**
54391 * Matcher for detecting tuples t where <>eBounds reference ETypeParameter(source,target)
54392 */
54393private pattern mayInRelationeBounds_reference_ETypeParameter(
54394 problem:LogicProblem, interpretation:PartialInterpretation,
54395 source: DefinedElement, target:DefinedElement)
54396{
54397 find interpretation(problem,interpretation);
54398 // The two endpoint of the link have to exist
54399 find mayExist(problem, interpretation, source);
54400 find mayExist(problem, interpretation, target);
54401 // Type consistency
54402 find mayInstanceOfETypeParameter_class(problem,interpretation,source);
54403 find mayInstanceOfEGenericType_class(problem,interpretation,target);
54404 // The reference is containment, then a new reference cannot be create if:
54405 // 1. Multiple parents
54406 neg find mustContains4(problem,interpretation,_,target);
54407 // 2. Circle in the containment hierarchy
54408 neg find mustTransitiveContains(source,target);
54409} or {
54410 find mustInRelationeBounds_reference_ETypeParameter(problem,interpretation,source,target);
54411}
54412/**
54413 * Matcher for detecting tuples t where []iD attribute EAttribute(source,target)
54414 */
54415private pattern mustInRelationiD_attribute_EAttribute(
54416 problem:LogicProblem, interpretation:PartialInterpretation,
54417 source: DefinedElement, target:DefinedElement)
54418{
54419 find interpretation(problem,interpretation);
54420 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
54421 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"iD attribute EAttribute");
54422 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
54423 BinaryElementRelationLink.param1(link,source);
54424 BinaryElementRelationLink.param2(link,target);
54425}
54426/**
54427 * Matcher for detecting tuples t where <>iD attribute EAttribute(source,target)
54428 */
54429private pattern mayInRelationiD_attribute_EAttribute(
54430 problem:LogicProblem, interpretation:PartialInterpretation,
54431 source: DefinedElement, target:DefinedElement)
54432{
54433 find interpretation(problem,interpretation);
54434 // The two endpoint of the link have to exist
54435 find mayExist(problem, interpretation, source);
54436 find mayExist(problem, interpretation, target);
54437 // Type consistency
54438 find mayInstanceOfEAttribute_class(problem,interpretation,source);
54439 BooleanElement(target);
54440 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
54441 // the upper bound of the multiplicity should be considered.
54442 numberOfExistingReferences == count find mustInRelationiD_attribute_EAttribute(problem,interpretation,source,_);
54443 check(numberOfExistingReferences < 1);
54444} or {
54445 find mustInRelationiD_attribute_EAttribute(problem,interpretation,source,target);
54446}
54447/**
54448 * Matcher for detecting tuples t where []source attribute EAnnotation(source,target)
54449 */
54450private pattern mustInRelationsource_attribute_EAnnotation(
54451 problem:LogicProblem, interpretation:PartialInterpretation,
54452 source: DefinedElement, target:DefinedElement)
54453{
54454 find interpretation(problem,interpretation);
54455 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
54456 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"source attribute EAnnotation");
54457 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
54458 BinaryElementRelationLink.param1(link,source);
54459 BinaryElementRelationLink.param2(link,target);
54460}
54461/**
54462 * Matcher for detecting tuples t where <>source attribute EAnnotation(source,target)
54463 */
54464private pattern mayInRelationsource_attribute_EAnnotation(
54465 problem:LogicProblem, interpretation:PartialInterpretation,
54466 source: DefinedElement, target:DefinedElement)
54467{
54468 find interpretation(problem,interpretation);
54469 // The two endpoint of the link have to exist
54470 find mayExist(problem, interpretation, source);
54471 find mayExist(problem, interpretation, target);
54472 // Type consistency
54473 find mayInstanceOfEAnnotation_class(problem,interpretation,source);
54474 StringElement(target);
54475 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
54476 // the upper bound of the multiplicity should be considered.
54477 numberOfExistingReferences == count find mustInRelationsource_attribute_EAnnotation(problem,interpretation,source,_);
54478 check(numberOfExistingReferences < 1);
54479} or {
54480 find mustInRelationsource_attribute_EAnnotation(problem,interpretation,source,target);
54481}
54482/**
54483 * Matcher for detecting tuples t where []abstract attribute EClass(source,target)
54484 */
54485private pattern mustInRelationabstract_attribute_EClass(
54486 problem:LogicProblem, interpretation:PartialInterpretation,
54487 source: DefinedElement, target:DefinedElement)
54488{
54489 find interpretation(problem,interpretation);
54490 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
54491 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"abstract attribute EClass");
54492 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
54493 BinaryElementRelationLink.param1(link,source);
54494 BinaryElementRelationLink.param2(link,target);
54495}
54496/**
54497 * Matcher for detecting tuples t where <>abstract attribute EClass(source,target)
54498 */
54499private pattern mayInRelationabstract_attribute_EClass(
54500 problem:LogicProblem, interpretation:PartialInterpretation,
54501 source: DefinedElement, target:DefinedElement)
54502{
54503 find interpretation(problem,interpretation);
54504 // The two endpoint of the link have to exist
54505 find mayExist(problem, interpretation, source);
54506 find mayExist(problem, interpretation, target);
54507 // Type consistency
54508 find mayInstanceOfEClass_class(problem,interpretation,source);
54509 BooleanElement(target);
54510 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
54511 // the upper bound of the multiplicity should be considered.
54512 numberOfExistingReferences == count find mustInRelationabstract_attribute_EClass(problem,interpretation,source,_);
54513 check(numberOfExistingReferences < 1);
54514} or {
54515 find mustInRelationabstract_attribute_EClass(problem,interpretation,source,target);
54516}
54517/**
54518 * Matcher for detecting tuples t where []interface attribute EClass(source,target)
54519 */
54520private pattern mustInRelationinterface_attribute_EClass(
54521 problem:LogicProblem, interpretation:PartialInterpretation,
54522 source: DefinedElement, target:DefinedElement)
54523{
54524 find interpretation(problem,interpretation);
54525 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
54526 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface attribute EClass");
54527 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
54528 BinaryElementRelationLink.param1(link,source);
54529 BinaryElementRelationLink.param2(link,target);
54530}
54531/**
54532 * Matcher for detecting tuples t where <>interface attribute EClass(source,target)
54533 */
54534private pattern mayInRelationinterface_attribute_EClass(
54535 problem:LogicProblem, interpretation:PartialInterpretation,
54536 source: DefinedElement, target:DefinedElement)
54537{
54538 find interpretation(problem,interpretation);
54539 // The two endpoint of the link have to exist
54540 find mayExist(problem, interpretation, source);
54541 find mayExist(problem, interpretation, target);
54542 // Type consistency
54543 find mayInstanceOfEClass_class(problem,interpretation,source);
54544 BooleanElement(target);
54545 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
54546 // the upper bound of the multiplicity should be considered.
54547 numberOfExistingReferences == count find mustInRelationinterface_attribute_EClass(problem,interpretation,source,_);
54548 check(numberOfExistingReferences < 1);
54549} or {
54550 find mustInRelationinterface_attribute_EClass(problem,interpretation,source,target);
54551}
54552/**
54553 * Matcher for detecting tuples t where []instanceClassName attribute EClassifier(source,target)
54554 */
54555private pattern mustInRelationinstanceClassName_attribute_EClassifier(
54556 problem:LogicProblem, interpretation:PartialInterpretation,
54557 source: DefinedElement, target:DefinedElement)
54558{
54559 find interpretation(problem,interpretation);
54560 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
54561 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"instanceClassName attribute EClassifier");
54562 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
54563 BinaryElementRelationLink.param1(link,source);
54564 BinaryElementRelationLink.param2(link,target);
54565}
54566/**
54567 * Matcher for detecting tuples t where <>instanceClassName attribute EClassifier(source,target)
54568 */
54569private pattern mayInRelationinstanceClassName_attribute_EClassifier(
54570 problem:LogicProblem, interpretation:PartialInterpretation,
54571 source: DefinedElement, target:DefinedElement)
54572{
54573 find interpretation(problem,interpretation);
54574 // The two endpoint of the link have to exist
54575 find mayExist(problem, interpretation, source);
54576 find mayExist(problem, interpretation, target);
54577 // Type consistency
54578 find mayInstanceOfEClassifier_class(problem,interpretation,source);
54579 StringElement(target);
54580 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
54581 // the upper bound of the multiplicity should be considered.
54582 numberOfExistingReferences == count find mustInRelationinstanceClassName_attribute_EClassifier(problem,interpretation,source,_);
54583 check(numberOfExistingReferences < 1);
54584} or {
54585 find mustInRelationinstanceClassName_attribute_EClassifier(problem,interpretation,source,target);
54586}
54587/**
54588 * Matcher for detecting tuples t where []instanceTypeName attribute EClassifier(source,target)
54589 */
54590private pattern mustInRelationinstanceTypeName_attribute_EClassifier(
54591 problem:LogicProblem, interpretation:PartialInterpretation,
54592 source: DefinedElement, target:DefinedElement)
54593{
54594 find interpretation(problem,interpretation);
54595 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
54596 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"instanceTypeName attribute EClassifier");
54597 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
54598 BinaryElementRelationLink.param1(link,source);
54599 BinaryElementRelationLink.param2(link,target);
54600}
54601/**
54602 * Matcher for detecting tuples t where <>instanceTypeName attribute EClassifier(source,target)
54603 */
54604private pattern mayInRelationinstanceTypeName_attribute_EClassifier(
54605 problem:LogicProblem, interpretation:PartialInterpretation,
54606 source: DefinedElement, target:DefinedElement)
54607{
54608 find interpretation(problem,interpretation);
54609 // The two endpoint of the link have to exist
54610 find mayExist(problem, interpretation, source);
54611 find mayExist(problem, interpretation, target);
54612 // Type consistency
54613 find mayInstanceOfEClassifier_class(problem,interpretation,source);
54614 StringElement(target);
54615 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
54616 // the upper bound of the multiplicity should be considered.
54617 numberOfExistingReferences == count find mustInRelationinstanceTypeName_attribute_EClassifier(problem,interpretation,source,_);
54618 check(numberOfExistingReferences < 1);
54619} or {
54620 find mustInRelationinstanceTypeName_attribute_EClassifier(problem,interpretation,source,target);
54621}
54622/**
54623 * Matcher for detecting tuples t where []serializable attribute EDataType(source,target)
54624 */
54625private pattern mustInRelationserializable_attribute_EDataType(
54626 problem:LogicProblem, interpretation:PartialInterpretation,
54627 source: DefinedElement, target:DefinedElement)
54628{
54629 find interpretation(problem,interpretation);
54630 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
54631 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"serializable attribute EDataType");
54632 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
54633 BinaryElementRelationLink.param1(link,source);
54634 BinaryElementRelationLink.param2(link,target);
54635}
54636/**
54637 * Matcher for detecting tuples t where <>serializable attribute EDataType(source,target)
54638 */
54639private pattern mayInRelationserializable_attribute_EDataType(
54640 problem:LogicProblem, interpretation:PartialInterpretation,
54641 source: DefinedElement, target:DefinedElement)
54642{
54643 find interpretation(problem,interpretation);
54644 // The two endpoint of the link have to exist
54645 find mayExist(problem, interpretation, source);
54646 find mayExist(problem, interpretation, target);
54647 // Type consistency
54648 find mayInstanceOfEDataType_class(problem,interpretation,source);
54649 BooleanElement(target);
54650 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
54651 // the upper bound of the multiplicity should be considered.
54652 numberOfExistingReferences == count find mustInRelationserializable_attribute_EDataType(problem,interpretation,source,_);
54653 check(numberOfExistingReferences < 1);
54654} or {
54655 find mustInRelationserializable_attribute_EDataType(problem,interpretation,source,target);
54656}
54657/**
54658 * Matcher for detecting tuples t where []value attribute EEnumLiteral(source,target)
54659 */
54660private pattern mustInRelationvalue_attribute_EEnumLiteral(
54661 problem:LogicProblem, interpretation:PartialInterpretation,
54662 source: DefinedElement, target:DefinedElement)
54663{
54664 find interpretation(problem,interpretation);
54665 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
54666 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"value attribute EEnumLiteral");
54667 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
54668 BinaryElementRelationLink.param1(link,source);
54669 BinaryElementRelationLink.param2(link,target);
54670}
54671/**
54672 * Matcher for detecting tuples t where <>value attribute EEnumLiteral(source,target)
54673 */
54674private pattern mayInRelationvalue_attribute_EEnumLiteral(
54675 problem:LogicProblem, interpretation:PartialInterpretation,
54676 source: DefinedElement, target:DefinedElement)
54677{
54678 find interpretation(problem,interpretation);
54679 // The two endpoint of the link have to exist
54680 find mayExist(problem, interpretation, source);
54681 find mayExist(problem, interpretation, target);
54682 // Type consistency
54683 find mayInstanceOfEEnumLiteral_class(problem,interpretation,source);
54684 IntegerElement(target);
54685 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
54686 // the upper bound of the multiplicity should be considered.
54687 numberOfExistingReferences == count find mustInRelationvalue_attribute_EEnumLiteral(problem,interpretation,source,_);
54688 check(numberOfExistingReferences < 1);
54689} or {
54690 find mustInRelationvalue_attribute_EEnumLiteral(problem,interpretation,source,target);
54691}
54692/**
54693 * Matcher for detecting tuples t where []literal attribute EEnumLiteral(source,target)
54694 */
54695private pattern mustInRelationliteral_attribute_EEnumLiteral(
54696 problem:LogicProblem, interpretation:PartialInterpretation,
54697 source: DefinedElement, target:DefinedElement)
54698{
54699 find interpretation(problem,interpretation);
54700 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
54701 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"literal attribute EEnumLiteral");
54702 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
54703 BinaryElementRelationLink.param1(link,source);
54704 BinaryElementRelationLink.param2(link,target);
54705}
54706/**
54707 * Matcher for detecting tuples t where <>literal attribute EEnumLiteral(source,target)
54708 */
54709private pattern mayInRelationliteral_attribute_EEnumLiteral(
54710 problem:LogicProblem, interpretation:PartialInterpretation,
54711 source: DefinedElement, target:DefinedElement)
54712{
54713 find interpretation(problem,interpretation);
54714 // The two endpoint of the link have to exist
54715 find mayExist(problem, interpretation, source);
54716 find mayExist(problem, interpretation, target);
54717 // Type consistency
54718 find mayInstanceOfEEnumLiteral_class(problem,interpretation,source);
54719 StringElement(target);
54720 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
54721 // the upper bound of the multiplicity should be considered.
54722 numberOfExistingReferences == count find mustInRelationliteral_attribute_EEnumLiteral(problem,interpretation,source,_);
54723 check(numberOfExistingReferences < 1);
54724} or {
54725 find mustInRelationliteral_attribute_EEnumLiteral(problem,interpretation,source,target);
54726}
54727/**
54728 * Matcher for detecting tuples t where []name attribute ENamedElement(source,target)
54729 */
54730private pattern mustInRelationname_attribute_ENamedElement(
54731 problem:LogicProblem, interpretation:PartialInterpretation,
54732 source: DefinedElement, target:DefinedElement)
54733{
54734 find interpretation(problem,interpretation);
54735 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
54736 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"name attribute ENamedElement");
54737 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
54738 BinaryElementRelationLink.param1(link,source);
54739 BinaryElementRelationLink.param2(link,target);
54740}
54741/**
54742 * Matcher for detecting tuples t where <>name attribute ENamedElement(source,target)
54743 */
54744private pattern mayInRelationname_attribute_ENamedElement(
54745 problem:LogicProblem, interpretation:PartialInterpretation,
54746 source: DefinedElement, target:DefinedElement)
54747{
54748 find interpretation(problem,interpretation);
54749 // The two endpoint of the link have to exist
54750 find mayExist(problem, interpretation, source);
54751 find mayExist(problem, interpretation, target);
54752 // Type consistency
54753 find mayInstanceOfENamedElement_class(problem,interpretation,source);
54754 StringElement(target);
54755 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
54756 // the upper bound of the multiplicity should be considered.
54757 numberOfExistingReferences == count find mustInRelationname_attribute_ENamedElement(problem,interpretation,source,_);
54758 check(numberOfExistingReferences < 1);
54759} or {
54760 find mustInRelationname_attribute_ENamedElement(problem,interpretation,source,target);
54761}
54762/**
54763 * Matcher for detecting tuples t where []nsURI attribute EPackage(source,target)
54764 */
54765private pattern mustInRelationnsURI_attribute_EPackage(
54766 problem:LogicProblem, interpretation:PartialInterpretation,
54767 source: DefinedElement, target:DefinedElement)
54768{
54769 find interpretation(problem,interpretation);
54770 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
54771 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"nsURI attribute EPackage");
54772 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
54773 BinaryElementRelationLink.param1(link,source);
54774 BinaryElementRelationLink.param2(link,target);
54775}
54776/**
54777 * Matcher for detecting tuples t where <>nsURI attribute EPackage(source,target)
54778 */
54779private pattern mayInRelationnsURI_attribute_EPackage(
54780 problem:LogicProblem, interpretation:PartialInterpretation,
54781 source: DefinedElement, target:DefinedElement)
54782{
54783 find interpretation(problem,interpretation);
54784 // The two endpoint of the link have to exist
54785 find mayExist(problem, interpretation, source);
54786 find mayExist(problem, interpretation, target);
54787 // Type consistency
54788 find mayInstanceOfEPackage_class(problem,interpretation,source);
54789 StringElement(target);
54790 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
54791 // the upper bound of the multiplicity should be considered.
54792 numberOfExistingReferences == count find mustInRelationnsURI_attribute_EPackage(problem,interpretation,source,_);
54793 check(numberOfExistingReferences < 1);
54794} or {
54795 find mustInRelationnsURI_attribute_EPackage(problem,interpretation,source,target);
54796}
54797/**
54798 * Matcher for detecting tuples t where []nsPrefix attribute EPackage(source,target)
54799 */
54800private pattern mustInRelationnsPrefix_attribute_EPackage(
54801 problem:LogicProblem, interpretation:PartialInterpretation,
54802 source: DefinedElement, target:DefinedElement)
54803{
54804 find interpretation(problem,interpretation);
54805 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
54806 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"nsPrefix attribute EPackage");
54807 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
54808 BinaryElementRelationLink.param1(link,source);
54809 BinaryElementRelationLink.param2(link,target);
54810}
54811/**
54812 * Matcher for detecting tuples t where <>nsPrefix attribute EPackage(source,target)
54813 */
54814private pattern mayInRelationnsPrefix_attribute_EPackage(
54815 problem:LogicProblem, interpretation:PartialInterpretation,
54816 source: DefinedElement, target:DefinedElement)
54817{
54818 find interpretation(problem,interpretation);
54819 // The two endpoint of the link have to exist
54820 find mayExist(problem, interpretation, source);
54821 find mayExist(problem, interpretation, target);
54822 // Type consistency
54823 find mayInstanceOfEPackage_class(problem,interpretation,source);
54824 StringElement(target);
54825 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
54826 // the upper bound of the multiplicity should be considered.
54827 numberOfExistingReferences == count find mustInRelationnsPrefix_attribute_EPackage(problem,interpretation,source,_);
54828 check(numberOfExistingReferences < 1);
54829} or {
54830 find mustInRelationnsPrefix_attribute_EPackage(problem,interpretation,source,target);
54831}
54832/**
54833 * Matcher for detecting tuples t where []containment attribute EReference(source,target)
54834 */
54835private pattern mustInRelationcontainment_attribute_EReference(
54836 problem:LogicProblem, interpretation:PartialInterpretation,
54837 source: DefinedElement, target:DefinedElement)
54838{
54839 find interpretation(problem,interpretation);
54840 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
54841 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"containment attribute EReference");
54842 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
54843 BinaryElementRelationLink.param1(link,source);
54844 BinaryElementRelationLink.param2(link,target);
54845}
54846/**
54847 * Matcher for detecting tuples t where <>containment attribute EReference(source,target)
54848 */
54849private pattern mayInRelationcontainment_attribute_EReference(
54850 problem:LogicProblem, interpretation:PartialInterpretation,
54851 source: DefinedElement, target:DefinedElement)
54852{
54853 find interpretation(problem,interpretation);
54854 // The two endpoint of the link have to exist
54855 find mayExist(problem, interpretation, source);
54856 find mayExist(problem, interpretation, target);
54857 // Type consistency
54858 find mayInstanceOfEReference_class(problem,interpretation,source);
54859 BooleanElement(target);
54860 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
54861 // the upper bound of the multiplicity should be considered.
54862 numberOfExistingReferences == count find mustInRelationcontainment_attribute_EReference(problem,interpretation,source,_);
54863 check(numberOfExistingReferences < 1);
54864} or {
54865 find mustInRelationcontainment_attribute_EReference(problem,interpretation,source,target);
54866}
54867/**
54868 * Matcher for detecting tuples t where []container attribute EReference(source,target)
54869 */
54870private pattern mustInRelationcontainer_attribute_EReference(
54871 problem:LogicProblem, interpretation:PartialInterpretation,
54872 source: DefinedElement, target:DefinedElement)
54873{
54874 find interpretation(problem,interpretation);
54875 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
54876 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"container attribute EReference");
54877 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
54878 BinaryElementRelationLink.param1(link,source);
54879 BinaryElementRelationLink.param2(link,target);
54880}
54881/**
54882 * Matcher for detecting tuples t where <>container attribute EReference(source,target)
54883 */
54884private pattern mayInRelationcontainer_attribute_EReference(
54885 problem:LogicProblem, interpretation:PartialInterpretation,
54886 source: DefinedElement, target:DefinedElement)
54887{
54888 find interpretation(problem,interpretation);
54889 // The two endpoint of the link have to exist
54890 find mayExist(problem, interpretation, source);
54891 find mayExist(problem, interpretation, target);
54892 // Type consistency
54893 find mayInstanceOfEReference_class(problem,interpretation,source);
54894 BooleanElement(target);
54895 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
54896 // the upper bound of the multiplicity should be considered.
54897 numberOfExistingReferences == count find mustInRelationcontainer_attribute_EReference(problem,interpretation,source,_);
54898 check(numberOfExistingReferences < 1);
54899} or {
54900 find mustInRelationcontainer_attribute_EReference(problem,interpretation,source,target);
54901}
54902/**
54903 * Matcher for detecting tuples t where []resolveProxies attribute EReference(source,target)
54904 */
54905private pattern mustInRelationresolveProxies_attribute_EReference(
54906 problem:LogicProblem, interpretation:PartialInterpretation,
54907 source: DefinedElement, target:DefinedElement)
54908{
54909 find interpretation(problem,interpretation);
54910 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
54911 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"resolveProxies attribute EReference");
54912 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
54913 BinaryElementRelationLink.param1(link,source);
54914 BinaryElementRelationLink.param2(link,target);
54915}
54916/**
54917 * Matcher for detecting tuples t where <>resolveProxies attribute EReference(source,target)
54918 */
54919private pattern mayInRelationresolveProxies_attribute_EReference(
54920 problem:LogicProblem, interpretation:PartialInterpretation,
54921 source: DefinedElement, target:DefinedElement)
54922{
54923 find interpretation(problem,interpretation);
54924 // The two endpoint of the link have to exist
54925 find mayExist(problem, interpretation, source);
54926 find mayExist(problem, interpretation, target);
54927 // Type consistency
54928 find mayInstanceOfEReference_class(problem,interpretation,source);
54929 BooleanElement(target);
54930 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
54931 // the upper bound of the multiplicity should be considered.
54932 numberOfExistingReferences == count find mustInRelationresolveProxies_attribute_EReference(problem,interpretation,source,_);
54933 check(numberOfExistingReferences < 1);
54934} or {
54935 find mustInRelationresolveProxies_attribute_EReference(problem,interpretation,source,target);
54936}
54937/**
54938 * Matcher for detecting tuples t where []changeable attribute EStructuralFeature(source,target)
54939 */
54940private pattern mustInRelationchangeable_attribute_EStructuralFeature(
54941 problem:LogicProblem, interpretation:PartialInterpretation,
54942 source: DefinedElement, target:DefinedElement)
54943{
54944 find interpretation(problem,interpretation);
54945 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
54946 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"changeable attribute EStructuralFeature");
54947 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
54948 BinaryElementRelationLink.param1(link,source);
54949 BinaryElementRelationLink.param2(link,target);
54950}
54951/**
54952 * Matcher for detecting tuples t where <>changeable attribute EStructuralFeature(source,target)
54953 */
54954private pattern mayInRelationchangeable_attribute_EStructuralFeature(
54955 problem:LogicProblem, interpretation:PartialInterpretation,
54956 source: DefinedElement, target:DefinedElement)
54957{
54958 find interpretation(problem,interpretation);
54959 // The two endpoint of the link have to exist
54960 find mayExist(problem, interpretation, source);
54961 find mayExist(problem, interpretation, target);
54962 // Type consistency
54963 find mayInstanceOfEStructuralFeature_class(problem,interpretation,source);
54964 BooleanElement(target);
54965 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
54966 // the upper bound of the multiplicity should be considered.
54967 numberOfExistingReferences == count find mustInRelationchangeable_attribute_EStructuralFeature(problem,interpretation,source,_);
54968 check(numberOfExistingReferences < 1);
54969} or {
54970 find mustInRelationchangeable_attribute_EStructuralFeature(problem,interpretation,source,target);
54971}
54972/**
54973 * Matcher for detecting tuples t where []volatile attribute EStructuralFeature(source,target)
54974 */
54975private pattern mustInRelationvolatile_attribute_EStructuralFeature(
54976 problem:LogicProblem, interpretation:PartialInterpretation,
54977 source: DefinedElement, target:DefinedElement)
54978{
54979 find interpretation(problem,interpretation);
54980 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
54981 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"volatile attribute EStructuralFeature");
54982 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
54983 BinaryElementRelationLink.param1(link,source);
54984 BinaryElementRelationLink.param2(link,target);
54985}
54986/**
54987 * Matcher for detecting tuples t where <>volatile attribute EStructuralFeature(source,target)
54988 */
54989private pattern mayInRelationvolatile_attribute_EStructuralFeature(
54990 problem:LogicProblem, interpretation:PartialInterpretation,
54991 source: DefinedElement, target:DefinedElement)
54992{
54993 find interpretation(problem,interpretation);
54994 // The two endpoint of the link have to exist
54995 find mayExist(problem, interpretation, source);
54996 find mayExist(problem, interpretation, target);
54997 // Type consistency
54998 find mayInstanceOfEStructuralFeature_class(problem,interpretation,source);
54999 BooleanElement(target);
55000 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
55001 // the upper bound of the multiplicity should be considered.
55002 numberOfExistingReferences == count find mustInRelationvolatile_attribute_EStructuralFeature(problem,interpretation,source,_);
55003 check(numberOfExistingReferences < 1);
55004} or {
55005 find mustInRelationvolatile_attribute_EStructuralFeature(problem,interpretation,source,target);
55006}
55007/**
55008 * Matcher for detecting tuples t where []transient attribute EStructuralFeature(source,target)
55009 */
55010private pattern mustInRelationtransient_attribute_EStructuralFeature(
55011 problem:LogicProblem, interpretation:PartialInterpretation,
55012 source: DefinedElement, target:DefinedElement)
55013{
55014 find interpretation(problem,interpretation);
55015 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
55016 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"transient attribute EStructuralFeature");
55017 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
55018 BinaryElementRelationLink.param1(link,source);
55019 BinaryElementRelationLink.param2(link,target);
55020}
55021/**
55022 * Matcher for detecting tuples t where <>transient attribute EStructuralFeature(source,target)
55023 */
55024private pattern mayInRelationtransient_attribute_EStructuralFeature(
55025 problem:LogicProblem, interpretation:PartialInterpretation,
55026 source: DefinedElement, target:DefinedElement)
55027{
55028 find interpretation(problem,interpretation);
55029 // The two endpoint of the link have to exist
55030 find mayExist(problem, interpretation, source);
55031 find mayExist(problem, interpretation, target);
55032 // Type consistency
55033 find mayInstanceOfEStructuralFeature_class(problem,interpretation,source);
55034 BooleanElement(target);
55035 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
55036 // the upper bound of the multiplicity should be considered.
55037 numberOfExistingReferences == count find mustInRelationtransient_attribute_EStructuralFeature(problem,interpretation,source,_);
55038 check(numberOfExistingReferences < 1);
55039} or {
55040 find mustInRelationtransient_attribute_EStructuralFeature(problem,interpretation,source,target);
55041}
55042/**
55043 * Matcher for detecting tuples t where []defaultValueLiteral attribute EStructuralFeature(source,target)
55044 */
55045private pattern mustInRelationdefaultValueLiteral_attribute_EStructuralFeature(
55046 problem:LogicProblem, interpretation:PartialInterpretation,
55047 source: DefinedElement, target:DefinedElement)
55048{
55049 find interpretation(problem,interpretation);
55050 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
55051 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"defaultValueLiteral attribute EStructuralFeature");
55052 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
55053 BinaryElementRelationLink.param1(link,source);
55054 BinaryElementRelationLink.param2(link,target);
55055}
55056/**
55057 * Matcher for detecting tuples t where <>defaultValueLiteral attribute EStructuralFeature(source,target)
55058 */
55059private pattern mayInRelationdefaultValueLiteral_attribute_EStructuralFeature(
55060 problem:LogicProblem, interpretation:PartialInterpretation,
55061 source: DefinedElement, target:DefinedElement)
55062{
55063 find interpretation(problem,interpretation);
55064 // The two endpoint of the link have to exist
55065 find mayExist(problem, interpretation, source);
55066 find mayExist(problem, interpretation, target);
55067 // Type consistency
55068 find mayInstanceOfEStructuralFeature_class(problem,interpretation,source);
55069 StringElement(target);
55070 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
55071 // the upper bound of the multiplicity should be considered.
55072 numberOfExistingReferences == count find mustInRelationdefaultValueLiteral_attribute_EStructuralFeature(problem,interpretation,source,_);
55073 check(numberOfExistingReferences < 1);
55074} or {
55075 find mustInRelationdefaultValueLiteral_attribute_EStructuralFeature(problem,interpretation,source,target);
55076}
55077/**
55078 * Matcher for detecting tuples t where []unsettable attribute EStructuralFeature(source,target)
55079 */
55080private pattern mustInRelationunsettable_attribute_EStructuralFeature(
55081 problem:LogicProblem, interpretation:PartialInterpretation,
55082 source: DefinedElement, target:DefinedElement)
55083{
55084 find interpretation(problem,interpretation);
55085 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
55086 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"unsettable attribute EStructuralFeature");
55087 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
55088 BinaryElementRelationLink.param1(link,source);
55089 BinaryElementRelationLink.param2(link,target);
55090}
55091/**
55092 * Matcher for detecting tuples t where <>unsettable attribute EStructuralFeature(source,target)
55093 */
55094private pattern mayInRelationunsettable_attribute_EStructuralFeature(
55095 problem:LogicProblem, interpretation:PartialInterpretation,
55096 source: DefinedElement, target:DefinedElement)
55097{
55098 find interpretation(problem,interpretation);
55099 // The two endpoint of the link have to exist
55100 find mayExist(problem, interpretation, source);
55101 find mayExist(problem, interpretation, target);
55102 // Type consistency
55103 find mayInstanceOfEStructuralFeature_class(problem,interpretation,source);
55104 BooleanElement(target);
55105 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
55106 // the upper bound of the multiplicity should be considered.
55107 numberOfExistingReferences == count find mustInRelationunsettable_attribute_EStructuralFeature(problem,interpretation,source,_);
55108 check(numberOfExistingReferences < 1);
55109} or {
55110 find mustInRelationunsettable_attribute_EStructuralFeature(problem,interpretation,source,target);
55111}
55112/**
55113 * Matcher for detecting tuples t where []derived attribute EStructuralFeature(source,target)
55114 */
55115private pattern mustInRelationderived_attribute_EStructuralFeature(
55116 problem:LogicProblem, interpretation:PartialInterpretation,
55117 source: DefinedElement, target:DefinedElement)
55118{
55119 find interpretation(problem,interpretation);
55120 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
55121 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"derived attribute EStructuralFeature");
55122 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
55123 BinaryElementRelationLink.param1(link,source);
55124 BinaryElementRelationLink.param2(link,target);
55125}
55126/**
55127 * Matcher for detecting tuples t where <>derived attribute EStructuralFeature(source,target)
55128 */
55129private pattern mayInRelationderived_attribute_EStructuralFeature(
55130 problem:LogicProblem, interpretation:PartialInterpretation,
55131 source: DefinedElement, target:DefinedElement)
55132{
55133 find interpretation(problem,interpretation);
55134 // The two endpoint of the link have to exist
55135 find mayExist(problem, interpretation, source);
55136 find mayExist(problem, interpretation, target);
55137 // Type consistency
55138 find mayInstanceOfEStructuralFeature_class(problem,interpretation,source);
55139 BooleanElement(target);
55140 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
55141 // the upper bound of the multiplicity should be considered.
55142 numberOfExistingReferences == count find mustInRelationderived_attribute_EStructuralFeature(problem,interpretation,source,_);
55143 check(numberOfExistingReferences < 1);
55144} or {
55145 find mustInRelationderived_attribute_EStructuralFeature(problem,interpretation,source,target);
55146}
55147/**
55148 * Matcher for detecting tuples t where []ordered attribute ETypedElement(source,target)
55149 */
55150private pattern mustInRelationordered_attribute_ETypedElement(
55151 problem:LogicProblem, interpretation:PartialInterpretation,
55152 source: DefinedElement, target:DefinedElement)
55153{
55154 find interpretation(problem,interpretation);
55155 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
55156 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"ordered attribute ETypedElement");
55157 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
55158 BinaryElementRelationLink.param1(link,source);
55159 BinaryElementRelationLink.param2(link,target);
55160}
55161/**
55162 * Matcher for detecting tuples t where <>ordered attribute ETypedElement(source,target)
55163 */
55164private pattern mayInRelationordered_attribute_ETypedElement(
55165 problem:LogicProblem, interpretation:PartialInterpretation,
55166 source: DefinedElement, target:DefinedElement)
55167{
55168 find interpretation(problem,interpretation);
55169 // The two endpoint of the link have to exist
55170 find mayExist(problem, interpretation, source);
55171 find mayExist(problem, interpretation, target);
55172 // Type consistency
55173 find mayInstanceOfETypedElement_class(problem,interpretation,source);
55174 BooleanElement(target);
55175 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
55176 // the upper bound of the multiplicity should be considered.
55177 numberOfExistingReferences == count find mustInRelationordered_attribute_ETypedElement(problem,interpretation,source,_);
55178 check(numberOfExistingReferences < 1);
55179} or {
55180 find mustInRelationordered_attribute_ETypedElement(problem,interpretation,source,target);
55181}
55182/**
55183 * Matcher for detecting tuples t where []unique attribute ETypedElement(source,target)
55184 */
55185private pattern mustInRelationunique_attribute_ETypedElement(
55186 problem:LogicProblem, interpretation:PartialInterpretation,
55187 source: DefinedElement, target:DefinedElement)
55188{
55189 find interpretation(problem,interpretation);
55190 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
55191 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"unique attribute ETypedElement");
55192 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
55193 BinaryElementRelationLink.param1(link,source);
55194 BinaryElementRelationLink.param2(link,target);
55195}
55196/**
55197 * Matcher for detecting tuples t where <>unique attribute ETypedElement(source,target)
55198 */
55199private pattern mayInRelationunique_attribute_ETypedElement(
55200 problem:LogicProblem, interpretation:PartialInterpretation,
55201 source: DefinedElement, target:DefinedElement)
55202{
55203 find interpretation(problem,interpretation);
55204 // The two endpoint of the link have to exist
55205 find mayExist(problem, interpretation, source);
55206 find mayExist(problem, interpretation, target);
55207 // Type consistency
55208 find mayInstanceOfETypedElement_class(problem,interpretation,source);
55209 BooleanElement(target);
55210 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
55211 // the upper bound of the multiplicity should be considered.
55212 numberOfExistingReferences == count find mustInRelationunique_attribute_ETypedElement(problem,interpretation,source,_);
55213 check(numberOfExistingReferences < 1);
55214} or {
55215 find mustInRelationunique_attribute_ETypedElement(problem,interpretation,source,target);
55216}
55217/**
55218 * Matcher for detecting tuples t where []lowerBound attribute ETypedElement(source,target)
55219 */
55220private pattern mustInRelationlowerBound_attribute_ETypedElement(
55221 problem:LogicProblem, interpretation:PartialInterpretation,
55222 source: DefinedElement, target:DefinedElement)
55223{
55224 find interpretation(problem,interpretation);
55225 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
55226 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"lowerBound attribute ETypedElement");
55227 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
55228 BinaryElementRelationLink.param1(link,source);
55229 BinaryElementRelationLink.param2(link,target);
55230}
55231/**
55232 * Matcher for detecting tuples t where <>lowerBound attribute ETypedElement(source,target)
55233 */
55234private pattern mayInRelationlowerBound_attribute_ETypedElement(
55235 problem:LogicProblem, interpretation:PartialInterpretation,
55236 source: DefinedElement, target:DefinedElement)
55237{
55238 find interpretation(problem,interpretation);
55239 // The two endpoint of the link have to exist
55240 find mayExist(problem, interpretation, source);
55241 find mayExist(problem, interpretation, target);
55242 // Type consistency
55243 find mayInstanceOfETypedElement_class(problem,interpretation,source);
55244 IntegerElement(target);
55245 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
55246 // the upper bound of the multiplicity should be considered.
55247 numberOfExistingReferences == count find mustInRelationlowerBound_attribute_ETypedElement(problem,interpretation,source,_);
55248 check(numberOfExistingReferences < 1);
55249} or {
55250 find mustInRelationlowerBound_attribute_ETypedElement(problem,interpretation,source,target);
55251}
55252/**
55253 * Matcher for detecting tuples t where []upperBound attribute ETypedElement(source,target)
55254 */
55255private pattern mustInRelationupperBound_attribute_ETypedElement(
55256 problem:LogicProblem, interpretation:PartialInterpretation,
55257 source: DefinedElement, target:DefinedElement)
55258{
55259 find interpretation(problem,interpretation);
55260 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
55261 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"upperBound attribute ETypedElement");
55262 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
55263 BinaryElementRelationLink.param1(link,source);
55264 BinaryElementRelationLink.param2(link,target);
55265}
55266/**
55267 * Matcher for detecting tuples t where <>upperBound attribute ETypedElement(source,target)
55268 */
55269private pattern mayInRelationupperBound_attribute_ETypedElement(
55270 problem:LogicProblem, interpretation:PartialInterpretation,
55271 source: DefinedElement, target:DefinedElement)
55272{
55273 find interpretation(problem,interpretation);
55274 // The two endpoint of the link have to exist
55275 find mayExist(problem, interpretation, source);
55276 find mayExist(problem, interpretation, target);
55277 // Type consistency
55278 find mayInstanceOfETypedElement_class(problem,interpretation,source);
55279 IntegerElement(target);
55280 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
55281 // the upper bound of the multiplicity should be considered.
55282 numberOfExistingReferences == count find mustInRelationupperBound_attribute_ETypedElement(problem,interpretation,source,_);
55283 check(numberOfExistingReferences < 1);
55284} or {
55285 find mustInRelationupperBound_attribute_ETypedElement(problem,interpretation,source,target);
55286}
55287/**
55288 * Matcher for detecting tuples t where []many attribute ETypedElement(source,target)
55289 */
55290private pattern mustInRelationmany_attribute_ETypedElement(
55291 problem:LogicProblem, interpretation:PartialInterpretation,
55292 source: DefinedElement, target:DefinedElement)
55293{
55294 find interpretation(problem,interpretation);
55295 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
55296 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"many attribute ETypedElement");
55297 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
55298 BinaryElementRelationLink.param1(link,source);
55299 BinaryElementRelationLink.param2(link,target);
55300}
55301/**
55302 * Matcher for detecting tuples t where <>many attribute ETypedElement(source,target)
55303 */
55304private pattern mayInRelationmany_attribute_ETypedElement(
55305 problem:LogicProblem, interpretation:PartialInterpretation,
55306 source: DefinedElement, target:DefinedElement)
55307{
55308 find interpretation(problem,interpretation);
55309 // The two endpoint of the link have to exist
55310 find mayExist(problem, interpretation, source);
55311 find mayExist(problem, interpretation, target);
55312 // Type consistency
55313 find mayInstanceOfETypedElement_class(problem,interpretation,source);
55314 BooleanElement(target);
55315 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
55316 // the upper bound of the multiplicity should be considered.
55317 numberOfExistingReferences == count find mustInRelationmany_attribute_ETypedElement(problem,interpretation,source,_);
55318 check(numberOfExistingReferences < 1);
55319} or {
55320 find mustInRelationmany_attribute_ETypedElement(problem,interpretation,source,target);
55321}
55322/**
55323 * Matcher for detecting tuples t where []required attribute ETypedElement(source,target)
55324 */
55325private pattern mustInRelationrequired_attribute_ETypedElement(
55326 problem:LogicProblem, interpretation:PartialInterpretation,
55327 source: DefinedElement, target:DefinedElement)
55328{
55329 find interpretation(problem,interpretation);
55330 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
55331 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"required attribute ETypedElement");
55332 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
55333 BinaryElementRelationLink.param1(link,source);
55334 BinaryElementRelationLink.param2(link,target);
55335}
55336/**
55337 * Matcher for detecting tuples t where <>required attribute ETypedElement(source,target)
55338 */
55339private pattern mayInRelationrequired_attribute_ETypedElement(
55340 problem:LogicProblem, interpretation:PartialInterpretation,
55341 source: DefinedElement, target:DefinedElement)
55342{
55343 find interpretation(problem,interpretation);
55344 // The two endpoint of the link have to exist
55345 find mayExist(problem, interpretation, source);
55346 find mayExist(problem, interpretation, target);
55347 // Type consistency
55348 find mayInstanceOfETypedElement_class(problem,interpretation,source);
55349 BooleanElement(target);
55350 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
55351 // the upper bound of the multiplicity should be considered.
55352 numberOfExistingReferences == count find mustInRelationrequired_attribute_ETypedElement(problem,interpretation,source,_);
55353 check(numberOfExistingReferences < 1);
55354} or {
55355 find mustInRelationrequired_attribute_ETypedElement(problem,interpretation,source,target);
55356}
55357/**
55358 * Matcher for detecting tuples t where []key attribute EStringToStringMapEntry(source,target)
55359 */
55360private pattern mustInRelationkey_attribute_EStringToStringMapEntry(
55361 problem:LogicProblem, interpretation:PartialInterpretation,
55362 source: DefinedElement, target:DefinedElement)
55363{
55364 find interpretation(problem,interpretation);
55365 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
55366 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"key attribute EStringToStringMapEntry");
55367 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
55368 BinaryElementRelationLink.param1(link,source);
55369 BinaryElementRelationLink.param2(link,target);
55370}
55371/**
55372 * Matcher for detecting tuples t where <>key attribute EStringToStringMapEntry(source,target)
55373 */
55374private pattern mayInRelationkey_attribute_EStringToStringMapEntry(
55375 problem:LogicProblem, interpretation:PartialInterpretation,
55376 source: DefinedElement, target:DefinedElement)
55377{
55378 find interpretation(problem,interpretation);
55379 // The two endpoint of the link have to exist
55380 find mayExist(problem, interpretation, source);
55381 find mayExist(problem, interpretation, target);
55382 // Type consistency
55383 find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,source);
55384 StringElement(target);
55385 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
55386 // the upper bound of the multiplicity should be considered.
55387 numberOfExistingReferences == count find mustInRelationkey_attribute_EStringToStringMapEntry(problem,interpretation,source,_);
55388 check(numberOfExistingReferences < 1);
55389} or {
55390 find mustInRelationkey_attribute_EStringToStringMapEntry(problem,interpretation,source,target);
55391}
55392/**
55393 * Matcher for detecting tuples t where []value attribute EStringToStringMapEntry(source,target)
55394 */
55395private pattern mustInRelationvalue_attribute_EStringToStringMapEntry(
55396 problem:LogicProblem, interpretation:PartialInterpretation,
55397 source: DefinedElement, target:DefinedElement)
55398{
55399 find interpretation(problem,interpretation);
55400 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
55401 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"value attribute EStringToStringMapEntry");
55402 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
55403 BinaryElementRelationLink.param1(link,source);
55404 BinaryElementRelationLink.param2(link,target);
55405}
55406/**
55407 * Matcher for detecting tuples t where <>value attribute EStringToStringMapEntry(source,target)
55408 */
55409private pattern mayInRelationvalue_attribute_EStringToStringMapEntry(
55410 problem:LogicProblem, interpretation:PartialInterpretation,
55411 source: DefinedElement, target:DefinedElement)
55412{
55413 find interpretation(problem,interpretation);
55414 // The two endpoint of the link have to exist
55415 find mayExist(problem, interpretation, source);
55416 find mayExist(problem, interpretation, target);
55417 // Type consistency
55418 find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,source);
55419 StringElement(target);
55420 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
55421 // the upper bound of the multiplicity should be considered.
55422 numberOfExistingReferences == count find mustInRelationvalue_attribute_EStringToStringMapEntry(problem,interpretation,source,_);
55423 check(numberOfExistingReferences < 1);
55424} or {
55425 find mustInRelationvalue_attribute_EStringToStringMapEntry(problem,interpretation,source,target);
55426}
55427
55428//////////
55429// 1.3 Relation Definition Indexers
55430//////////
55431
55432//////////
55433// 1.4 Containment Indexer
55434//////////
55435private pattern mustContains2(source: DefinedElement, target: DefinedElement) {
55436 find mustContains4(_,_,source,target);
55437}
55438
55439private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation,
55440 source: DefinedElement, target: DefinedElement)
55441 { find mustInRelationdetails_reference_EAnnotation(problem,interpretation,source,target); }or
55442
55443 { find mustInRelationcontents_reference_EAnnotation(problem,interpretation,source,target); }or
55444
55445 { find mustInRelationeOperations_reference_EClass(problem,interpretation,source,target); }or
55446
55447 { find mustInRelationeStructuralFeatures_reference_EClass(problem,interpretation,source,target); }or
55448
55449 { find mustInRelationeGenericSuperTypes_reference_EClass(problem,interpretation,source,target); }or
55450
55451 { find mustInRelationeTypeParameters_reference_EClassifier(problem,interpretation,source,target); }or
55452
55453 { find mustInRelationeLiterals_reference_EEnum(problem,interpretation,source,target); }or
55454
55455 { find mustInRelationeAnnotations_reference_EModelElement(problem,interpretation,source,target); }or
55456
55457 { find mustInRelationeTypeParameters_reference_EOperation(problem,interpretation,source,target); }or
55458
55459 { find mustInRelationeParameters_reference_EOperation(problem,interpretation,source,target); }or
55460
55461 { find mustInRelationeGenericExceptions_reference_EOperation(problem,interpretation,source,target); }or
55462
55463 { find mustInRelationeClassifiers_reference_EPackage(problem,interpretation,source,target); }or
55464
55465 { find mustInRelationeSubpackages_reference_EPackage(problem,interpretation,source,target); }or
55466
55467 { find mustInRelationeGenericType_reference_ETypedElement(problem,interpretation,source,target); }or
55468
55469 { find mustInRelationeUpperBound_reference_EGenericType(problem,interpretation,source,target); }or
55470
55471 { find mustInRelationeTypeArguments_reference_EGenericType(problem,interpretation,source,target); }or
55472
55473 { find mustInRelationeLowerBound_reference_EGenericType(problem,interpretation,source,target); }or
55474
55475 { find mustInRelationeBounds_reference_ETypeParameter(problem,interpretation,source,target); }
55476
55477private pattern mustTransitiveContains(source,target) {
55478 find mustContains2+(source,target);
55479}
55480
55481//////////
55482// 2. Invalidation Indexers
55483//////////
55484// 2.1 Invalidated by WF Queries
55485//////////
55486
55487//////////
55488// 3. Unfinishedness Indexers
55489//////////
55490// 3.1 Unfinishedness Measured by Multiplicity
55491//////////
55492pattern unfinishedLowerMultiplicity_eAttributeType_reference_EAttribute(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) {
55493 find interpretation(problem,interpretation);
55494 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
55495 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributeType reference EAttribute");
55496 find mustInstanceOfEAttribute_class(problem,interpretation,object);
55497 numberOfExistingReferences == count find mustInRelationeAttributeType_reference_EAttribute(problem,interpretation,object,_);
55498 check(numberOfExistingReferences < 1);
55499 missingMultiplicity == eval(1-numberOfExistingReferences);
55500}
55501pattern unfinishedLowerMultiplicity_eReferenceType_reference_EReference(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) {
55502 find interpretation(problem,interpretation);
55503 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
55504 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferenceType reference EReference");
55505 find mustInstanceOfEReference_class(problem,interpretation,object);
55506 numberOfExistingReferences == count find mustInRelationeReferenceType_reference_EReference(problem,interpretation,object,_);
55507 check(numberOfExistingReferences < 1);
55508 missingMultiplicity == eval(1-numberOfExistingReferences);
55509}
55510pattern unfinishedLowerMultiplicity_eRawType_reference_EGenericType(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) {
55511 find interpretation(problem,interpretation);
55512 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
55513 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eRawType reference EGenericType");
55514 find mustInstanceOfEGenericType_class(problem,interpretation,object);
55515 numberOfExistingReferences == count find mustInRelationeRawType_reference_EGenericType(problem,interpretation,object,_);
55516 check(numberOfExistingReferences < 1);
55517 missingMultiplicity == eval(1-numberOfExistingReferences);
55518}
55519
55520//////////
55521// 3.2 Unfinishedness Measured by WF Queries
55522//////////
55523
55524//////////
55525// 4. Refinement Indexers
55526//////////
55527// 4.1 Object constructors
55528//////////
55529private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation)
55530{
55531 find interpretation(problem,interpretation);
55532 find mustInstanceOfEOperation_class(problem,interpretation,root);
55533 find mustExist(problem, interpretation, root);
55534}or{
55535 find interpretation(problem,interpretation);
55536 find mustInstanceOfENamedElement_class(problem,interpretation,root);
55537 find mustExist(problem, interpretation, root);
55538}or{
55539 find interpretation(problem,interpretation);
55540 find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,root);
55541 find mustExist(problem, interpretation, root);
55542}or{
55543 find interpretation(problem,interpretation);
55544 find mustInstanceOfEEnumLiteral_class(problem,interpretation,root);
55545 find mustExist(problem, interpretation, root);
55546}or{
55547 find interpretation(problem,interpretation);
55548 find mustInstanceOfEGenericType_class(problem,interpretation,root);
55549 find mustExist(problem, interpretation, root);
55550}or{
55551 find interpretation(problem,interpretation);
55552 find mustInstanceOfEObject_class(problem,interpretation,root);
55553 find mustExist(problem, interpretation, root);
55554}or{
55555 find interpretation(problem,interpretation);
55556 find mustInstanceOfEAttribute_class(problem,interpretation,root);
55557 find mustExist(problem, interpretation, root);
55558}or{
55559 find interpretation(problem,interpretation);
55560 find mustInstanceOfEPackage_class(problem,interpretation,root);
55561 find mustExist(problem, interpretation, root);
55562}or{
55563 find interpretation(problem,interpretation);
55564 find mustInstanceOfEParameter_class(problem,interpretation,root);
55565 find mustExist(problem, interpretation, root);
55566}or{
55567 find interpretation(problem,interpretation);
55568 find mustInstanceOfEDataType_class(problem,interpretation,root);
55569 find mustExist(problem, interpretation, root);
55570}or{
55571 find interpretation(problem,interpretation);
55572 find mustInstanceOfEClassifier_class(problem,interpretation,root);
55573 find mustExist(problem, interpretation, root);
55574}or{
55575 find interpretation(problem,interpretation);
55576 find mustInstanceOfEStructuralFeature_class(problem,interpretation,root);
55577 find mustExist(problem, interpretation, root);
55578}or{
55579 find interpretation(problem,interpretation);
55580 find mustInstanceOfEModelElement_class(problem,interpretation,root);
55581 find mustExist(problem, interpretation, root);
55582}or{
55583 find interpretation(problem,interpretation);
55584 find mustInstanceOfEAnnotation_class(problem,interpretation,root);
55585 find mustExist(problem, interpretation, root);
55586}or{
55587 find interpretation(problem,interpretation);
55588 find mustInstanceOfETypeParameter_class(problem,interpretation,root);
55589 find mustExist(problem, interpretation, root);
55590}or{
55591 find interpretation(problem,interpretation);
55592 find mustInstanceOfEReference_class(problem,interpretation,root);
55593 find mustExist(problem, interpretation, root);
55594}or{
55595 find interpretation(problem,interpretation);
55596 find mustInstanceOfEEnum_class(problem,interpretation,root);
55597 find mustExist(problem, interpretation, root);
55598}or{
55599 find interpretation(problem,interpretation);
55600 find mustInstanceOfETypedElement_class(problem,interpretation,root);
55601 find mustExist(problem, interpretation, root);
55602}or{
55603 find interpretation(problem,interpretation);
55604 find mustInstanceOfEClass_class(problem,interpretation,root);
55605 find mustExist(problem, interpretation, root);
55606}or{
55607 find interpretation(problem,interpretation);
55608 find mustInstanceOfEModelElement_class_DefinedPart(problem,interpretation,root);
55609 find mustExist(problem, interpretation, root);
55610}or{
55611 find interpretation(problem,interpretation);
55612 find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,root);
55613 find mustExist(problem, interpretation, root);
55614}or{
55615 find interpretation(problem,interpretation);
55616 find mustInstanceOfENamedElement_class_DefinedPart(problem,interpretation,root);
55617 find mustExist(problem, interpretation, root);
55618}or{
55619 find interpretation(problem,interpretation);
55620 find mustInstanceOfENamedElement_class_UndefinedPart(problem,interpretation,root);
55621 find mustExist(problem, interpretation, root);
55622}or{
55623 find interpretation(problem,interpretation);
55624 find mustInstanceOfEPackage_class_DefinedPart(problem,interpretation,root);
55625 find mustExist(problem, interpretation, root);
55626}or{
55627 find interpretation(problem,interpretation);
55628 find mustInstanceOfEPackage_class_UndefinedPart(problem,interpretation,root);
55629 find mustExist(problem, interpretation, root);
55630}
55631pattern createObject_EAnnotation_class_by_eAnnotations_reference_EModelElement_with_eModelElement_reference_EAnnotation(
55632 problem:LogicProblem, interpretation:PartialInterpretation,
55633 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
55634 container:DefinedElement)
55635{
55636 find interpretation(problem,interpretation);
55637 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
55638 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EAnnotation class");
55639 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
55640 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eAnnotations reference EModelElement");
55641 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
55642 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eModelElement reference EAnnotation");
55643 find mustInstanceOfEModelElement_class(problem,interpretation,container);
55644 find mayInstanceOfEAnnotation_class(problem,interpretation,newObject);
55645 find mayInRelationeAnnotations_reference_EModelElement(problem,interpretation,container,newObject);
55646 find mustExist(problem, interpretation, container);
55647 neg find mustExist(problem, interpretation, newObject);
55648}
55649pattern createObject_EAnnotation_class(
55650 problem:LogicProblem, interpretation:PartialInterpretation,
55651 typeInterpretation:PartialComplexTypeInterpretation)
55652{
55653 find interpretation(problem,interpretation);
55654 neg find hasElementInContainment(problem,interpretation);
55655 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
55656 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EAnnotation class");
55657 find mayInstanceOfEAnnotation_class(problem,interpretation,newObject);
55658 find mayExist(problem, interpretation, newObject);
55659 neg find mustExist(problem, interpretation, newObject);
55660}
55661pattern createObject_EEnum_class_by_eClassifiers_reference_EPackage_with_ePackage_reference_EClassifier(
55662 problem:LogicProblem, interpretation:PartialInterpretation,
55663 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
55664 container:DefinedElement)
55665{
55666 find interpretation(problem,interpretation);
55667 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
55668 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EEnum class");
55669 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
55670 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eClassifiers reference EPackage");
55671 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
55672 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"ePackage reference EClassifier");
55673 find mustInstanceOfEPackage_class(problem,interpretation,container);
55674 find mayInstanceOfEEnum_class(problem,interpretation,newObject);
55675 find mayInRelationeClassifiers_reference_EPackage(problem,interpretation,container,newObject);
55676 find mustExist(problem, interpretation, container);
55677 neg find mustExist(problem, interpretation, newObject);
55678}
55679pattern createObject_EEnum_class(
55680 problem:LogicProblem, interpretation:PartialInterpretation,
55681 typeInterpretation:PartialComplexTypeInterpretation)
55682{
55683 find interpretation(problem,interpretation);
55684 neg find hasElementInContainment(problem,interpretation);
55685 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
55686 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EEnum class");
55687 find mayInstanceOfEEnum_class(problem,interpretation,newObject);
55688 find mayExist(problem, interpretation, newObject);
55689 neg find mustExist(problem, interpretation, newObject);
55690}
55691pattern createObject_EParameter_class_by_eParameters_reference_EOperation_with_eOperation_reference_EParameter(
55692 problem:LogicProblem, interpretation:PartialInterpretation,
55693 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
55694 container:DefinedElement)
55695{
55696 find interpretation(problem,interpretation);
55697 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
55698 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EParameter class");
55699 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
55700 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eParameters reference EOperation");
55701 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
55702 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eOperation reference EParameter");
55703 find mustInstanceOfEOperation_class(problem,interpretation,container);
55704 find mayInstanceOfEParameter_class(problem,interpretation,newObject);
55705 find mayInRelationeParameters_reference_EOperation(problem,interpretation,container,newObject);
55706 find mustExist(problem, interpretation, container);
55707 neg find mustExist(problem, interpretation, newObject);
55708}
55709pattern createObject_EParameter_class(
55710 problem:LogicProblem, interpretation:PartialInterpretation,
55711 typeInterpretation:PartialComplexTypeInterpretation)
55712{
55713 find interpretation(problem,interpretation);
55714 neg find hasElementInContainment(problem,interpretation);
55715 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
55716 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EParameter class");
55717 find mayInstanceOfEParameter_class(problem,interpretation,newObject);
55718 find mayExist(problem, interpretation, newObject);
55719 neg find mustExist(problem, interpretation, newObject);
55720}
55721pattern createObject_EPackage_class_UndefinedPart_by_eSubpackages_reference_EPackage_with_eSuperPackage_reference_EPackage(
55722 problem:LogicProblem, interpretation:PartialInterpretation,
55723 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
55724 container:DefinedElement)
55725{
55726 find interpretation(problem,interpretation);
55727 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
55728 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EPackage class UndefinedPart");
55729 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
55730 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eSubpackages reference EPackage");
55731 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
55732 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eSuperPackage reference EPackage");
55733 find mustInstanceOfEPackage_class(problem,interpretation,container);
55734 find mayInstanceOfEPackage_class_UndefinedPart(problem,interpretation,newObject);
55735 find mayInRelationeSubpackages_reference_EPackage(problem,interpretation,container,newObject);
55736 find mustExist(problem, interpretation, container);
55737 neg find mustExist(problem, interpretation, newObject);
55738}
55739pattern createObject_EPackage_class_UndefinedPart(
55740 problem:LogicProblem, interpretation:PartialInterpretation,
55741 typeInterpretation:PartialComplexTypeInterpretation)
55742{
55743 find interpretation(problem,interpretation);
55744 neg find hasElementInContainment(problem,interpretation);
55745 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
55746 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EPackage class UndefinedPart");
55747 find mayInstanceOfEPackage_class_UndefinedPart(problem,interpretation,newObject);
55748 find mayExist(problem, interpretation, newObject);
55749 neg find mustExist(problem, interpretation, newObject);
55750}
55751pattern createObject_EClass_class_by_eClassifiers_reference_EPackage_with_ePackage_reference_EClassifier(
55752 problem:LogicProblem, interpretation:PartialInterpretation,
55753 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
55754 container:DefinedElement)
55755{
55756 find interpretation(problem,interpretation);
55757 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
55758 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EClass class");
55759 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
55760 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eClassifiers reference EPackage");
55761 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
55762 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"ePackage reference EClassifier");
55763 find mustInstanceOfEPackage_class(problem,interpretation,container);
55764 find mayInstanceOfEClass_class(problem,interpretation,newObject);
55765 find mayInRelationeClassifiers_reference_EPackage(problem,interpretation,container,newObject);
55766 find mustExist(problem, interpretation, container);
55767 neg find mustExist(problem, interpretation, newObject);
55768}
55769pattern createObject_EClass_class(
55770 problem:LogicProblem, interpretation:PartialInterpretation,
55771 typeInterpretation:PartialComplexTypeInterpretation)
55772{
55773 find interpretation(problem,interpretation);
55774 neg find hasElementInContainment(problem,interpretation);
55775 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
55776 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EClass class");
55777 find mayInstanceOfEClass_class(problem,interpretation,newObject);
55778 find mayExist(problem, interpretation, newObject);
55779 neg find mustExist(problem, interpretation, newObject);
55780}
55781pattern createObject_EOperation_class_by_eOperations_reference_EClass_with_eContainingClass_reference_EOperation(
55782 problem:LogicProblem, interpretation:PartialInterpretation,
55783 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
55784 container:DefinedElement)
55785{
55786 find interpretation(problem,interpretation);
55787 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
55788 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EOperation class");
55789 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
55790 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eOperations reference EClass");
55791 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
55792 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eContainingClass reference EOperation");
55793 find mustInstanceOfEClass_class(problem,interpretation,container);
55794 find mayInstanceOfEOperation_class(problem,interpretation,newObject);
55795 find mayInRelationeOperations_reference_EClass(problem,interpretation,container,newObject);
55796 find mustExist(problem, interpretation, container);
55797 neg find mustExist(problem, interpretation, newObject);
55798}
55799pattern createObject_EOperation_class(
55800 problem:LogicProblem, interpretation:PartialInterpretation,
55801 typeInterpretation:PartialComplexTypeInterpretation)
55802{
55803 find interpretation(problem,interpretation);
55804 neg find hasElementInContainment(problem,interpretation);
55805 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
55806 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EOperation class");
55807 find mayInstanceOfEOperation_class(problem,interpretation,newObject);
55808 find mayExist(problem, interpretation, newObject);
55809 neg find mustExist(problem, interpretation, newObject);
55810}
55811pattern createObject_EReference_class_by_eStructuralFeatures_reference_EClass_with_eContainingClass_reference_EStructuralFeature(
55812 problem:LogicProblem, interpretation:PartialInterpretation,
55813 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
55814 container:DefinedElement)
55815{
55816 find interpretation(problem,interpretation);
55817 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
55818 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EReference class");
55819 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
55820 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eStructuralFeatures reference EClass");
55821 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
55822 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eContainingClass reference EStructuralFeature");
55823 find mustInstanceOfEClass_class(problem,interpretation,container);
55824 find mayInstanceOfEReference_class(problem,interpretation,newObject);
55825 find mayInRelationeStructuralFeatures_reference_EClass(problem,interpretation,container,newObject);
55826 find mustExist(problem, interpretation, container);
55827 neg find mustExist(problem, interpretation, newObject);
55828}
55829pattern createObject_EReference_class(
55830 problem:LogicProblem, interpretation:PartialInterpretation,
55831 typeInterpretation:PartialComplexTypeInterpretation)
55832{
55833 find interpretation(problem,interpretation);
55834 neg find hasElementInContainment(problem,interpretation);
55835 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
55836 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EReference class");
55837 find mayInstanceOfEReference_class(problem,interpretation,newObject);
55838 find mayExist(problem, interpretation, newObject);
55839 neg find mustExist(problem, interpretation, newObject);
55840}
55841pattern createObject_EObject_class_by_contents_reference_EAnnotation(
55842 problem:LogicProblem, interpretation:PartialInterpretation,
55843 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
55844 container:DefinedElement)
55845{
55846 find interpretation(problem,interpretation);
55847 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
55848 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EObject class");
55849 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
55850 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"contents reference EAnnotation");
55851 find mustInstanceOfEAnnotation_class(problem,interpretation,container);
55852 find mayInstanceOfEObject_class(problem,interpretation,newObject);
55853 find mayInRelationcontents_reference_EAnnotation(problem,interpretation,container,newObject);
55854 find mustExist(problem, interpretation, container);
55855 neg find mustExist(problem, interpretation, newObject);
55856}
55857pattern createObject_EObject_class(
55858 problem:LogicProblem, interpretation:PartialInterpretation,
55859 typeInterpretation:PartialComplexTypeInterpretation)
55860{
55861 find interpretation(problem,interpretation);
55862 neg find hasElementInContainment(problem,interpretation);
55863 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
55864 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EObject class");
55865 find mayInstanceOfEObject_class(problem,interpretation,newObject);
55866 find mayExist(problem, interpretation, newObject);
55867 neg find mustExist(problem, interpretation, newObject);
55868}
55869pattern createObject_EEnumLiteral_class_by_eLiterals_reference_EEnum_with_eEnum_reference_EEnumLiteral(
55870 problem:LogicProblem, interpretation:PartialInterpretation,
55871 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
55872 container:DefinedElement)
55873{
55874 find interpretation(problem,interpretation);
55875 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
55876 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EEnumLiteral class");
55877 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
55878 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eLiterals reference EEnum");
55879 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
55880 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eEnum reference EEnumLiteral");
55881 find mustInstanceOfEEnum_class(problem,interpretation,container);
55882 find mayInstanceOfEEnumLiteral_class(problem,interpretation,newObject);
55883 find mayInRelationeLiterals_reference_EEnum(problem,interpretation,container,newObject);
55884 find mustExist(problem, interpretation, container);
55885 neg find mustExist(problem, interpretation, newObject);
55886}
55887pattern createObject_EEnumLiteral_class(
55888 problem:LogicProblem, interpretation:PartialInterpretation,
55889 typeInterpretation:PartialComplexTypeInterpretation)
55890{
55891 find interpretation(problem,interpretation);
55892 neg find hasElementInContainment(problem,interpretation);
55893 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
55894 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EEnumLiteral class");
55895 find mayInstanceOfEEnumLiteral_class(problem,interpretation,newObject);
55896 find mayExist(problem, interpretation, newObject);
55897 neg find mustExist(problem, interpretation, newObject);
55898}
55899pattern createObject_EAttribute_class_by_eStructuralFeatures_reference_EClass_with_eContainingClass_reference_EStructuralFeature(
55900 problem:LogicProblem, interpretation:PartialInterpretation,
55901 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
55902 container:DefinedElement)
55903{
55904 find interpretation(problem,interpretation);
55905 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
55906 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EAttribute class");
55907 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
55908 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eStructuralFeatures reference EClass");
55909 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
55910 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eContainingClass reference EStructuralFeature");
55911 find mustInstanceOfEClass_class(problem,interpretation,container);
55912 find mayInstanceOfEAttribute_class(problem,interpretation,newObject);
55913 find mayInRelationeStructuralFeatures_reference_EClass(problem,interpretation,container,newObject);
55914 find mustExist(problem, interpretation, container);
55915 neg find mustExist(problem, interpretation, newObject);
55916}
55917pattern createObject_EAttribute_class(
55918 problem:LogicProblem, interpretation:PartialInterpretation,
55919 typeInterpretation:PartialComplexTypeInterpretation)
55920{
55921 find interpretation(problem,interpretation);
55922 neg find hasElementInContainment(problem,interpretation);
55923 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
55924 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EAttribute class");
55925 find mayInstanceOfEAttribute_class(problem,interpretation,newObject);
55926 find mayExist(problem, interpretation, newObject);
55927 neg find mustExist(problem, interpretation, newObject);
55928}
55929pattern createObject_EDataType_class_by_eClassifiers_reference_EPackage_with_ePackage_reference_EClassifier(
55930 problem:LogicProblem, interpretation:PartialInterpretation,
55931 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
55932 container:DefinedElement)
55933{
55934 find interpretation(problem,interpretation);
55935 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
55936 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EDataType class");
55937 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
55938 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eClassifiers reference EPackage");
55939 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
55940 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"ePackage reference EClassifier");
55941 find mustInstanceOfEPackage_class(problem,interpretation,container);
55942 find mayInstanceOfEDataType_class(problem,interpretation,newObject);
55943 find mayInRelationeClassifiers_reference_EPackage(problem,interpretation,container,newObject);
55944 find mustExist(problem, interpretation, container);
55945 neg find mustExist(problem, interpretation, newObject);
55946}
55947pattern createObject_EDataType_class(
55948 problem:LogicProblem, interpretation:PartialInterpretation,
55949 typeInterpretation:PartialComplexTypeInterpretation)
55950{
55951 find interpretation(problem,interpretation);
55952 neg find hasElementInContainment(problem,interpretation);
55953 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
55954 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EDataType class");
55955 find mayInstanceOfEDataType_class(problem,interpretation,newObject);
55956 find mayExist(problem, interpretation, newObject);
55957 neg find mustExist(problem, interpretation, newObject);
55958}
55959pattern createObject_EGenericType_class_by_eGenericSuperTypes_reference_EClass(
55960 problem:LogicProblem, interpretation:PartialInterpretation,
55961 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
55962 container:DefinedElement)
55963{
55964 find interpretation(problem,interpretation);
55965 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
55966 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class");
55967 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
55968 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eGenericSuperTypes reference EClass");
55969 find mustInstanceOfEClass_class(problem,interpretation,container);
55970 find mayInstanceOfEGenericType_class(problem,interpretation,newObject);
55971 find mayInRelationeGenericSuperTypes_reference_EClass(problem,interpretation,container,newObject);
55972 find mustExist(problem, interpretation, container);
55973 neg find mustExist(problem, interpretation, newObject);
55974}
55975pattern createObject_EGenericType_class_by_eGenericExceptions_reference_EOperation(
55976 problem:LogicProblem, interpretation:PartialInterpretation,
55977 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
55978 container:DefinedElement)
55979{
55980 find interpretation(problem,interpretation);
55981 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
55982 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class");
55983 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
55984 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eGenericExceptions reference EOperation");
55985 find mustInstanceOfEOperation_class(problem,interpretation,container);
55986 find mayInstanceOfEGenericType_class(problem,interpretation,newObject);
55987 find mayInRelationeGenericExceptions_reference_EOperation(problem,interpretation,container,newObject);
55988 find mustExist(problem, interpretation, container);
55989 neg find mustExist(problem, interpretation, newObject);
55990}
55991pattern createObject_EGenericType_class_by_eGenericType_reference_ETypedElement(
55992 problem:LogicProblem, interpretation:PartialInterpretation,
55993 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
55994 container:DefinedElement)
55995{
55996 find interpretation(problem,interpretation);
55997 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
55998 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class");
55999 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
56000 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eGenericType reference ETypedElement");
56001 find mustInstanceOfETypedElement_class(problem,interpretation,container);
56002 find mayInstanceOfEGenericType_class(problem,interpretation,newObject);
56003 find mayInRelationeGenericType_reference_ETypedElement(problem,interpretation,container,newObject);
56004 find mustExist(problem, interpretation, container);
56005 neg find mustExist(problem, interpretation, newObject);
56006}
56007pattern createObject_EGenericType_class_by_eUpperBound_reference_EGenericType(
56008 problem:LogicProblem, interpretation:PartialInterpretation,
56009 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
56010 container:DefinedElement)
56011{
56012 find interpretation(problem,interpretation);
56013 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
56014 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class");
56015 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
56016 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eUpperBound reference EGenericType");
56017 find mustInstanceOfEGenericType_class(problem,interpretation,container);
56018 find mayInstanceOfEGenericType_class(problem,interpretation,newObject);
56019 find mayInRelationeUpperBound_reference_EGenericType(problem,interpretation,container,newObject);
56020 find mustExist(problem, interpretation, container);
56021 neg find mustExist(problem, interpretation, newObject);
56022}
56023pattern createObject_EGenericType_class_by_eTypeArguments_reference_EGenericType(
56024 problem:LogicProblem, interpretation:PartialInterpretation,
56025 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
56026 container:DefinedElement)
56027{
56028 find interpretation(problem,interpretation);
56029 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
56030 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class");
56031 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
56032 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eTypeArguments reference EGenericType");
56033 find mustInstanceOfEGenericType_class(problem,interpretation,container);
56034 find mayInstanceOfEGenericType_class(problem,interpretation,newObject);
56035 find mayInRelationeTypeArguments_reference_EGenericType(problem,interpretation,container,newObject);
56036 find mustExist(problem, interpretation, container);
56037 neg find mustExist(problem, interpretation, newObject);
56038}
56039pattern createObject_EGenericType_class_by_eLowerBound_reference_EGenericType(
56040 problem:LogicProblem, interpretation:PartialInterpretation,
56041 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
56042 container:DefinedElement)
56043{
56044 find interpretation(problem,interpretation);
56045 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
56046 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class");
56047 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
56048 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eLowerBound reference EGenericType");
56049 find mustInstanceOfEGenericType_class(problem,interpretation,container);
56050 find mayInstanceOfEGenericType_class(problem,interpretation,newObject);
56051 find mayInRelationeLowerBound_reference_EGenericType(problem,interpretation,container,newObject);
56052 find mustExist(problem, interpretation, container);
56053 neg find mustExist(problem, interpretation, newObject);
56054}
56055pattern createObject_EGenericType_class_by_eBounds_reference_ETypeParameter(
56056 problem:LogicProblem, interpretation:PartialInterpretation,
56057 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
56058 container:DefinedElement)
56059{
56060 find interpretation(problem,interpretation);
56061 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
56062 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class");
56063 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
56064 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eBounds reference ETypeParameter");
56065 find mustInstanceOfETypeParameter_class(problem,interpretation,container);
56066 find mayInstanceOfEGenericType_class(problem,interpretation,newObject);
56067 find mayInRelationeBounds_reference_ETypeParameter(problem,interpretation,container,newObject);
56068 find mustExist(problem, interpretation, container);
56069 neg find mustExist(problem, interpretation, newObject);
56070}
56071pattern createObject_EGenericType_class(
56072 problem:LogicProblem, interpretation:PartialInterpretation,
56073 typeInterpretation:PartialComplexTypeInterpretation)
56074{
56075 find interpretation(problem,interpretation);
56076 neg find hasElementInContainment(problem,interpretation);
56077 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
56078 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class");
56079 find mayInstanceOfEGenericType_class(problem,interpretation,newObject);
56080 find mayExist(problem, interpretation, newObject);
56081 neg find mustExist(problem, interpretation, newObject);
56082}
56083pattern createObject_EStringToStringMapEntry_class_by_details_reference_EAnnotation(
56084 problem:LogicProblem, interpretation:PartialInterpretation,
56085 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
56086 container:DefinedElement)
56087{
56088 find interpretation(problem,interpretation);
56089 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
56090 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EStringToStringMapEntry class");
56091 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
56092 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"details reference EAnnotation");
56093 find mustInstanceOfEAnnotation_class(problem,interpretation,container);
56094 find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,newObject);
56095 find mayInRelationdetails_reference_EAnnotation(problem,interpretation,container,newObject);
56096 find mustExist(problem, interpretation, container);
56097 neg find mustExist(problem, interpretation, newObject);
56098}
56099pattern createObject_EStringToStringMapEntry_class(
56100 problem:LogicProblem, interpretation:PartialInterpretation,
56101 typeInterpretation:PartialComplexTypeInterpretation)
56102{
56103 find interpretation(problem,interpretation);
56104 neg find hasElementInContainment(problem,interpretation);
56105 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
56106 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EStringToStringMapEntry class");
56107 find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,newObject);
56108 find mayExist(problem, interpretation, newObject);
56109 neg find mustExist(problem, interpretation, newObject);
56110}
56111pattern createObject_ETypeParameter_class_by_eTypeParameters_reference_EClassifier(
56112 problem:LogicProblem, interpretation:PartialInterpretation,
56113 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
56114 container:DefinedElement)
56115{
56116 find interpretation(problem,interpretation);
56117 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
56118 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"ETypeParameter class");
56119 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
56120 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eTypeParameters reference EClassifier");
56121 find mustInstanceOfEClassifier_class(problem,interpretation,container);
56122 find mayInstanceOfETypeParameter_class(problem,interpretation,newObject);
56123 find mayInRelationeTypeParameters_reference_EClassifier(problem,interpretation,container,newObject);
56124 find mustExist(problem, interpretation, container);
56125 neg find mustExist(problem, interpretation, newObject);
56126}
56127pattern createObject_ETypeParameter_class_by_eTypeParameters_reference_EOperation(
56128 problem:LogicProblem, interpretation:PartialInterpretation,
56129 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
56130 container:DefinedElement)
56131{
56132 find interpretation(problem,interpretation);
56133 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
56134 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"ETypeParameter class");
56135 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
56136 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eTypeParameters reference EOperation");
56137 find mustInstanceOfEOperation_class(problem,interpretation,container);
56138 find mayInstanceOfETypeParameter_class(problem,interpretation,newObject);
56139 find mayInRelationeTypeParameters_reference_EOperation(problem,interpretation,container,newObject);
56140 find mustExist(problem, interpretation, container);
56141 neg find mustExist(problem, interpretation, newObject);
56142}
56143pattern createObject_ETypeParameter_class(
56144 problem:LogicProblem, interpretation:PartialInterpretation,
56145 typeInterpretation:PartialComplexTypeInterpretation)
56146{
56147 find interpretation(problem,interpretation);
56148 neg find hasElementInContainment(problem,interpretation);
56149 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
56150 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"ETypeParameter class");
56151 find mayInstanceOfETypeParameter_class(problem,interpretation,newObject);
56152 find mayExist(problem, interpretation, newObject);
56153 neg find mustExist(problem, interpretation, newObject);
56154}
56155
56156//////////
56157// 4.2 Type refinement
56158//////////
56159pattern refineTypeTo_EAnnotation_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
56160 find interpretation(problem,interpretation);
56161 PartialInterpretation.newElements(interpretation,element);
56162 find mayInstanceOfEAnnotation_class(problem,interpretation,element);
56163 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
56164 neg find mustInstanceOfENamedElement_class(problem,interpretation,element);
56165 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
56166 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
56167 neg find mustInstanceOfEObject_class(problem,interpretation,element);
56168}
56169pattern refineTypeTo_EEnum_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
56170 find interpretation(problem,interpretation);
56171 PartialInterpretation.newElements(interpretation,element);
56172 find mayInstanceOfEEnum_class(problem,interpretation,element);
56173 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
56174 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
56175 neg find mustInstanceOfEEnum_class(problem,interpretation,element);
56176 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
56177 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
56178 neg find mustInstanceOfEClass_class(problem,interpretation,element);
56179 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
56180 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
56181 neg find mustInstanceOfEObject_class(problem,interpretation,element);
56182 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
56183}
56184pattern refineTypeTo_EParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
56185 find interpretation(problem,interpretation);
56186 PartialInterpretation.newElements(interpretation,element);
56187 find mayInstanceOfEParameter_class(problem,interpretation,element);
56188 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
56189 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
56190 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
56191 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
56192 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
56193 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
56194 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
56195 neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element);
56196 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
56197 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
56198 neg find mustInstanceOfEObject_class(problem,interpretation,element);
56199}
56200pattern refineTypeTo_EPackage_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
56201 find interpretation(problem,interpretation);
56202 PartialInterpretation.newElements(interpretation,element);
56203 find mayInstanceOfEPackage_class_UndefinedPart(problem,interpretation,element);
56204 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
56205 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
56206 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
56207 neg find mustInstanceOfEPackage_class_UndefinedPart(problem,interpretation,element);
56208 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
56209 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
56210 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
56211 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
56212 neg find mustInstanceOfEObject_class(problem,interpretation,element);
56213}
56214pattern refineTypeTo_EClass_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
56215 find interpretation(problem,interpretation);
56216 PartialInterpretation.newElements(interpretation,element);
56217 find mayInstanceOfEClass_class(problem,interpretation,element);
56218 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
56219 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
56220 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
56221 neg find mustInstanceOfEDataType_class(problem,interpretation,element);
56222 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
56223 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
56224 neg find mustInstanceOfEClass_class(problem,interpretation,element);
56225 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
56226 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
56227 neg find mustInstanceOfEObject_class(problem,interpretation,element);
56228}
56229pattern refineTypeTo_EOperation_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
56230 find interpretation(problem,interpretation);
56231 PartialInterpretation.newElements(interpretation,element);
56232 find mayInstanceOfEOperation_class(problem,interpretation,element);
56233 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
56234 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
56235 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
56236 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
56237 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
56238 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
56239 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
56240 neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element);
56241 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
56242 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
56243 neg find mustInstanceOfEObject_class(problem,interpretation,element);
56244}
56245pattern refineTypeTo_EReference_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
56246 find interpretation(problem,interpretation);
56247 PartialInterpretation.newElements(interpretation,element);
56248 find mayInstanceOfEReference_class(problem,interpretation,element);
56249 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
56250 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
56251 neg find mustInstanceOfEAttribute_class(problem,interpretation,element);
56252 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
56253 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
56254 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
56255 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
56256 neg find mustInstanceOfEReference_class(problem,interpretation,element);
56257 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
56258 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
56259 neg find mustInstanceOfEObject_class(problem,interpretation,element);
56260 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
56261}
56262pattern refineTypeTo_EObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
56263 find interpretation(problem,interpretation);
56264 PartialInterpretation.newElements(interpretation,element);
56265 find mayInstanceOfEObject_class(problem,interpretation,element);
56266 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
56267 neg find mustInstanceOfEModelElement_class(problem,interpretation,element);
56268 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
56269 neg find mustInstanceOfEObject_class(problem,interpretation,element);
56270}
56271pattern refineTypeTo_EEnumLiteral_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
56272 find interpretation(problem,interpretation);
56273 PartialInterpretation.newElements(interpretation,element);
56274 find mayInstanceOfEEnumLiteral_class(problem,interpretation,element);
56275 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
56276 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
56277 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
56278 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
56279 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
56280 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
56281 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
56282 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
56283 neg find mustInstanceOfEObject_class(problem,interpretation,element);
56284}
56285pattern refineTypeTo_EAttribute_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
56286 find interpretation(problem,interpretation);
56287 PartialInterpretation.newElements(interpretation,element);
56288 find mayInstanceOfEAttribute_class(problem,interpretation,element);
56289 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
56290 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
56291 neg find mustInstanceOfEAttribute_class(problem,interpretation,element);
56292 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
56293 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
56294 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
56295 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
56296 neg find mustInstanceOfEReference_class(problem,interpretation,element);
56297 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
56298 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
56299 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
56300 neg find mustInstanceOfEObject_class(problem,interpretation,element);
56301}
56302pattern refineTypeTo_EDataType_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
56303 find interpretation(problem,interpretation);
56304 PartialInterpretation.newElements(interpretation,element);
56305 find mayInstanceOfEDataType_class(problem,interpretation,element);
56306 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
56307 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
56308 neg find mustInstanceOfEDataType_class(problem,interpretation,element);
56309 neg find mustInstanceOfEEnum_class(problem,interpretation,element);
56310 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
56311 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
56312 neg find mustInstanceOfEClass_class(problem,interpretation,element);
56313 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
56314 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
56315 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
56316 neg find mustInstanceOfEObject_class(problem,interpretation,element);
56317}
56318pattern refineTypeTo_EGenericType_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
56319 find interpretation(problem,interpretation);
56320 PartialInterpretation.newElements(interpretation,element);
56321 find mayInstanceOfEGenericType_class(problem,interpretation,element);
56322 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
56323 neg find mustInstanceOfEModelElement_class(problem,interpretation,element);
56324 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
56325 neg find mustInstanceOfEObject_class(problem,interpretation,element);
56326}
56327pattern refineTypeTo_EStringToStringMapEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
56328 find interpretation(problem,interpretation);
56329 PartialInterpretation.newElements(interpretation,element);
56330 find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
56331 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
56332 neg find mustInstanceOfEModelElement_class(problem,interpretation,element);
56333 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
56334 neg find mustInstanceOfEObject_class(problem,interpretation,element);
56335}
56336pattern refineTypeTo_ETypeParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
56337 find interpretation(problem,interpretation);
56338 PartialInterpretation.newElements(interpretation,element);
56339 find mayInstanceOfETypeParameter_class(problem,interpretation,element);
56340 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
56341 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
56342 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
56343 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
56344 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
56345 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
56346 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
56347 neg find mustInstanceOfEObject_class(problem,interpretation,element);
56348 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
56349}
56350
56351//////////
56352// 4.3 Relation refinement
56353//////////
56354pattern refineRelation_eAttributeType_reference_EAttribute(
56355 problem:LogicProblem, interpretation:PartialInterpretation,
56356 relationIterpretation:PartialRelationInterpretation,
56357 from: DefinedElement, to: DefinedElement)
56358{
56359 find interpretation(problem,interpretation);
56360 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
56361 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributeType reference EAttribute");
56362 find mustExist(problem, interpretation, from);
56363 find mustExist(problem, interpretation, to);
56364 find mustInstanceOfEAttribute_class(problem,interpretation,from);
56365 find mustInstanceOfEDataType_class(problem,interpretation,to);
56366 find mayInRelationeAttributeType_reference_EAttribute(problem,interpretation,from,to);
56367 neg find mustInRelationeAttributeType_reference_EAttribute(problem,interpretation,from,to);
56368}
56369pattern refineRelation_references_reference_EAnnotation(
56370 problem:LogicProblem, interpretation:PartialInterpretation,
56371 relationIterpretation:PartialRelationInterpretation,
56372 from: DefinedElement, to: DefinedElement)
56373{
56374 find interpretation(problem,interpretation);
56375 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
56376 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"references reference EAnnotation");
56377 find mustExist(problem, interpretation, from);
56378 find mustExist(problem, interpretation, to);
56379 find mustInstanceOfEAnnotation_class(problem,interpretation,from);
56380 find mustInstanceOfEObject_class(problem,interpretation,to);
56381 find mayInRelationreferences_reference_EAnnotation(problem,interpretation,from,to);
56382 neg find mustInRelationreferences_reference_EAnnotation(problem,interpretation,from,to);
56383}
56384pattern refineRelation_eSuperTypes_reference_EClass(
56385 problem:LogicProblem, interpretation:PartialInterpretation,
56386 relationIterpretation:PartialRelationInterpretation,
56387 from: DefinedElement, to: DefinedElement)
56388{
56389 find interpretation(problem,interpretation);
56390 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
56391 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eSuperTypes reference EClass");
56392 find mustExist(problem, interpretation, from);
56393 find mustExist(problem, interpretation, to);
56394 find mustInstanceOfEClass_class(problem,interpretation,from);
56395 find mustInstanceOfEClass_class(problem,interpretation,to);
56396 find mayInRelationeSuperTypes_reference_EClass(problem,interpretation,from,to);
56397 neg find mustInRelationeSuperTypes_reference_EClass(problem,interpretation,from,to);
56398}
56399pattern refineRelation_eAllAttributes_reference_EClass(
56400 problem:LogicProblem, interpretation:PartialInterpretation,
56401 relationIterpretation:PartialRelationInterpretation,
56402 from: DefinedElement, to: DefinedElement)
56403{
56404 find interpretation(problem,interpretation);
56405 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
56406 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllAttributes reference EClass");
56407 find mustExist(problem, interpretation, from);
56408 find mustExist(problem, interpretation, to);
56409 find mustInstanceOfEClass_class(problem,interpretation,from);
56410 find mustInstanceOfEAttribute_class(problem,interpretation,to);
56411 find mayInRelationeAllAttributes_reference_EClass(problem,interpretation,from,to);
56412 neg find mustInRelationeAllAttributes_reference_EClass(problem,interpretation,from,to);
56413}
56414pattern refineRelation_eAllReferences_reference_EClass(
56415 problem:LogicProblem, interpretation:PartialInterpretation,
56416 relationIterpretation:PartialRelationInterpretation,
56417 from: DefinedElement, to: DefinedElement)
56418{
56419 find interpretation(problem,interpretation);
56420 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
56421 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllReferences reference EClass");
56422 find mustExist(problem, interpretation, from);
56423 find mustExist(problem, interpretation, to);
56424 find mustInstanceOfEClass_class(problem,interpretation,from);
56425 find mustInstanceOfEReference_class(problem,interpretation,to);
56426 find mayInRelationeAllReferences_reference_EClass(problem,interpretation,from,to);
56427 neg find mustInRelationeAllReferences_reference_EClass(problem,interpretation,from,to);
56428}
56429pattern refineRelation_eReferences_reference_EClass(
56430 problem:LogicProblem, interpretation:PartialInterpretation,
56431 relationIterpretation:PartialRelationInterpretation,
56432 from: DefinedElement, to: DefinedElement)
56433{
56434 find interpretation(problem,interpretation);
56435 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
56436 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferences reference EClass");
56437 find mustExist(problem, interpretation, from);
56438 find mustExist(problem, interpretation, to);
56439 find mustInstanceOfEClass_class(problem,interpretation,from);
56440 find mustInstanceOfEReference_class(problem,interpretation,to);
56441 find mayInRelationeReferences_reference_EClass(problem,interpretation,from,to);
56442 neg find mustInRelationeReferences_reference_EClass(problem,interpretation,from,to);
56443}
56444pattern refineRelation_eAttributes_reference_EClass(
56445 problem:LogicProblem, interpretation:PartialInterpretation,
56446 relationIterpretation:PartialRelationInterpretation,
56447 from: DefinedElement, to: DefinedElement)
56448{
56449 find interpretation(problem,interpretation);
56450 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
56451 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributes reference EClass");
56452 find mustExist(problem, interpretation, from);
56453 find mustExist(problem, interpretation, to);
56454 find mustInstanceOfEClass_class(problem,interpretation,from);
56455 find mustInstanceOfEAttribute_class(problem,interpretation,to);
56456 find mayInRelationeAttributes_reference_EClass(problem,interpretation,from,to);
56457 neg find mustInRelationeAttributes_reference_EClass(problem,interpretation,from,to);
56458}
56459pattern refineRelation_eAllContainments_reference_EClass(
56460 problem:LogicProblem, interpretation:PartialInterpretation,
56461 relationIterpretation:PartialRelationInterpretation,
56462 from: DefinedElement, to: DefinedElement)
56463{
56464 find interpretation(problem,interpretation);
56465 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
56466 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllContainments reference EClass");
56467 find mustExist(problem, interpretation, from);
56468 find mustExist(problem, interpretation, to);
56469 find mustInstanceOfEClass_class(problem,interpretation,from);
56470 find mustInstanceOfEReference_class(problem,interpretation,to);
56471 find mayInRelationeAllContainments_reference_EClass(problem,interpretation,from,to);
56472 neg find mustInRelationeAllContainments_reference_EClass(problem,interpretation,from,to);
56473}
56474pattern refineRelation_eAllOperations_reference_EClass(
56475 problem:LogicProblem, interpretation:PartialInterpretation,
56476 relationIterpretation:PartialRelationInterpretation,
56477 from: DefinedElement, to: DefinedElement)
56478{
56479 find interpretation(problem,interpretation);
56480 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
56481 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllOperations reference EClass");
56482 find mustExist(problem, interpretation, from);
56483 find mustExist(problem, interpretation, to);
56484 find mustInstanceOfEClass_class(problem,interpretation,from);
56485 find mustInstanceOfEOperation_class(problem,interpretation,to);
56486 find mayInRelationeAllOperations_reference_EClass(problem,interpretation,from,to);
56487 neg find mustInRelationeAllOperations_reference_EClass(problem,interpretation,from,to);
56488}
56489pattern refineRelation_eAllStructuralFeatures_reference_EClass(
56490 problem:LogicProblem, interpretation:PartialInterpretation,
56491 relationIterpretation:PartialRelationInterpretation,
56492 from: DefinedElement, to: DefinedElement)
56493{
56494 find interpretation(problem,interpretation);
56495 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
56496 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllStructuralFeatures reference EClass");
56497 find mustExist(problem, interpretation, from);
56498 find mustExist(problem, interpretation, to);
56499 find mustInstanceOfEClass_class(problem,interpretation,from);
56500 find mustInstanceOfEStructuralFeature_class(problem,interpretation,to);
56501 find mayInRelationeAllStructuralFeatures_reference_EClass(problem,interpretation,from,to);
56502 neg find mustInRelationeAllStructuralFeatures_reference_EClass(problem,interpretation,from,to);
56503}
56504pattern refineRelation_eAllSuperTypes_reference_EClass(
56505 problem:LogicProblem, interpretation:PartialInterpretation,
56506 relationIterpretation:PartialRelationInterpretation,
56507 from: DefinedElement, to: DefinedElement)
56508{
56509 find interpretation(problem,interpretation);
56510 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
56511 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllSuperTypes reference EClass");
56512 find mustExist(problem, interpretation, from);
56513 find mustExist(problem, interpretation, to);
56514 find mustInstanceOfEClass_class(problem,interpretation,from);
56515 find mustInstanceOfEClass_class(problem,interpretation,to);
56516 find mayInRelationeAllSuperTypes_reference_EClass(problem,interpretation,from,to);
56517 neg find mustInRelationeAllSuperTypes_reference_EClass(problem,interpretation,from,to);
56518}
56519pattern refineRelation_eIDAttribute_reference_EClass(
56520 problem:LogicProblem, interpretation:PartialInterpretation,
56521 relationIterpretation:PartialRelationInterpretation,
56522 from: DefinedElement, to: DefinedElement)
56523{
56524 find interpretation(problem,interpretation);
56525 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
56526 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eIDAttribute reference EClass");
56527 find mustExist(problem, interpretation, from);
56528 find mustExist(problem, interpretation, to);
56529 find mustInstanceOfEClass_class(problem,interpretation,from);
56530 find mustInstanceOfEAttribute_class(problem,interpretation,to);
56531 find mayInRelationeIDAttribute_reference_EClass(problem,interpretation,from,to);
56532 neg find mustInRelationeIDAttribute_reference_EClass(problem,interpretation,from,to);
56533}
56534pattern refineRelation_eAllGenericSuperTypes_reference_EClass(
56535 problem:LogicProblem, interpretation:PartialInterpretation,
56536 relationIterpretation:PartialRelationInterpretation,
56537 from: DefinedElement, to: DefinedElement)
56538{
56539 find interpretation(problem,interpretation);
56540 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
56541 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllGenericSuperTypes reference EClass");
56542 find mustExist(problem, interpretation, from);
56543 find mustExist(problem, interpretation, to);
56544 find mustInstanceOfEClass_class(problem,interpretation,from);
56545 find mustInstanceOfEGenericType_class(problem,interpretation,to);
56546 find mayInRelationeAllGenericSuperTypes_reference_EClass(problem,interpretation,from,to);
56547 neg find mustInRelationeAllGenericSuperTypes_reference_EClass(problem,interpretation,from,to);
56548}
56549pattern refineRelation_eExceptions_reference_EOperation(
56550 problem:LogicProblem, interpretation:PartialInterpretation,
56551 relationIterpretation:PartialRelationInterpretation,
56552 from: DefinedElement, to: DefinedElement)
56553{
56554 find interpretation(problem,interpretation);
56555 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
56556 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eExceptions reference EOperation");
56557 find mustExist(problem, interpretation, from);
56558 find mustExist(problem, interpretation, to);
56559 find mustInstanceOfEOperation_class(problem,interpretation,from);
56560 find mustInstanceOfEClassifier_class(problem,interpretation,to);
56561 find mayInRelationeExceptions_reference_EOperation(problem,interpretation,from,to);
56562 neg find mustInRelationeExceptions_reference_EOperation(problem,interpretation,from,to);
56563}
56564pattern refineRelation_eOpposite_reference_EReference(
56565 problem:LogicProblem, interpretation:PartialInterpretation,
56566 relationIterpretation:PartialRelationInterpretation,
56567 from: DefinedElement, to: DefinedElement)
56568{
56569 find interpretation(problem,interpretation);
56570 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
56571 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eOpposite reference EReference");
56572 find mustExist(problem, interpretation, from);
56573 find mustExist(problem, interpretation, to);
56574 find mustInstanceOfEReference_class(problem,interpretation,from);
56575 find mustInstanceOfEReference_class(problem,interpretation,to);
56576 find mayInRelationeOpposite_reference_EReference(problem,interpretation,from,to);
56577 neg find mustInRelationeOpposite_reference_EReference(problem,interpretation,from,to);
56578}
56579pattern refineRelation_eReferenceType_reference_EReference(
56580 problem:LogicProblem, interpretation:PartialInterpretation,
56581 relationIterpretation:PartialRelationInterpretation,
56582 from: DefinedElement, to: DefinedElement)
56583{
56584 find interpretation(problem,interpretation);
56585 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
56586 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferenceType reference EReference");
56587 find mustExist(problem, interpretation, from);
56588 find mustExist(problem, interpretation, to);
56589 find mustInstanceOfEReference_class(problem,interpretation,from);
56590 find mustInstanceOfEClass_class(problem,interpretation,to);
56591 find mayInRelationeReferenceType_reference_EReference(problem,interpretation,from,to);
56592 neg find mustInRelationeReferenceType_reference_EReference(problem,interpretation,from,to);
56593}
56594pattern refineRelation_eKeys_reference_EReference(
56595 problem:LogicProblem, interpretation:PartialInterpretation,
56596 relationIterpretation:PartialRelationInterpretation,
56597 from: DefinedElement, to: DefinedElement)
56598{
56599 find interpretation(problem,interpretation);
56600 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
56601 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eKeys reference EReference");
56602 find mustExist(problem, interpretation, from);
56603 find mustExist(problem, interpretation, to);
56604 find mustInstanceOfEReference_class(problem,interpretation,from);
56605 find mustInstanceOfEAttribute_class(problem,interpretation,to);
56606 find mayInRelationeKeys_reference_EReference(problem,interpretation,from,to);
56607 neg find mustInRelationeKeys_reference_EReference(problem,interpretation,from,to);
56608}
56609pattern refineRelation_eType_reference_ETypedElement(
56610 problem:LogicProblem, interpretation:PartialInterpretation,
56611 relationIterpretation:PartialRelationInterpretation,
56612 from: DefinedElement, to: DefinedElement)
56613{
56614 find interpretation(problem,interpretation);
56615 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
56616 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eType reference ETypedElement");
56617 find mustExist(problem, interpretation, from);
56618 find mustExist(problem, interpretation, to);
56619 find mustInstanceOfETypedElement_class(problem,interpretation,from);
56620 find mustInstanceOfEClassifier_class(problem,interpretation,to);
56621 find mayInRelationeType_reference_ETypedElement(problem,interpretation,from,to);
56622 neg find mustInRelationeType_reference_ETypedElement(problem,interpretation,from,to);
56623}
56624pattern refineRelation_eRawType_reference_EGenericType(
56625 problem:LogicProblem, interpretation:PartialInterpretation,
56626 relationIterpretation:PartialRelationInterpretation,
56627 from: DefinedElement, to: DefinedElement)
56628{
56629 find interpretation(problem,interpretation);
56630 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
56631 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eRawType reference EGenericType");
56632 find mustExist(problem, interpretation, from);
56633 find mustExist(problem, interpretation, to);
56634 find mustInstanceOfEGenericType_class(problem,interpretation,from);
56635 find mustInstanceOfEClassifier_class(problem,interpretation,to);
56636 find mayInRelationeRawType_reference_EGenericType(problem,interpretation,from,to);
56637 neg find mustInRelationeRawType_reference_EGenericType(problem,interpretation,from,to);
56638}
56639pattern refineRelation_eTypeParameter_reference_EGenericType(
56640 problem:LogicProblem, interpretation:PartialInterpretation,
56641 relationIterpretation:PartialRelationInterpretation,
56642 from: DefinedElement, to: DefinedElement)
56643{
56644 find interpretation(problem,interpretation);
56645 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
56646 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeParameter reference EGenericType");
56647 find mustExist(problem, interpretation, from);
56648 find mustExist(problem, interpretation, to);
56649 find mustInstanceOfEGenericType_class(problem,interpretation,from);
56650 find mustInstanceOfETypeParameter_class(problem,interpretation,to);
56651 find mayInRelationeTypeParameter_reference_EGenericType(problem,interpretation,from,to);
56652 neg find mustInRelationeTypeParameter_reference_EGenericType(problem,interpretation,from,to);
56653}
56654pattern refineRelation_eClassifier_reference_EGenericType(
56655 problem:LogicProblem, interpretation:PartialInterpretation,
56656 relationIterpretation:PartialRelationInterpretation,
56657 from: DefinedElement, to: DefinedElement)
56658{
56659 find interpretation(problem,interpretation);
56660 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
56661 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eClassifier reference EGenericType");
56662 find mustExist(problem, interpretation, from);
56663 find mustExist(problem, interpretation, to);
56664 find mustInstanceOfEGenericType_class(problem,interpretation,from);
56665 find mustInstanceOfEClassifier_class(problem,interpretation,to);
56666 find mayInRelationeClassifier_reference_EGenericType(problem,interpretation,from,to);
56667 neg find mustInRelationeClassifier_reference_EGenericType(problem,interpretation,from,to);
56668}
56669pattern refineRelation_iD_attribute_EAttribute(
56670 problem:LogicProblem, interpretation:PartialInterpretation,
56671 relationIterpretation:PartialRelationInterpretation,
56672 from: DefinedElement, to: DefinedElement)
56673{
56674 find interpretation(problem,interpretation);
56675 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
56676 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"iD attribute EAttribute");
56677 find mustExist(problem, interpretation, from);
56678 find mustExist(problem, interpretation, to);
56679 find mustInstanceOfEAttribute_class(problem,interpretation,from);
56680 BooleanElement(to);
56681 find mayInRelationiD_attribute_EAttribute(problem,interpretation,from,to);
56682 neg find mustInRelationiD_attribute_EAttribute(problem,interpretation,from,to);
56683}
56684pattern refineRelation_source_attribute_EAnnotation(
56685 problem:LogicProblem, interpretation:PartialInterpretation,
56686 relationIterpretation:PartialRelationInterpretation,
56687 from: DefinedElement, to: DefinedElement)
56688{
56689 find interpretation(problem,interpretation);
56690 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
56691 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"source attribute EAnnotation");
56692 find mustExist(problem, interpretation, from);
56693 find mustExist(problem, interpretation, to);
56694 find mustInstanceOfEAnnotation_class(problem,interpretation,from);
56695 StringElement(to);
56696 find mayInRelationsource_attribute_EAnnotation(problem,interpretation,from,to);
56697 neg find mustInRelationsource_attribute_EAnnotation(problem,interpretation,from,to);
56698}
56699pattern refineRelation_abstract_attribute_EClass(
56700 problem:LogicProblem, interpretation:PartialInterpretation,
56701 relationIterpretation:PartialRelationInterpretation,
56702 from: DefinedElement, to: DefinedElement)
56703{
56704 find interpretation(problem,interpretation);
56705 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
56706 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"abstract attribute EClass");
56707 find mustExist(problem, interpretation, from);
56708 find mustExist(problem, interpretation, to);
56709 find mustInstanceOfEClass_class(problem,interpretation,from);
56710 BooleanElement(to);
56711 find mayInRelationabstract_attribute_EClass(problem,interpretation,from,to);
56712 neg find mustInRelationabstract_attribute_EClass(problem,interpretation,from,to);
56713}
56714pattern refineRelation_interface_attribute_EClass(
56715 problem:LogicProblem, interpretation:PartialInterpretation,
56716 relationIterpretation:PartialRelationInterpretation,
56717 from: DefinedElement, to: DefinedElement)
56718{
56719 find interpretation(problem,interpretation);
56720 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
56721 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface attribute EClass");
56722 find mustExist(problem, interpretation, from);
56723 find mustExist(problem, interpretation, to);
56724 find mustInstanceOfEClass_class(problem,interpretation,from);
56725 BooleanElement(to);
56726 find mayInRelationinterface_attribute_EClass(problem,interpretation,from,to);
56727 neg find mustInRelationinterface_attribute_EClass(problem,interpretation,from,to);
56728}
56729pattern refineRelation_instanceClassName_attribute_EClassifier(
56730 problem:LogicProblem, interpretation:PartialInterpretation,
56731 relationIterpretation:PartialRelationInterpretation,
56732 from: DefinedElement, to: DefinedElement)
56733{
56734 find interpretation(problem,interpretation);
56735 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
56736 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"instanceClassName attribute EClassifier");
56737 find mustExist(problem, interpretation, from);
56738 find mustExist(problem, interpretation, to);
56739 find mustInstanceOfEClassifier_class(problem,interpretation,from);
56740 StringElement(to);
56741 find mayInRelationinstanceClassName_attribute_EClassifier(problem,interpretation,from,to);
56742 neg find mustInRelationinstanceClassName_attribute_EClassifier(problem,interpretation,from,to);
56743}
56744pattern refineRelation_instanceTypeName_attribute_EClassifier(
56745 problem:LogicProblem, interpretation:PartialInterpretation,
56746 relationIterpretation:PartialRelationInterpretation,
56747 from: DefinedElement, to: DefinedElement)
56748{
56749 find interpretation(problem,interpretation);
56750 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
56751 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"instanceTypeName attribute EClassifier");
56752 find mustExist(problem, interpretation, from);
56753 find mustExist(problem, interpretation, to);
56754 find mustInstanceOfEClassifier_class(problem,interpretation,from);
56755 StringElement(to);
56756 find mayInRelationinstanceTypeName_attribute_EClassifier(problem,interpretation,from,to);
56757 neg find mustInRelationinstanceTypeName_attribute_EClassifier(problem,interpretation,from,to);
56758}
56759pattern refineRelation_serializable_attribute_EDataType(
56760 problem:LogicProblem, interpretation:PartialInterpretation,
56761 relationIterpretation:PartialRelationInterpretation,
56762 from: DefinedElement, to: DefinedElement)
56763{
56764 find interpretation(problem,interpretation);
56765 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
56766 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"serializable attribute EDataType");
56767 find mustExist(problem, interpretation, from);
56768 find mustExist(problem, interpretation, to);
56769 find mustInstanceOfEDataType_class(problem,interpretation,from);
56770 BooleanElement(to);
56771 find mayInRelationserializable_attribute_EDataType(problem,interpretation,from,to);
56772 neg find mustInRelationserializable_attribute_EDataType(problem,interpretation,from,to);
56773}
56774pattern refineRelation_value_attribute_EEnumLiteral(
56775 problem:LogicProblem, interpretation:PartialInterpretation,
56776 relationIterpretation:PartialRelationInterpretation,
56777 from: DefinedElement, to: DefinedElement)
56778{
56779 find interpretation(problem,interpretation);
56780 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
56781 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"value attribute EEnumLiteral");
56782 find mustExist(problem, interpretation, from);
56783 find mustExist(problem, interpretation, to);
56784 find mustInstanceOfEEnumLiteral_class(problem,interpretation,from);
56785 IntegerElement(to);
56786 find mayInRelationvalue_attribute_EEnumLiteral(problem,interpretation,from,to);
56787 neg find mustInRelationvalue_attribute_EEnumLiteral(problem,interpretation,from,to);
56788}
56789pattern refineRelation_literal_attribute_EEnumLiteral(
56790 problem:LogicProblem, interpretation:PartialInterpretation,
56791 relationIterpretation:PartialRelationInterpretation,
56792 from: DefinedElement, to: DefinedElement)
56793{
56794 find interpretation(problem,interpretation);
56795 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
56796 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"literal attribute EEnumLiteral");
56797 find mustExist(problem, interpretation, from);
56798 find mustExist(problem, interpretation, to);
56799 find mustInstanceOfEEnumLiteral_class(problem,interpretation,from);
56800 StringElement(to);
56801 find mayInRelationliteral_attribute_EEnumLiteral(problem,interpretation,from,to);
56802 neg find mustInRelationliteral_attribute_EEnumLiteral(problem,interpretation,from,to);
56803}
56804pattern refineRelation_name_attribute_ENamedElement(
56805 problem:LogicProblem, interpretation:PartialInterpretation,
56806 relationIterpretation:PartialRelationInterpretation,
56807 from: DefinedElement, to: DefinedElement)
56808{
56809 find interpretation(problem,interpretation);
56810 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
56811 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"name attribute ENamedElement");
56812 find mustExist(problem, interpretation, from);
56813 find mustExist(problem, interpretation, to);
56814 find mustInstanceOfENamedElement_class(problem,interpretation,from);
56815 StringElement(to);
56816 find mayInRelationname_attribute_ENamedElement(problem,interpretation,from,to);
56817 neg find mustInRelationname_attribute_ENamedElement(problem,interpretation,from,to);
56818}
56819pattern refineRelation_nsURI_attribute_EPackage(
56820 problem:LogicProblem, interpretation:PartialInterpretation,
56821 relationIterpretation:PartialRelationInterpretation,
56822 from: DefinedElement, to: DefinedElement)
56823{
56824 find interpretation(problem,interpretation);
56825 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
56826 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"nsURI attribute EPackage");
56827 find mustExist(problem, interpretation, from);
56828 find mustExist(problem, interpretation, to);
56829 find mustInstanceOfEPackage_class(problem,interpretation,from);
56830 StringElement(to);
56831 find mayInRelationnsURI_attribute_EPackage(problem,interpretation,from,to);
56832 neg find mustInRelationnsURI_attribute_EPackage(problem,interpretation,from,to);
56833}
56834pattern refineRelation_nsPrefix_attribute_EPackage(
56835 problem:LogicProblem, interpretation:PartialInterpretation,
56836 relationIterpretation:PartialRelationInterpretation,
56837 from: DefinedElement, to: DefinedElement)
56838{
56839 find interpretation(problem,interpretation);
56840 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
56841 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"nsPrefix attribute EPackage");
56842 find mustExist(problem, interpretation, from);
56843 find mustExist(problem, interpretation, to);
56844 find mustInstanceOfEPackage_class(problem,interpretation,from);
56845 StringElement(to);
56846 find mayInRelationnsPrefix_attribute_EPackage(problem,interpretation,from,to);
56847 neg find mustInRelationnsPrefix_attribute_EPackage(problem,interpretation,from,to);
56848}
56849pattern refineRelation_containment_attribute_EReference(
56850 problem:LogicProblem, interpretation:PartialInterpretation,
56851 relationIterpretation:PartialRelationInterpretation,
56852 from: DefinedElement, to: DefinedElement)
56853{
56854 find interpretation(problem,interpretation);
56855 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
56856 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"containment attribute EReference");
56857 find mustExist(problem, interpretation, from);
56858 find mustExist(problem, interpretation, to);
56859 find mustInstanceOfEReference_class(problem,interpretation,from);
56860 BooleanElement(to);
56861 find mayInRelationcontainment_attribute_EReference(problem,interpretation,from,to);
56862 neg find mustInRelationcontainment_attribute_EReference(problem,interpretation,from,to);
56863}
56864pattern refineRelation_container_attribute_EReference(
56865 problem:LogicProblem, interpretation:PartialInterpretation,
56866 relationIterpretation:PartialRelationInterpretation,
56867 from: DefinedElement, to: DefinedElement)
56868{
56869 find interpretation(problem,interpretation);
56870 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
56871 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"container attribute EReference");
56872 find mustExist(problem, interpretation, from);
56873 find mustExist(problem, interpretation, to);
56874 find mustInstanceOfEReference_class(problem,interpretation,from);
56875 BooleanElement(to);
56876 find mayInRelationcontainer_attribute_EReference(problem,interpretation,from,to);
56877 neg find mustInRelationcontainer_attribute_EReference(problem,interpretation,from,to);
56878}
56879pattern refineRelation_resolveProxies_attribute_EReference(
56880 problem:LogicProblem, interpretation:PartialInterpretation,
56881 relationIterpretation:PartialRelationInterpretation,
56882 from: DefinedElement, to: DefinedElement)
56883{
56884 find interpretation(problem,interpretation);
56885 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
56886 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"resolveProxies attribute EReference");
56887 find mustExist(problem, interpretation, from);
56888 find mustExist(problem, interpretation, to);
56889 find mustInstanceOfEReference_class(problem,interpretation,from);
56890 BooleanElement(to);
56891 find mayInRelationresolveProxies_attribute_EReference(problem,interpretation,from,to);
56892 neg find mustInRelationresolveProxies_attribute_EReference(problem,interpretation,from,to);
56893}
56894pattern refineRelation_changeable_attribute_EStructuralFeature(
56895 problem:LogicProblem, interpretation:PartialInterpretation,
56896 relationIterpretation:PartialRelationInterpretation,
56897 from: DefinedElement, to: DefinedElement)
56898{
56899 find interpretation(problem,interpretation);
56900 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
56901 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"changeable attribute EStructuralFeature");
56902 find mustExist(problem, interpretation, from);
56903 find mustExist(problem, interpretation, to);
56904 find mustInstanceOfEStructuralFeature_class(problem,interpretation,from);
56905 BooleanElement(to);
56906 find mayInRelationchangeable_attribute_EStructuralFeature(problem,interpretation,from,to);
56907 neg find mustInRelationchangeable_attribute_EStructuralFeature(problem,interpretation,from,to);
56908}
56909pattern refineRelation_volatile_attribute_EStructuralFeature(
56910 problem:LogicProblem, interpretation:PartialInterpretation,
56911 relationIterpretation:PartialRelationInterpretation,
56912 from: DefinedElement, to: DefinedElement)
56913{
56914 find interpretation(problem,interpretation);
56915 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
56916 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"volatile attribute EStructuralFeature");
56917 find mustExist(problem, interpretation, from);
56918 find mustExist(problem, interpretation, to);
56919 find mustInstanceOfEStructuralFeature_class(problem,interpretation,from);
56920 BooleanElement(to);
56921 find mayInRelationvolatile_attribute_EStructuralFeature(problem,interpretation,from,to);
56922 neg find mustInRelationvolatile_attribute_EStructuralFeature(problem,interpretation,from,to);
56923}
56924pattern refineRelation_transient_attribute_EStructuralFeature(
56925 problem:LogicProblem, interpretation:PartialInterpretation,
56926 relationIterpretation:PartialRelationInterpretation,
56927 from: DefinedElement, to: DefinedElement)
56928{
56929 find interpretation(problem,interpretation);
56930 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
56931 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"transient attribute EStructuralFeature");
56932 find mustExist(problem, interpretation, from);
56933 find mustExist(problem, interpretation, to);
56934 find mustInstanceOfEStructuralFeature_class(problem,interpretation,from);
56935 BooleanElement(to);
56936 find mayInRelationtransient_attribute_EStructuralFeature(problem,interpretation,from,to);
56937 neg find mustInRelationtransient_attribute_EStructuralFeature(problem,interpretation,from,to);
56938}
56939pattern refineRelation_defaultValueLiteral_attribute_EStructuralFeature(
56940 problem:LogicProblem, interpretation:PartialInterpretation,
56941 relationIterpretation:PartialRelationInterpretation,
56942 from: DefinedElement, to: DefinedElement)
56943{
56944 find interpretation(problem,interpretation);
56945 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
56946 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"defaultValueLiteral attribute EStructuralFeature");
56947 find mustExist(problem, interpretation, from);
56948 find mustExist(problem, interpretation, to);
56949 find mustInstanceOfEStructuralFeature_class(problem,interpretation,from);
56950 StringElement(to);
56951 find mayInRelationdefaultValueLiteral_attribute_EStructuralFeature(problem,interpretation,from,to);
56952 neg find mustInRelationdefaultValueLiteral_attribute_EStructuralFeature(problem,interpretation,from,to);
56953}
56954pattern refineRelation_unsettable_attribute_EStructuralFeature(
56955 problem:LogicProblem, interpretation:PartialInterpretation,
56956 relationIterpretation:PartialRelationInterpretation,
56957 from: DefinedElement, to: DefinedElement)
56958{
56959 find interpretation(problem,interpretation);
56960 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
56961 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"unsettable attribute EStructuralFeature");
56962 find mustExist(problem, interpretation, from);
56963 find mustExist(problem, interpretation, to);
56964 find mustInstanceOfEStructuralFeature_class(problem,interpretation,from);
56965 BooleanElement(to);
56966 find mayInRelationunsettable_attribute_EStructuralFeature(problem,interpretation,from,to);
56967 neg find mustInRelationunsettable_attribute_EStructuralFeature(problem,interpretation,from,to);
56968}
56969pattern refineRelation_derived_attribute_EStructuralFeature(
56970 problem:LogicProblem, interpretation:PartialInterpretation,
56971 relationIterpretation:PartialRelationInterpretation,
56972 from: DefinedElement, to: DefinedElement)
56973{
56974 find interpretation(problem,interpretation);
56975 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
56976 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"derived attribute EStructuralFeature");
56977 find mustExist(problem, interpretation, from);
56978 find mustExist(problem, interpretation, to);
56979 find mustInstanceOfEStructuralFeature_class(problem,interpretation,from);
56980 BooleanElement(to);
56981 find mayInRelationderived_attribute_EStructuralFeature(problem,interpretation,from,to);
56982 neg find mustInRelationderived_attribute_EStructuralFeature(problem,interpretation,from,to);
56983}
56984pattern refineRelation_ordered_attribute_ETypedElement(
56985 problem:LogicProblem, interpretation:PartialInterpretation,
56986 relationIterpretation:PartialRelationInterpretation,
56987 from: DefinedElement, to: DefinedElement)
56988{
56989 find interpretation(problem,interpretation);
56990 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
56991 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"ordered attribute ETypedElement");
56992 find mustExist(problem, interpretation, from);
56993 find mustExist(problem, interpretation, to);
56994 find mustInstanceOfETypedElement_class(problem,interpretation,from);
56995 BooleanElement(to);
56996 find mayInRelationordered_attribute_ETypedElement(problem,interpretation,from,to);
56997 neg find mustInRelationordered_attribute_ETypedElement(problem,interpretation,from,to);
56998}
56999pattern refineRelation_unique_attribute_ETypedElement(
57000 problem:LogicProblem, interpretation:PartialInterpretation,
57001 relationIterpretation:PartialRelationInterpretation,
57002 from: DefinedElement, to: DefinedElement)
57003{
57004 find interpretation(problem,interpretation);
57005 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
57006 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"unique attribute ETypedElement");
57007 find mustExist(problem, interpretation, from);
57008 find mustExist(problem, interpretation, to);
57009 find mustInstanceOfETypedElement_class(problem,interpretation,from);
57010 BooleanElement(to);
57011 find mayInRelationunique_attribute_ETypedElement(problem,interpretation,from,to);
57012 neg find mustInRelationunique_attribute_ETypedElement(problem,interpretation,from,to);
57013}
57014pattern refineRelation_lowerBound_attribute_ETypedElement(
57015 problem:LogicProblem, interpretation:PartialInterpretation,
57016 relationIterpretation:PartialRelationInterpretation,
57017 from: DefinedElement, to: DefinedElement)
57018{
57019 find interpretation(problem,interpretation);
57020 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
57021 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"lowerBound attribute ETypedElement");
57022 find mustExist(problem, interpretation, from);
57023 find mustExist(problem, interpretation, to);
57024 find mustInstanceOfETypedElement_class(problem,interpretation,from);
57025 IntegerElement(to);
57026 find mayInRelationlowerBound_attribute_ETypedElement(problem,interpretation,from,to);
57027 neg find mustInRelationlowerBound_attribute_ETypedElement(problem,interpretation,from,to);
57028}
57029pattern refineRelation_upperBound_attribute_ETypedElement(
57030 problem:LogicProblem, interpretation:PartialInterpretation,
57031 relationIterpretation:PartialRelationInterpretation,
57032 from: DefinedElement, to: DefinedElement)
57033{
57034 find interpretation(problem,interpretation);
57035 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
57036 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"upperBound attribute ETypedElement");
57037 find mustExist(problem, interpretation, from);
57038 find mustExist(problem, interpretation, to);
57039 find mustInstanceOfETypedElement_class(problem,interpretation,from);
57040 IntegerElement(to);
57041 find mayInRelationupperBound_attribute_ETypedElement(problem,interpretation,from,to);
57042 neg find mustInRelationupperBound_attribute_ETypedElement(problem,interpretation,from,to);
57043}
57044pattern refineRelation_many_attribute_ETypedElement(
57045 problem:LogicProblem, interpretation:PartialInterpretation,
57046 relationIterpretation:PartialRelationInterpretation,
57047 from: DefinedElement, to: DefinedElement)
57048{
57049 find interpretation(problem,interpretation);
57050 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
57051 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"many attribute ETypedElement");
57052 find mustExist(problem, interpretation, from);
57053 find mustExist(problem, interpretation, to);
57054 find mustInstanceOfETypedElement_class(problem,interpretation,from);
57055 BooleanElement(to);
57056 find mayInRelationmany_attribute_ETypedElement(problem,interpretation,from,to);
57057 neg find mustInRelationmany_attribute_ETypedElement(problem,interpretation,from,to);
57058}
57059pattern refineRelation_required_attribute_ETypedElement(
57060 problem:LogicProblem, interpretation:PartialInterpretation,
57061 relationIterpretation:PartialRelationInterpretation,
57062 from: DefinedElement, to: DefinedElement)
57063{
57064 find interpretation(problem,interpretation);
57065 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
57066 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"required attribute ETypedElement");
57067 find mustExist(problem, interpretation, from);
57068 find mustExist(problem, interpretation, to);
57069 find mustInstanceOfETypedElement_class(problem,interpretation,from);
57070 BooleanElement(to);
57071 find mayInRelationrequired_attribute_ETypedElement(problem,interpretation,from,to);
57072 neg find mustInRelationrequired_attribute_ETypedElement(problem,interpretation,from,to);
57073}
57074pattern refineRelation_key_attribute_EStringToStringMapEntry(
57075 problem:LogicProblem, interpretation:PartialInterpretation,
57076 relationIterpretation:PartialRelationInterpretation,
57077 from: DefinedElement, to: DefinedElement)
57078{
57079 find interpretation(problem,interpretation);
57080 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
57081 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"key attribute EStringToStringMapEntry");
57082 find mustExist(problem, interpretation, from);
57083 find mustExist(problem, interpretation, to);
57084 find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,from);
57085 StringElement(to);
57086 find mayInRelationkey_attribute_EStringToStringMapEntry(problem,interpretation,from,to);
57087 neg find mustInRelationkey_attribute_EStringToStringMapEntry(problem,interpretation,from,to);
57088}
57089pattern refineRelation_value_attribute_EStringToStringMapEntry(
57090 problem:LogicProblem, interpretation:PartialInterpretation,
57091 relationIterpretation:PartialRelationInterpretation,
57092 from: DefinedElement, to: DefinedElement)
57093{
57094 find interpretation(problem,interpretation);
57095 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
57096 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"value attribute EStringToStringMapEntry");
57097 find mustExist(problem, interpretation, from);
57098 find mustExist(problem, interpretation, to);
57099 find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,from);
57100 StringElement(to);
57101 find mayInRelationvalue_attribute_EStringToStringMapEntry(problem,interpretation,from,to);
57102 neg find mustInRelationvalue_attribute_EStringToStringMapEntry(problem,interpretation,from,to);
57103}
57104import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage"
57105import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem"
57106import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language"
57107
57108//////////
57109// 0. Util
57110//////////
57111private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) {
57112 PartialInterpretation.problem(interpretation,problem);
57113}
57114
57115/////////////////////////
57116// 0.1 Existence
57117/////////////////////////
57118private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
57119 find interpretation(problem,interpretation);
57120 LogicProblem.elements(problem,element);
57121} or {
57122 find interpretation(problem,interpretation);
57123 PartialInterpretation.newElements(interpretation,element);
57124}
57125
57126private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
57127 find mustExist(problem,interpretation,element);
57128} or {
57129 find interpretation(problem,interpretation);
57130 neg find elementCloseWorld(element);
57131 PartialInterpretation.openWorldElements(interpretation,element);
57132}
57133
57134private pattern elementCloseWorld(element:DefinedElement) {
57135 PartialInterpretation.openWorldElements(i,element);
57136 PartialInterpretation.maxNewElements(i,0);
57137} or {
57138 Scope.targetTypeInterpretation(scope,interpretation);
57139 PartialTypeInterpratation.elements(interpretation,element);
57140 Scope.maxNewElements(scope,0);
57141}
57142
57143////////////////////////
57144// 0.2 Equivalence
57145////////////////////////
57146pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) {
57147 find mayExist(problem,interpretation,a);
57148 find mayExist(problem,interpretation,b);
57149 a == b;
57150}
57151
57152////////////////////////
57153// 0.3 Required Patterns by TypeIndexer
57154////////////////////////
57155private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) {
57156 find interpretation(problem,interpretation);
57157 LogicProblem.types(problem,type);
57158 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
57159 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
57160}
57161
57162private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) {
57163 find interpretation(problem,interpretation);
57164 LogicProblem.types(problem,type);
57165 TypeDefinition.elements(type,element);
57166} or {
57167 find interpretation(problem,interpretation);
57168 find typeInterpretation(problem,interpretation,type,typeInterpretation);
57169 PartialComplexTypeInterpretation.elements(typeInterpretation,element);
57170}
57171
57172private pattern isPrimitive(element: PrimitiveElement) {
57173 PrimitiveElement(element);
57174}
57175
57176//////////
57177// 1. Problem-Specific Base Indexers
57178//////////
57179// 1.1 Type Indexers
57180//////////
57181// 1.1.1 primitive Type Indexers
57182//////////
57183
57184//////////
57185// 1.1.2 domain-specific Type Indexers
57186//////////
57187/**
57188 * An element must be an instance of type "FunctionalElement class".
57189 */
57190private pattern mustInstanceOfFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
57191 Type.name(type,"FunctionalElement class");
57192 find directInstanceOf(problem,interpretation,element,type);
57193}
57194private pattern scopeDisallowsNewFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation) {
57195 find interpretation(problem,interpretation);
57196 PartialInterpretation.scopes(interpretation,scope);
57197 Scope.targetTypeInterpretation(scope,typeInterpretation);
57198 Scope.maxNewElements(scope,0);
57199 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
57200 Type.name(type,"FunctionalElement class");
57201}
57202
57203/**
57204 * An element may be an instance of type "FunctionalElement class".
57205 */
57206private pattern mayInstanceOfFunctionalElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
57207{
57208 find interpretation(problem,interpretation);
57209 PartialInterpretation.newElements(interpretation,element);
57210 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
57211 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
57212 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
57213 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
57214 neg find mustInstanceOfFunction_class(problem,interpretation,element);
57215 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
57216 neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation);
57217 neg find isPrimitive(element);
57218} or {
57219 find interpretation(problem,interpretation);
57220 PartialInterpretation.openWorldElements(interpretation,element);
57221 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
57222 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
57223 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
57224 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
57225 neg find mustInstanceOfFunction_class(problem,interpretation,element);
57226 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
57227 neg find scopeDisallowsNewFunctionalElement_class(problem, interpretation);
57228 neg find isPrimitive(element);
57229} or
57230{ find mustInstanceOfFunctionalElement_class(problem,interpretation,element); }
57231/**
57232 * An element must be an instance of type "FunctionalArchitectureModel class".
57233 */
57234private pattern mustInstanceOfFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
57235 Type.name(type,"FunctionalArchitectureModel class");
57236 find directInstanceOf(problem,interpretation,element,type);
57237}
57238private pattern scopeDisallowsNewFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation) {
57239 find interpretation(problem,interpretation);
57240 PartialInterpretation.scopes(interpretation,scope);
57241 Scope.targetTypeInterpretation(scope,typeInterpretation);
57242 Scope.maxNewElements(scope,0);
57243 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
57244 Type.name(type,"FunctionalArchitectureModel class");
57245}
57246
57247/**
57248 * An element may be an instance of type "FunctionalArchitectureModel class".
57249 */
57250private pattern mayInstanceOfFunctionalArchitectureModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
57251{
57252 find interpretation(problem,interpretation);
57253 PartialInterpretation.newElements(interpretation,element);
57254 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
57255 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
57256 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
57257 neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element);
57258 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
57259 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
57260 neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation);
57261 neg find isPrimitive(element);
57262} or {
57263 find interpretation(problem,interpretation);
57264 PartialInterpretation.openWorldElements(interpretation,element);
57265 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
57266 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
57267 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
57268 neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element);
57269 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
57270 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
57271 neg find scopeDisallowsNewFunctionalArchitectureModel_class(problem, interpretation);
57272 neg find isPrimitive(element);
57273} or
57274{ find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element); }
57275/**
57276 * An element must be an instance of type "Function class".
57277 */
57278private pattern mustInstanceOfFunction_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
57279 Type.name(type,"Function class");
57280 find directInstanceOf(problem,interpretation,element,type);
57281}
57282private pattern scopeDisallowsNewFunction_class(problem:LogicProblem, interpretation:PartialInterpretation) {
57283 find interpretation(problem,interpretation);
57284 PartialInterpretation.scopes(interpretation,scope);
57285 Scope.targetTypeInterpretation(scope,typeInterpretation);
57286 Scope.maxNewElements(scope,0);
57287 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
57288 Type.name(type,"Function class");
57289}
57290
57291/**
57292 * An element may be an instance of type "Function class".
57293 */
57294private pattern mayInstanceOfFunction_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
57295{
57296 find interpretation(problem,interpretation);
57297 PartialInterpretation.newElements(interpretation,element);
57298 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
57299 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
57300 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
57301 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
57302 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
57303 neg find scopeDisallowsNewFunction_class(problem, interpretation);
57304 neg find isPrimitive(element);
57305} or {
57306 find interpretation(problem,interpretation);
57307 PartialInterpretation.openWorldElements(interpretation,element);
57308 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
57309 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
57310 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
57311 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
57312 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
57313 neg find scopeDisallowsNewFunction_class(problem, interpretation);
57314 neg find isPrimitive(element);
57315} or
57316{ find mustInstanceOfFunction_class(problem,interpretation,element); }
57317/**
57318 * An element must be an instance of type "FAMTerminator class".
57319 */
57320private pattern mustInstanceOfFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
57321 Type.name(type,"FAMTerminator class");
57322 find directInstanceOf(problem,interpretation,element,type);
57323}
57324private pattern scopeDisallowsNewFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation) {
57325 find interpretation(problem,interpretation);
57326 PartialInterpretation.scopes(interpretation,scope);
57327 Scope.targetTypeInterpretation(scope,typeInterpretation);
57328 Scope.maxNewElements(scope,0);
57329 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
57330 Type.name(type,"FAMTerminator class");
57331}
57332
57333/**
57334 * An element may be an instance of type "FAMTerminator class".
57335 */
57336private pattern mayInstanceOfFAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
57337{
57338 find interpretation(problem,interpretation);
57339 PartialInterpretation.newElements(interpretation,element);
57340 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
57341 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
57342 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
57343 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
57344 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
57345 neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation);
57346 neg find isPrimitive(element);
57347} or {
57348 find interpretation(problem,interpretation);
57349 PartialInterpretation.openWorldElements(interpretation,element);
57350 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
57351 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
57352 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
57353 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
57354 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
57355 neg find scopeDisallowsNewFAMTerminator_class(problem, interpretation);
57356 neg find isPrimitive(element);
57357} or
57358{ find mustInstanceOfFAMTerminator_class(problem,interpretation,element); }
57359/**
57360 * An element must be an instance of type "InformationLink class".
57361 */
57362private pattern mustInstanceOfInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
57363 Type.name(type,"InformationLink class");
57364 find directInstanceOf(problem,interpretation,element,type);
57365}
57366private pattern scopeDisallowsNewInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation) {
57367 find interpretation(problem,interpretation);
57368 PartialInterpretation.scopes(interpretation,scope);
57369 Scope.targetTypeInterpretation(scope,typeInterpretation);
57370 Scope.maxNewElements(scope,0);
57371 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
57372 Type.name(type,"InformationLink class");
57373}
57374
57375/**
57376 * An element may be an instance of type "InformationLink class".
57377 */
57378private pattern mayInstanceOfInformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
57379{
57380 find interpretation(problem,interpretation);
57381 PartialInterpretation.newElements(interpretation,element);
57382 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
57383 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
57384 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
57385 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
57386 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
57387 neg find scopeDisallowsNewInformationLink_class(problem, interpretation);
57388 neg find isPrimitive(element);
57389} or {
57390 find interpretation(problem,interpretation);
57391 PartialInterpretation.openWorldElements(interpretation,element);
57392 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
57393 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
57394 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
57395 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
57396 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
57397 neg find scopeDisallowsNewInformationLink_class(problem, interpretation);
57398 neg find isPrimitive(element);
57399} or
57400{ find mustInstanceOfInformationLink_class(problem,interpretation,element); }
57401/**
57402 * An element must be an instance of type "FunctionalInterface class".
57403 */
57404private pattern mustInstanceOfFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
57405 Type.name(type,"FunctionalInterface class");
57406 find directInstanceOf(problem,interpretation,element,type);
57407}
57408private pattern scopeDisallowsNewFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation) {
57409 find interpretation(problem,interpretation);
57410 PartialInterpretation.scopes(interpretation,scope);
57411 Scope.targetTypeInterpretation(scope,typeInterpretation);
57412 Scope.maxNewElements(scope,0);
57413 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
57414 Type.name(type,"FunctionalInterface class");
57415}
57416
57417/**
57418 * An element may be an instance of type "FunctionalInterface class".
57419 */
57420private pattern mayInstanceOfFunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
57421{
57422 find interpretation(problem,interpretation);
57423 PartialInterpretation.newElements(interpretation,element);
57424 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
57425 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
57426 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
57427 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
57428 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
57429 neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation);
57430 neg find isPrimitive(element);
57431} or {
57432 find interpretation(problem,interpretation);
57433 PartialInterpretation.openWorldElements(interpretation,element);
57434 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
57435 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
57436 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
57437 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
57438 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
57439 neg find scopeDisallowsNewFunctionalInterface_class(problem, interpretation);
57440 neg find isPrimitive(element);
57441} or
57442{ find mustInstanceOfFunctionalInterface_class(problem,interpretation,element); }
57443/**
57444 * An element must be an instance of type "FunctionalInput class".
57445 */
57446private pattern mustInstanceOfFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
57447 Type.name(type,"FunctionalInput class");
57448 find directInstanceOf(problem,interpretation,element,type);
57449}
57450private pattern scopeDisallowsNewFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation) {
57451 find interpretation(problem,interpretation);
57452 PartialInterpretation.scopes(interpretation,scope);
57453 Scope.targetTypeInterpretation(scope,typeInterpretation);
57454 Scope.maxNewElements(scope,0);
57455 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
57456 Type.name(type,"FunctionalInput class");
57457}
57458
57459/**
57460 * An element may be an instance of type "FunctionalInput class".
57461 */
57462private pattern mayInstanceOfFunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
57463{
57464 find interpretation(problem,interpretation);
57465 PartialInterpretation.newElements(interpretation,element);
57466 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
57467 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
57468 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
57469 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
57470 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
57471 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
57472 neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation);
57473 neg find isPrimitive(element);
57474} or {
57475 find interpretation(problem,interpretation);
57476 PartialInterpretation.openWorldElements(interpretation,element);
57477 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
57478 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
57479 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
57480 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
57481 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
57482 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
57483 neg find scopeDisallowsNewFunctionalInput_class(problem, interpretation);
57484 neg find isPrimitive(element);
57485} or
57486{ find mustInstanceOfFunctionalInput_class(problem,interpretation,element); }
57487/**
57488 * An element must be an instance of type "FunctionalOutput class".
57489 */
57490private pattern mustInstanceOfFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
57491 Type.name(type,"FunctionalOutput class");
57492 find directInstanceOf(problem,interpretation,element,type);
57493}
57494private pattern scopeDisallowsNewFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation) {
57495 find interpretation(problem,interpretation);
57496 PartialInterpretation.scopes(interpretation,scope);
57497 Scope.targetTypeInterpretation(scope,typeInterpretation);
57498 Scope.maxNewElements(scope,0);
57499 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
57500 Type.name(type,"FunctionalOutput class");
57501}
57502
57503/**
57504 * An element may be an instance of type "FunctionalOutput class".
57505 */
57506private pattern mayInstanceOfFunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
57507{
57508 find interpretation(problem,interpretation);
57509 PartialInterpretation.newElements(interpretation,element);
57510 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
57511 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
57512 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
57513 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
57514 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
57515 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
57516 neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation);
57517 neg find isPrimitive(element);
57518} or {
57519 find interpretation(problem,interpretation);
57520 PartialInterpretation.openWorldElements(interpretation,element);
57521 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
57522 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
57523 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
57524 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
57525 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
57526 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
57527 neg find scopeDisallowsNewFunctionalOutput_class(problem, interpretation);
57528 neg find isPrimitive(element);
57529} or
57530{ find mustInstanceOfFunctionalOutput_class(problem,interpretation,element); }
57531/**
57532 * An element must be an instance of type "FunctionalData class".
57533 */
57534private pattern mustInstanceOfFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
57535 Type.name(type,"FunctionalData class");
57536 find directInstanceOf(problem,interpretation,element,type);
57537}
57538private pattern scopeDisallowsNewFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation) {
57539 find interpretation(problem,interpretation);
57540 PartialInterpretation.scopes(interpretation,scope);
57541 Scope.targetTypeInterpretation(scope,typeInterpretation);
57542 Scope.maxNewElements(scope,0);
57543 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
57544 Type.name(type,"FunctionalData class");
57545}
57546
57547/**
57548 * An element may be an instance of type "FunctionalData class".
57549 */
57550private pattern mayInstanceOfFunctionalData_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
57551{
57552 find interpretation(problem,interpretation);
57553 PartialInterpretation.newElements(interpretation,element);
57554 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
57555 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
57556 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
57557 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
57558 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
57559 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
57560 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
57561 neg find scopeDisallowsNewFunctionalData_class(problem, interpretation);
57562 neg find isPrimitive(element);
57563} or {
57564 find interpretation(problem,interpretation);
57565 PartialInterpretation.openWorldElements(interpretation,element);
57566 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
57567 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
57568 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
57569 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
57570 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
57571 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
57572 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
57573 neg find scopeDisallowsNewFunctionalData_class(problem, interpretation);
57574 neg find isPrimitive(element);
57575} or
57576{ find mustInstanceOfFunctionalData_class(problem,interpretation,element); }
57577/**
57578 * An element must be an instance of type "FunctionType enum".
57579 */
57580private pattern mustInstanceOfFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
57581 Type.name(type,"FunctionType enum");
57582 find directInstanceOf(problem,interpretation,element,type);
57583}
57584private pattern scopeDisallowsNewFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation) {
57585 find interpretation(problem,interpretation);
57586 PartialInterpretation.scopes(interpretation,scope);
57587 Scope.targetTypeInterpretation(scope,typeInterpretation);
57588 Scope.maxNewElements(scope,0);
57589 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
57590 Type.name(type,"FunctionType enum");
57591}
57592
57593/**
57594 * An element may be an instance of type "FunctionType enum".
57595 */
57596private pattern mayInstanceOfFunctionType_enum(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
57597{ find mustInstanceOfFunctionType_enum(problem,interpretation,element); }
57598/**
57599 * An element must be an instance of type "FunctionalArchitectureModel class DefinedPart".
57600 */
57601private pattern mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
57602 Type.name(type,"FunctionalArchitectureModel class DefinedPart");
57603 find directInstanceOf(problem,interpretation,element,type);
57604}
57605private pattern scopeDisallowsNewFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
57606 find interpretation(problem,interpretation);
57607 PartialInterpretation.scopes(interpretation,scope);
57608 Scope.targetTypeInterpretation(scope,typeInterpretation);
57609 Scope.maxNewElements(scope,0);
57610 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
57611 Type.name(type,"FunctionalArchitectureModel class DefinedPart");
57612}
57613
57614/**
57615 * An element may be an instance of type "FunctionalArchitectureModel class DefinedPart".
57616 */
57617private pattern mayInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
57618{ find mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem,interpretation,element); }
57619/**
57620 * An element must be an instance of type "FunctionalArchitectureModel class UndefinedPart".
57621 */
57622private pattern mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
57623 Type.name(type,"FunctionalArchitectureModel class UndefinedPart");
57624 find directInstanceOf(problem,interpretation,element,type);
57625}
57626private pattern scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
57627 find interpretation(problem,interpretation);
57628 PartialInterpretation.scopes(interpretation,scope);
57629 Scope.targetTypeInterpretation(scope,typeInterpretation);
57630 Scope.maxNewElements(scope,0);
57631 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
57632 Type.name(type,"FunctionalArchitectureModel class UndefinedPart");
57633}
57634
57635/**
57636 * An element may be an instance of type "FunctionalArchitectureModel class UndefinedPart".
57637 */
57638private pattern mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
57639{
57640 find interpretation(problem,interpretation);
57641 PartialInterpretation.newElements(interpretation,element);
57642 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
57643 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
57644 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
57645 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
57646 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
57647 neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation);
57648 neg find isPrimitive(element);
57649} or {
57650 find interpretation(problem,interpretation);
57651 PartialInterpretation.openWorldElements(interpretation,element);
57652 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
57653 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
57654 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
57655 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
57656 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
57657 neg find scopeDisallowsNewFunctionalArchitectureModel_class_UndefinedPart(problem, interpretation);
57658 neg find isPrimitive(element);
57659} or
57660{ find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element); }
57661
57662//////////
57663// 1.2 Relation Declaration Indexers
57664//////////
57665/**
57666 * Matcher for detecting tuples t where []interface reference FunctionalElement(source,target)
57667 */
57668private pattern mustInRelationinterface_reference_FunctionalElement(
57669 problem:LogicProblem, interpretation:PartialInterpretation,
57670 source: DefinedElement, target:DefinedElement)
57671{
57672 find interpretation(problem,interpretation);
57673 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
57674 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface reference FunctionalElement");
57675 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
57676 BinaryElementRelationLink.param1(link,source);
57677 BinaryElementRelationLink.param2(link,target);
57678}
57679/**
57680 * Matcher for detecting tuples t where <>interface reference FunctionalElement(source,target)
57681 */
57682private pattern mayInRelationinterface_reference_FunctionalElement(
57683 problem:LogicProblem, interpretation:PartialInterpretation,
57684 source: DefinedElement, target:DefinedElement)
57685{
57686 find interpretation(problem,interpretation);
57687 // The two endpoint of the link have to exist
57688 find mayExist(problem, interpretation, source);
57689 find mayExist(problem, interpretation, target);
57690 // Type consistency
57691 find mayInstanceOfFunctionalElement_class(problem,interpretation,source);
57692 find mayInstanceOfFunctionalInterface_class(problem,interpretation,target);
57693 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
57694 // the upper bound of the multiplicity should be considered.
57695 numberOfExistingReferences == count find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,_);
57696 check(numberOfExistingReferences < 1);
57697 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
57698 // the upper bound of the opposite reference multiplicity should be considered.
57699 numberOfExistingOppositeReferences == count find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,target,_);
57700 check(numberOfExistingOppositeReferences < 1);
57701 // The reference is containment, then a new reference cannot be create if:
57702 // 1. Multiple parents
57703 neg find mustContains4(problem,interpretation,_,target);
57704 // 2. Circle in the containment hierarchy
57705 neg find mustTransitiveContains(source,target);
57706} or {
57707 find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,target);
57708}
57709/**
57710 * Matcher for detecting tuples t where []model reference FunctionalElement(source,target)
57711 */
57712private pattern mustInRelationmodel_reference_FunctionalElement(
57713 problem:LogicProblem, interpretation:PartialInterpretation,
57714 source: DefinedElement, target:DefinedElement)
57715{
57716 find interpretation(problem,interpretation);
57717 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
57718 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement");
57719 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
57720 BinaryElementRelationLink.param1(link,source);
57721 BinaryElementRelationLink.param2(link,target);
57722}
57723/**
57724 * Matcher for detecting tuples t where <>model reference FunctionalElement(source,target)
57725 */
57726private pattern mayInRelationmodel_reference_FunctionalElement(
57727 problem:LogicProblem, interpretation:PartialInterpretation,
57728 source: DefinedElement, target:DefinedElement)
57729{
57730 find interpretation(problem,interpretation);
57731 // The two endpoint of the link have to exist
57732 find mayExist(problem, interpretation, source);
57733 find mayExist(problem, interpretation, target);
57734 // Type consistency
57735 find mayInstanceOfFunctionalElement_class(problem,interpretation,source);
57736 find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,target);
57737 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
57738 // the upper bound of the multiplicity should be considered.
57739 numberOfExistingReferences == count find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,source,_);
57740 check(numberOfExistingReferences < 1);
57741} or {
57742 find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,source,target);
57743}
57744/**
57745 * Matcher for detecting tuples t where []parent reference FunctionalElement(source,target)
57746 */
57747private pattern mustInRelationparent_reference_FunctionalElement(
57748 problem:LogicProblem, interpretation:PartialInterpretation,
57749 source: DefinedElement, target:DefinedElement)
57750{
57751 find interpretation(problem,interpretation);
57752 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
57753 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"parent reference FunctionalElement");
57754 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
57755 BinaryElementRelationLink.param1(link,source);
57756 BinaryElementRelationLink.param2(link,target);
57757}
57758/**
57759 * Matcher for detecting tuples t where <>parent reference FunctionalElement(source,target)
57760 */
57761private pattern mayInRelationparent_reference_FunctionalElement(
57762 problem:LogicProblem, interpretation:PartialInterpretation,
57763 source: DefinedElement, target:DefinedElement)
57764{
57765 find interpretation(problem,interpretation);
57766 // The two endpoint of the link have to exist
57767 find mayExist(problem, interpretation, source);
57768 find mayExist(problem, interpretation, target);
57769 // Type consistency
57770 find mayInstanceOfFunctionalElement_class(problem,interpretation,source);
57771 find mayInstanceOfFunction_class(problem,interpretation,target);
57772 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
57773 // the upper bound of the multiplicity should be considered.
57774 numberOfExistingReferences == count find mustInRelationparent_reference_FunctionalElement(problem,interpretation,source,_);
57775 check(numberOfExistingReferences < 1);
57776 // The eOpposite of the reference is containment, then a referene cannot be created if
57777 // 1. Multiple parents
57778 neg find mustContains4(problem,interpretation,source,_);
57779 // 2. Circle in the containment hierarchy
57780 neg find mustTransitiveContains(source,target);
57781} or {
57782 find mustInRelationparent_reference_FunctionalElement(problem,interpretation,source,target);
57783}
57784/**
57785 * Matcher for detecting tuples t where []rootElements reference FunctionalArchitectureModel(source,target)
57786 */
57787private pattern mustInRelationrootElements_reference_FunctionalArchitectureModel(
57788 problem:LogicProblem, interpretation:PartialInterpretation,
57789 source: DefinedElement, target:DefinedElement)
57790{
57791 find interpretation(problem,interpretation);
57792 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
57793 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"rootElements reference FunctionalArchitectureModel");
57794 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
57795 BinaryElementRelationLink.param1(link,source);
57796 BinaryElementRelationLink.param2(link,target);
57797}
57798/**
57799 * Matcher for detecting tuples t where <>rootElements reference FunctionalArchitectureModel(source,target)
57800 */
57801private pattern mayInRelationrootElements_reference_FunctionalArchitectureModel(
57802 problem:LogicProblem, interpretation:PartialInterpretation,
57803 source: DefinedElement, target:DefinedElement)
57804{
57805 find interpretation(problem,interpretation);
57806 // The two endpoint of the link have to exist
57807 find mayExist(problem, interpretation, source);
57808 find mayExist(problem, interpretation, target);
57809 // Type consistency
57810 find mayInstanceOfFunctionalArchitectureModel_class(problem,interpretation,source);
57811 find mayInstanceOfFunctionalElement_class(problem,interpretation,target);
57812 // The reference is containment, then a new reference cannot be create if:
57813 // 1. Multiple parents
57814 neg find mustContains4(problem,interpretation,_,target);
57815 // 2. Circle in the containment hierarchy
57816 neg find mustTransitiveContains(source,target);
57817} or {
57818 find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,source,target);
57819}
57820/**
57821 * Matcher for detecting tuples t where []subElements reference Function(source,target)
57822 */
57823private pattern mustInRelationsubElements_reference_Function(
57824 problem:LogicProblem, interpretation:PartialInterpretation,
57825 source: DefinedElement, target:DefinedElement)
57826{
57827 find interpretation(problem,interpretation);
57828 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
57829 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"subElements reference Function");
57830 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
57831 BinaryElementRelationLink.param1(link,source);
57832 BinaryElementRelationLink.param2(link,target);
57833}
57834/**
57835 * Matcher for detecting tuples t where <>subElements reference Function(source,target)
57836 */
57837private pattern mayInRelationsubElements_reference_Function(
57838 problem:LogicProblem, interpretation:PartialInterpretation,
57839 source: DefinedElement, target:DefinedElement)
57840{
57841 find interpretation(problem,interpretation);
57842 // The two endpoint of the link have to exist
57843 find mayExist(problem, interpretation, source);
57844 find mayExist(problem, interpretation, target);
57845 // Type consistency
57846 find mayInstanceOfFunction_class(problem,interpretation,source);
57847 find mayInstanceOfFunctionalElement_class(problem,interpretation,target);
57848 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
57849 // the upper bound of the opposite reference multiplicity should be considered.
57850 numberOfExistingOppositeReferences == count find mustInRelationparent_reference_FunctionalElement(problem,interpretation,target,_);
57851 check(numberOfExistingOppositeReferences < 1);
57852 // The reference is containment, then a new reference cannot be create if:
57853 // 1. Multiple parents
57854 neg find mustContains4(problem,interpretation,_,target);
57855 // 2. Circle in the containment hierarchy
57856 neg find mustTransitiveContains(source,target);
57857} or {
57858 find mustInRelationsubElements_reference_Function(problem,interpretation,source,target);
57859}
57860/**
57861 * Matcher for detecting tuples t where []data reference FAMTerminator(source,target)
57862 */
57863private pattern mustInRelationdata_reference_FAMTerminator(
57864 problem:LogicProblem, interpretation:PartialInterpretation,
57865 source: DefinedElement, target:DefinedElement)
57866{
57867 find interpretation(problem,interpretation);
57868 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
57869 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"data reference FAMTerminator");
57870 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
57871 BinaryElementRelationLink.param1(link,source);
57872 BinaryElementRelationLink.param2(link,target);
57873}
57874/**
57875 * Matcher for detecting tuples t where <>data reference FAMTerminator(source,target)
57876 */
57877private pattern mayInRelationdata_reference_FAMTerminator(
57878 problem:LogicProblem, interpretation:PartialInterpretation,
57879 source: DefinedElement, target:DefinedElement)
57880{
57881 find interpretation(problem,interpretation);
57882 // The two endpoint of the link have to exist
57883 find mayExist(problem, interpretation, source);
57884 find mayExist(problem, interpretation, target);
57885 // Type consistency
57886 find mayInstanceOfFAMTerminator_class(problem,interpretation,source);
57887 find mayInstanceOfFunctionalData_class(problem,interpretation,target);
57888 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
57889 // the upper bound of the multiplicity should be considered.
57890 numberOfExistingReferences == count find mustInRelationdata_reference_FAMTerminator(problem,interpretation,source,_);
57891 check(numberOfExistingReferences < 1);
57892 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
57893 // the upper bound of the opposite reference multiplicity should be considered.
57894 numberOfExistingOppositeReferences == count find mustInRelationterminator_reference_FunctionalData(problem,interpretation,target,_);
57895 check(numberOfExistingOppositeReferences < 1);
57896 // The eOpposite of the reference is containment, then a referene cannot be created if
57897 // 1. Multiple parents
57898 neg find mustContains4(problem,interpretation,source,_);
57899 // 2. Circle in the containment hierarchy
57900 neg find mustTransitiveContains(source,target);
57901} or {
57902 find mustInRelationdata_reference_FAMTerminator(problem,interpretation,source,target);
57903}
57904/**
57905 * Matcher for detecting tuples t where []from reference InformationLink(source,target)
57906 */
57907private pattern mustInRelationfrom_reference_InformationLink(
57908 problem:LogicProblem, interpretation:PartialInterpretation,
57909 source: DefinedElement, target:DefinedElement)
57910{
57911 find interpretation(problem,interpretation);
57912 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
57913 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"from reference InformationLink");
57914 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
57915 BinaryElementRelationLink.param1(link,source);
57916 BinaryElementRelationLink.param2(link,target);
57917}
57918/**
57919 * Matcher for detecting tuples t where <>from reference InformationLink(source,target)
57920 */
57921private pattern mayInRelationfrom_reference_InformationLink(
57922 problem:LogicProblem, interpretation:PartialInterpretation,
57923 source: DefinedElement, target:DefinedElement)
57924{
57925 find interpretation(problem,interpretation);
57926 // The two endpoint of the link have to exist
57927 find mayExist(problem, interpretation, source);
57928 find mayExist(problem, interpretation, target);
57929 // Type consistency
57930 find mayInstanceOfInformationLink_class(problem,interpretation,source);
57931 find mayInstanceOfFunctionalOutput_class(problem,interpretation,target);
57932 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
57933 // the upper bound of the multiplicity should be considered.
57934 numberOfExistingReferences == count find mustInRelationfrom_reference_InformationLink(problem,interpretation,source,_);
57935 check(numberOfExistingReferences < 1);
57936 // The eOpposite of the reference is containment, then a referene cannot be created if
57937 // 1. Multiple parents
57938 neg find mustContains4(problem,interpretation,source,_);
57939 // 2. Circle in the containment hierarchy
57940 neg find mustTransitiveContains(source,target);
57941} or {
57942 find mustInRelationfrom_reference_InformationLink(problem,interpretation,source,target);
57943}
57944/**
57945 * Matcher for detecting tuples t where []to reference InformationLink(source,target)
57946 */
57947private pattern mustInRelationto_reference_InformationLink(
57948 problem:LogicProblem, interpretation:PartialInterpretation,
57949 source: DefinedElement, target:DefinedElement)
57950{
57951 find interpretation(problem,interpretation);
57952 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
57953 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"to reference InformationLink");
57954 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
57955 BinaryElementRelationLink.param1(link,source);
57956 BinaryElementRelationLink.param2(link,target);
57957}
57958/**
57959 * Matcher for detecting tuples t where <>to reference InformationLink(source,target)
57960 */
57961private pattern mayInRelationto_reference_InformationLink(
57962 problem:LogicProblem, interpretation:PartialInterpretation,
57963 source: DefinedElement, target:DefinedElement)
57964{
57965 find interpretation(problem,interpretation);
57966 // The two endpoint of the link have to exist
57967 find mayExist(problem, interpretation, source);
57968 find mayExist(problem, interpretation, target);
57969 // Type consistency
57970 find mayInstanceOfInformationLink_class(problem,interpretation,source);
57971 find mayInstanceOfFunctionalInput_class(problem,interpretation,target);
57972 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
57973 // the upper bound of the multiplicity should be considered.
57974 numberOfExistingReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,source,_);
57975 check(numberOfExistingReferences < 1);
57976} or {
57977 find mustInRelationto_reference_InformationLink(problem,interpretation,source,target);
57978}
57979/**
57980 * Matcher for detecting tuples t where []data reference FunctionalInterface(source,target)
57981 */
57982private pattern mustInRelationdata_reference_FunctionalInterface(
57983 problem:LogicProblem, interpretation:PartialInterpretation,
57984 source: DefinedElement, target:DefinedElement)
57985{
57986 find interpretation(problem,interpretation);
57987 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
57988 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"data reference FunctionalInterface");
57989 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
57990 BinaryElementRelationLink.param1(link,source);
57991 BinaryElementRelationLink.param2(link,target);
57992}
57993/**
57994 * Matcher for detecting tuples t where <>data reference FunctionalInterface(source,target)
57995 */
57996private pattern mayInRelationdata_reference_FunctionalInterface(
57997 problem:LogicProblem, interpretation:PartialInterpretation,
57998 source: DefinedElement, target:DefinedElement)
57999{
58000 find interpretation(problem,interpretation);
58001 // The two endpoint of the link have to exist
58002 find mayExist(problem, interpretation, source);
58003 find mayExist(problem, interpretation, target);
58004 // Type consistency
58005 find mayInstanceOfFunctionalInterface_class(problem,interpretation,source);
58006 find mayInstanceOfFunctionalData_class(problem,interpretation,target);
58007 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
58008 // the upper bound of the opposite reference multiplicity should be considered.
58009 numberOfExistingOppositeReferences == count find mustInRelationinterface_reference_FunctionalData(problem,interpretation,target,_);
58010 check(numberOfExistingOppositeReferences < 1);
58011 // The reference is containment, then a new reference cannot be create if:
58012 // 1. Multiple parents
58013 neg find mustContains4(problem,interpretation,_,target);
58014 // 2. Circle in the containment hierarchy
58015 neg find mustTransitiveContains(source,target);
58016} or {
58017 find mustInRelationdata_reference_FunctionalInterface(problem,interpretation,source,target);
58018}
58019/**
58020 * Matcher for detecting tuples t where []element reference FunctionalInterface(source,target)
58021 */
58022private pattern mustInRelationelement_reference_FunctionalInterface(
58023 problem:LogicProblem, interpretation:PartialInterpretation,
58024 source: DefinedElement, target:DefinedElement)
58025{
58026 find interpretation(problem,interpretation);
58027 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
58028 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"element reference FunctionalInterface");
58029 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
58030 BinaryElementRelationLink.param1(link,source);
58031 BinaryElementRelationLink.param2(link,target);
58032}
58033/**
58034 * Matcher for detecting tuples t where <>element reference FunctionalInterface(source,target)
58035 */
58036private pattern mayInRelationelement_reference_FunctionalInterface(
58037 problem:LogicProblem, interpretation:PartialInterpretation,
58038 source: DefinedElement, target:DefinedElement)
58039{
58040 find interpretation(problem,interpretation);
58041 // The two endpoint of the link have to exist
58042 find mayExist(problem, interpretation, source);
58043 find mayExist(problem, interpretation, target);
58044 // Type consistency
58045 find mayInstanceOfFunctionalInterface_class(problem,interpretation,source);
58046 find mayInstanceOfFunctionalElement_class(problem,interpretation,target);
58047 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
58048 // the upper bound of the multiplicity should be considered.
58049 numberOfExistingReferences == count find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,source,_);
58050 check(numberOfExistingReferences < 1);
58051 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
58052 // the upper bound of the opposite reference multiplicity should be considered.
58053 numberOfExistingOppositeReferences == count find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,target,_);
58054 check(numberOfExistingOppositeReferences < 1);
58055 // The eOpposite of the reference is containment, then a referene cannot be created if
58056 // 1. Multiple parents
58057 neg find mustContains4(problem,interpretation,source,_);
58058 // 2. Circle in the containment hierarchy
58059 neg find mustTransitiveContains(source,target);
58060} or {
58061 find mustInRelationelement_reference_FunctionalInterface(problem,interpretation,source,target);
58062}
58063/**
58064 * Matcher for detecting tuples t where []IncomingLinks reference FunctionalInput(source,target)
58065 */
58066private pattern mustInRelationIncomingLinks_reference_FunctionalInput(
58067 problem:LogicProblem, interpretation:PartialInterpretation,
58068 source: DefinedElement, target:DefinedElement)
58069{
58070 find interpretation(problem,interpretation);
58071 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
58072 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"IncomingLinks reference FunctionalInput");
58073 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
58074 BinaryElementRelationLink.param1(link,source);
58075 BinaryElementRelationLink.param2(link,target);
58076}
58077/**
58078 * Matcher for detecting tuples t where <>IncomingLinks reference FunctionalInput(source,target)
58079 */
58080private pattern mayInRelationIncomingLinks_reference_FunctionalInput(
58081 problem:LogicProblem, interpretation:PartialInterpretation,
58082 source: DefinedElement, target:DefinedElement)
58083{
58084 find interpretation(problem,interpretation);
58085 // The two endpoint of the link have to exist
58086 find mayExist(problem, interpretation, source);
58087 find mayExist(problem, interpretation, target);
58088 // Type consistency
58089 find mayInstanceOfFunctionalInput_class(problem,interpretation,source);
58090 find mayInstanceOfInformationLink_class(problem,interpretation,target);
58091 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
58092 // the upper bound of the opposite reference multiplicity should be considered.
58093 numberOfExistingOppositeReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,target,_);
58094 check(numberOfExistingOppositeReferences < 1);
58095} or {
58096 find mustInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,source,target);
58097}
58098/**
58099 * Matcher for detecting tuples t where []outgoingLinks reference FunctionalOutput(source,target)
58100 */
58101private pattern mustInRelationoutgoingLinks_reference_FunctionalOutput(
58102 problem:LogicProblem, interpretation:PartialInterpretation,
58103 source: DefinedElement, target:DefinedElement)
58104{
58105 find interpretation(problem,interpretation);
58106 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
58107 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"outgoingLinks reference FunctionalOutput");
58108 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
58109 BinaryElementRelationLink.param1(link,source);
58110 BinaryElementRelationLink.param2(link,target);
58111}
58112/**
58113 * Matcher for detecting tuples t where <>outgoingLinks reference FunctionalOutput(source,target)
58114 */
58115private pattern mayInRelationoutgoingLinks_reference_FunctionalOutput(
58116 problem:LogicProblem, interpretation:PartialInterpretation,
58117 source: DefinedElement, target:DefinedElement)
58118{
58119 find interpretation(problem,interpretation);
58120 // The two endpoint of the link have to exist
58121 find mayExist(problem, interpretation, source);
58122 find mayExist(problem, interpretation, target);
58123 // Type consistency
58124 find mayInstanceOfFunctionalOutput_class(problem,interpretation,source);
58125 find mayInstanceOfInformationLink_class(problem,interpretation,target);
58126 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
58127 // the upper bound of the opposite reference multiplicity should be considered.
58128 numberOfExistingOppositeReferences == count find mustInRelationfrom_reference_InformationLink(problem,interpretation,target,_);
58129 check(numberOfExistingOppositeReferences < 1);
58130 // The reference is containment, then a new reference cannot be create if:
58131 // 1. Multiple parents
58132 neg find mustContains4(problem,interpretation,_,target);
58133 // 2. Circle in the containment hierarchy
58134 neg find mustTransitiveContains(source,target);
58135} or {
58136 find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,source,target);
58137}
58138/**
58139 * Matcher for detecting tuples t where []terminator reference FunctionalData(source,target)
58140 */
58141private pattern mustInRelationterminator_reference_FunctionalData(
58142 problem:LogicProblem, interpretation:PartialInterpretation,
58143 source: DefinedElement, target:DefinedElement)
58144{
58145 find interpretation(problem,interpretation);
58146 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
58147 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"terminator reference FunctionalData");
58148 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
58149 BinaryElementRelationLink.param1(link,source);
58150 BinaryElementRelationLink.param2(link,target);
58151}
58152/**
58153 * Matcher for detecting tuples t where <>terminator reference FunctionalData(source,target)
58154 */
58155private pattern mayInRelationterminator_reference_FunctionalData(
58156 problem:LogicProblem, interpretation:PartialInterpretation,
58157 source: DefinedElement, target:DefinedElement)
58158{
58159 find interpretation(problem,interpretation);
58160 // The two endpoint of the link have to exist
58161 find mayExist(problem, interpretation, source);
58162 find mayExist(problem, interpretation, target);
58163 // Type consistency
58164 find mayInstanceOfFunctionalData_class(problem,interpretation,source);
58165 find mayInstanceOfFAMTerminator_class(problem,interpretation,target);
58166 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
58167 // the upper bound of the multiplicity should be considered.
58168 numberOfExistingReferences == count find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,_);
58169 check(numberOfExistingReferences < 1);
58170 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
58171 // the upper bound of the opposite reference multiplicity should be considered.
58172 numberOfExistingOppositeReferences == count find mustInRelationdata_reference_FAMTerminator(problem,interpretation,target,_);
58173 check(numberOfExistingOppositeReferences < 1);
58174 // The reference is containment, then a new reference cannot be create if:
58175 // 1. Multiple parents
58176 neg find mustContains4(problem,interpretation,_,target);
58177 // 2. Circle in the containment hierarchy
58178 neg find mustTransitiveContains(source,target);
58179} or {
58180 find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,target);
58181}
58182/**
58183 * Matcher for detecting tuples t where []interface reference FunctionalData(source,target)
58184 */
58185private pattern mustInRelationinterface_reference_FunctionalData(
58186 problem:LogicProblem, interpretation:PartialInterpretation,
58187 source: DefinedElement, target:DefinedElement)
58188{
58189 find interpretation(problem,interpretation);
58190 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
58191 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface reference FunctionalData");
58192 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
58193 BinaryElementRelationLink.param1(link,source);
58194 BinaryElementRelationLink.param2(link,target);
58195}
58196/**
58197 * Matcher for detecting tuples t where <>interface reference FunctionalData(source,target)
58198 */
58199private pattern mayInRelationinterface_reference_FunctionalData(
58200 problem:LogicProblem, interpretation:PartialInterpretation,
58201 source: DefinedElement, target:DefinedElement)
58202{
58203 find interpretation(problem,interpretation);
58204 // The two endpoint of the link have to exist
58205 find mayExist(problem, interpretation, source);
58206 find mayExist(problem, interpretation, target);
58207 // Type consistency
58208 find mayInstanceOfFunctionalData_class(problem,interpretation,source);
58209 find mayInstanceOfFunctionalInterface_class(problem,interpretation,target);
58210 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
58211 // the upper bound of the multiplicity should be considered.
58212 numberOfExistingReferences == count find mustInRelationinterface_reference_FunctionalData(problem,interpretation,source,_);
58213 check(numberOfExistingReferences < 1);
58214 // The eOpposite of the reference is containment, then a referene cannot be created if
58215 // 1. Multiple parents
58216 neg find mustContains4(problem,interpretation,source,_);
58217 // 2. Circle in the containment hierarchy
58218 neg find mustTransitiveContains(source,target);
58219} or {
58220 find mustInRelationinterface_reference_FunctionalData(problem,interpretation,source,target);
58221}
58222/**
58223 * Matcher for detecting tuples t where []type attribute Function(source,target)
58224 */
58225private pattern mustInRelationtype_attribute_Function(
58226 problem:LogicProblem, interpretation:PartialInterpretation,
58227 source: DefinedElement, target:DefinedElement)
58228{
58229 find interpretation(problem,interpretation);
58230 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
58231 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function");
58232 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
58233 BinaryElementRelationLink.param1(link,source);
58234 BinaryElementRelationLink.param2(link,target);
58235}
58236/**
58237 * Matcher for detecting tuples t where <>type attribute Function(source,target)
58238 */
58239private pattern mayInRelationtype_attribute_Function(
58240 problem:LogicProblem, interpretation:PartialInterpretation,
58241 source: DefinedElement, target:DefinedElement)
58242{
58243 find interpretation(problem,interpretation);
58244 // The two endpoint of the link have to exist
58245 find mayExist(problem, interpretation, source);
58246 find mayExist(problem, interpretation, target);
58247 // Type consistency
58248 find mayInstanceOfFunction_class(problem,interpretation,source);
58249 find mayInstanceOfFunctionType_enum(problem,interpretation,target);
58250 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
58251 // the upper bound of the multiplicity should be considered.
58252 numberOfExistingReferences == count find mustInRelationtype_attribute_Function(problem,interpretation,source,_);
58253 check(numberOfExistingReferences < 1);
58254} or {
58255 find mustInRelationtype_attribute_Function(problem,interpretation,source,target);
58256}
58257
58258//////////
58259// 1.3 Relation Definition Indexers
58260//////////
58261
58262//////////
58263// 1.4 Containment Indexer
58264//////////
58265private pattern mustContains2(source: DefinedElement, target: DefinedElement) {
58266 find mustContains4(_,_,source,target);
58267}
58268
58269private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation,
58270 source: DefinedElement, target: DefinedElement)
58271 { find mustInRelationinterface_reference_FunctionalElement(problem,interpretation,source,target); }or
58272
58273 { find mustInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,source,target); }or
58274
58275 { find mustInRelationsubElements_reference_Function(problem,interpretation,source,target); }or
58276
58277 { find mustInRelationdata_reference_FunctionalInterface(problem,interpretation,source,target); }or
58278
58279 { find mustInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,source,target); }or
58280
58281 { find mustInRelationterminator_reference_FunctionalData(problem,interpretation,source,target); }
58282
58283private pattern mustTransitiveContains(source,target) {
58284 find mustContains2+(source,target);
58285}
58286
58287//////////
58288// 2. Invalidation Indexers
58289//////////
58290// 2.1 Invalidated by WF Queries
58291//////////
58292
58293//////////
58294// 3. Unfinishedness Indexers
58295//////////
58296// 3.1 Unfinishedness Measured by Multiplicity
58297//////////
58298pattern unfinishedLowerMultiplicity_model_reference_FunctionalElement(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) {
58299 find interpretation(problem,interpretation);
58300 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
58301 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement");
58302 find mustInstanceOfFunctionalElement_class(problem,interpretation,object);
58303 numberOfExistingReferences == count find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,object,_);
58304 check(numberOfExistingReferences < 1);
58305 missingMultiplicity == eval(1-numberOfExistingReferences);
58306}
58307pattern unfinishedLowerMultiplicity_to_reference_InformationLink(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) {
58308 find interpretation(problem,interpretation);
58309 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
58310 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"to reference InformationLink");
58311 find mustInstanceOfInformationLink_class(problem,interpretation,object);
58312 numberOfExistingReferences == count find mustInRelationto_reference_InformationLink(problem,interpretation,object,_);
58313 check(numberOfExistingReferences < 1);
58314 missingMultiplicity == eval(1-numberOfExistingReferences);
58315}
58316pattern unfinishedLowerMultiplicity_type_attribute_Function(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) {
58317 find interpretation(problem,interpretation);
58318 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
58319 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function");
58320 find mustInstanceOfFunction_class(problem,interpretation,object);
58321 numberOfExistingReferences == count find mustInRelationtype_attribute_Function(problem,interpretation,object,_);
58322 check(numberOfExistingReferences < 1);
58323 missingMultiplicity == eval(1-numberOfExistingReferences);
58324}
58325
58326//////////
58327// 3.2 Unfinishedness Measured by WF Queries
58328//////////
58329
58330//////////
58331// 4. Refinement Indexers
58332//////////
58333// 4.1 Object constructors
58334//////////
58335private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation)
58336{
58337 find interpretation(problem,interpretation);
58338 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,root);
58339 find mustExist(problem, interpretation, root);
58340}or{
58341 find interpretation(problem,interpretation);
58342 find mustInstanceOfFunctionalData_class(problem,interpretation,root);
58343 find mustExist(problem, interpretation, root);
58344}or{
58345 find interpretation(problem,interpretation);
58346 find mustInstanceOfFunction_class(problem,interpretation,root);
58347 find mustExist(problem, interpretation, root);
58348}or{
58349 find interpretation(problem,interpretation);
58350 find mustInstanceOfFAMTerminator_class(problem,interpretation,root);
58351 find mustExist(problem, interpretation, root);
58352}or{
58353 find interpretation(problem,interpretation);
58354 find mustInstanceOfInformationLink_class(problem,interpretation,root);
58355 find mustExist(problem, interpretation, root);
58356}or{
58357 find interpretation(problem,interpretation);
58358 find mustInstanceOfFunctionalInterface_class(problem,interpretation,root);
58359 find mustExist(problem, interpretation, root);
58360}or{
58361 find interpretation(problem,interpretation);
58362 find mustInstanceOfFunctionalElement_class(problem,interpretation,root);
58363 find mustExist(problem, interpretation, root);
58364}or{
58365 find interpretation(problem,interpretation);
58366 find mustInstanceOfFunctionalInput_class(problem,interpretation,root);
58367 find mustExist(problem, interpretation, root);
58368}or{
58369 find interpretation(problem,interpretation);
58370 find mustInstanceOfFunctionalOutput_class(problem,interpretation,root);
58371 find mustExist(problem, interpretation, root);
58372}or{
58373 find interpretation(problem,interpretation);
58374 find mustInstanceOfFunctionalArchitectureModel_class_DefinedPart(problem,interpretation,root);
58375 find mustExist(problem, interpretation, root);
58376}or{
58377 find interpretation(problem,interpretation);
58378 find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,root);
58379 find mustExist(problem, interpretation, root);
58380}
58381pattern createObject_FunctionalOutput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData(
58382 problem:LogicProblem, interpretation:PartialInterpretation,
58383 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
58384 container:DefinedElement)
58385{
58386 find interpretation(problem,interpretation);
58387 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
58388 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class");
58389 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
58390 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface");
58391 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
58392 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData");
58393 find mustInstanceOfFunctionalInterface_class(problem,interpretation,container);
58394 find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject);
58395 find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject);
58396 find mustExist(problem, interpretation, container);
58397 neg find mustExist(problem, interpretation, newObject);
58398}
58399pattern createObject_FunctionalOutput_class(
58400 problem:LogicProblem, interpretation:PartialInterpretation,
58401 typeInterpretation:PartialComplexTypeInterpretation)
58402{
58403 find interpretation(problem,interpretation);
58404 neg find hasElementInContainment(problem,interpretation);
58405 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
58406 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalOutput class");
58407 find mayInstanceOfFunctionalOutput_class(problem,interpretation,newObject);
58408 find mayExist(problem, interpretation, newObject);
58409 neg find mustExist(problem, interpretation, newObject);
58410}
58411pattern createObject_FAMTerminator_class_by_terminator_reference_FunctionalData_with_data_reference_FAMTerminator(
58412 problem:LogicProblem, interpretation:PartialInterpretation,
58413 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
58414 container:DefinedElement)
58415{
58416 find interpretation(problem,interpretation);
58417 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
58418 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class");
58419 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
58420 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"terminator reference FunctionalData");
58421 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
58422 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"data reference FAMTerminator");
58423 find mustInstanceOfFunctionalData_class(problem,interpretation,container);
58424 find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject);
58425 find mayInRelationterminator_reference_FunctionalData(problem,interpretation,container,newObject);
58426 find mustExist(problem, interpretation, container);
58427 neg find mustExist(problem, interpretation, newObject);
58428}
58429pattern createObject_FAMTerminator_class(
58430 problem:LogicProblem, interpretation:PartialInterpretation,
58431 typeInterpretation:PartialComplexTypeInterpretation)
58432{
58433 find interpretation(problem,interpretation);
58434 neg find hasElementInContainment(problem,interpretation);
58435 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
58436 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FAMTerminator class");
58437 find mayInstanceOfFAMTerminator_class(problem,interpretation,newObject);
58438 find mayExist(problem, interpretation, newObject);
58439 neg find mustExist(problem, interpretation, newObject);
58440}
58441pattern createObject_FunctionalInterface_class_by_interface_reference_FunctionalElement_with_element_reference_FunctionalInterface(
58442 problem:LogicProblem, interpretation:PartialInterpretation,
58443 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
58444 container:DefinedElement)
58445{
58446 find interpretation(problem,interpretation);
58447 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
58448 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class");
58449 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
58450 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"interface reference FunctionalElement");
58451 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
58452 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"element reference FunctionalInterface");
58453 find mustInstanceOfFunctionalElement_class(problem,interpretation,container);
58454 find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject);
58455 find mayInRelationinterface_reference_FunctionalElement(problem,interpretation,container,newObject);
58456 find mustExist(problem, interpretation, container);
58457 neg find mustExist(problem, interpretation, newObject);
58458}
58459pattern createObject_FunctionalInterface_class(
58460 problem:LogicProblem, interpretation:PartialInterpretation,
58461 typeInterpretation:PartialComplexTypeInterpretation)
58462{
58463 find interpretation(problem,interpretation);
58464 neg find hasElementInContainment(problem,interpretation);
58465 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
58466 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInterface class");
58467 find mayInstanceOfFunctionalInterface_class(problem,interpretation,newObject);
58468 find mayExist(problem, interpretation, newObject);
58469 neg find mustExist(problem, interpretation, newObject);
58470}
58471pattern createObject_FunctionalArchitectureModel_class_UndefinedPart(
58472 problem:LogicProblem, interpretation:PartialInterpretation,
58473 typeInterpretation:PartialComplexTypeInterpretation)
58474{
58475 find interpretation(problem,interpretation);
58476 neg find hasElementInContainment(problem,interpretation);
58477 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
58478 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalArchitectureModel class UndefinedPart");
58479 find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,newObject);
58480 find mayExist(problem, interpretation, newObject);
58481 neg find mustExist(problem, interpretation, newObject);
58482}
58483pattern createObject_Function_class_by_rootElements_reference_FunctionalArchitectureModel(
58484 problem:LogicProblem, interpretation:PartialInterpretation,
58485 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
58486 container:DefinedElement)
58487{
58488 find interpretation(problem,interpretation);
58489 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
58490 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class");
58491 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
58492 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"rootElements reference FunctionalArchitectureModel");
58493 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,container);
58494 find mayInstanceOfFunction_class(problem,interpretation,newObject);
58495 find mayInRelationrootElements_reference_FunctionalArchitectureModel(problem,interpretation,container,newObject);
58496 find mustExist(problem, interpretation, container);
58497 neg find mustExist(problem, interpretation, newObject);
58498}
58499pattern createObject_Function_class_by_subElements_reference_Function_with_parent_reference_FunctionalElement(
58500 problem:LogicProblem, interpretation:PartialInterpretation,
58501 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
58502 container:DefinedElement)
58503{
58504 find interpretation(problem,interpretation);
58505 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
58506 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class");
58507 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
58508 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"subElements reference Function");
58509 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
58510 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FunctionalElement");
58511 find mustInstanceOfFunction_class(problem,interpretation,container);
58512 find mayInstanceOfFunction_class(problem,interpretation,newObject);
58513 find mayInRelationsubElements_reference_Function(problem,interpretation,container,newObject);
58514 find mustExist(problem, interpretation, container);
58515 neg find mustExist(problem, interpretation, newObject);
58516}
58517pattern createObject_Function_class(
58518 problem:LogicProblem, interpretation:PartialInterpretation,
58519 typeInterpretation:PartialComplexTypeInterpretation)
58520{
58521 find interpretation(problem,interpretation);
58522 neg find hasElementInContainment(problem,interpretation);
58523 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
58524 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Function class");
58525 find mayInstanceOfFunction_class(problem,interpretation,newObject);
58526 find mayExist(problem, interpretation, newObject);
58527 neg find mustExist(problem, interpretation, newObject);
58528}
58529pattern createObject_InformationLink_class_by_outgoingLinks_reference_FunctionalOutput_with_from_reference_InformationLink(
58530 problem:LogicProblem, interpretation:PartialInterpretation,
58531 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
58532 container:DefinedElement)
58533{
58534 find interpretation(problem,interpretation);
58535 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
58536 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class");
58537 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
58538 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingLinks reference FunctionalOutput");
58539 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
58540 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"from reference InformationLink");
58541 find mustInstanceOfFunctionalOutput_class(problem,interpretation,container);
58542 find mayInstanceOfInformationLink_class(problem,interpretation,newObject);
58543 find mayInRelationoutgoingLinks_reference_FunctionalOutput(problem,interpretation,container,newObject);
58544 find mustExist(problem, interpretation, container);
58545 neg find mustExist(problem, interpretation, newObject);
58546}
58547pattern createObject_InformationLink_class(
58548 problem:LogicProblem, interpretation:PartialInterpretation,
58549 typeInterpretation:PartialComplexTypeInterpretation)
58550{
58551 find interpretation(problem,interpretation);
58552 neg find hasElementInContainment(problem,interpretation);
58553 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
58554 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"InformationLink class");
58555 find mayInstanceOfInformationLink_class(problem,interpretation,newObject);
58556 find mayExist(problem, interpretation, newObject);
58557 neg find mustExist(problem, interpretation, newObject);
58558}
58559pattern createObject_FunctionalInput_class_by_data_reference_FunctionalInterface_with_interface_reference_FunctionalData(
58560 problem:LogicProblem, interpretation:PartialInterpretation,
58561 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
58562 container:DefinedElement)
58563{
58564 find interpretation(problem,interpretation);
58565 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
58566 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class");
58567 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
58568 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"data reference FunctionalInterface");
58569 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
58570 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"interface reference FunctionalData");
58571 find mustInstanceOfFunctionalInterface_class(problem,interpretation,container);
58572 find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject);
58573 find mayInRelationdata_reference_FunctionalInterface(problem,interpretation,container,newObject);
58574 find mustExist(problem, interpretation, container);
58575 neg find mustExist(problem, interpretation, newObject);
58576}
58577pattern createObject_FunctionalInput_class(
58578 problem:LogicProblem, interpretation:PartialInterpretation,
58579 typeInterpretation:PartialComplexTypeInterpretation)
58580{
58581 find interpretation(problem,interpretation);
58582 neg find hasElementInContainment(problem,interpretation);
58583 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
58584 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FunctionalInput class");
58585 find mayInstanceOfFunctionalInput_class(problem,interpretation,newObject);
58586 find mayExist(problem, interpretation, newObject);
58587 neg find mustExist(problem, interpretation, newObject);
58588}
58589
58590//////////
58591// 4.2 Type refinement
58592//////////
58593pattern refineTypeTo_FunctionalOutput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
58594 find interpretation(problem,interpretation);
58595 PartialInterpretation.newElements(interpretation,element);
58596 find mayInstanceOfFunctionalOutput_class(problem,interpretation,element);
58597 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
58598 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
58599 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
58600 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
58601 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
58602 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
58603 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
58604}
58605pattern refineTypeTo_FAMTerminator_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
58606 find interpretation(problem,interpretation);
58607 PartialInterpretation.newElements(interpretation,element);
58608 find mayInstanceOfFAMTerminator_class(problem,interpretation,element);
58609 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
58610 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
58611 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
58612 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
58613 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
58614 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
58615}
58616pattern refineTypeTo_FunctionalInterface_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
58617 find interpretation(problem,interpretation);
58618 PartialInterpretation.newElements(interpretation,element);
58619 find mayInstanceOfFunctionalInterface_class(problem,interpretation,element);
58620 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
58621 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
58622 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
58623 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
58624 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
58625 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
58626}
58627pattern refineTypeTo_FunctionalArchitectureModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
58628 find interpretation(problem,interpretation);
58629 PartialInterpretation.newElements(interpretation,element);
58630 find mayInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element);
58631 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
58632 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
58633 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
58634 neg find mustInstanceOfFunctionalArchitectureModel_class_UndefinedPart(problem,interpretation,element);
58635 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
58636 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
58637}
58638pattern refineTypeTo_Function_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
58639 find interpretation(problem,interpretation);
58640 PartialInterpretation.newElements(interpretation,element);
58641 find mayInstanceOfFunction_class(problem,interpretation,element);
58642 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
58643 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
58644 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
58645 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
58646 neg find mustInstanceOfFunction_class(problem,interpretation,element);
58647 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
58648}
58649pattern refineTypeTo_InformationLink_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
58650 find interpretation(problem,interpretation);
58651 PartialInterpretation.newElements(interpretation,element);
58652 find mayInstanceOfInformationLink_class(problem,interpretation,element);
58653 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
58654 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
58655 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
58656 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
58657 neg find mustInstanceOfFunctionalData_class(problem,interpretation,element);
58658 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
58659}
58660pattern refineTypeTo_FunctionalInput_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
58661 find interpretation(problem,interpretation);
58662 PartialInterpretation.newElements(interpretation,element);
58663 find mayInstanceOfFunctionalInput_class(problem,interpretation,element);
58664 neg find mustInstanceOfFunctionalOutput_class(problem,interpretation,element);
58665 neg find mustInstanceOfFunctionalInterface_class(problem,interpretation,element);
58666 neg find mustInstanceOfFAMTerminator_class(problem,interpretation,element);
58667 neg find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,element);
58668 neg find mustInstanceOfFunctionalElement_class(problem,interpretation,element);
58669 neg find mustInstanceOfInformationLink_class(problem,interpretation,element);
58670 neg find mustInstanceOfFunctionalInput_class(problem,interpretation,element);
58671}
58672
58673//////////
58674// 4.3 Relation refinement
58675//////////
58676pattern refineRelation_model_reference_FunctionalElement(
58677 problem:LogicProblem, interpretation:PartialInterpretation,
58678 relationIterpretation:PartialRelationInterpretation,
58679 from: DefinedElement, to: DefinedElement)
58680{
58681 find interpretation(problem,interpretation);
58682 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
58683 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"model reference FunctionalElement");
58684 find mustExist(problem, interpretation, from);
58685 find mustExist(problem, interpretation, to);
58686 find mustInstanceOfFunctionalElement_class(problem,interpretation,from);
58687 find mustInstanceOfFunctionalArchitectureModel_class(problem,interpretation,to);
58688 find mayInRelationmodel_reference_FunctionalElement(problem,interpretation,from,to);
58689 neg find mustInRelationmodel_reference_FunctionalElement(problem,interpretation,from,to);
58690}
58691pattern refineRelation_IncomingLinks_reference_FunctionalInput_and_to_reference_InformationLink(
58692 problem:LogicProblem, interpretation:PartialInterpretation,
58693 relationIterpretation:PartialRelationInterpretation, oppositeInterpretation:PartialRelationInterpretation,
58694 from: DefinedElement, to: DefinedElement)
58695{
58696 find interpretation(problem,interpretation);
58697 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
58698 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"IncomingLinks reference FunctionalInput");
58699 PartialInterpretation.partialrelationinterpretation(interpretation,oppositeInterpretation);
58700 PartialRelationInterpretation.interpretationOf.name(oppositeInterpretation,"to reference InformationLink");
58701 find mustExist(problem, interpretation, from);
58702 find mustExist(problem, interpretation, to);
58703 find mustInstanceOfFunctionalInput_class(problem,interpretation,from);
58704 find mustInstanceOfInformationLink_class(problem,interpretation,to);
58705 find mayInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,from,to);
58706 neg find mustInRelationIncomingLinks_reference_FunctionalInput(problem,interpretation,from,to);
58707}
58708pattern refineRelation_type_attribute_Function(
58709 problem:LogicProblem, interpretation:PartialInterpretation,
58710 relationIterpretation:PartialRelationInterpretation,
58711 from: DefinedElement, to: DefinedElement)
58712{
58713 find interpretation(problem,interpretation);
58714 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
58715 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"type attribute Function");
58716 find mustExist(problem, interpretation, from);
58717 find mustExist(problem, interpretation, to);
58718 find mustInstanceOfFunction_class(problem,interpretation,from);
58719 find mustInstanceOfFunctionType_enum(problem,interpretation,to);
58720 find mayInRelationtype_attribute_Function(problem,interpretation,from,to);
58721 neg find mustInRelationtype_attribute_Function(problem,interpretation,from,to);
58722}
58723import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage"
58724import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem"
58725import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language"
58726
58727//////////
58728// 0. Util
58729//////////
58730private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) {
58731 PartialInterpretation.problem(interpretation,problem);
58732}
58733
58734/////////////////////////
58735// 0.1 Existence
58736/////////////////////////
58737private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
58738 find interpretation(problem,interpretation);
58739 LogicProblem.elements(problem,element);
58740} or {
58741 find interpretation(problem,interpretation);
58742 PartialInterpretation.newElements(interpretation,element);
58743}
58744
58745private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
58746 find mustExist(problem,interpretation,element);
58747} or {
58748 find interpretation(problem,interpretation);
58749 neg find elementCloseWorld(element);
58750 PartialInterpretation.openWorldElements(interpretation,element);
58751}
58752
58753private pattern elementCloseWorld(element:DefinedElement) {
58754 PartialInterpretation.openWorldElements(i,element);
58755 PartialInterpretation.maxNewElements(i,0);
58756} or {
58757 Scope.targetTypeInterpretation(scope,interpretation);
58758 PartialTypeInterpratation.elements(interpretation,element);
58759 Scope.maxNewElements(scope,0);
58760}
58761
58762////////////////////////
58763// 0.2 Equivalence
58764////////////////////////
58765pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) {
58766 find mayExist(problem,interpretation,a);
58767 find mayExist(problem,interpretation,b);
58768 a == b;
58769}
58770
58771////////////////////////
58772// 0.3 Required Patterns by TypeIndexer
58773////////////////////////
58774private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) {
58775 find interpretation(problem,interpretation);
58776 LogicProblem.types(problem,type);
58777 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
58778 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
58779}
58780
58781private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) {
58782 find interpretation(problem,interpretation);
58783 LogicProblem.types(problem,type);
58784 TypeDefinition.elements(type,element);
58785} or {
58786 find interpretation(problem,interpretation);
58787 find typeInterpretation(problem,interpretation,type,typeInterpretation);
58788 PartialComplexTypeInterpretation.elements(typeInterpretation,element);
58789}
58790
58791private pattern isPrimitive(element: PrimitiveElement) {
58792 PrimitiveElement(element);
58793}
58794
58795//////////
58796// 1. Problem-Specific Base Indexers
58797//////////
58798// 1.1 Type Indexers
58799//////////
58800// 1.1.1 primitive Type Indexers
58801//////////
58802
58803//////////
58804// 1.1.2 domain-specific Type Indexers
58805//////////
58806/**
58807 * An element must be an instance of type "EAttribute class".
58808 */
58809private pattern mustInstanceOfEAttribute_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
58810 Type.name(type,"EAttribute class");
58811 find directInstanceOf(problem,interpretation,element,type);
58812}
58813private pattern scopeDisallowsNewEAttribute_class(problem:LogicProblem, interpretation:PartialInterpretation) {
58814 find interpretation(problem,interpretation);
58815 PartialInterpretation.scopes(interpretation,scope);
58816 Scope.targetTypeInterpretation(scope,typeInterpretation);
58817 Scope.maxNewElements(scope,0);
58818 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
58819 Type.name(type,"EAttribute class");
58820}
58821
58822/**
58823 * An element may be an instance of type "EAttribute class".
58824 */
58825private pattern mayInstanceOfEAttribute_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
58826{
58827 find interpretation(problem,interpretation);
58828 PartialInterpretation.newElements(interpretation,element);
58829 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
58830 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
58831 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
58832 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
58833 neg find mustInstanceOfEReference_class(problem,interpretation,element);
58834 neg find mustInstanceOfEObject_class(problem,interpretation,element);
58835 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
58836 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
58837 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
58838 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
58839 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
58840 neg find scopeDisallowsNewEAttribute_class(problem, interpretation);
58841 neg find isPrimitive(element);
58842} or {
58843 find interpretation(problem,interpretation);
58844 PartialInterpretation.openWorldElements(interpretation,element);
58845 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
58846 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
58847 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
58848 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
58849 neg find mustInstanceOfEReference_class(problem,interpretation,element);
58850 neg find mustInstanceOfEObject_class(problem,interpretation,element);
58851 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
58852 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
58853 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
58854 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
58855 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
58856 neg find scopeDisallowsNewEAttribute_class(problem, interpretation);
58857 neg find isPrimitive(element);
58858} or
58859{ find mustInstanceOfEAttribute_class(problem,interpretation,element); }
58860/**
58861 * An element must be an instance of type "EAnnotation class".
58862 */
58863private pattern mustInstanceOfEAnnotation_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
58864 Type.name(type,"EAnnotation class");
58865 find directInstanceOf(problem,interpretation,element,type);
58866}
58867private pattern scopeDisallowsNewEAnnotation_class(problem:LogicProblem, interpretation:PartialInterpretation) {
58868 find interpretation(problem,interpretation);
58869 PartialInterpretation.scopes(interpretation,scope);
58870 Scope.targetTypeInterpretation(scope,typeInterpretation);
58871 Scope.maxNewElements(scope,0);
58872 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
58873 Type.name(type,"EAnnotation class");
58874}
58875
58876/**
58877 * An element may be an instance of type "EAnnotation class".
58878 */
58879private pattern mayInstanceOfEAnnotation_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
58880{
58881 find interpretation(problem,interpretation);
58882 PartialInterpretation.newElements(interpretation,element);
58883 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
58884 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
58885 neg find mustInstanceOfEObject_class(problem,interpretation,element);
58886 neg find mustInstanceOfENamedElement_class(problem,interpretation,element);
58887 neg find scopeDisallowsNewEAnnotation_class(problem, interpretation);
58888 neg find isPrimitive(element);
58889} or {
58890 find interpretation(problem,interpretation);
58891 PartialInterpretation.openWorldElements(interpretation,element);
58892 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
58893 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
58894 neg find mustInstanceOfEObject_class(problem,interpretation,element);
58895 neg find mustInstanceOfENamedElement_class(problem,interpretation,element);
58896 neg find scopeDisallowsNewEAnnotation_class(problem, interpretation);
58897 neg find isPrimitive(element);
58898} or
58899{ find mustInstanceOfEAnnotation_class(problem,interpretation,element); }
58900/**
58901 * An element must be an instance of type "EClass class".
58902 */
58903private pattern mustInstanceOfEClass_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
58904 Type.name(type,"EClass class");
58905 find directInstanceOf(problem,interpretation,element,type);
58906}
58907private pattern scopeDisallowsNewEClass_class(problem:LogicProblem, interpretation:PartialInterpretation) {
58908 find interpretation(problem,interpretation);
58909 PartialInterpretation.scopes(interpretation,scope);
58910 Scope.targetTypeInterpretation(scope,typeInterpretation);
58911 Scope.maxNewElements(scope,0);
58912 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
58913 Type.name(type,"EClass class");
58914}
58915
58916/**
58917 * An element may be an instance of type "EClass class".
58918 */
58919private pattern mayInstanceOfEClass_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
58920{
58921 find interpretation(problem,interpretation);
58922 PartialInterpretation.newElements(interpretation,element);
58923 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
58924 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
58925 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
58926 neg find mustInstanceOfEObject_class(problem,interpretation,element);
58927 neg find mustInstanceOfEDataType_class(problem,interpretation,element);
58928 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
58929 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
58930 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
58931 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
58932 neg find scopeDisallowsNewEClass_class(problem, interpretation);
58933 neg find isPrimitive(element);
58934} or {
58935 find interpretation(problem,interpretation);
58936 PartialInterpretation.openWorldElements(interpretation,element);
58937 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
58938 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
58939 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
58940 neg find mustInstanceOfEObject_class(problem,interpretation,element);
58941 neg find mustInstanceOfEDataType_class(problem,interpretation,element);
58942 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
58943 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
58944 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
58945 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
58946 neg find scopeDisallowsNewEClass_class(problem, interpretation);
58947 neg find isPrimitive(element);
58948} or
58949{ find mustInstanceOfEClass_class(problem,interpretation,element); }
58950/**
58951 * An element must be an instance of type "EClassifier class".
58952 */
58953private pattern mustInstanceOfEClassifier_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
58954 Type.name(type,"EClassifier class");
58955 find directInstanceOf(problem,interpretation,element,type);
58956}
58957private pattern scopeDisallowsNewEClassifier_class(problem:LogicProblem, interpretation:PartialInterpretation) {
58958 find interpretation(problem,interpretation);
58959 PartialInterpretation.scopes(interpretation,scope);
58960 Scope.targetTypeInterpretation(scope,typeInterpretation);
58961 Scope.maxNewElements(scope,0);
58962 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
58963 Type.name(type,"EClassifier class");
58964}
58965
58966/**
58967 * An element may be an instance of type "EClassifier class".
58968 */
58969private pattern mayInstanceOfEClassifier_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
58970{
58971 find interpretation(problem,interpretation);
58972 PartialInterpretation.newElements(interpretation,element);
58973 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
58974 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
58975 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
58976 neg find mustInstanceOfEObject_class(problem,interpretation,element);
58977 neg find mustInstanceOfEDataType_class(problem,interpretation,element);
58978 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
58979 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
58980 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
58981 neg find mustInstanceOfEClass_class(problem,interpretation,element);
58982 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
58983 neg find scopeDisallowsNewEClassifier_class(problem, interpretation);
58984 neg find isPrimitive(element);
58985} or {
58986 find interpretation(problem,interpretation);
58987 PartialInterpretation.openWorldElements(interpretation,element);
58988 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
58989 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
58990 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
58991 neg find mustInstanceOfEObject_class(problem,interpretation,element);
58992 neg find mustInstanceOfEDataType_class(problem,interpretation,element);
58993 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
58994 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
58995 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
58996 neg find mustInstanceOfEClass_class(problem,interpretation,element);
58997 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
58998 neg find scopeDisallowsNewEClassifier_class(problem, interpretation);
58999 neg find isPrimitive(element);
59000} or
59001{ find mustInstanceOfEClassifier_class(problem,interpretation,element); }
59002/**
59003 * An element must be an instance of type "EDataType class".
59004 */
59005private pattern mustInstanceOfEDataType_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
59006 Type.name(type,"EDataType class");
59007 find directInstanceOf(problem,interpretation,element,type);
59008}
59009private pattern scopeDisallowsNewEDataType_class(problem:LogicProblem, interpretation:PartialInterpretation) {
59010 find interpretation(problem,interpretation);
59011 PartialInterpretation.scopes(interpretation,scope);
59012 Scope.targetTypeInterpretation(scope,typeInterpretation);
59013 Scope.maxNewElements(scope,0);
59014 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
59015 Type.name(type,"EDataType class");
59016}
59017
59018/**
59019 * An element may be an instance of type "EDataType class".
59020 */
59021private pattern mayInstanceOfEDataType_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
59022{
59023 find interpretation(problem,interpretation);
59024 PartialInterpretation.newElements(interpretation,element);
59025 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
59026 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
59027 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
59028 neg find mustInstanceOfEEnum_class(problem,interpretation,element);
59029 neg find mustInstanceOfEObject_class(problem,interpretation,element);
59030 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
59031 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
59032 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
59033 neg find mustInstanceOfEClass_class(problem,interpretation,element);
59034 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
59035 neg find scopeDisallowsNewEDataType_class(problem, interpretation);
59036 neg find isPrimitive(element);
59037} or {
59038 find interpretation(problem,interpretation);
59039 PartialInterpretation.openWorldElements(interpretation,element);
59040 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
59041 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
59042 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
59043 neg find mustInstanceOfEEnum_class(problem,interpretation,element);
59044 neg find mustInstanceOfEObject_class(problem,interpretation,element);
59045 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
59046 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
59047 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
59048 neg find mustInstanceOfEClass_class(problem,interpretation,element);
59049 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
59050 neg find scopeDisallowsNewEDataType_class(problem, interpretation);
59051 neg find isPrimitive(element);
59052} or
59053{ find mustInstanceOfEDataType_class(problem,interpretation,element); }
59054/**
59055 * An element must be an instance of type "EEnum class".
59056 */
59057private pattern mustInstanceOfEEnum_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
59058 Type.name(type,"EEnum class");
59059 find directInstanceOf(problem,interpretation,element,type);
59060}
59061private pattern scopeDisallowsNewEEnum_class(problem:LogicProblem, interpretation:PartialInterpretation) {
59062 find interpretation(problem,interpretation);
59063 PartialInterpretation.scopes(interpretation,scope);
59064 Scope.targetTypeInterpretation(scope,typeInterpretation);
59065 Scope.maxNewElements(scope,0);
59066 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
59067 Type.name(type,"EEnum class");
59068}
59069
59070/**
59071 * An element may be an instance of type "EEnum class".
59072 */
59073private pattern mayInstanceOfEEnum_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
59074{
59075 find interpretation(problem,interpretation);
59076 PartialInterpretation.newElements(interpretation,element);
59077 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
59078 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
59079 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
59080 neg find mustInstanceOfEObject_class(problem,interpretation,element);
59081 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
59082 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
59083 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
59084 neg find mustInstanceOfEClass_class(problem,interpretation,element);
59085 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
59086 neg find scopeDisallowsNewEEnum_class(problem, interpretation);
59087 neg find isPrimitive(element);
59088} or {
59089 find interpretation(problem,interpretation);
59090 PartialInterpretation.openWorldElements(interpretation,element);
59091 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
59092 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
59093 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
59094 neg find mustInstanceOfEObject_class(problem,interpretation,element);
59095 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
59096 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
59097 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
59098 neg find mustInstanceOfEClass_class(problem,interpretation,element);
59099 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
59100 neg find scopeDisallowsNewEEnum_class(problem, interpretation);
59101 neg find isPrimitive(element);
59102} or
59103{ find mustInstanceOfEEnum_class(problem,interpretation,element); }
59104/**
59105 * An element must be an instance of type "EEnumLiteral class".
59106 */
59107private pattern mustInstanceOfEEnumLiteral_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
59108 Type.name(type,"EEnumLiteral class");
59109 find directInstanceOf(problem,interpretation,element,type);
59110}
59111private pattern scopeDisallowsNewEEnumLiteral_class(problem:LogicProblem, interpretation:PartialInterpretation) {
59112 find interpretation(problem,interpretation);
59113 PartialInterpretation.scopes(interpretation,scope);
59114 Scope.targetTypeInterpretation(scope,typeInterpretation);
59115 Scope.maxNewElements(scope,0);
59116 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
59117 Type.name(type,"EEnumLiteral class");
59118}
59119
59120/**
59121 * An element may be an instance of type "EEnumLiteral class".
59122 */
59123private pattern mayInstanceOfEEnumLiteral_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
59124{
59125 find interpretation(problem,interpretation);
59126 PartialInterpretation.newElements(interpretation,element);
59127 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
59128 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
59129 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
59130 neg find mustInstanceOfEObject_class(problem,interpretation,element);
59131 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
59132 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
59133 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
59134 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
59135 neg find scopeDisallowsNewEEnumLiteral_class(problem, interpretation);
59136 neg find isPrimitive(element);
59137} or {
59138 find interpretation(problem,interpretation);
59139 PartialInterpretation.openWorldElements(interpretation,element);
59140 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
59141 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
59142 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
59143 neg find mustInstanceOfEObject_class(problem,interpretation,element);
59144 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
59145 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
59146 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
59147 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
59148 neg find scopeDisallowsNewEEnumLiteral_class(problem, interpretation);
59149 neg find isPrimitive(element);
59150} or
59151{ find mustInstanceOfEEnumLiteral_class(problem,interpretation,element); }
59152/**
59153 * An element must be an instance of type "EModelElement class".
59154 */
59155private pattern mustInstanceOfEModelElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
59156 Type.name(type,"EModelElement class");
59157 find directInstanceOf(problem,interpretation,element,type);
59158}
59159private pattern scopeDisallowsNewEModelElement_class(problem:LogicProblem, interpretation:PartialInterpretation) {
59160 find interpretation(problem,interpretation);
59161 PartialInterpretation.scopes(interpretation,scope);
59162 Scope.targetTypeInterpretation(scope,typeInterpretation);
59163 Scope.maxNewElements(scope,0);
59164 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
59165 Type.name(type,"EModelElement class");
59166}
59167
59168/**
59169 * An element may be an instance of type "EModelElement class".
59170 */
59171private pattern mayInstanceOfEModelElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
59172{
59173 find interpretation(problem,interpretation);
59174 PartialInterpretation.newElements(interpretation,element);
59175 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
59176 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
59177 neg find mustInstanceOfEObject_class(problem,interpretation,element);
59178 neg find mustInstanceOfENamedElement_class(problem,interpretation,element);
59179 neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element);
59180 neg find scopeDisallowsNewEModelElement_class(problem, interpretation);
59181 neg find isPrimitive(element);
59182} or {
59183 find interpretation(problem,interpretation);
59184 PartialInterpretation.openWorldElements(interpretation,element);
59185 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
59186 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
59187 neg find mustInstanceOfEObject_class(problem,interpretation,element);
59188 neg find mustInstanceOfENamedElement_class(problem,interpretation,element);
59189 neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element);
59190 neg find scopeDisallowsNewEModelElement_class(problem, interpretation);
59191 neg find isPrimitive(element);
59192} or
59193{ find mustInstanceOfEModelElement_class(problem,interpretation,element); }
59194/**
59195 * An element must be an instance of type "ENamedElement class".
59196 */
59197private pattern mustInstanceOfENamedElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
59198 Type.name(type,"ENamedElement class");
59199 find directInstanceOf(problem,interpretation,element,type);
59200}
59201private pattern scopeDisallowsNewENamedElement_class(problem:LogicProblem, interpretation:PartialInterpretation) {
59202 find interpretation(problem,interpretation);
59203 PartialInterpretation.scopes(interpretation,scope);
59204 Scope.targetTypeInterpretation(scope,typeInterpretation);
59205 Scope.maxNewElements(scope,0);
59206 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
59207 Type.name(type,"ENamedElement class");
59208}
59209
59210/**
59211 * An element may be an instance of type "ENamedElement class".
59212 */
59213private pattern mayInstanceOfENamedElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
59214{
59215 find interpretation(problem,interpretation);
59216 PartialInterpretation.newElements(interpretation,element);
59217 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
59218 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
59219 neg find mustInstanceOfEObject_class(problem,interpretation,element);
59220 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
59221 neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element);
59222 neg find scopeDisallowsNewENamedElement_class(problem, interpretation);
59223 neg find isPrimitive(element);
59224} or {
59225 find interpretation(problem,interpretation);
59226 PartialInterpretation.openWorldElements(interpretation,element);
59227 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
59228 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
59229 neg find mustInstanceOfEObject_class(problem,interpretation,element);
59230 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
59231 neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element);
59232 neg find scopeDisallowsNewENamedElement_class(problem, interpretation);
59233 neg find isPrimitive(element);
59234} or
59235{ find mustInstanceOfENamedElement_class(problem,interpretation,element); }
59236/**
59237 * An element must be an instance of type "EObject class".
59238 */
59239private pattern mustInstanceOfEObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
59240 Type.name(type,"EObject class");
59241 find directInstanceOf(problem,interpretation,element,type);
59242}
59243private pattern scopeDisallowsNewEObject_class(problem:LogicProblem, interpretation:PartialInterpretation) {
59244 find interpretation(problem,interpretation);
59245 PartialInterpretation.scopes(interpretation,scope);
59246 Scope.targetTypeInterpretation(scope,typeInterpretation);
59247 Scope.maxNewElements(scope,0);
59248 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
59249 Type.name(type,"EObject class");
59250}
59251
59252/**
59253 * An element may be an instance of type "EObject class".
59254 */
59255private pattern mayInstanceOfEObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
59256{
59257 find interpretation(problem,interpretation);
59258 PartialInterpretation.newElements(interpretation,element);
59259 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
59260 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
59261 neg find mustInstanceOfEModelElement_class(problem,interpretation,element);
59262 neg find scopeDisallowsNewEObject_class(problem, interpretation);
59263 neg find isPrimitive(element);
59264} or {
59265 find interpretation(problem,interpretation);
59266 PartialInterpretation.openWorldElements(interpretation,element);
59267 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
59268 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
59269 neg find mustInstanceOfEModelElement_class(problem,interpretation,element);
59270 neg find scopeDisallowsNewEObject_class(problem, interpretation);
59271 neg find isPrimitive(element);
59272} or
59273{ find mustInstanceOfEObject_class(problem,interpretation,element); }
59274/**
59275 * An element must be an instance of type "EOperation class".
59276 */
59277private pattern mustInstanceOfEOperation_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
59278 Type.name(type,"EOperation class");
59279 find directInstanceOf(problem,interpretation,element,type);
59280}
59281private pattern scopeDisallowsNewEOperation_class(problem:LogicProblem, interpretation:PartialInterpretation) {
59282 find interpretation(problem,interpretation);
59283 PartialInterpretation.scopes(interpretation,scope);
59284 Scope.targetTypeInterpretation(scope,typeInterpretation);
59285 Scope.maxNewElements(scope,0);
59286 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
59287 Type.name(type,"EOperation class");
59288}
59289
59290/**
59291 * An element may be an instance of type "EOperation class".
59292 */
59293private pattern mayInstanceOfEOperation_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
59294{
59295 find interpretation(problem,interpretation);
59296 PartialInterpretation.newElements(interpretation,element);
59297 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
59298 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
59299 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
59300 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
59301 neg find mustInstanceOfEObject_class(problem,interpretation,element);
59302 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
59303 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
59304 neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element);
59305 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
59306 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
59307 neg find scopeDisallowsNewEOperation_class(problem, interpretation);
59308 neg find isPrimitive(element);
59309} or {
59310 find interpretation(problem,interpretation);
59311 PartialInterpretation.openWorldElements(interpretation,element);
59312 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
59313 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
59314 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
59315 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
59316 neg find mustInstanceOfEObject_class(problem,interpretation,element);
59317 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
59318 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
59319 neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element);
59320 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
59321 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
59322 neg find scopeDisallowsNewEOperation_class(problem, interpretation);
59323 neg find isPrimitive(element);
59324} or
59325{ find mustInstanceOfEOperation_class(problem,interpretation,element); }
59326/**
59327 * An element must be an instance of type "EPackage class".
59328 */
59329private pattern mustInstanceOfEPackage_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
59330 Type.name(type,"EPackage class");
59331 find directInstanceOf(problem,interpretation,element,type);
59332}
59333private pattern scopeDisallowsNewEPackage_class(problem:LogicProblem, interpretation:PartialInterpretation) {
59334 find interpretation(problem,interpretation);
59335 PartialInterpretation.scopes(interpretation,scope);
59336 Scope.targetTypeInterpretation(scope,typeInterpretation);
59337 Scope.maxNewElements(scope,0);
59338 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
59339 Type.name(type,"EPackage class");
59340}
59341
59342/**
59343 * An element may be an instance of type "EPackage class".
59344 */
59345private pattern mayInstanceOfEPackage_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
59346{
59347 find interpretation(problem,interpretation);
59348 PartialInterpretation.newElements(interpretation,element);
59349 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
59350 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
59351 neg find mustInstanceOfEObject_class(problem,interpretation,element);
59352 neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element);
59353 neg find scopeDisallowsNewEPackage_class(problem, interpretation);
59354 neg find isPrimitive(element);
59355} or {
59356 find interpretation(problem,interpretation);
59357 PartialInterpretation.openWorldElements(interpretation,element);
59358 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
59359 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
59360 neg find mustInstanceOfEObject_class(problem,interpretation,element);
59361 neg find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element);
59362 neg find scopeDisallowsNewEPackage_class(problem, interpretation);
59363 neg find isPrimitive(element);
59364} or
59365{ find mustInstanceOfEPackage_class(problem,interpretation,element); }
59366/**
59367 * An element must be an instance of type "EParameter class".
59368 */
59369private pattern mustInstanceOfEParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
59370 Type.name(type,"EParameter class");
59371 find directInstanceOf(problem,interpretation,element,type);
59372}
59373private pattern scopeDisallowsNewEParameter_class(problem:LogicProblem, interpretation:PartialInterpretation) {
59374 find interpretation(problem,interpretation);
59375 PartialInterpretation.scopes(interpretation,scope);
59376 Scope.targetTypeInterpretation(scope,typeInterpretation);
59377 Scope.maxNewElements(scope,0);
59378 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
59379 Type.name(type,"EParameter class");
59380}
59381
59382/**
59383 * An element may be an instance of type "EParameter class".
59384 */
59385private pattern mayInstanceOfEParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
59386{
59387 find interpretation(problem,interpretation);
59388 PartialInterpretation.newElements(interpretation,element);
59389 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
59390 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
59391 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
59392 neg find mustInstanceOfEObject_class(problem,interpretation,element);
59393 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
59394 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
59395 neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element);
59396 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
59397 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
59398 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
59399 neg find scopeDisallowsNewEParameter_class(problem, interpretation);
59400 neg find isPrimitive(element);
59401} or {
59402 find interpretation(problem,interpretation);
59403 PartialInterpretation.openWorldElements(interpretation,element);
59404 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
59405 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
59406 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
59407 neg find mustInstanceOfEObject_class(problem,interpretation,element);
59408 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
59409 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
59410 neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element);
59411 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
59412 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
59413 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
59414 neg find scopeDisallowsNewEParameter_class(problem, interpretation);
59415 neg find isPrimitive(element);
59416} or
59417{ find mustInstanceOfEParameter_class(problem,interpretation,element); }
59418/**
59419 * An element must be an instance of type "EReference class".
59420 */
59421private pattern mustInstanceOfEReference_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
59422 Type.name(type,"EReference class");
59423 find directInstanceOf(problem,interpretation,element,type);
59424}
59425private pattern scopeDisallowsNewEReference_class(problem:LogicProblem, interpretation:PartialInterpretation) {
59426 find interpretation(problem,interpretation);
59427 PartialInterpretation.scopes(interpretation,scope);
59428 Scope.targetTypeInterpretation(scope,typeInterpretation);
59429 Scope.maxNewElements(scope,0);
59430 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
59431 Type.name(type,"EReference class");
59432}
59433
59434/**
59435 * An element may be an instance of type "EReference class".
59436 */
59437private pattern mayInstanceOfEReference_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
59438{
59439 find interpretation(problem,interpretation);
59440 PartialInterpretation.newElements(interpretation,element);
59441 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
59442 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
59443 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
59444 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
59445 neg find mustInstanceOfEObject_class(problem,interpretation,element);
59446 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
59447 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
59448 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
59449 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
59450 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
59451 neg find mustInstanceOfEAttribute_class(problem,interpretation,element);
59452 neg find scopeDisallowsNewEReference_class(problem, interpretation);
59453 neg find isPrimitive(element);
59454} or {
59455 find interpretation(problem,interpretation);
59456 PartialInterpretation.openWorldElements(interpretation,element);
59457 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
59458 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
59459 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
59460 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
59461 neg find mustInstanceOfEObject_class(problem,interpretation,element);
59462 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
59463 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
59464 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
59465 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
59466 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
59467 neg find mustInstanceOfEAttribute_class(problem,interpretation,element);
59468 neg find scopeDisallowsNewEReference_class(problem, interpretation);
59469 neg find isPrimitive(element);
59470} or
59471{ find mustInstanceOfEReference_class(problem,interpretation,element); }
59472/**
59473 * An element must be an instance of type "EStructuralFeature class".
59474 */
59475private pattern mustInstanceOfEStructuralFeature_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
59476 Type.name(type,"EStructuralFeature class");
59477 find directInstanceOf(problem,interpretation,element,type);
59478}
59479private pattern scopeDisallowsNewEStructuralFeature_class(problem:LogicProblem, interpretation:PartialInterpretation) {
59480 find interpretation(problem,interpretation);
59481 PartialInterpretation.scopes(interpretation,scope);
59482 Scope.targetTypeInterpretation(scope,typeInterpretation);
59483 Scope.maxNewElements(scope,0);
59484 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
59485 Type.name(type,"EStructuralFeature class");
59486}
59487
59488/**
59489 * An element may be an instance of type "EStructuralFeature class".
59490 */
59491private pattern mayInstanceOfEStructuralFeature_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
59492{
59493 find interpretation(problem,interpretation);
59494 PartialInterpretation.newElements(interpretation,element);
59495 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
59496 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
59497 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
59498 neg find mustInstanceOfEReference_class(problem,interpretation,element);
59499 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
59500 neg find mustInstanceOfEObject_class(problem,interpretation,element);
59501 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
59502 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
59503 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
59504 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
59505 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
59506 neg find mustInstanceOfEAttribute_class(problem,interpretation,element);
59507 neg find scopeDisallowsNewEStructuralFeature_class(problem, interpretation);
59508 neg find isPrimitive(element);
59509} or {
59510 find interpretation(problem,interpretation);
59511 PartialInterpretation.openWorldElements(interpretation,element);
59512 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
59513 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
59514 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
59515 neg find mustInstanceOfEReference_class(problem,interpretation,element);
59516 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
59517 neg find mustInstanceOfEObject_class(problem,interpretation,element);
59518 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
59519 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
59520 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
59521 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
59522 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
59523 neg find mustInstanceOfEAttribute_class(problem,interpretation,element);
59524 neg find scopeDisallowsNewEStructuralFeature_class(problem, interpretation);
59525 neg find isPrimitive(element);
59526} or
59527{ find mustInstanceOfEStructuralFeature_class(problem,interpretation,element); }
59528/**
59529 * An element must be an instance of type "ETypedElement class".
59530 */
59531private pattern mustInstanceOfETypedElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
59532 Type.name(type,"ETypedElement class");
59533 find directInstanceOf(problem,interpretation,element,type);
59534}
59535private pattern scopeDisallowsNewETypedElement_class(problem:LogicProblem, interpretation:PartialInterpretation) {
59536 find interpretation(problem,interpretation);
59537 PartialInterpretation.scopes(interpretation,scope);
59538 Scope.targetTypeInterpretation(scope,typeInterpretation);
59539 Scope.maxNewElements(scope,0);
59540 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
59541 Type.name(type,"ETypedElement class");
59542}
59543
59544/**
59545 * An element may be an instance of type "ETypedElement class".
59546 */
59547private pattern mayInstanceOfETypedElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
59548{
59549 find interpretation(problem,interpretation);
59550 PartialInterpretation.newElements(interpretation,element);
59551 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
59552 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
59553 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
59554 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
59555 neg find mustInstanceOfEObject_class(problem,interpretation,element);
59556 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
59557 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
59558 neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element);
59559 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
59560 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
59561 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
59562 neg find scopeDisallowsNewETypedElement_class(problem, interpretation);
59563 neg find isPrimitive(element);
59564} or {
59565 find interpretation(problem,interpretation);
59566 PartialInterpretation.openWorldElements(interpretation,element);
59567 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
59568 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
59569 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
59570 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
59571 neg find mustInstanceOfEObject_class(problem,interpretation,element);
59572 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
59573 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
59574 neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element);
59575 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
59576 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
59577 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
59578 neg find scopeDisallowsNewETypedElement_class(problem, interpretation);
59579 neg find isPrimitive(element);
59580} or
59581{ find mustInstanceOfETypedElement_class(problem,interpretation,element); }
59582/**
59583 * An element must be an instance of type "EStringToStringMapEntry class".
59584 */
59585private pattern mustInstanceOfEStringToStringMapEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
59586 Type.name(type,"EStringToStringMapEntry class");
59587 find directInstanceOf(problem,interpretation,element,type);
59588}
59589private pattern scopeDisallowsNewEStringToStringMapEntry_class(problem:LogicProblem, interpretation:PartialInterpretation) {
59590 find interpretation(problem,interpretation);
59591 PartialInterpretation.scopes(interpretation,scope);
59592 Scope.targetTypeInterpretation(scope,typeInterpretation);
59593 Scope.maxNewElements(scope,0);
59594 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
59595 Type.name(type,"EStringToStringMapEntry class");
59596}
59597
59598/**
59599 * An element may be an instance of type "EStringToStringMapEntry class".
59600 */
59601private pattern mayInstanceOfEStringToStringMapEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
59602{
59603 find interpretation(problem,interpretation);
59604 PartialInterpretation.newElements(interpretation,element);
59605 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
59606 neg find mustInstanceOfEObject_class(problem,interpretation,element);
59607 neg find mustInstanceOfEModelElement_class(problem,interpretation,element);
59608 neg find scopeDisallowsNewEStringToStringMapEntry_class(problem, interpretation);
59609 neg find isPrimitive(element);
59610} or {
59611 find interpretation(problem,interpretation);
59612 PartialInterpretation.openWorldElements(interpretation,element);
59613 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
59614 neg find mustInstanceOfEObject_class(problem,interpretation,element);
59615 neg find mustInstanceOfEModelElement_class(problem,interpretation,element);
59616 neg find scopeDisallowsNewEStringToStringMapEntry_class(problem, interpretation);
59617 neg find isPrimitive(element);
59618} or
59619{ find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element); }
59620/**
59621 * An element must be an instance of type "EGenericType class".
59622 */
59623private pattern mustInstanceOfEGenericType_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
59624 Type.name(type,"EGenericType class");
59625 find directInstanceOf(problem,interpretation,element,type);
59626}
59627private pattern scopeDisallowsNewEGenericType_class(problem:LogicProblem, interpretation:PartialInterpretation) {
59628 find interpretation(problem,interpretation);
59629 PartialInterpretation.scopes(interpretation,scope);
59630 Scope.targetTypeInterpretation(scope,typeInterpretation);
59631 Scope.maxNewElements(scope,0);
59632 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
59633 Type.name(type,"EGenericType class");
59634}
59635
59636/**
59637 * An element may be an instance of type "EGenericType class".
59638 */
59639private pattern mayInstanceOfEGenericType_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
59640{
59641 find interpretation(problem,interpretation);
59642 PartialInterpretation.newElements(interpretation,element);
59643 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
59644 neg find mustInstanceOfEObject_class(problem,interpretation,element);
59645 neg find mustInstanceOfEModelElement_class(problem,interpretation,element);
59646 neg find scopeDisallowsNewEGenericType_class(problem, interpretation);
59647 neg find isPrimitive(element);
59648} or {
59649 find interpretation(problem,interpretation);
59650 PartialInterpretation.openWorldElements(interpretation,element);
59651 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
59652 neg find mustInstanceOfEObject_class(problem,interpretation,element);
59653 neg find mustInstanceOfEModelElement_class(problem,interpretation,element);
59654 neg find scopeDisallowsNewEGenericType_class(problem, interpretation);
59655 neg find isPrimitive(element);
59656} or
59657{ find mustInstanceOfEGenericType_class(problem,interpretation,element); }
59658/**
59659 * An element must be an instance of type "ETypeParameter class".
59660 */
59661private pattern mustInstanceOfETypeParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
59662 Type.name(type,"ETypeParameter class");
59663 find directInstanceOf(problem,interpretation,element,type);
59664}
59665private pattern scopeDisallowsNewETypeParameter_class(problem:LogicProblem, interpretation:PartialInterpretation) {
59666 find interpretation(problem,interpretation);
59667 PartialInterpretation.scopes(interpretation,scope);
59668 Scope.targetTypeInterpretation(scope,typeInterpretation);
59669 Scope.maxNewElements(scope,0);
59670 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
59671 Type.name(type,"ETypeParameter class");
59672}
59673
59674/**
59675 * An element may be an instance of type "ETypeParameter class".
59676 */
59677private pattern mayInstanceOfETypeParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
59678{
59679 find interpretation(problem,interpretation);
59680 PartialInterpretation.newElements(interpretation,element);
59681 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
59682 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
59683 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
59684 neg find mustInstanceOfEObject_class(problem,interpretation,element);
59685 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
59686 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
59687 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
59688 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
59689 neg find scopeDisallowsNewETypeParameter_class(problem, interpretation);
59690 neg find isPrimitive(element);
59691} or {
59692 find interpretation(problem,interpretation);
59693 PartialInterpretation.openWorldElements(interpretation,element);
59694 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
59695 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
59696 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
59697 neg find mustInstanceOfEObject_class(problem,interpretation,element);
59698 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
59699 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
59700 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
59701 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
59702 neg find scopeDisallowsNewETypeParameter_class(problem, interpretation);
59703 neg find isPrimitive(element);
59704} or
59705{ find mustInstanceOfETypeParameter_class(problem,interpretation,element); }
59706/**
59707 * An element must be an instance of type "EModelElement class DefinedPart".
59708 */
59709private pattern mustInstanceOfEModelElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
59710 Type.name(type,"EModelElement class DefinedPart");
59711 find directInstanceOf(problem,interpretation,element,type);
59712}
59713private pattern scopeDisallowsNewEModelElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
59714 find interpretation(problem,interpretation);
59715 PartialInterpretation.scopes(interpretation,scope);
59716 Scope.targetTypeInterpretation(scope,typeInterpretation);
59717 Scope.maxNewElements(scope,0);
59718 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
59719 Type.name(type,"EModelElement class DefinedPart");
59720}
59721
59722/**
59723 * An element may be an instance of type "EModelElement class DefinedPart".
59724 */
59725private pattern mayInstanceOfEModelElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
59726{ find mustInstanceOfEModelElement_class_DefinedPart(problem,interpretation,element); }
59727/**
59728 * An element must be an instance of type "EModelElement class UndefinedPart".
59729 */
59730private pattern mustInstanceOfEModelElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
59731 Type.name(type,"EModelElement class UndefinedPart");
59732 find directInstanceOf(problem,interpretation,element,type);
59733}
59734private pattern scopeDisallowsNewEModelElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
59735 find interpretation(problem,interpretation);
59736 PartialInterpretation.scopes(interpretation,scope);
59737 Scope.targetTypeInterpretation(scope,typeInterpretation);
59738 Scope.maxNewElements(scope,0);
59739 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
59740 Type.name(type,"EModelElement class UndefinedPart");
59741}
59742
59743/**
59744 * An element may be an instance of type "EModelElement class UndefinedPart".
59745 */
59746private pattern mayInstanceOfEModelElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
59747{
59748 find interpretation(problem,interpretation);
59749 PartialInterpretation.newElements(interpretation,element);
59750 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
59751 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
59752 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
59753 neg find mustInstanceOfEObject_class(problem,interpretation,element);
59754 neg find mustInstanceOfENamedElement_class(problem,interpretation,element);
59755 neg find scopeDisallowsNewEModelElement_class_UndefinedPart(problem, interpretation);
59756 neg find isPrimitive(element);
59757} or {
59758 find interpretation(problem,interpretation);
59759 PartialInterpretation.openWorldElements(interpretation,element);
59760 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
59761 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
59762 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
59763 neg find mustInstanceOfEObject_class(problem,interpretation,element);
59764 neg find mustInstanceOfENamedElement_class(problem,interpretation,element);
59765 neg find scopeDisallowsNewEModelElement_class_UndefinedPart(problem, interpretation);
59766 neg find isPrimitive(element);
59767} or
59768{ find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,element); }
59769/**
59770 * An element must be an instance of type "ENamedElement class DefinedPart".
59771 */
59772private pattern mustInstanceOfENamedElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
59773 Type.name(type,"ENamedElement class DefinedPart");
59774 find directInstanceOf(problem,interpretation,element,type);
59775}
59776private pattern scopeDisallowsNewENamedElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
59777 find interpretation(problem,interpretation);
59778 PartialInterpretation.scopes(interpretation,scope);
59779 Scope.targetTypeInterpretation(scope,typeInterpretation);
59780 Scope.maxNewElements(scope,0);
59781 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
59782 Type.name(type,"ENamedElement class DefinedPart");
59783}
59784
59785/**
59786 * An element may be an instance of type "ENamedElement class DefinedPart".
59787 */
59788private pattern mayInstanceOfENamedElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
59789{ find mustInstanceOfENamedElement_class_DefinedPart(problem,interpretation,element); }
59790/**
59791 * An element must be an instance of type "ENamedElement class UndefinedPart".
59792 */
59793private pattern mustInstanceOfENamedElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
59794 Type.name(type,"ENamedElement class UndefinedPart");
59795 find directInstanceOf(problem,interpretation,element,type);
59796}
59797private pattern scopeDisallowsNewENamedElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
59798 find interpretation(problem,interpretation);
59799 PartialInterpretation.scopes(interpretation,scope);
59800 Scope.targetTypeInterpretation(scope,typeInterpretation);
59801 Scope.maxNewElements(scope,0);
59802 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
59803 Type.name(type,"ENamedElement class UndefinedPart");
59804}
59805
59806/**
59807 * An element may be an instance of type "ENamedElement class UndefinedPart".
59808 */
59809private pattern mayInstanceOfENamedElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
59810{
59811 find interpretation(problem,interpretation);
59812 PartialInterpretation.newElements(interpretation,element);
59813 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
59814 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
59815 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
59816 neg find mustInstanceOfEObject_class(problem,interpretation,element);
59817 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
59818 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
59819 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
59820 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
59821 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
59822 neg find scopeDisallowsNewENamedElement_class_UndefinedPart(problem, interpretation);
59823 neg find isPrimitive(element);
59824} or {
59825 find interpretation(problem,interpretation);
59826 PartialInterpretation.openWorldElements(interpretation,element);
59827 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
59828 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
59829 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
59830 neg find mustInstanceOfEObject_class(problem,interpretation,element);
59831 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
59832 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
59833 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
59834 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
59835 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
59836 neg find scopeDisallowsNewENamedElement_class_UndefinedPart(problem, interpretation);
59837 neg find isPrimitive(element);
59838} or
59839{ find mustInstanceOfENamedElement_class_UndefinedPart(problem,interpretation,element); }
59840/**
59841 * An element must be an instance of type "EPackage class DefinedPart".
59842 */
59843private pattern mustInstanceOfEPackage_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
59844 Type.name(type,"EPackage class DefinedPart");
59845 find directInstanceOf(problem,interpretation,element,type);
59846}
59847private pattern scopeDisallowsNewEPackage_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
59848 find interpretation(problem,interpretation);
59849 PartialInterpretation.scopes(interpretation,scope);
59850 Scope.targetTypeInterpretation(scope,typeInterpretation);
59851 Scope.maxNewElements(scope,0);
59852 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
59853 Type.name(type,"EPackage class DefinedPart");
59854}
59855
59856/**
59857 * An element may be an instance of type "EPackage class DefinedPart".
59858 */
59859private pattern mayInstanceOfEPackage_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
59860{ find mustInstanceOfEPackage_class_DefinedPart(problem,interpretation,element); }
59861/**
59862 * An element must be an instance of type "EPackage class UndefinedPart".
59863 */
59864private pattern mustInstanceOfEPackage_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
59865 Type.name(type,"EPackage class UndefinedPart");
59866 find directInstanceOf(problem,interpretation,element,type);
59867}
59868private pattern scopeDisallowsNewEPackage_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
59869 find interpretation(problem,interpretation);
59870 PartialInterpretation.scopes(interpretation,scope);
59871 Scope.targetTypeInterpretation(scope,typeInterpretation);
59872 Scope.maxNewElements(scope,0);
59873 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
59874 Type.name(type,"EPackage class UndefinedPart");
59875}
59876
59877/**
59878 * An element may be an instance of type "EPackage class UndefinedPart".
59879 */
59880private pattern mayInstanceOfEPackage_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
59881{
59882 find interpretation(problem,interpretation);
59883 PartialInterpretation.newElements(interpretation,element);
59884 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
59885 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
59886 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
59887 neg find mustInstanceOfEObject_class(problem,interpretation,element);
59888 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
59889 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
59890 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
59891 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
59892 neg find scopeDisallowsNewEPackage_class_UndefinedPart(problem, interpretation);
59893 neg find isPrimitive(element);
59894} or {
59895 find interpretation(problem,interpretation);
59896 PartialInterpretation.openWorldElements(interpretation,element);
59897 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
59898 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
59899 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
59900 neg find mustInstanceOfEObject_class(problem,interpretation,element);
59901 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
59902 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
59903 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
59904 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
59905 neg find scopeDisallowsNewEPackage_class_UndefinedPart(problem, interpretation);
59906 neg find isPrimitive(element);
59907} or
59908{ find mustInstanceOfEPackage_class_UndefinedPart(problem,interpretation,element); }
59909
59910//////////
59911// 1.2 Relation Declaration Indexers
59912//////////
59913/**
59914 * Matcher for detecting tuples t where []eAttributeType reference EAttribute(source,target)
59915 */
59916private pattern mustInRelationeAttributeType_reference_EAttribute(
59917 problem:LogicProblem, interpretation:PartialInterpretation,
59918 source: DefinedElement, target:DefinedElement)
59919{
59920 find interpretation(problem,interpretation);
59921 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
59922 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributeType reference EAttribute");
59923 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
59924 BinaryElementRelationLink.param1(link,source);
59925 BinaryElementRelationLink.param2(link,target);
59926}
59927/**
59928 * Matcher for detecting tuples t where <>eAttributeType reference EAttribute(source,target)
59929 */
59930private pattern mayInRelationeAttributeType_reference_EAttribute(
59931 problem:LogicProblem, interpretation:PartialInterpretation,
59932 source: DefinedElement, target:DefinedElement)
59933{
59934 find interpretation(problem,interpretation);
59935 // The two endpoint of the link have to exist
59936 find mayExist(problem, interpretation, source);
59937 find mayExist(problem, interpretation, target);
59938 // Type consistency
59939 find mayInstanceOfEAttribute_class(problem,interpretation,source);
59940 find mayInstanceOfEDataType_class(problem,interpretation,target);
59941 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
59942 // the upper bound of the multiplicity should be considered.
59943 numberOfExistingReferences == count find mustInRelationeAttributeType_reference_EAttribute(problem,interpretation,source,_);
59944 check(numberOfExistingReferences < 1);
59945} or {
59946 find mustInRelationeAttributeType_reference_EAttribute(problem,interpretation,source,target);
59947}
59948/**
59949 * Matcher for detecting tuples t where []details reference EAnnotation(source,target)
59950 */
59951private pattern mustInRelationdetails_reference_EAnnotation(
59952 problem:LogicProblem, interpretation:PartialInterpretation,
59953 source: DefinedElement, target:DefinedElement)
59954{
59955 find interpretation(problem,interpretation);
59956 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
59957 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"details reference EAnnotation");
59958 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
59959 BinaryElementRelationLink.param1(link,source);
59960 BinaryElementRelationLink.param2(link,target);
59961}
59962/**
59963 * Matcher for detecting tuples t where <>details reference EAnnotation(source,target)
59964 */
59965private pattern mayInRelationdetails_reference_EAnnotation(
59966 problem:LogicProblem, interpretation:PartialInterpretation,
59967 source: DefinedElement, target:DefinedElement)
59968{
59969 find interpretation(problem,interpretation);
59970 // The two endpoint of the link have to exist
59971 find mayExist(problem, interpretation, source);
59972 find mayExist(problem, interpretation, target);
59973 // Type consistency
59974 find mayInstanceOfEAnnotation_class(problem,interpretation,source);
59975 find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,target);
59976 // The reference is containment, then a new reference cannot be create if:
59977 // 1. Multiple parents
59978 neg find mustContains4(problem,interpretation,_,target);
59979 // 2. Circle in the containment hierarchy
59980 neg find mustTransitiveContains(source,target);
59981} or {
59982 find mustInRelationdetails_reference_EAnnotation(problem,interpretation,source,target);
59983}
59984/**
59985 * Matcher for detecting tuples t where []eModelElement reference EAnnotation(source,target)
59986 */
59987private pattern mustInRelationeModelElement_reference_EAnnotation(
59988 problem:LogicProblem, interpretation:PartialInterpretation,
59989 source: DefinedElement, target:DefinedElement)
59990{
59991 find interpretation(problem,interpretation);
59992 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
59993 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eModelElement reference EAnnotation");
59994 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
59995 BinaryElementRelationLink.param1(link,source);
59996 BinaryElementRelationLink.param2(link,target);
59997}
59998/**
59999 * Matcher for detecting tuples t where <>eModelElement reference EAnnotation(source,target)
60000 */
60001private pattern mayInRelationeModelElement_reference_EAnnotation(
60002 problem:LogicProblem, interpretation:PartialInterpretation,
60003 source: DefinedElement, target:DefinedElement)
60004{
60005 find interpretation(problem,interpretation);
60006 // The two endpoint of the link have to exist
60007 find mayExist(problem, interpretation, source);
60008 find mayExist(problem, interpretation, target);
60009 // Type consistency
60010 find mayInstanceOfEAnnotation_class(problem,interpretation,source);
60011 find mayInstanceOfEModelElement_class(problem,interpretation,target);
60012 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
60013 // the upper bound of the multiplicity should be considered.
60014 numberOfExistingReferences == count find mustInRelationeModelElement_reference_EAnnotation(problem,interpretation,source,_);
60015 check(numberOfExistingReferences < 1);
60016 // The eOpposite of the reference is containment, then a referene cannot be created if
60017 // 1. Multiple parents
60018 neg find mustContains4(problem,interpretation,source,_);
60019 // 2. Circle in the containment hierarchy
60020 neg find mustTransitiveContains(source,target);
60021} or {
60022 find mustInRelationeModelElement_reference_EAnnotation(problem,interpretation,source,target);
60023}
60024/**
60025 * Matcher for detecting tuples t where []contents reference EAnnotation(source,target)
60026 */
60027private pattern mustInRelationcontents_reference_EAnnotation(
60028 problem:LogicProblem, interpretation:PartialInterpretation,
60029 source: DefinedElement, target:DefinedElement)
60030{
60031 find interpretation(problem,interpretation);
60032 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
60033 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"contents reference EAnnotation");
60034 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
60035 BinaryElementRelationLink.param1(link,source);
60036 BinaryElementRelationLink.param2(link,target);
60037}
60038/**
60039 * Matcher for detecting tuples t where <>contents reference EAnnotation(source,target)
60040 */
60041private pattern mayInRelationcontents_reference_EAnnotation(
60042 problem:LogicProblem, interpretation:PartialInterpretation,
60043 source: DefinedElement, target:DefinedElement)
60044{
60045 find interpretation(problem,interpretation);
60046 // The two endpoint of the link have to exist
60047 find mayExist(problem, interpretation, source);
60048 find mayExist(problem, interpretation, target);
60049 // Type consistency
60050 find mayInstanceOfEAnnotation_class(problem,interpretation,source);
60051 find mayInstanceOfEObject_class(problem,interpretation,target);
60052 // The reference is containment, then a new reference cannot be create if:
60053 // 1. Multiple parents
60054 neg find mustContains4(problem,interpretation,_,target);
60055 // 2. Circle in the containment hierarchy
60056 neg find mustTransitiveContains(source,target);
60057} or {
60058 find mustInRelationcontents_reference_EAnnotation(problem,interpretation,source,target);
60059}
60060/**
60061 * Matcher for detecting tuples t where []references reference EAnnotation(source,target)
60062 */
60063private pattern mustInRelationreferences_reference_EAnnotation(
60064 problem:LogicProblem, interpretation:PartialInterpretation,
60065 source: DefinedElement, target:DefinedElement)
60066{
60067 find interpretation(problem,interpretation);
60068 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
60069 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"references reference EAnnotation");
60070 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
60071 BinaryElementRelationLink.param1(link,source);
60072 BinaryElementRelationLink.param2(link,target);
60073}
60074/**
60075 * Matcher for detecting tuples t where <>references reference EAnnotation(source,target)
60076 */
60077private pattern mayInRelationreferences_reference_EAnnotation(
60078 problem:LogicProblem, interpretation:PartialInterpretation,
60079 source: DefinedElement, target:DefinedElement)
60080{
60081 find interpretation(problem,interpretation);
60082 // The two endpoint of the link have to exist
60083 find mayExist(problem, interpretation, source);
60084 find mayExist(problem, interpretation, target);
60085 // Type consistency
60086 find mayInstanceOfEAnnotation_class(problem,interpretation,source);
60087 find mayInstanceOfEObject_class(problem,interpretation,target);
60088} or {
60089 find mustInRelationreferences_reference_EAnnotation(problem,interpretation,source,target);
60090}
60091/**
60092 * Matcher for detecting tuples t where []eSuperTypes reference EClass(source,target)
60093 */
60094private pattern mustInRelationeSuperTypes_reference_EClass(
60095 problem:LogicProblem, interpretation:PartialInterpretation,
60096 source: DefinedElement, target:DefinedElement)
60097{
60098 find interpretation(problem,interpretation);
60099 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
60100 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eSuperTypes reference EClass");
60101 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
60102 BinaryElementRelationLink.param1(link,source);
60103 BinaryElementRelationLink.param2(link,target);
60104}
60105/**
60106 * Matcher for detecting tuples t where <>eSuperTypes reference EClass(source,target)
60107 */
60108private pattern mayInRelationeSuperTypes_reference_EClass(
60109 problem:LogicProblem, interpretation:PartialInterpretation,
60110 source: DefinedElement, target:DefinedElement)
60111{
60112 find interpretation(problem,interpretation);
60113 // The two endpoint of the link have to exist
60114 find mayExist(problem, interpretation, source);
60115 find mayExist(problem, interpretation, target);
60116 // Type consistency
60117 find mayInstanceOfEClass_class(problem,interpretation,source);
60118 find mayInstanceOfEClass_class(problem,interpretation,target);
60119} or {
60120 find mustInRelationeSuperTypes_reference_EClass(problem,interpretation,source,target);
60121}
60122/**
60123 * Matcher for detecting tuples t where []eOperations reference EClass(source,target)
60124 */
60125private pattern mustInRelationeOperations_reference_EClass(
60126 problem:LogicProblem, interpretation:PartialInterpretation,
60127 source: DefinedElement, target:DefinedElement)
60128{
60129 find interpretation(problem,interpretation);
60130 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
60131 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eOperations reference EClass");
60132 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
60133 BinaryElementRelationLink.param1(link,source);
60134 BinaryElementRelationLink.param2(link,target);
60135}
60136/**
60137 * Matcher for detecting tuples t where <>eOperations reference EClass(source,target)
60138 */
60139private pattern mayInRelationeOperations_reference_EClass(
60140 problem:LogicProblem, interpretation:PartialInterpretation,
60141 source: DefinedElement, target:DefinedElement)
60142{
60143 find interpretation(problem,interpretation);
60144 // The two endpoint of the link have to exist
60145 find mayExist(problem, interpretation, source);
60146 find mayExist(problem, interpretation, target);
60147 // Type consistency
60148 find mayInstanceOfEClass_class(problem,interpretation,source);
60149 find mayInstanceOfEOperation_class(problem,interpretation,target);
60150 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
60151 // the upper bound of the opposite reference multiplicity should be considered.
60152 numberOfExistingOppositeReferences == count find mustInRelationeContainingClass_reference_EOperation(problem,interpretation,target,_);
60153 check(numberOfExistingOppositeReferences < 1);
60154 // The reference is containment, then a new reference cannot be create if:
60155 // 1. Multiple parents
60156 neg find mustContains4(problem,interpretation,_,target);
60157 // 2. Circle in the containment hierarchy
60158 neg find mustTransitiveContains(source,target);
60159} or {
60160 find mustInRelationeOperations_reference_EClass(problem,interpretation,source,target);
60161}
60162/**
60163 * Matcher for detecting tuples t where []eAllAttributes reference EClass(source,target)
60164 */
60165private pattern mustInRelationeAllAttributes_reference_EClass(
60166 problem:LogicProblem, interpretation:PartialInterpretation,
60167 source: DefinedElement, target:DefinedElement)
60168{
60169 find interpretation(problem,interpretation);
60170 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
60171 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllAttributes reference EClass");
60172 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
60173 BinaryElementRelationLink.param1(link,source);
60174 BinaryElementRelationLink.param2(link,target);
60175}
60176/**
60177 * Matcher for detecting tuples t where <>eAllAttributes reference EClass(source,target)
60178 */
60179private pattern mayInRelationeAllAttributes_reference_EClass(
60180 problem:LogicProblem, interpretation:PartialInterpretation,
60181 source: DefinedElement, target:DefinedElement)
60182{
60183 find interpretation(problem,interpretation);
60184 // The two endpoint of the link have to exist
60185 find mayExist(problem, interpretation, source);
60186 find mayExist(problem, interpretation, target);
60187 // Type consistency
60188 find mayInstanceOfEClass_class(problem,interpretation,source);
60189 find mayInstanceOfEAttribute_class(problem,interpretation,target);
60190} or {
60191 find mustInRelationeAllAttributes_reference_EClass(problem,interpretation,source,target);
60192}
60193/**
60194 * Matcher for detecting tuples t where []eAllReferences reference EClass(source,target)
60195 */
60196private pattern mustInRelationeAllReferences_reference_EClass(
60197 problem:LogicProblem, interpretation:PartialInterpretation,
60198 source: DefinedElement, target:DefinedElement)
60199{
60200 find interpretation(problem,interpretation);
60201 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
60202 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllReferences reference EClass");
60203 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
60204 BinaryElementRelationLink.param1(link,source);
60205 BinaryElementRelationLink.param2(link,target);
60206}
60207/**
60208 * Matcher for detecting tuples t where <>eAllReferences reference EClass(source,target)
60209 */
60210private pattern mayInRelationeAllReferences_reference_EClass(
60211 problem:LogicProblem, interpretation:PartialInterpretation,
60212 source: DefinedElement, target:DefinedElement)
60213{
60214 find interpretation(problem,interpretation);
60215 // The two endpoint of the link have to exist
60216 find mayExist(problem, interpretation, source);
60217 find mayExist(problem, interpretation, target);
60218 // Type consistency
60219 find mayInstanceOfEClass_class(problem,interpretation,source);
60220 find mayInstanceOfEReference_class(problem,interpretation,target);
60221} or {
60222 find mustInRelationeAllReferences_reference_EClass(problem,interpretation,source,target);
60223}
60224/**
60225 * Matcher for detecting tuples t where []eReferences reference EClass(source,target)
60226 */
60227private pattern mustInRelationeReferences_reference_EClass(
60228 problem:LogicProblem, interpretation:PartialInterpretation,
60229 source: DefinedElement, target:DefinedElement)
60230{
60231 find interpretation(problem,interpretation);
60232 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
60233 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferences reference EClass");
60234 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
60235 BinaryElementRelationLink.param1(link,source);
60236 BinaryElementRelationLink.param2(link,target);
60237}
60238/**
60239 * Matcher for detecting tuples t where <>eReferences reference EClass(source,target)
60240 */
60241private pattern mayInRelationeReferences_reference_EClass(
60242 problem:LogicProblem, interpretation:PartialInterpretation,
60243 source: DefinedElement, target:DefinedElement)
60244{
60245 find interpretation(problem,interpretation);
60246 // The two endpoint of the link have to exist
60247 find mayExist(problem, interpretation, source);
60248 find mayExist(problem, interpretation, target);
60249 // Type consistency
60250 find mayInstanceOfEClass_class(problem,interpretation,source);
60251 find mayInstanceOfEReference_class(problem,interpretation,target);
60252} or {
60253 find mustInRelationeReferences_reference_EClass(problem,interpretation,source,target);
60254}
60255/**
60256 * Matcher for detecting tuples t where []eAttributes reference EClass(source,target)
60257 */
60258private pattern mustInRelationeAttributes_reference_EClass(
60259 problem:LogicProblem, interpretation:PartialInterpretation,
60260 source: DefinedElement, target:DefinedElement)
60261{
60262 find interpretation(problem,interpretation);
60263 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
60264 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributes reference EClass");
60265 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
60266 BinaryElementRelationLink.param1(link,source);
60267 BinaryElementRelationLink.param2(link,target);
60268}
60269/**
60270 * Matcher for detecting tuples t where <>eAttributes reference EClass(source,target)
60271 */
60272private pattern mayInRelationeAttributes_reference_EClass(
60273 problem:LogicProblem, interpretation:PartialInterpretation,
60274 source: DefinedElement, target:DefinedElement)
60275{
60276 find interpretation(problem,interpretation);
60277 // The two endpoint of the link have to exist
60278 find mayExist(problem, interpretation, source);
60279 find mayExist(problem, interpretation, target);
60280 // Type consistency
60281 find mayInstanceOfEClass_class(problem,interpretation,source);
60282 find mayInstanceOfEAttribute_class(problem,interpretation,target);
60283} or {
60284 find mustInRelationeAttributes_reference_EClass(problem,interpretation,source,target);
60285}
60286/**
60287 * Matcher for detecting tuples t where []eAllContainments reference EClass(source,target)
60288 */
60289private pattern mustInRelationeAllContainments_reference_EClass(
60290 problem:LogicProblem, interpretation:PartialInterpretation,
60291 source: DefinedElement, target:DefinedElement)
60292{
60293 find interpretation(problem,interpretation);
60294 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
60295 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllContainments reference EClass");
60296 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
60297 BinaryElementRelationLink.param1(link,source);
60298 BinaryElementRelationLink.param2(link,target);
60299}
60300/**
60301 * Matcher for detecting tuples t where <>eAllContainments reference EClass(source,target)
60302 */
60303private pattern mayInRelationeAllContainments_reference_EClass(
60304 problem:LogicProblem, interpretation:PartialInterpretation,
60305 source: DefinedElement, target:DefinedElement)
60306{
60307 find interpretation(problem,interpretation);
60308 // The two endpoint of the link have to exist
60309 find mayExist(problem, interpretation, source);
60310 find mayExist(problem, interpretation, target);
60311 // Type consistency
60312 find mayInstanceOfEClass_class(problem,interpretation,source);
60313 find mayInstanceOfEReference_class(problem,interpretation,target);
60314} or {
60315 find mustInRelationeAllContainments_reference_EClass(problem,interpretation,source,target);
60316}
60317/**
60318 * Matcher for detecting tuples t where []eAllOperations reference EClass(source,target)
60319 */
60320private pattern mustInRelationeAllOperations_reference_EClass(
60321 problem:LogicProblem, interpretation:PartialInterpretation,
60322 source: DefinedElement, target:DefinedElement)
60323{
60324 find interpretation(problem,interpretation);
60325 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
60326 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllOperations reference EClass");
60327 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
60328 BinaryElementRelationLink.param1(link,source);
60329 BinaryElementRelationLink.param2(link,target);
60330}
60331/**
60332 * Matcher for detecting tuples t where <>eAllOperations reference EClass(source,target)
60333 */
60334private pattern mayInRelationeAllOperations_reference_EClass(
60335 problem:LogicProblem, interpretation:PartialInterpretation,
60336 source: DefinedElement, target:DefinedElement)
60337{
60338 find interpretation(problem,interpretation);
60339 // The two endpoint of the link have to exist
60340 find mayExist(problem, interpretation, source);
60341 find mayExist(problem, interpretation, target);
60342 // Type consistency
60343 find mayInstanceOfEClass_class(problem,interpretation,source);
60344 find mayInstanceOfEOperation_class(problem,interpretation,target);
60345} or {
60346 find mustInRelationeAllOperations_reference_EClass(problem,interpretation,source,target);
60347}
60348/**
60349 * Matcher for detecting tuples t where []eAllStructuralFeatures reference EClass(source,target)
60350 */
60351private pattern mustInRelationeAllStructuralFeatures_reference_EClass(
60352 problem:LogicProblem, interpretation:PartialInterpretation,
60353 source: DefinedElement, target:DefinedElement)
60354{
60355 find interpretation(problem,interpretation);
60356 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
60357 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllStructuralFeatures reference EClass");
60358 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
60359 BinaryElementRelationLink.param1(link,source);
60360 BinaryElementRelationLink.param2(link,target);
60361}
60362/**
60363 * Matcher for detecting tuples t where <>eAllStructuralFeatures reference EClass(source,target)
60364 */
60365private pattern mayInRelationeAllStructuralFeatures_reference_EClass(
60366 problem:LogicProblem, interpretation:PartialInterpretation,
60367 source: DefinedElement, target:DefinedElement)
60368{
60369 find interpretation(problem,interpretation);
60370 // The two endpoint of the link have to exist
60371 find mayExist(problem, interpretation, source);
60372 find mayExist(problem, interpretation, target);
60373 // Type consistency
60374 find mayInstanceOfEClass_class(problem,interpretation,source);
60375 find mayInstanceOfEStructuralFeature_class(problem,interpretation,target);
60376} or {
60377 find mustInRelationeAllStructuralFeatures_reference_EClass(problem,interpretation,source,target);
60378}
60379/**
60380 * Matcher for detecting tuples t where []eAllSuperTypes reference EClass(source,target)
60381 */
60382private pattern mustInRelationeAllSuperTypes_reference_EClass(
60383 problem:LogicProblem, interpretation:PartialInterpretation,
60384 source: DefinedElement, target:DefinedElement)
60385{
60386 find interpretation(problem,interpretation);
60387 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
60388 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllSuperTypes reference EClass");
60389 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
60390 BinaryElementRelationLink.param1(link,source);
60391 BinaryElementRelationLink.param2(link,target);
60392}
60393/**
60394 * Matcher for detecting tuples t where <>eAllSuperTypes reference EClass(source,target)
60395 */
60396private pattern mayInRelationeAllSuperTypes_reference_EClass(
60397 problem:LogicProblem, interpretation:PartialInterpretation,
60398 source: DefinedElement, target:DefinedElement)
60399{
60400 find interpretation(problem,interpretation);
60401 // The two endpoint of the link have to exist
60402 find mayExist(problem, interpretation, source);
60403 find mayExist(problem, interpretation, target);
60404 // Type consistency
60405 find mayInstanceOfEClass_class(problem,interpretation,source);
60406 find mayInstanceOfEClass_class(problem,interpretation,target);
60407} or {
60408 find mustInRelationeAllSuperTypes_reference_EClass(problem,interpretation,source,target);
60409}
60410/**
60411 * Matcher for detecting tuples t where []eIDAttribute reference EClass(source,target)
60412 */
60413private pattern mustInRelationeIDAttribute_reference_EClass(
60414 problem:LogicProblem, interpretation:PartialInterpretation,
60415 source: DefinedElement, target:DefinedElement)
60416{
60417 find interpretation(problem,interpretation);
60418 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
60419 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eIDAttribute reference EClass");
60420 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
60421 BinaryElementRelationLink.param1(link,source);
60422 BinaryElementRelationLink.param2(link,target);
60423}
60424/**
60425 * Matcher for detecting tuples t where <>eIDAttribute reference EClass(source,target)
60426 */
60427private pattern mayInRelationeIDAttribute_reference_EClass(
60428 problem:LogicProblem, interpretation:PartialInterpretation,
60429 source: DefinedElement, target:DefinedElement)
60430{
60431 find interpretation(problem,interpretation);
60432 // The two endpoint of the link have to exist
60433 find mayExist(problem, interpretation, source);
60434 find mayExist(problem, interpretation, target);
60435 // Type consistency
60436 find mayInstanceOfEClass_class(problem,interpretation,source);
60437 find mayInstanceOfEAttribute_class(problem,interpretation,target);
60438 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
60439 // the upper bound of the multiplicity should be considered.
60440 numberOfExistingReferences == count find mustInRelationeIDAttribute_reference_EClass(problem,interpretation,source,_);
60441 check(numberOfExistingReferences < 1);
60442} or {
60443 find mustInRelationeIDAttribute_reference_EClass(problem,interpretation,source,target);
60444}
60445/**
60446 * Matcher for detecting tuples t where []eStructuralFeatures reference EClass(source,target)
60447 */
60448private pattern mustInRelationeStructuralFeatures_reference_EClass(
60449 problem:LogicProblem, interpretation:PartialInterpretation,
60450 source: DefinedElement, target:DefinedElement)
60451{
60452 find interpretation(problem,interpretation);
60453 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
60454 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eStructuralFeatures reference EClass");
60455 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
60456 BinaryElementRelationLink.param1(link,source);
60457 BinaryElementRelationLink.param2(link,target);
60458}
60459/**
60460 * Matcher for detecting tuples t where <>eStructuralFeatures reference EClass(source,target)
60461 */
60462private pattern mayInRelationeStructuralFeatures_reference_EClass(
60463 problem:LogicProblem, interpretation:PartialInterpretation,
60464 source: DefinedElement, target:DefinedElement)
60465{
60466 find interpretation(problem,interpretation);
60467 // The two endpoint of the link have to exist
60468 find mayExist(problem, interpretation, source);
60469 find mayExist(problem, interpretation, target);
60470 // Type consistency
60471 find mayInstanceOfEClass_class(problem,interpretation,source);
60472 find mayInstanceOfEStructuralFeature_class(problem,interpretation,target);
60473 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
60474 // the upper bound of the opposite reference multiplicity should be considered.
60475 numberOfExistingOppositeReferences == count find mustInRelationeContainingClass_reference_EStructuralFeature(problem,interpretation,target,_);
60476 check(numberOfExistingOppositeReferences < 1);
60477 // The reference is containment, then a new reference cannot be create if:
60478 // 1. Multiple parents
60479 neg find mustContains4(problem,interpretation,_,target);
60480 // 2. Circle in the containment hierarchy
60481 neg find mustTransitiveContains(source,target);
60482} or {
60483 find mustInRelationeStructuralFeatures_reference_EClass(problem,interpretation,source,target);
60484}
60485/**
60486 * Matcher for detecting tuples t where []eGenericSuperTypes reference EClass(source,target)
60487 */
60488private pattern mustInRelationeGenericSuperTypes_reference_EClass(
60489 problem:LogicProblem, interpretation:PartialInterpretation,
60490 source: DefinedElement, target:DefinedElement)
60491{
60492 find interpretation(problem,interpretation);
60493 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
60494 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eGenericSuperTypes reference EClass");
60495 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
60496 BinaryElementRelationLink.param1(link,source);
60497 BinaryElementRelationLink.param2(link,target);
60498}
60499/**
60500 * Matcher for detecting tuples t where <>eGenericSuperTypes reference EClass(source,target)
60501 */
60502private pattern mayInRelationeGenericSuperTypes_reference_EClass(
60503 problem:LogicProblem, interpretation:PartialInterpretation,
60504 source: DefinedElement, target:DefinedElement)
60505{
60506 find interpretation(problem,interpretation);
60507 // The two endpoint of the link have to exist
60508 find mayExist(problem, interpretation, source);
60509 find mayExist(problem, interpretation, target);
60510 // Type consistency
60511 find mayInstanceOfEClass_class(problem,interpretation,source);
60512 find mayInstanceOfEGenericType_class(problem,interpretation,target);
60513 // The reference is containment, then a new reference cannot be create if:
60514 // 1. Multiple parents
60515 neg find mustContains4(problem,interpretation,_,target);
60516 // 2. Circle in the containment hierarchy
60517 neg find mustTransitiveContains(source,target);
60518} or {
60519 find mustInRelationeGenericSuperTypes_reference_EClass(problem,interpretation,source,target);
60520}
60521/**
60522 * Matcher for detecting tuples t where []eAllGenericSuperTypes reference EClass(source,target)
60523 */
60524private pattern mustInRelationeAllGenericSuperTypes_reference_EClass(
60525 problem:LogicProblem, interpretation:PartialInterpretation,
60526 source: DefinedElement, target:DefinedElement)
60527{
60528 find interpretation(problem,interpretation);
60529 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
60530 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllGenericSuperTypes reference EClass");
60531 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
60532 BinaryElementRelationLink.param1(link,source);
60533 BinaryElementRelationLink.param2(link,target);
60534}
60535/**
60536 * Matcher for detecting tuples t where <>eAllGenericSuperTypes reference EClass(source,target)
60537 */
60538private pattern mayInRelationeAllGenericSuperTypes_reference_EClass(
60539 problem:LogicProblem, interpretation:PartialInterpretation,
60540 source: DefinedElement, target:DefinedElement)
60541{
60542 find interpretation(problem,interpretation);
60543 // The two endpoint of the link have to exist
60544 find mayExist(problem, interpretation, source);
60545 find mayExist(problem, interpretation, target);
60546 // Type consistency
60547 find mayInstanceOfEClass_class(problem,interpretation,source);
60548 find mayInstanceOfEGenericType_class(problem,interpretation,target);
60549} or {
60550 find mustInRelationeAllGenericSuperTypes_reference_EClass(problem,interpretation,source,target);
60551}
60552/**
60553 * Matcher for detecting tuples t where []ePackage reference EClassifier(source,target)
60554 */
60555private pattern mustInRelationePackage_reference_EClassifier(
60556 problem:LogicProblem, interpretation:PartialInterpretation,
60557 source: DefinedElement, target:DefinedElement)
60558{
60559 find interpretation(problem,interpretation);
60560 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
60561 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"ePackage reference EClassifier");
60562 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
60563 BinaryElementRelationLink.param1(link,source);
60564 BinaryElementRelationLink.param2(link,target);
60565}
60566/**
60567 * Matcher for detecting tuples t where <>ePackage reference EClassifier(source,target)
60568 */
60569private pattern mayInRelationePackage_reference_EClassifier(
60570 problem:LogicProblem, interpretation:PartialInterpretation,
60571 source: DefinedElement, target:DefinedElement)
60572{
60573 find interpretation(problem,interpretation);
60574 // The two endpoint of the link have to exist
60575 find mayExist(problem, interpretation, source);
60576 find mayExist(problem, interpretation, target);
60577 // Type consistency
60578 find mayInstanceOfEClassifier_class(problem,interpretation,source);
60579 find mayInstanceOfEPackage_class(problem,interpretation,target);
60580 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
60581 // the upper bound of the multiplicity should be considered.
60582 numberOfExistingReferences == count find mustInRelationePackage_reference_EClassifier(problem,interpretation,source,_);
60583 check(numberOfExistingReferences < 1);
60584 // The eOpposite of the reference is containment, then a referene cannot be created if
60585 // 1. Multiple parents
60586 neg find mustContains4(problem,interpretation,source,_);
60587 // 2. Circle in the containment hierarchy
60588 neg find mustTransitiveContains(source,target);
60589} or {
60590 find mustInRelationePackage_reference_EClassifier(problem,interpretation,source,target);
60591}
60592/**
60593 * Matcher for detecting tuples t where []eTypeParameters reference EClassifier(source,target)
60594 */
60595private pattern mustInRelationeTypeParameters_reference_EClassifier(
60596 problem:LogicProblem, interpretation:PartialInterpretation,
60597 source: DefinedElement, target:DefinedElement)
60598{
60599 find interpretation(problem,interpretation);
60600 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
60601 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeParameters reference EClassifier");
60602 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
60603 BinaryElementRelationLink.param1(link,source);
60604 BinaryElementRelationLink.param2(link,target);
60605}
60606/**
60607 * Matcher for detecting tuples t where <>eTypeParameters reference EClassifier(source,target)
60608 */
60609private pattern mayInRelationeTypeParameters_reference_EClassifier(
60610 problem:LogicProblem, interpretation:PartialInterpretation,
60611 source: DefinedElement, target:DefinedElement)
60612{
60613 find interpretation(problem,interpretation);
60614 // The two endpoint of the link have to exist
60615 find mayExist(problem, interpretation, source);
60616 find mayExist(problem, interpretation, target);
60617 // Type consistency
60618 find mayInstanceOfEClassifier_class(problem,interpretation,source);
60619 find mayInstanceOfETypeParameter_class(problem,interpretation,target);
60620 // The reference is containment, then a new reference cannot be create if:
60621 // 1. Multiple parents
60622 neg find mustContains4(problem,interpretation,_,target);
60623 // 2. Circle in the containment hierarchy
60624 neg find mustTransitiveContains(source,target);
60625} or {
60626 find mustInRelationeTypeParameters_reference_EClassifier(problem,interpretation,source,target);
60627}
60628/**
60629 * Matcher for detecting tuples t where []eLiterals reference EEnum(source,target)
60630 */
60631private pattern mustInRelationeLiterals_reference_EEnum(
60632 problem:LogicProblem, interpretation:PartialInterpretation,
60633 source: DefinedElement, target:DefinedElement)
60634{
60635 find interpretation(problem,interpretation);
60636 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
60637 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eLiterals reference EEnum");
60638 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
60639 BinaryElementRelationLink.param1(link,source);
60640 BinaryElementRelationLink.param2(link,target);
60641}
60642/**
60643 * Matcher for detecting tuples t where <>eLiterals reference EEnum(source,target)
60644 */
60645private pattern mayInRelationeLiterals_reference_EEnum(
60646 problem:LogicProblem, interpretation:PartialInterpretation,
60647 source: DefinedElement, target:DefinedElement)
60648{
60649 find interpretation(problem,interpretation);
60650 // The two endpoint of the link have to exist
60651 find mayExist(problem, interpretation, source);
60652 find mayExist(problem, interpretation, target);
60653 // Type consistency
60654 find mayInstanceOfEEnum_class(problem,interpretation,source);
60655 find mayInstanceOfEEnumLiteral_class(problem,interpretation,target);
60656 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
60657 // the upper bound of the opposite reference multiplicity should be considered.
60658 numberOfExistingOppositeReferences == count find mustInRelationeEnum_reference_EEnumLiteral(problem,interpretation,target,_);
60659 check(numberOfExistingOppositeReferences < 1);
60660 // The reference is containment, then a new reference cannot be create if:
60661 // 1. Multiple parents
60662 neg find mustContains4(problem,interpretation,_,target);
60663 // 2. Circle in the containment hierarchy
60664 neg find mustTransitiveContains(source,target);
60665} or {
60666 find mustInRelationeLiterals_reference_EEnum(problem,interpretation,source,target);
60667}
60668/**
60669 * Matcher for detecting tuples t where []eEnum reference EEnumLiteral(source,target)
60670 */
60671private pattern mustInRelationeEnum_reference_EEnumLiteral(
60672 problem:LogicProblem, interpretation:PartialInterpretation,
60673 source: DefinedElement, target:DefinedElement)
60674{
60675 find interpretation(problem,interpretation);
60676 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
60677 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eEnum reference EEnumLiteral");
60678 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
60679 BinaryElementRelationLink.param1(link,source);
60680 BinaryElementRelationLink.param2(link,target);
60681}
60682/**
60683 * Matcher for detecting tuples t where <>eEnum reference EEnumLiteral(source,target)
60684 */
60685private pattern mayInRelationeEnum_reference_EEnumLiteral(
60686 problem:LogicProblem, interpretation:PartialInterpretation,
60687 source: DefinedElement, target:DefinedElement)
60688{
60689 find interpretation(problem,interpretation);
60690 // The two endpoint of the link have to exist
60691 find mayExist(problem, interpretation, source);
60692 find mayExist(problem, interpretation, target);
60693 // Type consistency
60694 find mayInstanceOfEEnumLiteral_class(problem,interpretation,source);
60695 find mayInstanceOfEEnum_class(problem,interpretation,target);
60696 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
60697 // the upper bound of the multiplicity should be considered.
60698 numberOfExistingReferences == count find mustInRelationeEnum_reference_EEnumLiteral(problem,interpretation,source,_);
60699 check(numberOfExistingReferences < 1);
60700 // The eOpposite of the reference is containment, then a referene cannot be created if
60701 // 1. Multiple parents
60702 neg find mustContains4(problem,interpretation,source,_);
60703 // 2. Circle in the containment hierarchy
60704 neg find mustTransitiveContains(source,target);
60705} or {
60706 find mustInRelationeEnum_reference_EEnumLiteral(problem,interpretation,source,target);
60707}
60708/**
60709 * Matcher for detecting tuples t where []eAnnotations reference EModelElement(source,target)
60710 */
60711private pattern mustInRelationeAnnotations_reference_EModelElement(
60712 problem:LogicProblem, interpretation:PartialInterpretation,
60713 source: DefinedElement, target:DefinedElement)
60714{
60715 find interpretation(problem,interpretation);
60716 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
60717 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAnnotations reference EModelElement");
60718 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
60719 BinaryElementRelationLink.param1(link,source);
60720 BinaryElementRelationLink.param2(link,target);
60721}
60722/**
60723 * Matcher for detecting tuples t where <>eAnnotations reference EModelElement(source,target)
60724 */
60725private pattern mayInRelationeAnnotations_reference_EModelElement(
60726 problem:LogicProblem, interpretation:PartialInterpretation,
60727 source: DefinedElement, target:DefinedElement)
60728{
60729 find interpretation(problem,interpretation);
60730 // The two endpoint of the link have to exist
60731 find mayExist(problem, interpretation, source);
60732 find mayExist(problem, interpretation, target);
60733 // Type consistency
60734 find mayInstanceOfEModelElement_class(problem,interpretation,source);
60735 find mayInstanceOfEAnnotation_class(problem,interpretation,target);
60736 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
60737 // the upper bound of the opposite reference multiplicity should be considered.
60738 numberOfExistingOppositeReferences == count find mustInRelationeModelElement_reference_EAnnotation(problem,interpretation,target,_);
60739 check(numberOfExistingOppositeReferences < 1);
60740 // The reference is containment, then a new reference cannot be create if:
60741 // 1. Multiple parents
60742 neg find mustContains4(problem,interpretation,_,target);
60743 // 2. Circle in the containment hierarchy
60744 neg find mustTransitiveContains(source,target);
60745} or {
60746 find mustInRelationeAnnotations_reference_EModelElement(problem,interpretation,source,target);
60747}
60748/**
60749 * Matcher for detecting tuples t where []eContainingClass reference EOperation(source,target)
60750 */
60751private pattern mustInRelationeContainingClass_reference_EOperation(
60752 problem:LogicProblem, interpretation:PartialInterpretation,
60753 source: DefinedElement, target:DefinedElement)
60754{
60755 find interpretation(problem,interpretation);
60756 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
60757 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eContainingClass reference EOperation");
60758 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
60759 BinaryElementRelationLink.param1(link,source);
60760 BinaryElementRelationLink.param2(link,target);
60761}
60762/**
60763 * Matcher for detecting tuples t where <>eContainingClass reference EOperation(source,target)
60764 */
60765private pattern mayInRelationeContainingClass_reference_EOperation(
60766 problem:LogicProblem, interpretation:PartialInterpretation,
60767 source: DefinedElement, target:DefinedElement)
60768{
60769 find interpretation(problem,interpretation);
60770 // The two endpoint of the link have to exist
60771 find mayExist(problem, interpretation, source);
60772 find mayExist(problem, interpretation, target);
60773 // Type consistency
60774 find mayInstanceOfEOperation_class(problem,interpretation,source);
60775 find mayInstanceOfEClass_class(problem,interpretation,target);
60776 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
60777 // the upper bound of the multiplicity should be considered.
60778 numberOfExistingReferences == count find mustInRelationeContainingClass_reference_EOperation(problem,interpretation,source,_);
60779 check(numberOfExistingReferences < 1);
60780 // The eOpposite of the reference is containment, then a referene cannot be created if
60781 // 1. Multiple parents
60782 neg find mustContains4(problem,interpretation,source,_);
60783 // 2. Circle in the containment hierarchy
60784 neg find mustTransitiveContains(source,target);
60785} or {
60786 find mustInRelationeContainingClass_reference_EOperation(problem,interpretation,source,target);
60787}
60788/**
60789 * Matcher for detecting tuples t where []eTypeParameters reference EOperation(source,target)
60790 */
60791private pattern mustInRelationeTypeParameters_reference_EOperation(
60792 problem:LogicProblem, interpretation:PartialInterpretation,
60793 source: DefinedElement, target:DefinedElement)
60794{
60795 find interpretation(problem,interpretation);
60796 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
60797 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeParameters reference EOperation");
60798 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
60799 BinaryElementRelationLink.param1(link,source);
60800 BinaryElementRelationLink.param2(link,target);
60801}
60802/**
60803 * Matcher for detecting tuples t where <>eTypeParameters reference EOperation(source,target)
60804 */
60805private pattern mayInRelationeTypeParameters_reference_EOperation(
60806 problem:LogicProblem, interpretation:PartialInterpretation,
60807 source: DefinedElement, target:DefinedElement)
60808{
60809 find interpretation(problem,interpretation);
60810 // The two endpoint of the link have to exist
60811 find mayExist(problem, interpretation, source);
60812 find mayExist(problem, interpretation, target);
60813 // Type consistency
60814 find mayInstanceOfEOperation_class(problem,interpretation,source);
60815 find mayInstanceOfETypeParameter_class(problem,interpretation,target);
60816 // The reference is containment, then a new reference cannot be create if:
60817 // 1. Multiple parents
60818 neg find mustContains4(problem,interpretation,_,target);
60819 // 2. Circle in the containment hierarchy
60820 neg find mustTransitiveContains(source,target);
60821} or {
60822 find mustInRelationeTypeParameters_reference_EOperation(problem,interpretation,source,target);
60823}
60824/**
60825 * Matcher for detecting tuples t where []eParameters reference EOperation(source,target)
60826 */
60827private pattern mustInRelationeParameters_reference_EOperation(
60828 problem:LogicProblem, interpretation:PartialInterpretation,
60829 source: DefinedElement, target:DefinedElement)
60830{
60831 find interpretation(problem,interpretation);
60832 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
60833 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eParameters reference EOperation");
60834 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
60835 BinaryElementRelationLink.param1(link,source);
60836 BinaryElementRelationLink.param2(link,target);
60837}
60838/**
60839 * Matcher for detecting tuples t where <>eParameters reference EOperation(source,target)
60840 */
60841private pattern mayInRelationeParameters_reference_EOperation(
60842 problem:LogicProblem, interpretation:PartialInterpretation,
60843 source: DefinedElement, target:DefinedElement)
60844{
60845 find interpretation(problem,interpretation);
60846 // The two endpoint of the link have to exist
60847 find mayExist(problem, interpretation, source);
60848 find mayExist(problem, interpretation, target);
60849 // Type consistency
60850 find mayInstanceOfEOperation_class(problem,interpretation,source);
60851 find mayInstanceOfEParameter_class(problem,interpretation,target);
60852 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
60853 // the upper bound of the opposite reference multiplicity should be considered.
60854 numberOfExistingOppositeReferences == count find mustInRelationeOperation_reference_EParameter(problem,interpretation,target,_);
60855 check(numberOfExistingOppositeReferences < 1);
60856 // The reference is containment, then a new reference cannot be create if:
60857 // 1. Multiple parents
60858 neg find mustContains4(problem,interpretation,_,target);
60859 // 2. Circle in the containment hierarchy
60860 neg find mustTransitiveContains(source,target);
60861} or {
60862 find mustInRelationeParameters_reference_EOperation(problem,interpretation,source,target);
60863}
60864/**
60865 * Matcher for detecting tuples t where []eExceptions reference EOperation(source,target)
60866 */
60867private pattern mustInRelationeExceptions_reference_EOperation(
60868 problem:LogicProblem, interpretation:PartialInterpretation,
60869 source: DefinedElement, target:DefinedElement)
60870{
60871 find interpretation(problem,interpretation);
60872 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
60873 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eExceptions reference EOperation");
60874 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
60875 BinaryElementRelationLink.param1(link,source);
60876 BinaryElementRelationLink.param2(link,target);
60877}
60878/**
60879 * Matcher for detecting tuples t where <>eExceptions reference EOperation(source,target)
60880 */
60881private pattern mayInRelationeExceptions_reference_EOperation(
60882 problem:LogicProblem, interpretation:PartialInterpretation,
60883 source: DefinedElement, target:DefinedElement)
60884{
60885 find interpretation(problem,interpretation);
60886 // The two endpoint of the link have to exist
60887 find mayExist(problem, interpretation, source);
60888 find mayExist(problem, interpretation, target);
60889 // Type consistency
60890 find mayInstanceOfEOperation_class(problem,interpretation,source);
60891 find mayInstanceOfEClassifier_class(problem,interpretation,target);
60892} or {
60893 find mustInRelationeExceptions_reference_EOperation(problem,interpretation,source,target);
60894}
60895/**
60896 * Matcher for detecting tuples t where []eGenericExceptions reference EOperation(source,target)
60897 */
60898private pattern mustInRelationeGenericExceptions_reference_EOperation(
60899 problem:LogicProblem, interpretation:PartialInterpretation,
60900 source: DefinedElement, target:DefinedElement)
60901{
60902 find interpretation(problem,interpretation);
60903 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
60904 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eGenericExceptions reference EOperation");
60905 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
60906 BinaryElementRelationLink.param1(link,source);
60907 BinaryElementRelationLink.param2(link,target);
60908}
60909/**
60910 * Matcher for detecting tuples t where <>eGenericExceptions reference EOperation(source,target)
60911 */
60912private pattern mayInRelationeGenericExceptions_reference_EOperation(
60913 problem:LogicProblem, interpretation:PartialInterpretation,
60914 source: DefinedElement, target:DefinedElement)
60915{
60916 find interpretation(problem,interpretation);
60917 // The two endpoint of the link have to exist
60918 find mayExist(problem, interpretation, source);
60919 find mayExist(problem, interpretation, target);
60920 // Type consistency
60921 find mayInstanceOfEOperation_class(problem,interpretation,source);
60922 find mayInstanceOfEGenericType_class(problem,interpretation,target);
60923 // The reference is containment, then a new reference cannot be create if:
60924 // 1. Multiple parents
60925 neg find mustContains4(problem,interpretation,_,target);
60926 // 2. Circle in the containment hierarchy
60927 neg find mustTransitiveContains(source,target);
60928} or {
60929 find mustInRelationeGenericExceptions_reference_EOperation(problem,interpretation,source,target);
60930}
60931/**
60932 * Matcher for detecting tuples t where []eClassifiers reference EPackage(source,target)
60933 */
60934private pattern mustInRelationeClassifiers_reference_EPackage(
60935 problem:LogicProblem, interpretation:PartialInterpretation,
60936 source: DefinedElement, target:DefinedElement)
60937{
60938 find interpretation(problem,interpretation);
60939 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
60940 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eClassifiers reference EPackage");
60941 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
60942 BinaryElementRelationLink.param1(link,source);
60943 BinaryElementRelationLink.param2(link,target);
60944}
60945/**
60946 * Matcher for detecting tuples t where <>eClassifiers reference EPackage(source,target)
60947 */
60948private pattern mayInRelationeClassifiers_reference_EPackage(
60949 problem:LogicProblem, interpretation:PartialInterpretation,
60950 source: DefinedElement, target:DefinedElement)
60951{
60952 find interpretation(problem,interpretation);
60953 // The two endpoint of the link have to exist
60954 find mayExist(problem, interpretation, source);
60955 find mayExist(problem, interpretation, target);
60956 // Type consistency
60957 find mayInstanceOfEPackage_class(problem,interpretation,source);
60958 find mayInstanceOfEClassifier_class(problem,interpretation,target);
60959 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
60960 // the upper bound of the opposite reference multiplicity should be considered.
60961 numberOfExistingOppositeReferences == count find mustInRelationePackage_reference_EClassifier(problem,interpretation,target,_);
60962 check(numberOfExistingOppositeReferences < 1);
60963 // The reference is containment, then a new reference cannot be create if:
60964 // 1. Multiple parents
60965 neg find mustContains4(problem,interpretation,_,target);
60966 // 2. Circle in the containment hierarchy
60967 neg find mustTransitiveContains(source,target);
60968} or {
60969 find mustInRelationeClassifiers_reference_EPackage(problem,interpretation,source,target);
60970}
60971/**
60972 * Matcher for detecting tuples t where []eSubpackages reference EPackage(source,target)
60973 */
60974private pattern mustInRelationeSubpackages_reference_EPackage(
60975 problem:LogicProblem, interpretation:PartialInterpretation,
60976 source: DefinedElement, target:DefinedElement)
60977{
60978 find interpretation(problem,interpretation);
60979 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
60980 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eSubpackages reference EPackage");
60981 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
60982 BinaryElementRelationLink.param1(link,source);
60983 BinaryElementRelationLink.param2(link,target);
60984}
60985/**
60986 * Matcher for detecting tuples t where <>eSubpackages reference EPackage(source,target)
60987 */
60988private pattern mayInRelationeSubpackages_reference_EPackage(
60989 problem:LogicProblem, interpretation:PartialInterpretation,
60990 source: DefinedElement, target:DefinedElement)
60991{
60992 find interpretation(problem,interpretation);
60993 // The two endpoint of the link have to exist
60994 find mayExist(problem, interpretation, source);
60995 find mayExist(problem, interpretation, target);
60996 // Type consistency
60997 find mayInstanceOfEPackage_class(problem,interpretation,source);
60998 find mayInstanceOfEPackage_class(problem,interpretation,target);
60999 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
61000 // the upper bound of the opposite reference multiplicity should be considered.
61001 numberOfExistingOppositeReferences == count find mustInRelationeSuperPackage_reference_EPackage(problem,interpretation,target,_);
61002 check(numberOfExistingOppositeReferences < 1);
61003 // The reference is containment, then a new reference cannot be create if:
61004 // 1. Multiple parents
61005 neg find mustContains4(problem,interpretation,_,target);
61006 // 2. Circle in the containment hierarchy
61007 neg find mustTransitiveContains(source,target);
61008} or {
61009 find mustInRelationeSubpackages_reference_EPackage(problem,interpretation,source,target);
61010}
61011/**
61012 * Matcher for detecting tuples t where []eSuperPackage reference EPackage(source,target)
61013 */
61014private pattern mustInRelationeSuperPackage_reference_EPackage(
61015 problem:LogicProblem, interpretation:PartialInterpretation,
61016 source: DefinedElement, target:DefinedElement)
61017{
61018 find interpretation(problem,interpretation);
61019 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
61020 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eSuperPackage reference EPackage");
61021 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
61022 BinaryElementRelationLink.param1(link,source);
61023 BinaryElementRelationLink.param2(link,target);
61024}
61025/**
61026 * Matcher for detecting tuples t where <>eSuperPackage reference EPackage(source,target)
61027 */
61028private pattern mayInRelationeSuperPackage_reference_EPackage(
61029 problem:LogicProblem, interpretation:PartialInterpretation,
61030 source: DefinedElement, target:DefinedElement)
61031{
61032 find interpretation(problem,interpretation);
61033 // The two endpoint of the link have to exist
61034 find mayExist(problem, interpretation, source);
61035 find mayExist(problem, interpretation, target);
61036 // Type consistency
61037 find mayInstanceOfEPackage_class(problem,interpretation,source);
61038 find mayInstanceOfEPackage_class(problem,interpretation,target);
61039 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
61040 // the upper bound of the multiplicity should be considered.
61041 numberOfExistingReferences == count find mustInRelationeSuperPackage_reference_EPackage(problem,interpretation,source,_);
61042 check(numberOfExistingReferences < 1);
61043 // The eOpposite of the reference is containment, then a referene cannot be created if
61044 // 1. Multiple parents
61045 neg find mustContains4(problem,interpretation,source,_);
61046 // 2. Circle in the containment hierarchy
61047 neg find mustTransitiveContains(source,target);
61048} or {
61049 find mustInRelationeSuperPackage_reference_EPackage(problem,interpretation,source,target);
61050}
61051/**
61052 * Matcher for detecting tuples t where []eOperation reference EParameter(source,target)
61053 */
61054private pattern mustInRelationeOperation_reference_EParameter(
61055 problem:LogicProblem, interpretation:PartialInterpretation,
61056 source: DefinedElement, target:DefinedElement)
61057{
61058 find interpretation(problem,interpretation);
61059 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
61060 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eOperation reference EParameter");
61061 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
61062 BinaryElementRelationLink.param1(link,source);
61063 BinaryElementRelationLink.param2(link,target);
61064}
61065/**
61066 * Matcher for detecting tuples t where <>eOperation reference EParameter(source,target)
61067 */
61068private pattern mayInRelationeOperation_reference_EParameter(
61069 problem:LogicProblem, interpretation:PartialInterpretation,
61070 source: DefinedElement, target:DefinedElement)
61071{
61072 find interpretation(problem,interpretation);
61073 // The two endpoint of the link have to exist
61074 find mayExist(problem, interpretation, source);
61075 find mayExist(problem, interpretation, target);
61076 // Type consistency
61077 find mayInstanceOfEParameter_class(problem,interpretation,source);
61078 find mayInstanceOfEOperation_class(problem,interpretation,target);
61079 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
61080 // the upper bound of the multiplicity should be considered.
61081 numberOfExistingReferences == count find mustInRelationeOperation_reference_EParameter(problem,interpretation,source,_);
61082 check(numberOfExistingReferences < 1);
61083 // The eOpposite of the reference is containment, then a referene cannot be created if
61084 // 1. Multiple parents
61085 neg find mustContains4(problem,interpretation,source,_);
61086 // 2. Circle in the containment hierarchy
61087 neg find mustTransitiveContains(source,target);
61088} or {
61089 find mustInRelationeOperation_reference_EParameter(problem,interpretation,source,target);
61090}
61091/**
61092 * Matcher for detecting tuples t where []eOpposite reference EReference(source,target)
61093 */
61094private pattern mustInRelationeOpposite_reference_EReference(
61095 problem:LogicProblem, interpretation:PartialInterpretation,
61096 source: DefinedElement, target:DefinedElement)
61097{
61098 find interpretation(problem,interpretation);
61099 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
61100 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eOpposite reference EReference");
61101 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
61102 BinaryElementRelationLink.param1(link,source);
61103 BinaryElementRelationLink.param2(link,target);
61104}
61105/**
61106 * Matcher for detecting tuples t where <>eOpposite reference EReference(source,target)
61107 */
61108private pattern mayInRelationeOpposite_reference_EReference(
61109 problem:LogicProblem, interpretation:PartialInterpretation,
61110 source: DefinedElement, target:DefinedElement)
61111{
61112 find interpretation(problem,interpretation);
61113 // The two endpoint of the link have to exist
61114 find mayExist(problem, interpretation, source);
61115 find mayExist(problem, interpretation, target);
61116 // Type consistency
61117 find mayInstanceOfEReference_class(problem,interpretation,source);
61118 find mayInstanceOfEReference_class(problem,interpretation,target);
61119 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
61120 // the upper bound of the multiplicity should be considered.
61121 numberOfExistingReferences == count find mustInRelationeOpposite_reference_EReference(problem,interpretation,source,_);
61122 check(numberOfExistingReferences < 1);
61123} or {
61124 find mustInRelationeOpposite_reference_EReference(problem,interpretation,source,target);
61125}
61126/**
61127 * Matcher for detecting tuples t where []eReferenceType reference EReference(source,target)
61128 */
61129private pattern mustInRelationeReferenceType_reference_EReference(
61130 problem:LogicProblem, interpretation:PartialInterpretation,
61131 source: DefinedElement, target:DefinedElement)
61132{
61133 find interpretation(problem,interpretation);
61134 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
61135 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferenceType reference EReference");
61136 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
61137 BinaryElementRelationLink.param1(link,source);
61138 BinaryElementRelationLink.param2(link,target);
61139}
61140/**
61141 * Matcher for detecting tuples t where <>eReferenceType reference EReference(source,target)
61142 */
61143private pattern mayInRelationeReferenceType_reference_EReference(
61144 problem:LogicProblem, interpretation:PartialInterpretation,
61145 source: DefinedElement, target:DefinedElement)
61146{
61147 find interpretation(problem,interpretation);
61148 // The two endpoint of the link have to exist
61149 find mayExist(problem, interpretation, source);
61150 find mayExist(problem, interpretation, target);
61151 // Type consistency
61152 find mayInstanceOfEReference_class(problem,interpretation,source);
61153 find mayInstanceOfEClass_class(problem,interpretation,target);
61154 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
61155 // the upper bound of the multiplicity should be considered.
61156 numberOfExistingReferences == count find mustInRelationeReferenceType_reference_EReference(problem,interpretation,source,_);
61157 check(numberOfExistingReferences < 1);
61158} or {
61159 find mustInRelationeReferenceType_reference_EReference(problem,interpretation,source,target);
61160}
61161/**
61162 * Matcher for detecting tuples t where []eKeys reference EReference(source,target)
61163 */
61164private pattern mustInRelationeKeys_reference_EReference(
61165 problem:LogicProblem, interpretation:PartialInterpretation,
61166 source: DefinedElement, target:DefinedElement)
61167{
61168 find interpretation(problem,interpretation);
61169 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
61170 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eKeys reference EReference");
61171 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
61172 BinaryElementRelationLink.param1(link,source);
61173 BinaryElementRelationLink.param2(link,target);
61174}
61175/**
61176 * Matcher for detecting tuples t where <>eKeys reference EReference(source,target)
61177 */
61178private pattern mayInRelationeKeys_reference_EReference(
61179 problem:LogicProblem, interpretation:PartialInterpretation,
61180 source: DefinedElement, target:DefinedElement)
61181{
61182 find interpretation(problem,interpretation);
61183 // The two endpoint of the link have to exist
61184 find mayExist(problem, interpretation, source);
61185 find mayExist(problem, interpretation, target);
61186 // Type consistency
61187 find mayInstanceOfEReference_class(problem,interpretation,source);
61188 find mayInstanceOfEAttribute_class(problem,interpretation,target);
61189} or {
61190 find mustInRelationeKeys_reference_EReference(problem,interpretation,source,target);
61191}
61192/**
61193 * Matcher for detecting tuples t where []eContainingClass reference EStructuralFeature(source,target)
61194 */
61195private pattern mustInRelationeContainingClass_reference_EStructuralFeature(
61196 problem:LogicProblem, interpretation:PartialInterpretation,
61197 source: DefinedElement, target:DefinedElement)
61198{
61199 find interpretation(problem,interpretation);
61200 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
61201 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eContainingClass reference EStructuralFeature");
61202 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
61203 BinaryElementRelationLink.param1(link,source);
61204 BinaryElementRelationLink.param2(link,target);
61205}
61206/**
61207 * Matcher for detecting tuples t where <>eContainingClass reference EStructuralFeature(source,target)
61208 */
61209private pattern mayInRelationeContainingClass_reference_EStructuralFeature(
61210 problem:LogicProblem, interpretation:PartialInterpretation,
61211 source: DefinedElement, target:DefinedElement)
61212{
61213 find interpretation(problem,interpretation);
61214 // The two endpoint of the link have to exist
61215 find mayExist(problem, interpretation, source);
61216 find mayExist(problem, interpretation, target);
61217 // Type consistency
61218 find mayInstanceOfEStructuralFeature_class(problem,interpretation,source);
61219 find mayInstanceOfEClass_class(problem,interpretation,target);
61220 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
61221 // the upper bound of the multiplicity should be considered.
61222 numberOfExistingReferences == count find mustInRelationeContainingClass_reference_EStructuralFeature(problem,interpretation,source,_);
61223 check(numberOfExistingReferences < 1);
61224 // The eOpposite of the reference is containment, then a referene cannot be created if
61225 // 1. Multiple parents
61226 neg find mustContains4(problem,interpretation,source,_);
61227 // 2. Circle in the containment hierarchy
61228 neg find mustTransitiveContains(source,target);
61229} or {
61230 find mustInRelationeContainingClass_reference_EStructuralFeature(problem,interpretation,source,target);
61231}
61232/**
61233 * Matcher for detecting tuples t where []eType reference ETypedElement(source,target)
61234 */
61235private pattern mustInRelationeType_reference_ETypedElement(
61236 problem:LogicProblem, interpretation:PartialInterpretation,
61237 source: DefinedElement, target:DefinedElement)
61238{
61239 find interpretation(problem,interpretation);
61240 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
61241 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eType reference ETypedElement");
61242 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
61243 BinaryElementRelationLink.param1(link,source);
61244 BinaryElementRelationLink.param2(link,target);
61245}
61246/**
61247 * Matcher for detecting tuples t where <>eType reference ETypedElement(source,target)
61248 */
61249private pattern mayInRelationeType_reference_ETypedElement(
61250 problem:LogicProblem, interpretation:PartialInterpretation,
61251 source: DefinedElement, target:DefinedElement)
61252{
61253 find interpretation(problem,interpretation);
61254 // The two endpoint of the link have to exist
61255 find mayExist(problem, interpretation, source);
61256 find mayExist(problem, interpretation, target);
61257 // Type consistency
61258 find mayInstanceOfETypedElement_class(problem,interpretation,source);
61259 find mayInstanceOfEClassifier_class(problem,interpretation,target);
61260 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
61261 // the upper bound of the multiplicity should be considered.
61262 numberOfExistingReferences == count find mustInRelationeType_reference_ETypedElement(problem,interpretation,source,_);
61263 check(numberOfExistingReferences < 1);
61264} or {
61265 find mustInRelationeType_reference_ETypedElement(problem,interpretation,source,target);
61266}
61267/**
61268 * Matcher for detecting tuples t where []eGenericType reference ETypedElement(source,target)
61269 */
61270private pattern mustInRelationeGenericType_reference_ETypedElement(
61271 problem:LogicProblem, interpretation:PartialInterpretation,
61272 source: DefinedElement, target:DefinedElement)
61273{
61274 find interpretation(problem,interpretation);
61275 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
61276 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eGenericType reference ETypedElement");
61277 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
61278 BinaryElementRelationLink.param1(link,source);
61279 BinaryElementRelationLink.param2(link,target);
61280}
61281/**
61282 * Matcher for detecting tuples t where <>eGenericType reference ETypedElement(source,target)
61283 */
61284private pattern mayInRelationeGenericType_reference_ETypedElement(
61285 problem:LogicProblem, interpretation:PartialInterpretation,
61286 source: DefinedElement, target:DefinedElement)
61287{
61288 find interpretation(problem,interpretation);
61289 // The two endpoint of the link have to exist
61290 find mayExist(problem, interpretation, source);
61291 find mayExist(problem, interpretation, target);
61292 // Type consistency
61293 find mayInstanceOfETypedElement_class(problem,interpretation,source);
61294 find mayInstanceOfEGenericType_class(problem,interpretation,target);
61295 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
61296 // the upper bound of the multiplicity should be considered.
61297 numberOfExistingReferences == count find mustInRelationeGenericType_reference_ETypedElement(problem,interpretation,source,_);
61298 check(numberOfExistingReferences < 1);
61299 // The reference is containment, then a new reference cannot be create if:
61300 // 1. Multiple parents
61301 neg find mustContains4(problem,interpretation,_,target);
61302 // 2. Circle in the containment hierarchy
61303 neg find mustTransitiveContains(source,target);
61304} or {
61305 find mustInRelationeGenericType_reference_ETypedElement(problem,interpretation,source,target);
61306}
61307/**
61308 * Matcher for detecting tuples t where []eUpperBound reference EGenericType(source,target)
61309 */
61310private pattern mustInRelationeUpperBound_reference_EGenericType(
61311 problem:LogicProblem, interpretation:PartialInterpretation,
61312 source: DefinedElement, target:DefinedElement)
61313{
61314 find interpretation(problem,interpretation);
61315 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
61316 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eUpperBound reference EGenericType");
61317 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
61318 BinaryElementRelationLink.param1(link,source);
61319 BinaryElementRelationLink.param2(link,target);
61320}
61321/**
61322 * Matcher for detecting tuples t where <>eUpperBound reference EGenericType(source,target)
61323 */
61324private pattern mayInRelationeUpperBound_reference_EGenericType(
61325 problem:LogicProblem, interpretation:PartialInterpretation,
61326 source: DefinedElement, target:DefinedElement)
61327{
61328 find interpretation(problem,interpretation);
61329 // The two endpoint of the link have to exist
61330 find mayExist(problem, interpretation, source);
61331 find mayExist(problem, interpretation, target);
61332 // Type consistency
61333 find mayInstanceOfEGenericType_class(problem,interpretation,source);
61334 find mayInstanceOfEGenericType_class(problem,interpretation,target);
61335 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
61336 // the upper bound of the multiplicity should be considered.
61337 numberOfExistingReferences == count find mustInRelationeUpperBound_reference_EGenericType(problem,interpretation,source,_);
61338 check(numberOfExistingReferences < 1);
61339 // The reference is containment, then a new reference cannot be create if:
61340 // 1. Multiple parents
61341 neg find mustContains4(problem,interpretation,_,target);
61342 // 2. Circle in the containment hierarchy
61343 neg find mustTransitiveContains(source,target);
61344} or {
61345 find mustInRelationeUpperBound_reference_EGenericType(problem,interpretation,source,target);
61346}
61347/**
61348 * Matcher for detecting tuples t where []eTypeArguments reference EGenericType(source,target)
61349 */
61350private pattern mustInRelationeTypeArguments_reference_EGenericType(
61351 problem:LogicProblem, interpretation:PartialInterpretation,
61352 source: DefinedElement, target:DefinedElement)
61353{
61354 find interpretation(problem,interpretation);
61355 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
61356 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeArguments reference EGenericType");
61357 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
61358 BinaryElementRelationLink.param1(link,source);
61359 BinaryElementRelationLink.param2(link,target);
61360}
61361/**
61362 * Matcher for detecting tuples t where <>eTypeArguments reference EGenericType(source,target)
61363 */
61364private pattern mayInRelationeTypeArguments_reference_EGenericType(
61365 problem:LogicProblem, interpretation:PartialInterpretation,
61366 source: DefinedElement, target:DefinedElement)
61367{
61368 find interpretation(problem,interpretation);
61369 // The two endpoint of the link have to exist
61370 find mayExist(problem, interpretation, source);
61371 find mayExist(problem, interpretation, target);
61372 // Type consistency
61373 find mayInstanceOfEGenericType_class(problem,interpretation,source);
61374 find mayInstanceOfEGenericType_class(problem,interpretation,target);
61375 // The reference is containment, then a new reference cannot be create if:
61376 // 1. Multiple parents
61377 neg find mustContains4(problem,interpretation,_,target);
61378 // 2. Circle in the containment hierarchy
61379 neg find mustTransitiveContains(source,target);
61380} or {
61381 find mustInRelationeTypeArguments_reference_EGenericType(problem,interpretation,source,target);
61382}
61383/**
61384 * Matcher for detecting tuples t where []eRawType reference EGenericType(source,target)
61385 */
61386private pattern mustInRelationeRawType_reference_EGenericType(
61387 problem:LogicProblem, interpretation:PartialInterpretation,
61388 source: DefinedElement, target:DefinedElement)
61389{
61390 find interpretation(problem,interpretation);
61391 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
61392 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eRawType reference EGenericType");
61393 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
61394 BinaryElementRelationLink.param1(link,source);
61395 BinaryElementRelationLink.param2(link,target);
61396}
61397/**
61398 * Matcher for detecting tuples t where <>eRawType reference EGenericType(source,target)
61399 */
61400private pattern mayInRelationeRawType_reference_EGenericType(
61401 problem:LogicProblem, interpretation:PartialInterpretation,
61402 source: DefinedElement, target:DefinedElement)
61403{
61404 find interpretation(problem,interpretation);
61405 // The two endpoint of the link have to exist
61406 find mayExist(problem, interpretation, source);
61407 find mayExist(problem, interpretation, target);
61408 // Type consistency
61409 find mayInstanceOfEGenericType_class(problem,interpretation,source);
61410 find mayInstanceOfEClassifier_class(problem,interpretation,target);
61411 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
61412 // the upper bound of the multiplicity should be considered.
61413 numberOfExistingReferences == count find mustInRelationeRawType_reference_EGenericType(problem,interpretation,source,_);
61414 check(numberOfExistingReferences < 1);
61415} or {
61416 find mustInRelationeRawType_reference_EGenericType(problem,interpretation,source,target);
61417}
61418/**
61419 * Matcher for detecting tuples t where []eLowerBound reference EGenericType(source,target)
61420 */
61421private pattern mustInRelationeLowerBound_reference_EGenericType(
61422 problem:LogicProblem, interpretation:PartialInterpretation,
61423 source: DefinedElement, target:DefinedElement)
61424{
61425 find interpretation(problem,interpretation);
61426 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
61427 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eLowerBound reference EGenericType");
61428 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
61429 BinaryElementRelationLink.param1(link,source);
61430 BinaryElementRelationLink.param2(link,target);
61431}
61432/**
61433 * Matcher for detecting tuples t where <>eLowerBound reference EGenericType(source,target)
61434 */
61435private pattern mayInRelationeLowerBound_reference_EGenericType(
61436 problem:LogicProblem, interpretation:PartialInterpretation,
61437 source: DefinedElement, target:DefinedElement)
61438{
61439 find interpretation(problem,interpretation);
61440 // The two endpoint of the link have to exist
61441 find mayExist(problem, interpretation, source);
61442 find mayExist(problem, interpretation, target);
61443 // Type consistency
61444 find mayInstanceOfEGenericType_class(problem,interpretation,source);
61445 find mayInstanceOfEGenericType_class(problem,interpretation,target);
61446 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
61447 // the upper bound of the multiplicity should be considered.
61448 numberOfExistingReferences == count find mustInRelationeLowerBound_reference_EGenericType(problem,interpretation,source,_);
61449 check(numberOfExistingReferences < 1);
61450 // The reference is containment, then a new reference cannot be create if:
61451 // 1. Multiple parents
61452 neg find mustContains4(problem,interpretation,_,target);
61453 // 2. Circle in the containment hierarchy
61454 neg find mustTransitiveContains(source,target);
61455} or {
61456 find mustInRelationeLowerBound_reference_EGenericType(problem,interpretation,source,target);
61457}
61458/**
61459 * Matcher for detecting tuples t where []eTypeParameter reference EGenericType(source,target)
61460 */
61461private pattern mustInRelationeTypeParameter_reference_EGenericType(
61462 problem:LogicProblem, interpretation:PartialInterpretation,
61463 source: DefinedElement, target:DefinedElement)
61464{
61465 find interpretation(problem,interpretation);
61466 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
61467 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeParameter reference EGenericType");
61468 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
61469 BinaryElementRelationLink.param1(link,source);
61470 BinaryElementRelationLink.param2(link,target);
61471}
61472/**
61473 * Matcher for detecting tuples t where <>eTypeParameter reference EGenericType(source,target)
61474 */
61475private pattern mayInRelationeTypeParameter_reference_EGenericType(
61476 problem:LogicProblem, interpretation:PartialInterpretation,
61477 source: DefinedElement, target:DefinedElement)
61478{
61479 find interpretation(problem,interpretation);
61480 // The two endpoint of the link have to exist
61481 find mayExist(problem, interpretation, source);
61482 find mayExist(problem, interpretation, target);
61483 // Type consistency
61484 find mayInstanceOfEGenericType_class(problem,interpretation,source);
61485 find mayInstanceOfETypeParameter_class(problem,interpretation,target);
61486 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
61487 // the upper bound of the multiplicity should be considered.
61488 numberOfExistingReferences == count find mustInRelationeTypeParameter_reference_EGenericType(problem,interpretation,source,_);
61489 check(numberOfExistingReferences < 1);
61490} or {
61491 find mustInRelationeTypeParameter_reference_EGenericType(problem,interpretation,source,target);
61492}
61493/**
61494 * Matcher for detecting tuples t where []eClassifier reference EGenericType(source,target)
61495 */
61496private pattern mustInRelationeClassifier_reference_EGenericType(
61497 problem:LogicProblem, interpretation:PartialInterpretation,
61498 source: DefinedElement, target:DefinedElement)
61499{
61500 find interpretation(problem,interpretation);
61501 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
61502 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eClassifier reference EGenericType");
61503 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
61504 BinaryElementRelationLink.param1(link,source);
61505 BinaryElementRelationLink.param2(link,target);
61506}
61507/**
61508 * Matcher for detecting tuples t where <>eClassifier reference EGenericType(source,target)
61509 */
61510private pattern mayInRelationeClassifier_reference_EGenericType(
61511 problem:LogicProblem, interpretation:PartialInterpretation,
61512 source: DefinedElement, target:DefinedElement)
61513{
61514 find interpretation(problem,interpretation);
61515 // The two endpoint of the link have to exist
61516 find mayExist(problem, interpretation, source);
61517 find mayExist(problem, interpretation, target);
61518 // Type consistency
61519 find mayInstanceOfEGenericType_class(problem,interpretation,source);
61520 find mayInstanceOfEClassifier_class(problem,interpretation,target);
61521 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
61522 // the upper bound of the multiplicity should be considered.
61523 numberOfExistingReferences == count find mustInRelationeClassifier_reference_EGenericType(problem,interpretation,source,_);
61524 check(numberOfExistingReferences < 1);
61525} or {
61526 find mustInRelationeClassifier_reference_EGenericType(problem,interpretation,source,target);
61527}
61528/**
61529 * Matcher for detecting tuples t where []eBounds reference ETypeParameter(source,target)
61530 */
61531private pattern mustInRelationeBounds_reference_ETypeParameter(
61532 problem:LogicProblem, interpretation:PartialInterpretation,
61533 source: DefinedElement, target:DefinedElement)
61534{
61535 find interpretation(problem,interpretation);
61536 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
61537 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eBounds reference ETypeParameter");
61538 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
61539 BinaryElementRelationLink.param1(link,source);
61540 BinaryElementRelationLink.param2(link,target);
61541}
61542/**
61543 * Matcher for detecting tuples t where <>eBounds reference ETypeParameter(source,target)
61544 */
61545private pattern mayInRelationeBounds_reference_ETypeParameter(
61546 problem:LogicProblem, interpretation:PartialInterpretation,
61547 source: DefinedElement, target:DefinedElement)
61548{
61549 find interpretation(problem,interpretation);
61550 // The two endpoint of the link have to exist
61551 find mayExist(problem, interpretation, source);
61552 find mayExist(problem, interpretation, target);
61553 // Type consistency
61554 find mayInstanceOfETypeParameter_class(problem,interpretation,source);
61555 find mayInstanceOfEGenericType_class(problem,interpretation,target);
61556 // The reference is containment, then a new reference cannot be create if:
61557 // 1. Multiple parents
61558 neg find mustContains4(problem,interpretation,_,target);
61559 // 2. Circle in the containment hierarchy
61560 neg find mustTransitiveContains(source,target);
61561} or {
61562 find mustInRelationeBounds_reference_ETypeParameter(problem,interpretation,source,target);
61563}
61564/**
61565 * Matcher for detecting tuples t where []iD attribute EAttribute(source,target)
61566 */
61567private pattern mustInRelationiD_attribute_EAttribute(
61568 problem:LogicProblem, interpretation:PartialInterpretation,
61569 source: DefinedElement, target:DefinedElement)
61570{
61571 find interpretation(problem,interpretation);
61572 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
61573 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"iD attribute EAttribute");
61574 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
61575 BinaryElementRelationLink.param1(link,source);
61576 BinaryElementRelationLink.param2(link,target);
61577}
61578/**
61579 * Matcher for detecting tuples t where <>iD attribute EAttribute(source,target)
61580 */
61581private pattern mayInRelationiD_attribute_EAttribute(
61582 problem:LogicProblem, interpretation:PartialInterpretation,
61583 source: DefinedElement, target:DefinedElement)
61584{
61585 find interpretation(problem,interpretation);
61586 // The two endpoint of the link have to exist
61587 find mayExist(problem, interpretation, source);
61588 find mayExist(problem, interpretation, target);
61589 // Type consistency
61590 find mayInstanceOfEAttribute_class(problem,interpretation,source);
61591 BooleanElement(target);
61592 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
61593 // the upper bound of the multiplicity should be considered.
61594 numberOfExistingReferences == count find mustInRelationiD_attribute_EAttribute(problem,interpretation,source,_);
61595 check(numberOfExistingReferences < 1);
61596} or {
61597 find mustInRelationiD_attribute_EAttribute(problem,interpretation,source,target);
61598}
61599/**
61600 * Matcher for detecting tuples t where []source attribute EAnnotation(source,target)
61601 */
61602private pattern mustInRelationsource_attribute_EAnnotation(
61603 problem:LogicProblem, interpretation:PartialInterpretation,
61604 source: DefinedElement, target:DefinedElement)
61605{
61606 find interpretation(problem,interpretation);
61607 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
61608 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"source attribute EAnnotation");
61609 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
61610 BinaryElementRelationLink.param1(link,source);
61611 BinaryElementRelationLink.param2(link,target);
61612}
61613/**
61614 * Matcher for detecting tuples t where <>source attribute EAnnotation(source,target)
61615 */
61616private pattern mayInRelationsource_attribute_EAnnotation(
61617 problem:LogicProblem, interpretation:PartialInterpretation,
61618 source: DefinedElement, target:DefinedElement)
61619{
61620 find interpretation(problem,interpretation);
61621 // The two endpoint of the link have to exist
61622 find mayExist(problem, interpretation, source);
61623 find mayExist(problem, interpretation, target);
61624 // Type consistency
61625 find mayInstanceOfEAnnotation_class(problem,interpretation,source);
61626 StringElement(target);
61627 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
61628 // the upper bound of the multiplicity should be considered.
61629 numberOfExistingReferences == count find mustInRelationsource_attribute_EAnnotation(problem,interpretation,source,_);
61630 check(numberOfExistingReferences < 1);
61631} or {
61632 find mustInRelationsource_attribute_EAnnotation(problem,interpretation,source,target);
61633}
61634/**
61635 * Matcher for detecting tuples t where []abstract attribute EClass(source,target)
61636 */
61637private pattern mustInRelationabstract_attribute_EClass(
61638 problem:LogicProblem, interpretation:PartialInterpretation,
61639 source: DefinedElement, target:DefinedElement)
61640{
61641 find interpretation(problem,interpretation);
61642 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
61643 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"abstract attribute EClass");
61644 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
61645 BinaryElementRelationLink.param1(link,source);
61646 BinaryElementRelationLink.param2(link,target);
61647}
61648/**
61649 * Matcher for detecting tuples t where <>abstract attribute EClass(source,target)
61650 */
61651private pattern mayInRelationabstract_attribute_EClass(
61652 problem:LogicProblem, interpretation:PartialInterpretation,
61653 source: DefinedElement, target:DefinedElement)
61654{
61655 find interpretation(problem,interpretation);
61656 // The two endpoint of the link have to exist
61657 find mayExist(problem, interpretation, source);
61658 find mayExist(problem, interpretation, target);
61659 // Type consistency
61660 find mayInstanceOfEClass_class(problem,interpretation,source);
61661 BooleanElement(target);
61662 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
61663 // the upper bound of the multiplicity should be considered.
61664 numberOfExistingReferences == count find mustInRelationabstract_attribute_EClass(problem,interpretation,source,_);
61665 check(numberOfExistingReferences < 1);
61666} or {
61667 find mustInRelationabstract_attribute_EClass(problem,interpretation,source,target);
61668}
61669/**
61670 * Matcher for detecting tuples t where []interface attribute EClass(source,target)
61671 */
61672private pattern mustInRelationinterface_attribute_EClass(
61673 problem:LogicProblem, interpretation:PartialInterpretation,
61674 source: DefinedElement, target:DefinedElement)
61675{
61676 find interpretation(problem,interpretation);
61677 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
61678 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface attribute EClass");
61679 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
61680 BinaryElementRelationLink.param1(link,source);
61681 BinaryElementRelationLink.param2(link,target);
61682}
61683/**
61684 * Matcher for detecting tuples t where <>interface attribute EClass(source,target)
61685 */
61686private pattern mayInRelationinterface_attribute_EClass(
61687 problem:LogicProblem, interpretation:PartialInterpretation,
61688 source: DefinedElement, target:DefinedElement)
61689{
61690 find interpretation(problem,interpretation);
61691 // The two endpoint of the link have to exist
61692 find mayExist(problem, interpretation, source);
61693 find mayExist(problem, interpretation, target);
61694 // Type consistency
61695 find mayInstanceOfEClass_class(problem,interpretation,source);
61696 BooleanElement(target);
61697 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
61698 // the upper bound of the multiplicity should be considered.
61699 numberOfExistingReferences == count find mustInRelationinterface_attribute_EClass(problem,interpretation,source,_);
61700 check(numberOfExistingReferences < 1);
61701} or {
61702 find mustInRelationinterface_attribute_EClass(problem,interpretation,source,target);
61703}
61704/**
61705 * Matcher for detecting tuples t where []instanceClassName attribute EClassifier(source,target)
61706 */
61707private pattern mustInRelationinstanceClassName_attribute_EClassifier(
61708 problem:LogicProblem, interpretation:PartialInterpretation,
61709 source: DefinedElement, target:DefinedElement)
61710{
61711 find interpretation(problem,interpretation);
61712 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
61713 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"instanceClassName attribute EClassifier");
61714 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
61715 BinaryElementRelationLink.param1(link,source);
61716 BinaryElementRelationLink.param2(link,target);
61717}
61718/**
61719 * Matcher for detecting tuples t where <>instanceClassName attribute EClassifier(source,target)
61720 */
61721private pattern mayInRelationinstanceClassName_attribute_EClassifier(
61722 problem:LogicProblem, interpretation:PartialInterpretation,
61723 source: DefinedElement, target:DefinedElement)
61724{
61725 find interpretation(problem,interpretation);
61726 // The two endpoint of the link have to exist
61727 find mayExist(problem, interpretation, source);
61728 find mayExist(problem, interpretation, target);
61729 // Type consistency
61730 find mayInstanceOfEClassifier_class(problem,interpretation,source);
61731 StringElement(target);
61732 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
61733 // the upper bound of the multiplicity should be considered.
61734 numberOfExistingReferences == count find mustInRelationinstanceClassName_attribute_EClassifier(problem,interpretation,source,_);
61735 check(numberOfExistingReferences < 1);
61736} or {
61737 find mustInRelationinstanceClassName_attribute_EClassifier(problem,interpretation,source,target);
61738}
61739/**
61740 * Matcher for detecting tuples t where []instanceTypeName attribute EClassifier(source,target)
61741 */
61742private pattern mustInRelationinstanceTypeName_attribute_EClassifier(
61743 problem:LogicProblem, interpretation:PartialInterpretation,
61744 source: DefinedElement, target:DefinedElement)
61745{
61746 find interpretation(problem,interpretation);
61747 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
61748 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"instanceTypeName attribute EClassifier");
61749 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
61750 BinaryElementRelationLink.param1(link,source);
61751 BinaryElementRelationLink.param2(link,target);
61752}
61753/**
61754 * Matcher for detecting tuples t where <>instanceTypeName attribute EClassifier(source,target)
61755 */
61756private pattern mayInRelationinstanceTypeName_attribute_EClassifier(
61757 problem:LogicProblem, interpretation:PartialInterpretation,
61758 source: DefinedElement, target:DefinedElement)
61759{
61760 find interpretation(problem,interpretation);
61761 // The two endpoint of the link have to exist
61762 find mayExist(problem, interpretation, source);
61763 find mayExist(problem, interpretation, target);
61764 // Type consistency
61765 find mayInstanceOfEClassifier_class(problem,interpretation,source);
61766 StringElement(target);
61767 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
61768 // the upper bound of the multiplicity should be considered.
61769 numberOfExistingReferences == count find mustInRelationinstanceTypeName_attribute_EClassifier(problem,interpretation,source,_);
61770 check(numberOfExistingReferences < 1);
61771} or {
61772 find mustInRelationinstanceTypeName_attribute_EClassifier(problem,interpretation,source,target);
61773}
61774/**
61775 * Matcher for detecting tuples t where []serializable attribute EDataType(source,target)
61776 */
61777private pattern mustInRelationserializable_attribute_EDataType(
61778 problem:LogicProblem, interpretation:PartialInterpretation,
61779 source: DefinedElement, target:DefinedElement)
61780{
61781 find interpretation(problem,interpretation);
61782 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
61783 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"serializable attribute EDataType");
61784 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
61785 BinaryElementRelationLink.param1(link,source);
61786 BinaryElementRelationLink.param2(link,target);
61787}
61788/**
61789 * Matcher for detecting tuples t where <>serializable attribute EDataType(source,target)
61790 */
61791private pattern mayInRelationserializable_attribute_EDataType(
61792 problem:LogicProblem, interpretation:PartialInterpretation,
61793 source: DefinedElement, target:DefinedElement)
61794{
61795 find interpretation(problem,interpretation);
61796 // The two endpoint of the link have to exist
61797 find mayExist(problem, interpretation, source);
61798 find mayExist(problem, interpretation, target);
61799 // Type consistency
61800 find mayInstanceOfEDataType_class(problem,interpretation,source);
61801 BooleanElement(target);
61802 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
61803 // the upper bound of the multiplicity should be considered.
61804 numberOfExistingReferences == count find mustInRelationserializable_attribute_EDataType(problem,interpretation,source,_);
61805 check(numberOfExistingReferences < 1);
61806} or {
61807 find mustInRelationserializable_attribute_EDataType(problem,interpretation,source,target);
61808}
61809/**
61810 * Matcher for detecting tuples t where []value attribute EEnumLiteral(source,target)
61811 */
61812private pattern mustInRelationvalue_attribute_EEnumLiteral(
61813 problem:LogicProblem, interpretation:PartialInterpretation,
61814 source: DefinedElement, target:DefinedElement)
61815{
61816 find interpretation(problem,interpretation);
61817 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
61818 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"value attribute EEnumLiteral");
61819 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
61820 BinaryElementRelationLink.param1(link,source);
61821 BinaryElementRelationLink.param2(link,target);
61822}
61823/**
61824 * Matcher for detecting tuples t where <>value attribute EEnumLiteral(source,target)
61825 */
61826private pattern mayInRelationvalue_attribute_EEnumLiteral(
61827 problem:LogicProblem, interpretation:PartialInterpretation,
61828 source: DefinedElement, target:DefinedElement)
61829{
61830 find interpretation(problem,interpretation);
61831 // The two endpoint of the link have to exist
61832 find mayExist(problem, interpretation, source);
61833 find mayExist(problem, interpretation, target);
61834 // Type consistency
61835 find mayInstanceOfEEnumLiteral_class(problem,interpretation,source);
61836 IntegerElement(target);
61837 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
61838 // the upper bound of the multiplicity should be considered.
61839 numberOfExistingReferences == count find mustInRelationvalue_attribute_EEnumLiteral(problem,interpretation,source,_);
61840 check(numberOfExistingReferences < 1);
61841} or {
61842 find mustInRelationvalue_attribute_EEnumLiteral(problem,interpretation,source,target);
61843}
61844/**
61845 * Matcher for detecting tuples t where []literal attribute EEnumLiteral(source,target)
61846 */
61847private pattern mustInRelationliteral_attribute_EEnumLiteral(
61848 problem:LogicProblem, interpretation:PartialInterpretation,
61849 source: DefinedElement, target:DefinedElement)
61850{
61851 find interpretation(problem,interpretation);
61852 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
61853 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"literal attribute EEnumLiteral");
61854 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
61855 BinaryElementRelationLink.param1(link,source);
61856 BinaryElementRelationLink.param2(link,target);
61857}
61858/**
61859 * Matcher for detecting tuples t where <>literal attribute EEnumLiteral(source,target)
61860 */
61861private pattern mayInRelationliteral_attribute_EEnumLiteral(
61862 problem:LogicProblem, interpretation:PartialInterpretation,
61863 source: DefinedElement, target:DefinedElement)
61864{
61865 find interpretation(problem,interpretation);
61866 // The two endpoint of the link have to exist
61867 find mayExist(problem, interpretation, source);
61868 find mayExist(problem, interpretation, target);
61869 // Type consistency
61870 find mayInstanceOfEEnumLiteral_class(problem,interpretation,source);
61871 StringElement(target);
61872 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
61873 // the upper bound of the multiplicity should be considered.
61874 numberOfExistingReferences == count find mustInRelationliteral_attribute_EEnumLiteral(problem,interpretation,source,_);
61875 check(numberOfExistingReferences < 1);
61876} or {
61877 find mustInRelationliteral_attribute_EEnumLiteral(problem,interpretation,source,target);
61878}
61879/**
61880 * Matcher for detecting tuples t where []name attribute ENamedElement(source,target)
61881 */
61882private pattern mustInRelationname_attribute_ENamedElement(
61883 problem:LogicProblem, interpretation:PartialInterpretation,
61884 source: DefinedElement, target:DefinedElement)
61885{
61886 find interpretation(problem,interpretation);
61887 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
61888 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"name attribute ENamedElement");
61889 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
61890 BinaryElementRelationLink.param1(link,source);
61891 BinaryElementRelationLink.param2(link,target);
61892}
61893/**
61894 * Matcher for detecting tuples t where <>name attribute ENamedElement(source,target)
61895 */
61896private pattern mayInRelationname_attribute_ENamedElement(
61897 problem:LogicProblem, interpretation:PartialInterpretation,
61898 source: DefinedElement, target:DefinedElement)
61899{
61900 find interpretation(problem,interpretation);
61901 // The two endpoint of the link have to exist
61902 find mayExist(problem, interpretation, source);
61903 find mayExist(problem, interpretation, target);
61904 // Type consistency
61905 find mayInstanceOfENamedElement_class(problem,interpretation,source);
61906 StringElement(target);
61907 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
61908 // the upper bound of the multiplicity should be considered.
61909 numberOfExistingReferences == count find mustInRelationname_attribute_ENamedElement(problem,interpretation,source,_);
61910 check(numberOfExistingReferences < 1);
61911} or {
61912 find mustInRelationname_attribute_ENamedElement(problem,interpretation,source,target);
61913}
61914/**
61915 * Matcher for detecting tuples t where []nsURI attribute EPackage(source,target)
61916 */
61917private pattern mustInRelationnsURI_attribute_EPackage(
61918 problem:LogicProblem, interpretation:PartialInterpretation,
61919 source: DefinedElement, target:DefinedElement)
61920{
61921 find interpretation(problem,interpretation);
61922 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
61923 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"nsURI attribute EPackage");
61924 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
61925 BinaryElementRelationLink.param1(link,source);
61926 BinaryElementRelationLink.param2(link,target);
61927}
61928/**
61929 * Matcher for detecting tuples t where <>nsURI attribute EPackage(source,target)
61930 */
61931private pattern mayInRelationnsURI_attribute_EPackage(
61932 problem:LogicProblem, interpretation:PartialInterpretation,
61933 source: DefinedElement, target:DefinedElement)
61934{
61935 find interpretation(problem,interpretation);
61936 // The two endpoint of the link have to exist
61937 find mayExist(problem, interpretation, source);
61938 find mayExist(problem, interpretation, target);
61939 // Type consistency
61940 find mayInstanceOfEPackage_class(problem,interpretation,source);
61941 StringElement(target);
61942 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
61943 // the upper bound of the multiplicity should be considered.
61944 numberOfExistingReferences == count find mustInRelationnsURI_attribute_EPackage(problem,interpretation,source,_);
61945 check(numberOfExistingReferences < 1);
61946} or {
61947 find mustInRelationnsURI_attribute_EPackage(problem,interpretation,source,target);
61948}
61949/**
61950 * Matcher for detecting tuples t where []nsPrefix attribute EPackage(source,target)
61951 */
61952private pattern mustInRelationnsPrefix_attribute_EPackage(
61953 problem:LogicProblem, interpretation:PartialInterpretation,
61954 source: DefinedElement, target:DefinedElement)
61955{
61956 find interpretation(problem,interpretation);
61957 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
61958 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"nsPrefix attribute EPackage");
61959 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
61960 BinaryElementRelationLink.param1(link,source);
61961 BinaryElementRelationLink.param2(link,target);
61962}
61963/**
61964 * Matcher for detecting tuples t where <>nsPrefix attribute EPackage(source,target)
61965 */
61966private pattern mayInRelationnsPrefix_attribute_EPackage(
61967 problem:LogicProblem, interpretation:PartialInterpretation,
61968 source: DefinedElement, target:DefinedElement)
61969{
61970 find interpretation(problem,interpretation);
61971 // The two endpoint of the link have to exist
61972 find mayExist(problem, interpretation, source);
61973 find mayExist(problem, interpretation, target);
61974 // Type consistency
61975 find mayInstanceOfEPackage_class(problem,interpretation,source);
61976 StringElement(target);
61977 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
61978 // the upper bound of the multiplicity should be considered.
61979 numberOfExistingReferences == count find mustInRelationnsPrefix_attribute_EPackage(problem,interpretation,source,_);
61980 check(numberOfExistingReferences < 1);
61981} or {
61982 find mustInRelationnsPrefix_attribute_EPackage(problem,interpretation,source,target);
61983}
61984/**
61985 * Matcher for detecting tuples t where []containment attribute EReference(source,target)
61986 */
61987private pattern mustInRelationcontainment_attribute_EReference(
61988 problem:LogicProblem, interpretation:PartialInterpretation,
61989 source: DefinedElement, target:DefinedElement)
61990{
61991 find interpretation(problem,interpretation);
61992 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
61993 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"containment attribute EReference");
61994 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
61995 BinaryElementRelationLink.param1(link,source);
61996 BinaryElementRelationLink.param2(link,target);
61997}
61998/**
61999 * Matcher for detecting tuples t where <>containment attribute EReference(source,target)
62000 */
62001private pattern mayInRelationcontainment_attribute_EReference(
62002 problem:LogicProblem, interpretation:PartialInterpretation,
62003 source: DefinedElement, target:DefinedElement)
62004{
62005 find interpretation(problem,interpretation);
62006 // The two endpoint of the link have to exist
62007 find mayExist(problem, interpretation, source);
62008 find mayExist(problem, interpretation, target);
62009 // Type consistency
62010 find mayInstanceOfEReference_class(problem,interpretation,source);
62011 BooleanElement(target);
62012 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
62013 // the upper bound of the multiplicity should be considered.
62014 numberOfExistingReferences == count find mustInRelationcontainment_attribute_EReference(problem,interpretation,source,_);
62015 check(numberOfExistingReferences < 1);
62016} or {
62017 find mustInRelationcontainment_attribute_EReference(problem,interpretation,source,target);
62018}
62019/**
62020 * Matcher for detecting tuples t where []container attribute EReference(source,target)
62021 */
62022private pattern mustInRelationcontainer_attribute_EReference(
62023 problem:LogicProblem, interpretation:PartialInterpretation,
62024 source: DefinedElement, target:DefinedElement)
62025{
62026 find interpretation(problem,interpretation);
62027 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
62028 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"container attribute EReference");
62029 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
62030 BinaryElementRelationLink.param1(link,source);
62031 BinaryElementRelationLink.param2(link,target);
62032}
62033/**
62034 * Matcher for detecting tuples t where <>container attribute EReference(source,target)
62035 */
62036private pattern mayInRelationcontainer_attribute_EReference(
62037 problem:LogicProblem, interpretation:PartialInterpretation,
62038 source: DefinedElement, target:DefinedElement)
62039{
62040 find interpretation(problem,interpretation);
62041 // The two endpoint of the link have to exist
62042 find mayExist(problem, interpretation, source);
62043 find mayExist(problem, interpretation, target);
62044 // Type consistency
62045 find mayInstanceOfEReference_class(problem,interpretation,source);
62046 BooleanElement(target);
62047 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
62048 // the upper bound of the multiplicity should be considered.
62049 numberOfExistingReferences == count find mustInRelationcontainer_attribute_EReference(problem,interpretation,source,_);
62050 check(numberOfExistingReferences < 1);
62051} or {
62052 find mustInRelationcontainer_attribute_EReference(problem,interpretation,source,target);
62053}
62054/**
62055 * Matcher for detecting tuples t where []resolveProxies attribute EReference(source,target)
62056 */
62057private pattern mustInRelationresolveProxies_attribute_EReference(
62058 problem:LogicProblem, interpretation:PartialInterpretation,
62059 source: DefinedElement, target:DefinedElement)
62060{
62061 find interpretation(problem,interpretation);
62062 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
62063 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"resolveProxies attribute EReference");
62064 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
62065 BinaryElementRelationLink.param1(link,source);
62066 BinaryElementRelationLink.param2(link,target);
62067}
62068/**
62069 * Matcher for detecting tuples t where <>resolveProxies attribute EReference(source,target)
62070 */
62071private pattern mayInRelationresolveProxies_attribute_EReference(
62072 problem:LogicProblem, interpretation:PartialInterpretation,
62073 source: DefinedElement, target:DefinedElement)
62074{
62075 find interpretation(problem,interpretation);
62076 // The two endpoint of the link have to exist
62077 find mayExist(problem, interpretation, source);
62078 find mayExist(problem, interpretation, target);
62079 // Type consistency
62080 find mayInstanceOfEReference_class(problem,interpretation,source);
62081 BooleanElement(target);
62082 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
62083 // the upper bound of the multiplicity should be considered.
62084 numberOfExistingReferences == count find mustInRelationresolveProxies_attribute_EReference(problem,interpretation,source,_);
62085 check(numberOfExistingReferences < 1);
62086} or {
62087 find mustInRelationresolveProxies_attribute_EReference(problem,interpretation,source,target);
62088}
62089/**
62090 * Matcher for detecting tuples t where []changeable attribute EStructuralFeature(source,target)
62091 */
62092private pattern mustInRelationchangeable_attribute_EStructuralFeature(
62093 problem:LogicProblem, interpretation:PartialInterpretation,
62094 source: DefinedElement, target:DefinedElement)
62095{
62096 find interpretation(problem,interpretation);
62097 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
62098 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"changeable attribute EStructuralFeature");
62099 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
62100 BinaryElementRelationLink.param1(link,source);
62101 BinaryElementRelationLink.param2(link,target);
62102}
62103/**
62104 * Matcher for detecting tuples t where <>changeable attribute EStructuralFeature(source,target)
62105 */
62106private pattern mayInRelationchangeable_attribute_EStructuralFeature(
62107 problem:LogicProblem, interpretation:PartialInterpretation,
62108 source: DefinedElement, target:DefinedElement)
62109{
62110 find interpretation(problem,interpretation);
62111 // The two endpoint of the link have to exist
62112 find mayExist(problem, interpretation, source);
62113 find mayExist(problem, interpretation, target);
62114 // Type consistency
62115 find mayInstanceOfEStructuralFeature_class(problem,interpretation,source);
62116 BooleanElement(target);
62117 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
62118 // the upper bound of the multiplicity should be considered.
62119 numberOfExistingReferences == count find mustInRelationchangeable_attribute_EStructuralFeature(problem,interpretation,source,_);
62120 check(numberOfExistingReferences < 1);
62121} or {
62122 find mustInRelationchangeable_attribute_EStructuralFeature(problem,interpretation,source,target);
62123}
62124/**
62125 * Matcher for detecting tuples t where []volatile attribute EStructuralFeature(source,target)
62126 */
62127private pattern mustInRelationvolatile_attribute_EStructuralFeature(
62128 problem:LogicProblem, interpretation:PartialInterpretation,
62129 source: DefinedElement, target:DefinedElement)
62130{
62131 find interpretation(problem,interpretation);
62132 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
62133 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"volatile attribute EStructuralFeature");
62134 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
62135 BinaryElementRelationLink.param1(link,source);
62136 BinaryElementRelationLink.param2(link,target);
62137}
62138/**
62139 * Matcher for detecting tuples t where <>volatile attribute EStructuralFeature(source,target)
62140 */
62141private pattern mayInRelationvolatile_attribute_EStructuralFeature(
62142 problem:LogicProblem, interpretation:PartialInterpretation,
62143 source: DefinedElement, target:DefinedElement)
62144{
62145 find interpretation(problem,interpretation);
62146 // The two endpoint of the link have to exist
62147 find mayExist(problem, interpretation, source);
62148 find mayExist(problem, interpretation, target);
62149 // Type consistency
62150 find mayInstanceOfEStructuralFeature_class(problem,interpretation,source);
62151 BooleanElement(target);
62152 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
62153 // the upper bound of the multiplicity should be considered.
62154 numberOfExistingReferences == count find mustInRelationvolatile_attribute_EStructuralFeature(problem,interpretation,source,_);
62155 check(numberOfExistingReferences < 1);
62156} or {
62157 find mustInRelationvolatile_attribute_EStructuralFeature(problem,interpretation,source,target);
62158}
62159/**
62160 * Matcher for detecting tuples t where []transient attribute EStructuralFeature(source,target)
62161 */
62162private pattern mustInRelationtransient_attribute_EStructuralFeature(
62163 problem:LogicProblem, interpretation:PartialInterpretation,
62164 source: DefinedElement, target:DefinedElement)
62165{
62166 find interpretation(problem,interpretation);
62167 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
62168 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"transient attribute EStructuralFeature");
62169 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
62170 BinaryElementRelationLink.param1(link,source);
62171 BinaryElementRelationLink.param2(link,target);
62172}
62173/**
62174 * Matcher for detecting tuples t where <>transient attribute EStructuralFeature(source,target)
62175 */
62176private pattern mayInRelationtransient_attribute_EStructuralFeature(
62177 problem:LogicProblem, interpretation:PartialInterpretation,
62178 source: DefinedElement, target:DefinedElement)
62179{
62180 find interpretation(problem,interpretation);
62181 // The two endpoint of the link have to exist
62182 find mayExist(problem, interpretation, source);
62183 find mayExist(problem, interpretation, target);
62184 // Type consistency
62185 find mayInstanceOfEStructuralFeature_class(problem,interpretation,source);
62186 BooleanElement(target);
62187 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
62188 // the upper bound of the multiplicity should be considered.
62189 numberOfExistingReferences == count find mustInRelationtransient_attribute_EStructuralFeature(problem,interpretation,source,_);
62190 check(numberOfExistingReferences < 1);
62191} or {
62192 find mustInRelationtransient_attribute_EStructuralFeature(problem,interpretation,source,target);
62193}
62194/**
62195 * Matcher for detecting tuples t where []defaultValueLiteral attribute EStructuralFeature(source,target)
62196 */
62197private pattern mustInRelationdefaultValueLiteral_attribute_EStructuralFeature(
62198 problem:LogicProblem, interpretation:PartialInterpretation,
62199 source: DefinedElement, target:DefinedElement)
62200{
62201 find interpretation(problem,interpretation);
62202 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
62203 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"defaultValueLiteral attribute EStructuralFeature");
62204 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
62205 BinaryElementRelationLink.param1(link,source);
62206 BinaryElementRelationLink.param2(link,target);
62207}
62208/**
62209 * Matcher for detecting tuples t where <>defaultValueLiteral attribute EStructuralFeature(source,target)
62210 */
62211private pattern mayInRelationdefaultValueLiteral_attribute_EStructuralFeature(
62212 problem:LogicProblem, interpretation:PartialInterpretation,
62213 source: DefinedElement, target:DefinedElement)
62214{
62215 find interpretation(problem,interpretation);
62216 // The two endpoint of the link have to exist
62217 find mayExist(problem, interpretation, source);
62218 find mayExist(problem, interpretation, target);
62219 // Type consistency
62220 find mayInstanceOfEStructuralFeature_class(problem,interpretation,source);
62221 StringElement(target);
62222 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
62223 // the upper bound of the multiplicity should be considered.
62224 numberOfExistingReferences == count find mustInRelationdefaultValueLiteral_attribute_EStructuralFeature(problem,interpretation,source,_);
62225 check(numberOfExistingReferences < 1);
62226} or {
62227 find mustInRelationdefaultValueLiteral_attribute_EStructuralFeature(problem,interpretation,source,target);
62228}
62229/**
62230 * Matcher for detecting tuples t where []unsettable attribute EStructuralFeature(source,target)
62231 */
62232private pattern mustInRelationunsettable_attribute_EStructuralFeature(
62233 problem:LogicProblem, interpretation:PartialInterpretation,
62234 source: DefinedElement, target:DefinedElement)
62235{
62236 find interpretation(problem,interpretation);
62237 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
62238 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"unsettable attribute EStructuralFeature");
62239 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
62240 BinaryElementRelationLink.param1(link,source);
62241 BinaryElementRelationLink.param2(link,target);
62242}
62243/**
62244 * Matcher for detecting tuples t where <>unsettable attribute EStructuralFeature(source,target)
62245 */
62246private pattern mayInRelationunsettable_attribute_EStructuralFeature(
62247 problem:LogicProblem, interpretation:PartialInterpretation,
62248 source: DefinedElement, target:DefinedElement)
62249{
62250 find interpretation(problem,interpretation);
62251 // The two endpoint of the link have to exist
62252 find mayExist(problem, interpretation, source);
62253 find mayExist(problem, interpretation, target);
62254 // Type consistency
62255 find mayInstanceOfEStructuralFeature_class(problem,interpretation,source);
62256 BooleanElement(target);
62257 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
62258 // the upper bound of the multiplicity should be considered.
62259 numberOfExistingReferences == count find mustInRelationunsettable_attribute_EStructuralFeature(problem,interpretation,source,_);
62260 check(numberOfExistingReferences < 1);
62261} or {
62262 find mustInRelationunsettable_attribute_EStructuralFeature(problem,interpretation,source,target);
62263}
62264/**
62265 * Matcher for detecting tuples t where []derived attribute EStructuralFeature(source,target)
62266 */
62267private pattern mustInRelationderived_attribute_EStructuralFeature(
62268 problem:LogicProblem, interpretation:PartialInterpretation,
62269 source: DefinedElement, target:DefinedElement)
62270{
62271 find interpretation(problem,interpretation);
62272 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
62273 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"derived attribute EStructuralFeature");
62274 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
62275 BinaryElementRelationLink.param1(link,source);
62276 BinaryElementRelationLink.param2(link,target);
62277}
62278/**
62279 * Matcher for detecting tuples t where <>derived attribute EStructuralFeature(source,target)
62280 */
62281private pattern mayInRelationderived_attribute_EStructuralFeature(
62282 problem:LogicProblem, interpretation:PartialInterpretation,
62283 source: DefinedElement, target:DefinedElement)
62284{
62285 find interpretation(problem,interpretation);
62286 // The two endpoint of the link have to exist
62287 find mayExist(problem, interpretation, source);
62288 find mayExist(problem, interpretation, target);
62289 // Type consistency
62290 find mayInstanceOfEStructuralFeature_class(problem,interpretation,source);
62291 BooleanElement(target);
62292 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
62293 // the upper bound of the multiplicity should be considered.
62294 numberOfExistingReferences == count find mustInRelationderived_attribute_EStructuralFeature(problem,interpretation,source,_);
62295 check(numberOfExistingReferences < 1);
62296} or {
62297 find mustInRelationderived_attribute_EStructuralFeature(problem,interpretation,source,target);
62298}
62299/**
62300 * Matcher for detecting tuples t where []ordered attribute ETypedElement(source,target)
62301 */
62302private pattern mustInRelationordered_attribute_ETypedElement(
62303 problem:LogicProblem, interpretation:PartialInterpretation,
62304 source: DefinedElement, target:DefinedElement)
62305{
62306 find interpretation(problem,interpretation);
62307 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
62308 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"ordered attribute ETypedElement");
62309 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
62310 BinaryElementRelationLink.param1(link,source);
62311 BinaryElementRelationLink.param2(link,target);
62312}
62313/**
62314 * Matcher for detecting tuples t where <>ordered attribute ETypedElement(source,target)
62315 */
62316private pattern mayInRelationordered_attribute_ETypedElement(
62317 problem:LogicProblem, interpretation:PartialInterpretation,
62318 source: DefinedElement, target:DefinedElement)
62319{
62320 find interpretation(problem,interpretation);
62321 // The two endpoint of the link have to exist
62322 find mayExist(problem, interpretation, source);
62323 find mayExist(problem, interpretation, target);
62324 // Type consistency
62325 find mayInstanceOfETypedElement_class(problem,interpretation,source);
62326 BooleanElement(target);
62327 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
62328 // the upper bound of the multiplicity should be considered.
62329 numberOfExistingReferences == count find mustInRelationordered_attribute_ETypedElement(problem,interpretation,source,_);
62330 check(numberOfExistingReferences < 1);
62331} or {
62332 find mustInRelationordered_attribute_ETypedElement(problem,interpretation,source,target);
62333}
62334/**
62335 * Matcher for detecting tuples t where []unique attribute ETypedElement(source,target)
62336 */
62337private pattern mustInRelationunique_attribute_ETypedElement(
62338 problem:LogicProblem, interpretation:PartialInterpretation,
62339 source: DefinedElement, target:DefinedElement)
62340{
62341 find interpretation(problem,interpretation);
62342 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
62343 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"unique attribute ETypedElement");
62344 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
62345 BinaryElementRelationLink.param1(link,source);
62346 BinaryElementRelationLink.param2(link,target);
62347}
62348/**
62349 * Matcher for detecting tuples t where <>unique attribute ETypedElement(source,target)
62350 */
62351private pattern mayInRelationunique_attribute_ETypedElement(
62352 problem:LogicProblem, interpretation:PartialInterpretation,
62353 source: DefinedElement, target:DefinedElement)
62354{
62355 find interpretation(problem,interpretation);
62356 // The two endpoint of the link have to exist
62357 find mayExist(problem, interpretation, source);
62358 find mayExist(problem, interpretation, target);
62359 // Type consistency
62360 find mayInstanceOfETypedElement_class(problem,interpretation,source);
62361 BooleanElement(target);
62362 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
62363 // the upper bound of the multiplicity should be considered.
62364 numberOfExistingReferences == count find mustInRelationunique_attribute_ETypedElement(problem,interpretation,source,_);
62365 check(numberOfExistingReferences < 1);
62366} or {
62367 find mustInRelationunique_attribute_ETypedElement(problem,interpretation,source,target);
62368}
62369/**
62370 * Matcher for detecting tuples t where []lowerBound attribute ETypedElement(source,target)
62371 */
62372private pattern mustInRelationlowerBound_attribute_ETypedElement(
62373 problem:LogicProblem, interpretation:PartialInterpretation,
62374 source: DefinedElement, target:DefinedElement)
62375{
62376 find interpretation(problem,interpretation);
62377 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
62378 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"lowerBound attribute ETypedElement");
62379 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
62380 BinaryElementRelationLink.param1(link,source);
62381 BinaryElementRelationLink.param2(link,target);
62382}
62383/**
62384 * Matcher for detecting tuples t where <>lowerBound attribute ETypedElement(source,target)
62385 */
62386private pattern mayInRelationlowerBound_attribute_ETypedElement(
62387 problem:LogicProblem, interpretation:PartialInterpretation,
62388 source: DefinedElement, target:DefinedElement)
62389{
62390 find interpretation(problem,interpretation);
62391 // The two endpoint of the link have to exist
62392 find mayExist(problem, interpretation, source);
62393 find mayExist(problem, interpretation, target);
62394 // Type consistency
62395 find mayInstanceOfETypedElement_class(problem,interpretation,source);
62396 IntegerElement(target);
62397 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
62398 // the upper bound of the multiplicity should be considered.
62399 numberOfExistingReferences == count find mustInRelationlowerBound_attribute_ETypedElement(problem,interpretation,source,_);
62400 check(numberOfExistingReferences < 1);
62401} or {
62402 find mustInRelationlowerBound_attribute_ETypedElement(problem,interpretation,source,target);
62403}
62404/**
62405 * Matcher for detecting tuples t where []upperBound attribute ETypedElement(source,target)
62406 */
62407private pattern mustInRelationupperBound_attribute_ETypedElement(
62408 problem:LogicProblem, interpretation:PartialInterpretation,
62409 source: DefinedElement, target:DefinedElement)
62410{
62411 find interpretation(problem,interpretation);
62412 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
62413 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"upperBound attribute ETypedElement");
62414 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
62415 BinaryElementRelationLink.param1(link,source);
62416 BinaryElementRelationLink.param2(link,target);
62417}
62418/**
62419 * Matcher for detecting tuples t where <>upperBound attribute ETypedElement(source,target)
62420 */
62421private pattern mayInRelationupperBound_attribute_ETypedElement(
62422 problem:LogicProblem, interpretation:PartialInterpretation,
62423 source: DefinedElement, target:DefinedElement)
62424{
62425 find interpretation(problem,interpretation);
62426 // The two endpoint of the link have to exist
62427 find mayExist(problem, interpretation, source);
62428 find mayExist(problem, interpretation, target);
62429 // Type consistency
62430 find mayInstanceOfETypedElement_class(problem,interpretation,source);
62431 IntegerElement(target);
62432 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
62433 // the upper bound of the multiplicity should be considered.
62434 numberOfExistingReferences == count find mustInRelationupperBound_attribute_ETypedElement(problem,interpretation,source,_);
62435 check(numberOfExistingReferences < 1);
62436} or {
62437 find mustInRelationupperBound_attribute_ETypedElement(problem,interpretation,source,target);
62438}
62439/**
62440 * Matcher for detecting tuples t where []many attribute ETypedElement(source,target)
62441 */
62442private pattern mustInRelationmany_attribute_ETypedElement(
62443 problem:LogicProblem, interpretation:PartialInterpretation,
62444 source: DefinedElement, target:DefinedElement)
62445{
62446 find interpretation(problem,interpretation);
62447 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
62448 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"many attribute ETypedElement");
62449 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
62450 BinaryElementRelationLink.param1(link,source);
62451 BinaryElementRelationLink.param2(link,target);
62452}
62453/**
62454 * Matcher for detecting tuples t where <>many attribute ETypedElement(source,target)
62455 */
62456private pattern mayInRelationmany_attribute_ETypedElement(
62457 problem:LogicProblem, interpretation:PartialInterpretation,
62458 source: DefinedElement, target:DefinedElement)
62459{
62460 find interpretation(problem,interpretation);
62461 // The two endpoint of the link have to exist
62462 find mayExist(problem, interpretation, source);
62463 find mayExist(problem, interpretation, target);
62464 // Type consistency
62465 find mayInstanceOfETypedElement_class(problem,interpretation,source);
62466 BooleanElement(target);
62467 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
62468 // the upper bound of the multiplicity should be considered.
62469 numberOfExistingReferences == count find mustInRelationmany_attribute_ETypedElement(problem,interpretation,source,_);
62470 check(numberOfExistingReferences < 1);
62471} or {
62472 find mustInRelationmany_attribute_ETypedElement(problem,interpretation,source,target);
62473}
62474/**
62475 * Matcher for detecting tuples t where []required attribute ETypedElement(source,target)
62476 */
62477private pattern mustInRelationrequired_attribute_ETypedElement(
62478 problem:LogicProblem, interpretation:PartialInterpretation,
62479 source: DefinedElement, target:DefinedElement)
62480{
62481 find interpretation(problem,interpretation);
62482 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
62483 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"required attribute ETypedElement");
62484 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
62485 BinaryElementRelationLink.param1(link,source);
62486 BinaryElementRelationLink.param2(link,target);
62487}
62488/**
62489 * Matcher for detecting tuples t where <>required attribute ETypedElement(source,target)
62490 */
62491private pattern mayInRelationrequired_attribute_ETypedElement(
62492 problem:LogicProblem, interpretation:PartialInterpretation,
62493 source: DefinedElement, target:DefinedElement)
62494{
62495 find interpretation(problem,interpretation);
62496 // The two endpoint of the link have to exist
62497 find mayExist(problem, interpretation, source);
62498 find mayExist(problem, interpretation, target);
62499 // Type consistency
62500 find mayInstanceOfETypedElement_class(problem,interpretation,source);
62501 BooleanElement(target);
62502 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
62503 // the upper bound of the multiplicity should be considered.
62504 numberOfExistingReferences == count find mustInRelationrequired_attribute_ETypedElement(problem,interpretation,source,_);
62505 check(numberOfExistingReferences < 1);
62506} or {
62507 find mustInRelationrequired_attribute_ETypedElement(problem,interpretation,source,target);
62508}
62509/**
62510 * Matcher for detecting tuples t where []key attribute EStringToStringMapEntry(source,target)
62511 */
62512private pattern mustInRelationkey_attribute_EStringToStringMapEntry(
62513 problem:LogicProblem, interpretation:PartialInterpretation,
62514 source: DefinedElement, target:DefinedElement)
62515{
62516 find interpretation(problem,interpretation);
62517 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
62518 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"key attribute EStringToStringMapEntry");
62519 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
62520 BinaryElementRelationLink.param1(link,source);
62521 BinaryElementRelationLink.param2(link,target);
62522}
62523/**
62524 * Matcher for detecting tuples t where <>key attribute EStringToStringMapEntry(source,target)
62525 */
62526private pattern mayInRelationkey_attribute_EStringToStringMapEntry(
62527 problem:LogicProblem, interpretation:PartialInterpretation,
62528 source: DefinedElement, target:DefinedElement)
62529{
62530 find interpretation(problem,interpretation);
62531 // The two endpoint of the link have to exist
62532 find mayExist(problem, interpretation, source);
62533 find mayExist(problem, interpretation, target);
62534 // Type consistency
62535 find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,source);
62536 StringElement(target);
62537 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
62538 // the upper bound of the multiplicity should be considered.
62539 numberOfExistingReferences == count find mustInRelationkey_attribute_EStringToStringMapEntry(problem,interpretation,source,_);
62540 check(numberOfExistingReferences < 1);
62541} or {
62542 find mustInRelationkey_attribute_EStringToStringMapEntry(problem,interpretation,source,target);
62543}
62544/**
62545 * Matcher for detecting tuples t where []value attribute EStringToStringMapEntry(source,target)
62546 */
62547private pattern mustInRelationvalue_attribute_EStringToStringMapEntry(
62548 problem:LogicProblem, interpretation:PartialInterpretation,
62549 source: DefinedElement, target:DefinedElement)
62550{
62551 find interpretation(problem,interpretation);
62552 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
62553 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"value attribute EStringToStringMapEntry");
62554 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
62555 BinaryElementRelationLink.param1(link,source);
62556 BinaryElementRelationLink.param2(link,target);
62557}
62558/**
62559 * Matcher for detecting tuples t where <>value attribute EStringToStringMapEntry(source,target)
62560 */
62561private pattern mayInRelationvalue_attribute_EStringToStringMapEntry(
62562 problem:LogicProblem, interpretation:PartialInterpretation,
62563 source: DefinedElement, target:DefinedElement)
62564{
62565 find interpretation(problem,interpretation);
62566 // The two endpoint of the link have to exist
62567 find mayExist(problem, interpretation, source);
62568 find mayExist(problem, interpretation, target);
62569 // Type consistency
62570 find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,source);
62571 StringElement(target);
62572 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
62573 // the upper bound of the multiplicity should be considered.
62574 numberOfExistingReferences == count find mustInRelationvalue_attribute_EStringToStringMapEntry(problem,interpretation,source,_);
62575 check(numberOfExistingReferences < 1);
62576} or {
62577 find mustInRelationvalue_attribute_EStringToStringMapEntry(problem,interpretation,source,target);
62578}
62579
62580//////////
62581// 1.3 Relation Definition Indexers
62582//////////
62583
62584//////////
62585// 1.4 Containment Indexer
62586//////////
62587private pattern mustContains2(source: DefinedElement, target: DefinedElement) {
62588 find mustContains4(_,_,source,target);
62589}
62590
62591private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation,
62592 source: DefinedElement, target: DefinedElement)
62593 { find mustInRelationdetails_reference_EAnnotation(problem,interpretation,source,target); }or
62594
62595 { find mustInRelationcontents_reference_EAnnotation(problem,interpretation,source,target); }or
62596
62597 { find mustInRelationeOperations_reference_EClass(problem,interpretation,source,target); }or
62598
62599 { find mustInRelationeStructuralFeatures_reference_EClass(problem,interpretation,source,target); }or
62600
62601 { find mustInRelationeGenericSuperTypes_reference_EClass(problem,interpretation,source,target); }or
62602
62603 { find mustInRelationeTypeParameters_reference_EClassifier(problem,interpretation,source,target); }or
62604
62605 { find mustInRelationeLiterals_reference_EEnum(problem,interpretation,source,target); }or
62606
62607 { find mustInRelationeAnnotations_reference_EModelElement(problem,interpretation,source,target); }or
62608
62609 { find mustInRelationeTypeParameters_reference_EOperation(problem,interpretation,source,target); }or
62610
62611 { find mustInRelationeParameters_reference_EOperation(problem,interpretation,source,target); }or
62612
62613 { find mustInRelationeGenericExceptions_reference_EOperation(problem,interpretation,source,target); }or
62614
62615 { find mustInRelationeClassifiers_reference_EPackage(problem,interpretation,source,target); }or
62616
62617 { find mustInRelationeSubpackages_reference_EPackage(problem,interpretation,source,target); }or
62618
62619 { find mustInRelationeGenericType_reference_ETypedElement(problem,interpretation,source,target); }or
62620
62621 { find mustInRelationeUpperBound_reference_EGenericType(problem,interpretation,source,target); }or
62622
62623 { find mustInRelationeTypeArguments_reference_EGenericType(problem,interpretation,source,target); }or
62624
62625 { find mustInRelationeLowerBound_reference_EGenericType(problem,interpretation,source,target); }or
62626
62627 { find mustInRelationeBounds_reference_ETypeParameter(problem,interpretation,source,target); }
62628
62629private pattern mustTransitiveContains(source,target) {
62630 find mustContains2+(source,target);
62631}
62632
62633//////////
62634// 2. Invalidation Indexers
62635//////////
62636// 2.1 Invalidated by WF Queries
62637//////////
62638
62639//////////
62640// 3. Unfinishedness Indexers
62641//////////
62642// 3.1 Unfinishedness Measured by Multiplicity
62643//////////
62644pattern unfinishedLowerMultiplicity_eAttributeType_reference_EAttribute(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) {
62645 find interpretation(problem,interpretation);
62646 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
62647 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributeType reference EAttribute");
62648 find mustInstanceOfEAttribute_class(problem,interpretation,object);
62649 numberOfExistingReferences == count find mustInRelationeAttributeType_reference_EAttribute(problem,interpretation,object,_);
62650 check(numberOfExistingReferences < 1);
62651 missingMultiplicity == eval(1-numberOfExistingReferences);
62652}
62653pattern unfinishedLowerMultiplicity_eReferenceType_reference_EReference(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) {
62654 find interpretation(problem,interpretation);
62655 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
62656 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferenceType reference EReference");
62657 find mustInstanceOfEReference_class(problem,interpretation,object);
62658 numberOfExistingReferences == count find mustInRelationeReferenceType_reference_EReference(problem,interpretation,object,_);
62659 check(numberOfExistingReferences < 1);
62660 missingMultiplicity == eval(1-numberOfExistingReferences);
62661}
62662pattern unfinishedLowerMultiplicity_eRawType_reference_EGenericType(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) {
62663 find interpretation(problem,interpretation);
62664 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
62665 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eRawType reference EGenericType");
62666 find mustInstanceOfEGenericType_class(problem,interpretation,object);
62667 numberOfExistingReferences == count find mustInRelationeRawType_reference_EGenericType(problem,interpretation,object,_);
62668 check(numberOfExistingReferences < 1);
62669 missingMultiplicity == eval(1-numberOfExistingReferences);
62670}
62671
62672//////////
62673// 3.2 Unfinishedness Measured by WF Queries
62674//////////
62675
62676//////////
62677// 4. Refinement Indexers
62678//////////
62679// 4.1 Object constructors
62680//////////
62681private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation)
62682{
62683 find interpretation(problem,interpretation);
62684 find mustInstanceOfEOperation_class(problem,interpretation,root);
62685 find mustExist(problem, interpretation, root);
62686}or{
62687 find interpretation(problem,interpretation);
62688 find mustInstanceOfENamedElement_class(problem,interpretation,root);
62689 find mustExist(problem, interpretation, root);
62690}or{
62691 find interpretation(problem,interpretation);
62692 find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,root);
62693 find mustExist(problem, interpretation, root);
62694}or{
62695 find interpretation(problem,interpretation);
62696 find mustInstanceOfEEnumLiteral_class(problem,interpretation,root);
62697 find mustExist(problem, interpretation, root);
62698}or{
62699 find interpretation(problem,interpretation);
62700 find mustInstanceOfEGenericType_class(problem,interpretation,root);
62701 find mustExist(problem, interpretation, root);
62702}or{
62703 find interpretation(problem,interpretation);
62704 find mustInstanceOfEObject_class(problem,interpretation,root);
62705 find mustExist(problem, interpretation, root);
62706}or{
62707 find interpretation(problem,interpretation);
62708 find mustInstanceOfEAttribute_class(problem,interpretation,root);
62709 find mustExist(problem, interpretation, root);
62710}or{
62711 find interpretation(problem,interpretation);
62712 find mustInstanceOfEPackage_class(problem,interpretation,root);
62713 find mustExist(problem, interpretation, root);
62714}or{
62715 find interpretation(problem,interpretation);
62716 find mustInstanceOfEParameter_class(problem,interpretation,root);
62717 find mustExist(problem, interpretation, root);
62718}or{
62719 find interpretation(problem,interpretation);
62720 find mustInstanceOfEDataType_class(problem,interpretation,root);
62721 find mustExist(problem, interpretation, root);
62722}or{
62723 find interpretation(problem,interpretation);
62724 find mustInstanceOfEClassifier_class(problem,interpretation,root);
62725 find mustExist(problem, interpretation, root);
62726}or{
62727 find interpretation(problem,interpretation);
62728 find mustInstanceOfEStructuralFeature_class(problem,interpretation,root);
62729 find mustExist(problem, interpretation, root);
62730}or{
62731 find interpretation(problem,interpretation);
62732 find mustInstanceOfEModelElement_class(problem,interpretation,root);
62733 find mustExist(problem, interpretation, root);
62734}or{
62735 find interpretation(problem,interpretation);
62736 find mustInstanceOfEAnnotation_class(problem,interpretation,root);
62737 find mustExist(problem, interpretation, root);
62738}or{
62739 find interpretation(problem,interpretation);
62740 find mustInstanceOfETypeParameter_class(problem,interpretation,root);
62741 find mustExist(problem, interpretation, root);
62742}or{
62743 find interpretation(problem,interpretation);
62744 find mustInstanceOfEReference_class(problem,interpretation,root);
62745 find mustExist(problem, interpretation, root);
62746}or{
62747 find interpretation(problem,interpretation);
62748 find mustInstanceOfEEnum_class(problem,interpretation,root);
62749 find mustExist(problem, interpretation, root);
62750}or{
62751 find interpretation(problem,interpretation);
62752 find mustInstanceOfETypedElement_class(problem,interpretation,root);
62753 find mustExist(problem, interpretation, root);
62754}or{
62755 find interpretation(problem,interpretation);
62756 find mustInstanceOfEClass_class(problem,interpretation,root);
62757 find mustExist(problem, interpretation, root);
62758}or{
62759 find interpretation(problem,interpretation);
62760 find mustInstanceOfEModelElement_class_DefinedPart(problem,interpretation,root);
62761 find mustExist(problem, interpretation, root);
62762}or{
62763 find interpretation(problem,interpretation);
62764 find mustInstanceOfEModelElement_class_UndefinedPart(problem,interpretation,root);
62765 find mustExist(problem, interpretation, root);
62766}or{
62767 find interpretation(problem,interpretation);
62768 find mustInstanceOfENamedElement_class_DefinedPart(problem,interpretation,root);
62769 find mustExist(problem, interpretation, root);
62770}or{
62771 find interpretation(problem,interpretation);
62772 find mustInstanceOfENamedElement_class_UndefinedPart(problem,interpretation,root);
62773 find mustExist(problem, interpretation, root);
62774}or{
62775 find interpretation(problem,interpretation);
62776 find mustInstanceOfEPackage_class_DefinedPart(problem,interpretation,root);
62777 find mustExist(problem, interpretation, root);
62778}or{
62779 find interpretation(problem,interpretation);
62780 find mustInstanceOfEPackage_class_UndefinedPart(problem,interpretation,root);
62781 find mustExist(problem, interpretation, root);
62782}
62783pattern createObject_EStringToStringMapEntry_class_by_details_reference_EAnnotation(
62784 problem:LogicProblem, interpretation:PartialInterpretation,
62785 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
62786 container:DefinedElement)
62787{
62788 find interpretation(problem,interpretation);
62789 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
62790 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EStringToStringMapEntry class");
62791 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
62792 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"details reference EAnnotation");
62793 find mustInstanceOfEAnnotation_class(problem,interpretation,container);
62794 find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,newObject);
62795 find mayInRelationdetails_reference_EAnnotation(problem,interpretation,container,newObject);
62796 find mustExist(problem, interpretation, container);
62797 neg find mustExist(problem, interpretation, newObject);
62798}
62799pattern createObject_EStringToStringMapEntry_class(
62800 problem:LogicProblem, interpretation:PartialInterpretation,
62801 typeInterpretation:PartialComplexTypeInterpretation)
62802{
62803 find interpretation(problem,interpretation);
62804 neg find hasElementInContainment(problem,interpretation);
62805 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
62806 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EStringToStringMapEntry class");
62807 find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,newObject);
62808 find mayExist(problem, interpretation, newObject);
62809 neg find mustExist(problem, interpretation, newObject);
62810}
62811pattern createObject_EEnum_class_by_eClassifiers_reference_EPackage_with_ePackage_reference_EClassifier(
62812 problem:LogicProblem, interpretation:PartialInterpretation,
62813 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
62814 container:DefinedElement)
62815{
62816 find interpretation(problem,interpretation);
62817 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
62818 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EEnum class");
62819 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
62820 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eClassifiers reference EPackage");
62821 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
62822 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"ePackage reference EClassifier");
62823 find mustInstanceOfEPackage_class(problem,interpretation,container);
62824 find mayInstanceOfEEnum_class(problem,interpretation,newObject);
62825 find mayInRelationeClassifiers_reference_EPackage(problem,interpretation,container,newObject);
62826 find mustExist(problem, interpretation, container);
62827 neg find mustExist(problem, interpretation, newObject);
62828}
62829pattern createObject_EEnum_class(
62830 problem:LogicProblem, interpretation:PartialInterpretation,
62831 typeInterpretation:PartialComplexTypeInterpretation)
62832{
62833 find interpretation(problem,interpretation);
62834 neg find hasElementInContainment(problem,interpretation);
62835 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
62836 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EEnum class");
62837 find mayInstanceOfEEnum_class(problem,interpretation,newObject);
62838 find mayExist(problem, interpretation, newObject);
62839 neg find mustExist(problem, interpretation, newObject);
62840}
62841pattern createObject_EParameter_class_by_eParameters_reference_EOperation_with_eOperation_reference_EParameter(
62842 problem:LogicProblem, interpretation:PartialInterpretation,
62843 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
62844 container:DefinedElement)
62845{
62846 find interpretation(problem,interpretation);
62847 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
62848 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EParameter class");
62849 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
62850 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eParameters reference EOperation");
62851 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
62852 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eOperation reference EParameter");
62853 find mustInstanceOfEOperation_class(problem,interpretation,container);
62854 find mayInstanceOfEParameter_class(problem,interpretation,newObject);
62855 find mayInRelationeParameters_reference_EOperation(problem,interpretation,container,newObject);
62856 find mustExist(problem, interpretation, container);
62857 neg find mustExist(problem, interpretation, newObject);
62858}
62859pattern createObject_EParameter_class(
62860 problem:LogicProblem, interpretation:PartialInterpretation,
62861 typeInterpretation:PartialComplexTypeInterpretation)
62862{
62863 find interpretation(problem,interpretation);
62864 neg find hasElementInContainment(problem,interpretation);
62865 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
62866 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EParameter class");
62867 find mayInstanceOfEParameter_class(problem,interpretation,newObject);
62868 find mayExist(problem, interpretation, newObject);
62869 neg find mustExist(problem, interpretation, newObject);
62870}
62871pattern createObject_EGenericType_class_by_eGenericSuperTypes_reference_EClass(
62872 problem:LogicProblem, interpretation:PartialInterpretation,
62873 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
62874 container:DefinedElement)
62875{
62876 find interpretation(problem,interpretation);
62877 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
62878 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class");
62879 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
62880 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eGenericSuperTypes reference EClass");
62881 find mustInstanceOfEClass_class(problem,interpretation,container);
62882 find mayInstanceOfEGenericType_class(problem,interpretation,newObject);
62883 find mayInRelationeGenericSuperTypes_reference_EClass(problem,interpretation,container,newObject);
62884 find mustExist(problem, interpretation, container);
62885 neg find mustExist(problem, interpretation, newObject);
62886}
62887pattern createObject_EGenericType_class_by_eGenericExceptions_reference_EOperation(
62888 problem:LogicProblem, interpretation:PartialInterpretation,
62889 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
62890 container:DefinedElement)
62891{
62892 find interpretation(problem,interpretation);
62893 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
62894 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class");
62895 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
62896 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eGenericExceptions reference EOperation");
62897 find mustInstanceOfEOperation_class(problem,interpretation,container);
62898 find mayInstanceOfEGenericType_class(problem,interpretation,newObject);
62899 find mayInRelationeGenericExceptions_reference_EOperation(problem,interpretation,container,newObject);
62900 find mustExist(problem, interpretation, container);
62901 neg find mustExist(problem, interpretation, newObject);
62902}
62903pattern createObject_EGenericType_class_by_eGenericType_reference_ETypedElement(
62904 problem:LogicProblem, interpretation:PartialInterpretation,
62905 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
62906 container:DefinedElement)
62907{
62908 find interpretation(problem,interpretation);
62909 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
62910 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class");
62911 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
62912 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eGenericType reference ETypedElement");
62913 find mustInstanceOfETypedElement_class(problem,interpretation,container);
62914 find mayInstanceOfEGenericType_class(problem,interpretation,newObject);
62915 find mayInRelationeGenericType_reference_ETypedElement(problem,interpretation,container,newObject);
62916 find mustExist(problem, interpretation, container);
62917 neg find mustExist(problem, interpretation, newObject);
62918}
62919pattern createObject_EGenericType_class_by_eUpperBound_reference_EGenericType(
62920 problem:LogicProblem, interpretation:PartialInterpretation,
62921 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
62922 container:DefinedElement)
62923{
62924 find interpretation(problem,interpretation);
62925 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
62926 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class");
62927 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
62928 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eUpperBound reference EGenericType");
62929 find mustInstanceOfEGenericType_class(problem,interpretation,container);
62930 find mayInstanceOfEGenericType_class(problem,interpretation,newObject);
62931 find mayInRelationeUpperBound_reference_EGenericType(problem,interpretation,container,newObject);
62932 find mustExist(problem, interpretation, container);
62933 neg find mustExist(problem, interpretation, newObject);
62934}
62935pattern createObject_EGenericType_class_by_eTypeArguments_reference_EGenericType(
62936 problem:LogicProblem, interpretation:PartialInterpretation,
62937 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
62938 container:DefinedElement)
62939{
62940 find interpretation(problem,interpretation);
62941 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
62942 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class");
62943 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
62944 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eTypeArguments reference EGenericType");
62945 find mustInstanceOfEGenericType_class(problem,interpretation,container);
62946 find mayInstanceOfEGenericType_class(problem,interpretation,newObject);
62947 find mayInRelationeTypeArguments_reference_EGenericType(problem,interpretation,container,newObject);
62948 find mustExist(problem, interpretation, container);
62949 neg find mustExist(problem, interpretation, newObject);
62950}
62951pattern createObject_EGenericType_class_by_eLowerBound_reference_EGenericType(
62952 problem:LogicProblem, interpretation:PartialInterpretation,
62953 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
62954 container:DefinedElement)
62955{
62956 find interpretation(problem,interpretation);
62957 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
62958 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class");
62959 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
62960 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eLowerBound reference EGenericType");
62961 find mustInstanceOfEGenericType_class(problem,interpretation,container);
62962 find mayInstanceOfEGenericType_class(problem,interpretation,newObject);
62963 find mayInRelationeLowerBound_reference_EGenericType(problem,interpretation,container,newObject);
62964 find mustExist(problem, interpretation, container);
62965 neg find mustExist(problem, interpretation, newObject);
62966}
62967pattern createObject_EGenericType_class_by_eBounds_reference_ETypeParameter(
62968 problem:LogicProblem, interpretation:PartialInterpretation,
62969 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
62970 container:DefinedElement)
62971{
62972 find interpretation(problem,interpretation);
62973 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
62974 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class");
62975 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
62976 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eBounds reference ETypeParameter");
62977 find mustInstanceOfETypeParameter_class(problem,interpretation,container);
62978 find mayInstanceOfEGenericType_class(problem,interpretation,newObject);
62979 find mayInRelationeBounds_reference_ETypeParameter(problem,interpretation,container,newObject);
62980 find mustExist(problem, interpretation, container);
62981 neg find mustExist(problem, interpretation, newObject);
62982}
62983pattern createObject_EGenericType_class(
62984 problem:LogicProblem, interpretation:PartialInterpretation,
62985 typeInterpretation:PartialComplexTypeInterpretation)
62986{
62987 find interpretation(problem,interpretation);
62988 neg find hasElementInContainment(problem,interpretation);
62989 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
62990 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EGenericType class");
62991 find mayInstanceOfEGenericType_class(problem,interpretation,newObject);
62992 find mayExist(problem, interpretation, newObject);
62993 neg find mustExist(problem, interpretation, newObject);
62994}
62995pattern createObject_EPackage_class_UndefinedPart_by_eSubpackages_reference_EPackage_with_eSuperPackage_reference_EPackage(
62996 problem:LogicProblem, interpretation:PartialInterpretation,
62997 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
62998 container:DefinedElement)
62999{
63000 find interpretation(problem,interpretation);
63001 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
63002 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EPackage class UndefinedPart");
63003 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
63004 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eSubpackages reference EPackage");
63005 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
63006 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eSuperPackage reference EPackage");
63007 find mustInstanceOfEPackage_class(problem,interpretation,container);
63008 find mayInstanceOfEPackage_class_UndefinedPart(problem,interpretation,newObject);
63009 find mayInRelationeSubpackages_reference_EPackage(problem,interpretation,container,newObject);
63010 find mustExist(problem, interpretation, container);
63011 neg find mustExist(problem, interpretation, newObject);
63012}
63013pattern createObject_EPackage_class_UndefinedPart(
63014 problem:LogicProblem, interpretation:PartialInterpretation,
63015 typeInterpretation:PartialComplexTypeInterpretation)
63016{
63017 find interpretation(problem,interpretation);
63018 neg find hasElementInContainment(problem,interpretation);
63019 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
63020 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EPackage class UndefinedPart");
63021 find mayInstanceOfEPackage_class_UndefinedPart(problem,interpretation,newObject);
63022 find mayExist(problem, interpretation, newObject);
63023 neg find mustExist(problem, interpretation, newObject);
63024}
63025pattern createObject_EObject_class_by_contents_reference_EAnnotation(
63026 problem:LogicProblem, interpretation:PartialInterpretation,
63027 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
63028 container:DefinedElement)
63029{
63030 find interpretation(problem,interpretation);
63031 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
63032 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EObject class");
63033 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
63034 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"contents reference EAnnotation");
63035 find mustInstanceOfEAnnotation_class(problem,interpretation,container);
63036 find mayInstanceOfEObject_class(problem,interpretation,newObject);
63037 find mayInRelationcontents_reference_EAnnotation(problem,interpretation,container,newObject);
63038 find mustExist(problem, interpretation, container);
63039 neg find mustExist(problem, interpretation, newObject);
63040}
63041pattern createObject_EObject_class(
63042 problem:LogicProblem, interpretation:PartialInterpretation,
63043 typeInterpretation:PartialComplexTypeInterpretation)
63044{
63045 find interpretation(problem,interpretation);
63046 neg find hasElementInContainment(problem,interpretation);
63047 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
63048 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EObject class");
63049 find mayInstanceOfEObject_class(problem,interpretation,newObject);
63050 find mayExist(problem, interpretation, newObject);
63051 neg find mustExist(problem, interpretation, newObject);
63052}
63053pattern createObject_EEnumLiteral_class_by_eLiterals_reference_EEnum_with_eEnum_reference_EEnumLiteral(
63054 problem:LogicProblem, interpretation:PartialInterpretation,
63055 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
63056 container:DefinedElement)
63057{
63058 find interpretation(problem,interpretation);
63059 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
63060 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EEnumLiteral class");
63061 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
63062 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eLiterals reference EEnum");
63063 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
63064 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eEnum reference EEnumLiteral");
63065 find mustInstanceOfEEnum_class(problem,interpretation,container);
63066 find mayInstanceOfEEnumLiteral_class(problem,interpretation,newObject);
63067 find mayInRelationeLiterals_reference_EEnum(problem,interpretation,container,newObject);
63068 find mustExist(problem, interpretation, container);
63069 neg find mustExist(problem, interpretation, newObject);
63070}
63071pattern createObject_EEnumLiteral_class(
63072 problem:LogicProblem, interpretation:PartialInterpretation,
63073 typeInterpretation:PartialComplexTypeInterpretation)
63074{
63075 find interpretation(problem,interpretation);
63076 neg find hasElementInContainment(problem,interpretation);
63077 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
63078 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EEnumLiteral class");
63079 find mayInstanceOfEEnumLiteral_class(problem,interpretation,newObject);
63080 find mayExist(problem, interpretation, newObject);
63081 neg find mustExist(problem, interpretation, newObject);
63082}
63083pattern createObject_ETypeParameter_class_by_eTypeParameters_reference_EClassifier(
63084 problem:LogicProblem, interpretation:PartialInterpretation,
63085 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
63086 container:DefinedElement)
63087{
63088 find interpretation(problem,interpretation);
63089 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
63090 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"ETypeParameter class");
63091 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
63092 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eTypeParameters reference EClassifier");
63093 find mustInstanceOfEClassifier_class(problem,interpretation,container);
63094 find mayInstanceOfETypeParameter_class(problem,interpretation,newObject);
63095 find mayInRelationeTypeParameters_reference_EClassifier(problem,interpretation,container,newObject);
63096 find mustExist(problem, interpretation, container);
63097 neg find mustExist(problem, interpretation, newObject);
63098}
63099pattern createObject_ETypeParameter_class_by_eTypeParameters_reference_EOperation(
63100 problem:LogicProblem, interpretation:PartialInterpretation,
63101 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
63102 container:DefinedElement)
63103{
63104 find interpretation(problem,interpretation);
63105 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
63106 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"ETypeParameter class");
63107 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
63108 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eTypeParameters reference EOperation");
63109 find mustInstanceOfEOperation_class(problem,interpretation,container);
63110 find mayInstanceOfETypeParameter_class(problem,interpretation,newObject);
63111 find mayInRelationeTypeParameters_reference_EOperation(problem,interpretation,container,newObject);
63112 find mustExist(problem, interpretation, container);
63113 neg find mustExist(problem, interpretation, newObject);
63114}
63115pattern createObject_ETypeParameter_class(
63116 problem:LogicProblem, interpretation:PartialInterpretation,
63117 typeInterpretation:PartialComplexTypeInterpretation)
63118{
63119 find interpretation(problem,interpretation);
63120 neg find hasElementInContainment(problem,interpretation);
63121 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
63122 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"ETypeParameter class");
63123 find mayInstanceOfETypeParameter_class(problem,interpretation,newObject);
63124 find mayExist(problem, interpretation, newObject);
63125 neg find mustExist(problem, interpretation, newObject);
63126}
63127pattern createObject_EAttribute_class_by_eStructuralFeatures_reference_EClass_with_eContainingClass_reference_EStructuralFeature(
63128 problem:LogicProblem, interpretation:PartialInterpretation,
63129 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
63130 container:DefinedElement)
63131{
63132 find interpretation(problem,interpretation);
63133 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
63134 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EAttribute class");
63135 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
63136 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eStructuralFeatures reference EClass");
63137 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
63138 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eContainingClass reference EStructuralFeature");
63139 find mustInstanceOfEClass_class(problem,interpretation,container);
63140 find mayInstanceOfEAttribute_class(problem,interpretation,newObject);
63141 find mayInRelationeStructuralFeatures_reference_EClass(problem,interpretation,container,newObject);
63142 find mustExist(problem, interpretation, container);
63143 neg find mustExist(problem, interpretation, newObject);
63144}
63145pattern createObject_EAttribute_class(
63146 problem:LogicProblem, interpretation:PartialInterpretation,
63147 typeInterpretation:PartialComplexTypeInterpretation)
63148{
63149 find interpretation(problem,interpretation);
63150 neg find hasElementInContainment(problem,interpretation);
63151 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
63152 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EAttribute class");
63153 find mayInstanceOfEAttribute_class(problem,interpretation,newObject);
63154 find mayExist(problem, interpretation, newObject);
63155 neg find mustExist(problem, interpretation, newObject);
63156}
63157pattern createObject_EOperation_class_by_eOperations_reference_EClass_with_eContainingClass_reference_EOperation(
63158 problem:LogicProblem, interpretation:PartialInterpretation,
63159 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
63160 container:DefinedElement)
63161{
63162 find interpretation(problem,interpretation);
63163 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
63164 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EOperation class");
63165 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
63166 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eOperations reference EClass");
63167 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
63168 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eContainingClass reference EOperation");
63169 find mustInstanceOfEClass_class(problem,interpretation,container);
63170 find mayInstanceOfEOperation_class(problem,interpretation,newObject);
63171 find mayInRelationeOperations_reference_EClass(problem,interpretation,container,newObject);
63172 find mustExist(problem, interpretation, container);
63173 neg find mustExist(problem, interpretation, newObject);
63174}
63175pattern createObject_EOperation_class(
63176 problem:LogicProblem, interpretation:PartialInterpretation,
63177 typeInterpretation:PartialComplexTypeInterpretation)
63178{
63179 find interpretation(problem,interpretation);
63180 neg find hasElementInContainment(problem,interpretation);
63181 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
63182 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EOperation class");
63183 find mayInstanceOfEOperation_class(problem,interpretation,newObject);
63184 find mayExist(problem, interpretation, newObject);
63185 neg find mustExist(problem, interpretation, newObject);
63186}
63187pattern createObject_EAnnotation_class_by_eAnnotations_reference_EModelElement_with_eModelElement_reference_EAnnotation(
63188 problem:LogicProblem, interpretation:PartialInterpretation,
63189 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
63190 container:DefinedElement)
63191{
63192 find interpretation(problem,interpretation);
63193 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
63194 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EAnnotation class");
63195 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
63196 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eAnnotations reference EModelElement");
63197 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
63198 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eModelElement reference EAnnotation");
63199 find mustInstanceOfEModelElement_class(problem,interpretation,container);
63200 find mayInstanceOfEAnnotation_class(problem,interpretation,newObject);
63201 find mayInRelationeAnnotations_reference_EModelElement(problem,interpretation,container,newObject);
63202 find mustExist(problem, interpretation, container);
63203 neg find mustExist(problem, interpretation, newObject);
63204}
63205pattern createObject_EAnnotation_class(
63206 problem:LogicProblem, interpretation:PartialInterpretation,
63207 typeInterpretation:PartialComplexTypeInterpretation)
63208{
63209 find interpretation(problem,interpretation);
63210 neg find hasElementInContainment(problem,interpretation);
63211 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
63212 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EAnnotation class");
63213 find mayInstanceOfEAnnotation_class(problem,interpretation,newObject);
63214 find mayExist(problem, interpretation, newObject);
63215 neg find mustExist(problem, interpretation, newObject);
63216}
63217pattern createObject_EReference_class_by_eStructuralFeatures_reference_EClass_with_eContainingClass_reference_EStructuralFeature(
63218 problem:LogicProblem, interpretation:PartialInterpretation,
63219 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
63220 container:DefinedElement)
63221{
63222 find interpretation(problem,interpretation);
63223 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
63224 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EReference class");
63225 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
63226 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eStructuralFeatures reference EClass");
63227 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
63228 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"eContainingClass reference EStructuralFeature");
63229 find mustInstanceOfEClass_class(problem,interpretation,container);
63230 find mayInstanceOfEReference_class(problem,interpretation,newObject);
63231 find mayInRelationeStructuralFeatures_reference_EClass(problem,interpretation,container,newObject);
63232 find mustExist(problem, interpretation, container);
63233 neg find mustExist(problem, interpretation, newObject);
63234}
63235pattern createObject_EReference_class(
63236 problem:LogicProblem, interpretation:PartialInterpretation,
63237 typeInterpretation:PartialComplexTypeInterpretation)
63238{
63239 find interpretation(problem,interpretation);
63240 neg find hasElementInContainment(problem,interpretation);
63241 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
63242 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EReference class");
63243 find mayInstanceOfEReference_class(problem,interpretation,newObject);
63244 find mayExist(problem, interpretation, newObject);
63245 neg find mustExist(problem, interpretation, newObject);
63246}
63247pattern createObject_EDataType_class_by_eClassifiers_reference_EPackage_with_ePackage_reference_EClassifier(
63248 problem:LogicProblem, interpretation:PartialInterpretation,
63249 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
63250 container:DefinedElement)
63251{
63252 find interpretation(problem,interpretation);
63253 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
63254 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EDataType class");
63255 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
63256 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eClassifiers reference EPackage");
63257 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
63258 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"ePackage reference EClassifier");
63259 find mustInstanceOfEPackage_class(problem,interpretation,container);
63260 find mayInstanceOfEDataType_class(problem,interpretation,newObject);
63261 find mayInRelationeClassifiers_reference_EPackage(problem,interpretation,container,newObject);
63262 find mustExist(problem, interpretation, container);
63263 neg find mustExist(problem, interpretation, newObject);
63264}
63265pattern createObject_EDataType_class(
63266 problem:LogicProblem, interpretation:PartialInterpretation,
63267 typeInterpretation:PartialComplexTypeInterpretation)
63268{
63269 find interpretation(problem,interpretation);
63270 neg find hasElementInContainment(problem,interpretation);
63271 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
63272 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EDataType class");
63273 find mayInstanceOfEDataType_class(problem,interpretation,newObject);
63274 find mayExist(problem, interpretation, newObject);
63275 neg find mustExist(problem, interpretation, newObject);
63276}
63277pattern createObject_EClass_class_by_eClassifiers_reference_EPackage_with_ePackage_reference_EClassifier(
63278 problem:LogicProblem, interpretation:PartialInterpretation,
63279 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
63280 container:DefinedElement)
63281{
63282 find interpretation(problem,interpretation);
63283 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
63284 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EClass class");
63285 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
63286 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"eClassifiers reference EPackage");
63287 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
63288 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"ePackage reference EClassifier");
63289 find mustInstanceOfEPackage_class(problem,interpretation,container);
63290 find mayInstanceOfEClass_class(problem,interpretation,newObject);
63291 find mayInRelationeClassifiers_reference_EPackage(problem,interpretation,container,newObject);
63292 find mustExist(problem, interpretation, container);
63293 neg find mustExist(problem, interpretation, newObject);
63294}
63295pattern createObject_EClass_class(
63296 problem:LogicProblem, interpretation:PartialInterpretation,
63297 typeInterpretation:PartialComplexTypeInterpretation)
63298{
63299 find interpretation(problem,interpretation);
63300 neg find hasElementInContainment(problem,interpretation);
63301 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
63302 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"EClass class");
63303 find mayInstanceOfEClass_class(problem,interpretation,newObject);
63304 find mayExist(problem, interpretation, newObject);
63305 neg find mustExist(problem, interpretation, newObject);
63306}
63307
63308//////////
63309// 4.2 Type refinement
63310//////////
63311pattern refineTypeTo_EStringToStringMapEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
63312 find interpretation(problem,interpretation);
63313 PartialInterpretation.newElements(interpretation,element);
63314 find mayInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
63315 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
63316 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
63317 neg find mustInstanceOfEObject_class(problem,interpretation,element);
63318 neg find mustInstanceOfEModelElement_class(problem,interpretation,element);
63319}
63320pattern refineTypeTo_EEnum_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
63321 find interpretation(problem,interpretation);
63322 PartialInterpretation.newElements(interpretation,element);
63323 find mayInstanceOfEEnum_class(problem,interpretation,element);
63324 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
63325 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
63326 neg find mustInstanceOfEEnum_class(problem,interpretation,element);
63327 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
63328 neg find mustInstanceOfEObject_class(problem,interpretation,element);
63329 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
63330 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
63331 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
63332 neg find mustInstanceOfEClass_class(problem,interpretation,element);
63333 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
63334}
63335pattern refineTypeTo_EParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
63336 find interpretation(problem,interpretation);
63337 PartialInterpretation.newElements(interpretation,element);
63338 find mayInstanceOfEParameter_class(problem,interpretation,element);
63339 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
63340 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
63341 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
63342 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
63343 neg find mustInstanceOfEObject_class(problem,interpretation,element);
63344 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
63345 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
63346 neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element);
63347 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
63348 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
63349 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
63350}
63351pattern refineTypeTo_EGenericType_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
63352 find interpretation(problem,interpretation);
63353 PartialInterpretation.newElements(interpretation,element);
63354 find mayInstanceOfEGenericType_class(problem,interpretation,element);
63355 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
63356 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
63357 neg find mustInstanceOfEObject_class(problem,interpretation,element);
63358 neg find mustInstanceOfEModelElement_class(problem,interpretation,element);
63359}
63360pattern refineTypeTo_EPackage_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
63361 find interpretation(problem,interpretation);
63362 PartialInterpretation.newElements(interpretation,element);
63363 find mayInstanceOfEPackage_class_UndefinedPart(problem,interpretation,element);
63364 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
63365 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
63366 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
63367 neg find mustInstanceOfEObject_class(problem,interpretation,element);
63368 neg find mustInstanceOfEPackage_class_UndefinedPart(problem,interpretation,element);
63369 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
63370 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
63371 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
63372 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
63373}
63374pattern refineTypeTo_EObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
63375 find interpretation(problem,interpretation);
63376 PartialInterpretation.newElements(interpretation,element);
63377 find mayInstanceOfEObject_class(problem,interpretation,element);
63378 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
63379 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
63380 neg find mustInstanceOfEObject_class(problem,interpretation,element);
63381 neg find mustInstanceOfEModelElement_class(problem,interpretation,element);
63382}
63383pattern refineTypeTo_EEnumLiteral_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
63384 find interpretation(problem,interpretation);
63385 PartialInterpretation.newElements(interpretation,element);
63386 find mayInstanceOfEEnumLiteral_class(problem,interpretation,element);
63387 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
63388 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
63389 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
63390 neg find mustInstanceOfEObject_class(problem,interpretation,element);
63391 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
63392 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
63393 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
63394 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
63395 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
63396}
63397pattern refineTypeTo_ETypeParameter_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
63398 find interpretation(problem,interpretation);
63399 PartialInterpretation.newElements(interpretation,element);
63400 find mayInstanceOfETypeParameter_class(problem,interpretation,element);
63401 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
63402 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
63403 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
63404 neg find mustInstanceOfEObject_class(problem,interpretation,element);
63405 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
63406 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
63407 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
63408 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
63409 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
63410}
63411pattern refineTypeTo_EAttribute_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
63412 find interpretation(problem,interpretation);
63413 PartialInterpretation.newElements(interpretation,element);
63414 find mayInstanceOfEAttribute_class(problem,interpretation,element);
63415 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
63416 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
63417 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
63418 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
63419 neg find mustInstanceOfEReference_class(problem,interpretation,element);
63420 neg find mustInstanceOfEObject_class(problem,interpretation,element);
63421 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
63422 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
63423 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
63424 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
63425 neg find mustInstanceOfEAttribute_class(problem,interpretation,element);
63426 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
63427}
63428pattern refineTypeTo_EOperation_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
63429 find interpretation(problem,interpretation);
63430 PartialInterpretation.newElements(interpretation,element);
63431 find mayInstanceOfEOperation_class(problem,interpretation,element);
63432 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
63433 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
63434 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
63435 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
63436 neg find mustInstanceOfEObject_class(problem,interpretation,element);
63437 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
63438 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
63439 neg find mustInstanceOfEStructuralFeature_class(problem,interpretation,element);
63440 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
63441 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
63442 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
63443}
63444pattern refineTypeTo_EAnnotation_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
63445 find interpretation(problem,interpretation);
63446 PartialInterpretation.newElements(interpretation,element);
63447 find mayInstanceOfEAnnotation_class(problem,interpretation,element);
63448 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
63449 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
63450 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
63451 neg find mustInstanceOfEObject_class(problem,interpretation,element);
63452 neg find mustInstanceOfENamedElement_class(problem,interpretation,element);
63453}
63454pattern refineTypeTo_EReference_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
63455 find interpretation(problem,interpretation);
63456 PartialInterpretation.newElements(interpretation,element);
63457 find mayInstanceOfEReference_class(problem,interpretation,element);
63458 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
63459 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
63460 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
63461 neg find mustInstanceOfEParameter_class(problem,interpretation,element);
63462 neg find mustInstanceOfEReference_class(problem,interpretation,element);
63463 neg find mustInstanceOfEObject_class(problem,interpretation,element);
63464 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
63465 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
63466 neg find mustInstanceOfEClassifier_class(problem,interpretation,element);
63467 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
63468 neg find mustInstanceOfEOperation_class(problem,interpretation,element);
63469 neg find mustInstanceOfEAttribute_class(problem,interpretation,element);
63470}
63471pattern refineTypeTo_EDataType_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
63472 find interpretation(problem,interpretation);
63473 PartialInterpretation.newElements(interpretation,element);
63474 find mayInstanceOfEDataType_class(problem,interpretation,element);
63475 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
63476 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
63477 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
63478 neg find mustInstanceOfEEnum_class(problem,interpretation,element);
63479 neg find mustInstanceOfEObject_class(problem,interpretation,element);
63480 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
63481 neg find mustInstanceOfEDataType_class(problem,interpretation,element);
63482 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
63483 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
63484 neg find mustInstanceOfEClass_class(problem,interpretation,element);
63485 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
63486}
63487pattern refineTypeTo_EClass_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
63488 find interpretation(problem,interpretation);
63489 PartialInterpretation.newElements(interpretation,element);
63490 find mayInstanceOfEClass_class(problem,interpretation,element);
63491 neg find mustInstanceOfEAnnotation_class(problem,interpretation,element);
63492 neg find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,element);
63493 neg find mustInstanceOfEGenericType_class(problem,interpretation,element);
63494 neg find mustInstanceOfEObject_class(problem,interpretation,element);
63495 neg find mustInstanceOfEDataType_class(problem,interpretation,element);
63496 neg find mustInstanceOfEEnumLiteral_class(problem,interpretation,element);
63497 neg find mustInstanceOfETypeParameter_class(problem,interpretation,element);
63498 neg find mustInstanceOfETypedElement_class(problem,interpretation,element);
63499 neg find mustInstanceOfEClass_class(problem,interpretation,element);
63500 neg find mustInstanceOfEPackage_class(problem,interpretation,element);
63501}
63502
63503//////////
63504// 4.3 Relation refinement
63505//////////
63506pattern refineRelation_eAttributeType_reference_EAttribute(
63507 problem:LogicProblem, interpretation:PartialInterpretation,
63508 relationIterpretation:PartialRelationInterpretation,
63509 from: DefinedElement, to: DefinedElement)
63510{
63511 find interpretation(problem,interpretation);
63512 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
63513 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributeType reference EAttribute");
63514 find mustExist(problem, interpretation, from);
63515 find mustExist(problem, interpretation, to);
63516 find mustInstanceOfEAttribute_class(problem,interpretation,from);
63517 find mustInstanceOfEDataType_class(problem,interpretation,to);
63518 find mayInRelationeAttributeType_reference_EAttribute(problem,interpretation,from,to);
63519 neg find mustInRelationeAttributeType_reference_EAttribute(problem,interpretation,from,to);
63520}
63521pattern refineRelation_references_reference_EAnnotation(
63522 problem:LogicProblem, interpretation:PartialInterpretation,
63523 relationIterpretation:PartialRelationInterpretation,
63524 from: DefinedElement, to: DefinedElement)
63525{
63526 find interpretation(problem,interpretation);
63527 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
63528 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"references reference EAnnotation");
63529 find mustExist(problem, interpretation, from);
63530 find mustExist(problem, interpretation, to);
63531 find mustInstanceOfEAnnotation_class(problem,interpretation,from);
63532 find mustInstanceOfEObject_class(problem,interpretation,to);
63533 find mayInRelationreferences_reference_EAnnotation(problem,interpretation,from,to);
63534 neg find mustInRelationreferences_reference_EAnnotation(problem,interpretation,from,to);
63535}
63536pattern refineRelation_eSuperTypes_reference_EClass(
63537 problem:LogicProblem, interpretation:PartialInterpretation,
63538 relationIterpretation:PartialRelationInterpretation,
63539 from: DefinedElement, to: DefinedElement)
63540{
63541 find interpretation(problem,interpretation);
63542 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
63543 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eSuperTypes reference EClass");
63544 find mustExist(problem, interpretation, from);
63545 find mustExist(problem, interpretation, to);
63546 find mustInstanceOfEClass_class(problem,interpretation,from);
63547 find mustInstanceOfEClass_class(problem,interpretation,to);
63548 find mayInRelationeSuperTypes_reference_EClass(problem,interpretation,from,to);
63549 neg find mustInRelationeSuperTypes_reference_EClass(problem,interpretation,from,to);
63550}
63551pattern refineRelation_eAllAttributes_reference_EClass(
63552 problem:LogicProblem, interpretation:PartialInterpretation,
63553 relationIterpretation:PartialRelationInterpretation,
63554 from: DefinedElement, to: DefinedElement)
63555{
63556 find interpretation(problem,interpretation);
63557 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
63558 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllAttributes reference EClass");
63559 find mustExist(problem, interpretation, from);
63560 find mustExist(problem, interpretation, to);
63561 find mustInstanceOfEClass_class(problem,interpretation,from);
63562 find mustInstanceOfEAttribute_class(problem,interpretation,to);
63563 find mayInRelationeAllAttributes_reference_EClass(problem,interpretation,from,to);
63564 neg find mustInRelationeAllAttributes_reference_EClass(problem,interpretation,from,to);
63565}
63566pattern refineRelation_eAllReferences_reference_EClass(
63567 problem:LogicProblem, interpretation:PartialInterpretation,
63568 relationIterpretation:PartialRelationInterpretation,
63569 from: DefinedElement, to: DefinedElement)
63570{
63571 find interpretation(problem,interpretation);
63572 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
63573 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllReferences reference EClass");
63574 find mustExist(problem, interpretation, from);
63575 find mustExist(problem, interpretation, to);
63576 find mustInstanceOfEClass_class(problem,interpretation,from);
63577 find mustInstanceOfEReference_class(problem,interpretation,to);
63578 find mayInRelationeAllReferences_reference_EClass(problem,interpretation,from,to);
63579 neg find mustInRelationeAllReferences_reference_EClass(problem,interpretation,from,to);
63580}
63581pattern refineRelation_eReferences_reference_EClass(
63582 problem:LogicProblem, interpretation:PartialInterpretation,
63583 relationIterpretation:PartialRelationInterpretation,
63584 from: DefinedElement, to: DefinedElement)
63585{
63586 find interpretation(problem,interpretation);
63587 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
63588 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferences reference EClass");
63589 find mustExist(problem, interpretation, from);
63590 find mustExist(problem, interpretation, to);
63591 find mustInstanceOfEClass_class(problem,interpretation,from);
63592 find mustInstanceOfEReference_class(problem,interpretation,to);
63593 find mayInRelationeReferences_reference_EClass(problem,interpretation,from,to);
63594 neg find mustInRelationeReferences_reference_EClass(problem,interpretation,from,to);
63595}
63596pattern refineRelation_eAttributes_reference_EClass(
63597 problem:LogicProblem, interpretation:PartialInterpretation,
63598 relationIterpretation:PartialRelationInterpretation,
63599 from: DefinedElement, to: DefinedElement)
63600{
63601 find interpretation(problem,interpretation);
63602 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
63603 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAttributes reference EClass");
63604 find mustExist(problem, interpretation, from);
63605 find mustExist(problem, interpretation, to);
63606 find mustInstanceOfEClass_class(problem,interpretation,from);
63607 find mustInstanceOfEAttribute_class(problem,interpretation,to);
63608 find mayInRelationeAttributes_reference_EClass(problem,interpretation,from,to);
63609 neg find mustInRelationeAttributes_reference_EClass(problem,interpretation,from,to);
63610}
63611pattern refineRelation_eAllContainments_reference_EClass(
63612 problem:LogicProblem, interpretation:PartialInterpretation,
63613 relationIterpretation:PartialRelationInterpretation,
63614 from: DefinedElement, to: DefinedElement)
63615{
63616 find interpretation(problem,interpretation);
63617 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
63618 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllContainments reference EClass");
63619 find mustExist(problem, interpretation, from);
63620 find mustExist(problem, interpretation, to);
63621 find mustInstanceOfEClass_class(problem,interpretation,from);
63622 find mustInstanceOfEReference_class(problem,interpretation,to);
63623 find mayInRelationeAllContainments_reference_EClass(problem,interpretation,from,to);
63624 neg find mustInRelationeAllContainments_reference_EClass(problem,interpretation,from,to);
63625}
63626pattern refineRelation_eAllOperations_reference_EClass(
63627 problem:LogicProblem, interpretation:PartialInterpretation,
63628 relationIterpretation:PartialRelationInterpretation,
63629 from: DefinedElement, to: DefinedElement)
63630{
63631 find interpretation(problem,interpretation);
63632 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
63633 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllOperations reference EClass");
63634 find mustExist(problem, interpretation, from);
63635 find mustExist(problem, interpretation, to);
63636 find mustInstanceOfEClass_class(problem,interpretation,from);
63637 find mustInstanceOfEOperation_class(problem,interpretation,to);
63638 find mayInRelationeAllOperations_reference_EClass(problem,interpretation,from,to);
63639 neg find mustInRelationeAllOperations_reference_EClass(problem,interpretation,from,to);
63640}
63641pattern refineRelation_eAllStructuralFeatures_reference_EClass(
63642 problem:LogicProblem, interpretation:PartialInterpretation,
63643 relationIterpretation:PartialRelationInterpretation,
63644 from: DefinedElement, to: DefinedElement)
63645{
63646 find interpretation(problem,interpretation);
63647 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
63648 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllStructuralFeatures reference EClass");
63649 find mustExist(problem, interpretation, from);
63650 find mustExist(problem, interpretation, to);
63651 find mustInstanceOfEClass_class(problem,interpretation,from);
63652 find mustInstanceOfEStructuralFeature_class(problem,interpretation,to);
63653 find mayInRelationeAllStructuralFeatures_reference_EClass(problem,interpretation,from,to);
63654 neg find mustInRelationeAllStructuralFeatures_reference_EClass(problem,interpretation,from,to);
63655}
63656pattern refineRelation_eAllSuperTypes_reference_EClass(
63657 problem:LogicProblem, interpretation:PartialInterpretation,
63658 relationIterpretation:PartialRelationInterpretation,
63659 from: DefinedElement, to: DefinedElement)
63660{
63661 find interpretation(problem,interpretation);
63662 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
63663 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllSuperTypes reference EClass");
63664 find mustExist(problem, interpretation, from);
63665 find mustExist(problem, interpretation, to);
63666 find mustInstanceOfEClass_class(problem,interpretation,from);
63667 find mustInstanceOfEClass_class(problem,interpretation,to);
63668 find mayInRelationeAllSuperTypes_reference_EClass(problem,interpretation,from,to);
63669 neg find mustInRelationeAllSuperTypes_reference_EClass(problem,interpretation,from,to);
63670}
63671pattern refineRelation_eIDAttribute_reference_EClass(
63672 problem:LogicProblem, interpretation:PartialInterpretation,
63673 relationIterpretation:PartialRelationInterpretation,
63674 from: DefinedElement, to: DefinedElement)
63675{
63676 find interpretation(problem,interpretation);
63677 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
63678 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eIDAttribute reference EClass");
63679 find mustExist(problem, interpretation, from);
63680 find mustExist(problem, interpretation, to);
63681 find mustInstanceOfEClass_class(problem,interpretation,from);
63682 find mustInstanceOfEAttribute_class(problem,interpretation,to);
63683 find mayInRelationeIDAttribute_reference_EClass(problem,interpretation,from,to);
63684 neg find mustInRelationeIDAttribute_reference_EClass(problem,interpretation,from,to);
63685}
63686pattern refineRelation_eAllGenericSuperTypes_reference_EClass(
63687 problem:LogicProblem, interpretation:PartialInterpretation,
63688 relationIterpretation:PartialRelationInterpretation,
63689 from: DefinedElement, to: DefinedElement)
63690{
63691 find interpretation(problem,interpretation);
63692 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
63693 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eAllGenericSuperTypes reference EClass");
63694 find mustExist(problem, interpretation, from);
63695 find mustExist(problem, interpretation, to);
63696 find mustInstanceOfEClass_class(problem,interpretation,from);
63697 find mustInstanceOfEGenericType_class(problem,interpretation,to);
63698 find mayInRelationeAllGenericSuperTypes_reference_EClass(problem,interpretation,from,to);
63699 neg find mustInRelationeAllGenericSuperTypes_reference_EClass(problem,interpretation,from,to);
63700}
63701pattern refineRelation_eExceptions_reference_EOperation(
63702 problem:LogicProblem, interpretation:PartialInterpretation,
63703 relationIterpretation:PartialRelationInterpretation,
63704 from: DefinedElement, to: DefinedElement)
63705{
63706 find interpretation(problem,interpretation);
63707 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
63708 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eExceptions reference EOperation");
63709 find mustExist(problem, interpretation, from);
63710 find mustExist(problem, interpretation, to);
63711 find mustInstanceOfEOperation_class(problem,interpretation,from);
63712 find mustInstanceOfEClassifier_class(problem,interpretation,to);
63713 find mayInRelationeExceptions_reference_EOperation(problem,interpretation,from,to);
63714 neg find mustInRelationeExceptions_reference_EOperation(problem,interpretation,from,to);
63715}
63716pattern refineRelation_eOpposite_reference_EReference(
63717 problem:LogicProblem, interpretation:PartialInterpretation,
63718 relationIterpretation:PartialRelationInterpretation,
63719 from: DefinedElement, to: DefinedElement)
63720{
63721 find interpretation(problem,interpretation);
63722 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
63723 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eOpposite reference EReference");
63724 find mustExist(problem, interpretation, from);
63725 find mustExist(problem, interpretation, to);
63726 find mustInstanceOfEReference_class(problem,interpretation,from);
63727 find mustInstanceOfEReference_class(problem,interpretation,to);
63728 find mayInRelationeOpposite_reference_EReference(problem,interpretation,from,to);
63729 neg find mustInRelationeOpposite_reference_EReference(problem,interpretation,from,to);
63730}
63731pattern refineRelation_eReferenceType_reference_EReference(
63732 problem:LogicProblem, interpretation:PartialInterpretation,
63733 relationIterpretation:PartialRelationInterpretation,
63734 from: DefinedElement, to: DefinedElement)
63735{
63736 find interpretation(problem,interpretation);
63737 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
63738 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eReferenceType reference EReference");
63739 find mustExist(problem, interpretation, from);
63740 find mustExist(problem, interpretation, to);
63741 find mustInstanceOfEReference_class(problem,interpretation,from);
63742 find mustInstanceOfEClass_class(problem,interpretation,to);
63743 find mayInRelationeReferenceType_reference_EReference(problem,interpretation,from,to);
63744 neg find mustInRelationeReferenceType_reference_EReference(problem,interpretation,from,to);
63745}
63746pattern refineRelation_eKeys_reference_EReference(
63747 problem:LogicProblem, interpretation:PartialInterpretation,
63748 relationIterpretation:PartialRelationInterpretation,
63749 from: DefinedElement, to: DefinedElement)
63750{
63751 find interpretation(problem,interpretation);
63752 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
63753 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eKeys reference EReference");
63754 find mustExist(problem, interpretation, from);
63755 find mustExist(problem, interpretation, to);
63756 find mustInstanceOfEReference_class(problem,interpretation,from);
63757 find mustInstanceOfEAttribute_class(problem,interpretation,to);
63758 find mayInRelationeKeys_reference_EReference(problem,interpretation,from,to);
63759 neg find mustInRelationeKeys_reference_EReference(problem,interpretation,from,to);
63760}
63761pattern refineRelation_eType_reference_ETypedElement(
63762 problem:LogicProblem, interpretation:PartialInterpretation,
63763 relationIterpretation:PartialRelationInterpretation,
63764 from: DefinedElement, to: DefinedElement)
63765{
63766 find interpretation(problem,interpretation);
63767 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
63768 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eType reference ETypedElement");
63769 find mustExist(problem, interpretation, from);
63770 find mustExist(problem, interpretation, to);
63771 find mustInstanceOfETypedElement_class(problem,interpretation,from);
63772 find mustInstanceOfEClassifier_class(problem,interpretation,to);
63773 find mayInRelationeType_reference_ETypedElement(problem,interpretation,from,to);
63774 neg find mustInRelationeType_reference_ETypedElement(problem,interpretation,from,to);
63775}
63776pattern refineRelation_eRawType_reference_EGenericType(
63777 problem:LogicProblem, interpretation:PartialInterpretation,
63778 relationIterpretation:PartialRelationInterpretation,
63779 from: DefinedElement, to: DefinedElement)
63780{
63781 find interpretation(problem,interpretation);
63782 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
63783 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eRawType reference EGenericType");
63784 find mustExist(problem, interpretation, from);
63785 find mustExist(problem, interpretation, to);
63786 find mustInstanceOfEGenericType_class(problem,interpretation,from);
63787 find mustInstanceOfEClassifier_class(problem,interpretation,to);
63788 find mayInRelationeRawType_reference_EGenericType(problem,interpretation,from,to);
63789 neg find mustInRelationeRawType_reference_EGenericType(problem,interpretation,from,to);
63790}
63791pattern refineRelation_eTypeParameter_reference_EGenericType(
63792 problem:LogicProblem, interpretation:PartialInterpretation,
63793 relationIterpretation:PartialRelationInterpretation,
63794 from: DefinedElement, to: DefinedElement)
63795{
63796 find interpretation(problem,interpretation);
63797 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
63798 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eTypeParameter reference EGenericType");
63799 find mustExist(problem, interpretation, from);
63800 find mustExist(problem, interpretation, to);
63801 find mustInstanceOfEGenericType_class(problem,interpretation,from);
63802 find mustInstanceOfETypeParameter_class(problem,interpretation,to);
63803 find mayInRelationeTypeParameter_reference_EGenericType(problem,interpretation,from,to);
63804 neg find mustInRelationeTypeParameter_reference_EGenericType(problem,interpretation,from,to);
63805}
63806pattern refineRelation_eClassifier_reference_EGenericType(
63807 problem:LogicProblem, interpretation:PartialInterpretation,
63808 relationIterpretation:PartialRelationInterpretation,
63809 from: DefinedElement, to: DefinedElement)
63810{
63811 find interpretation(problem,interpretation);
63812 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
63813 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"eClassifier reference EGenericType");
63814 find mustExist(problem, interpretation, from);
63815 find mustExist(problem, interpretation, to);
63816 find mustInstanceOfEGenericType_class(problem,interpretation,from);
63817 find mustInstanceOfEClassifier_class(problem,interpretation,to);
63818 find mayInRelationeClassifier_reference_EGenericType(problem,interpretation,from,to);
63819 neg find mustInRelationeClassifier_reference_EGenericType(problem,interpretation,from,to);
63820}
63821pattern refineRelation_iD_attribute_EAttribute(
63822 problem:LogicProblem, interpretation:PartialInterpretation,
63823 relationIterpretation:PartialRelationInterpretation,
63824 from: DefinedElement, to: DefinedElement)
63825{
63826 find interpretation(problem,interpretation);
63827 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
63828 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"iD attribute EAttribute");
63829 find mustExist(problem, interpretation, from);
63830 find mustExist(problem, interpretation, to);
63831 find mustInstanceOfEAttribute_class(problem,interpretation,from);
63832 BooleanElement(to);
63833 find mayInRelationiD_attribute_EAttribute(problem,interpretation,from,to);
63834 neg find mustInRelationiD_attribute_EAttribute(problem,interpretation,from,to);
63835}
63836pattern refineRelation_source_attribute_EAnnotation(
63837 problem:LogicProblem, interpretation:PartialInterpretation,
63838 relationIterpretation:PartialRelationInterpretation,
63839 from: DefinedElement, to: DefinedElement)
63840{
63841 find interpretation(problem,interpretation);
63842 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
63843 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"source attribute EAnnotation");
63844 find mustExist(problem, interpretation, from);
63845 find mustExist(problem, interpretation, to);
63846 find mustInstanceOfEAnnotation_class(problem,interpretation,from);
63847 StringElement(to);
63848 find mayInRelationsource_attribute_EAnnotation(problem,interpretation,from,to);
63849 neg find mustInRelationsource_attribute_EAnnotation(problem,interpretation,from,to);
63850}
63851pattern refineRelation_abstract_attribute_EClass(
63852 problem:LogicProblem, interpretation:PartialInterpretation,
63853 relationIterpretation:PartialRelationInterpretation,
63854 from: DefinedElement, to: DefinedElement)
63855{
63856 find interpretation(problem,interpretation);
63857 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
63858 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"abstract attribute EClass");
63859 find mustExist(problem, interpretation, from);
63860 find mustExist(problem, interpretation, to);
63861 find mustInstanceOfEClass_class(problem,interpretation,from);
63862 BooleanElement(to);
63863 find mayInRelationabstract_attribute_EClass(problem,interpretation,from,to);
63864 neg find mustInRelationabstract_attribute_EClass(problem,interpretation,from,to);
63865}
63866pattern refineRelation_interface_attribute_EClass(
63867 problem:LogicProblem, interpretation:PartialInterpretation,
63868 relationIterpretation:PartialRelationInterpretation,
63869 from: DefinedElement, to: DefinedElement)
63870{
63871 find interpretation(problem,interpretation);
63872 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
63873 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"interface attribute EClass");
63874 find mustExist(problem, interpretation, from);
63875 find mustExist(problem, interpretation, to);
63876 find mustInstanceOfEClass_class(problem,interpretation,from);
63877 BooleanElement(to);
63878 find mayInRelationinterface_attribute_EClass(problem,interpretation,from,to);
63879 neg find mustInRelationinterface_attribute_EClass(problem,interpretation,from,to);
63880}
63881pattern refineRelation_instanceClassName_attribute_EClassifier(
63882 problem:LogicProblem, interpretation:PartialInterpretation,
63883 relationIterpretation:PartialRelationInterpretation,
63884 from: DefinedElement, to: DefinedElement)
63885{
63886 find interpretation(problem,interpretation);
63887 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
63888 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"instanceClassName attribute EClassifier");
63889 find mustExist(problem, interpretation, from);
63890 find mustExist(problem, interpretation, to);
63891 find mustInstanceOfEClassifier_class(problem,interpretation,from);
63892 StringElement(to);
63893 find mayInRelationinstanceClassName_attribute_EClassifier(problem,interpretation,from,to);
63894 neg find mustInRelationinstanceClassName_attribute_EClassifier(problem,interpretation,from,to);
63895}
63896pattern refineRelation_instanceTypeName_attribute_EClassifier(
63897 problem:LogicProblem, interpretation:PartialInterpretation,
63898 relationIterpretation:PartialRelationInterpretation,
63899 from: DefinedElement, to: DefinedElement)
63900{
63901 find interpretation(problem,interpretation);
63902 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
63903 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"instanceTypeName attribute EClassifier");
63904 find mustExist(problem, interpretation, from);
63905 find mustExist(problem, interpretation, to);
63906 find mustInstanceOfEClassifier_class(problem,interpretation,from);
63907 StringElement(to);
63908 find mayInRelationinstanceTypeName_attribute_EClassifier(problem,interpretation,from,to);
63909 neg find mustInRelationinstanceTypeName_attribute_EClassifier(problem,interpretation,from,to);
63910}
63911pattern refineRelation_serializable_attribute_EDataType(
63912 problem:LogicProblem, interpretation:PartialInterpretation,
63913 relationIterpretation:PartialRelationInterpretation,
63914 from: DefinedElement, to: DefinedElement)
63915{
63916 find interpretation(problem,interpretation);
63917 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
63918 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"serializable attribute EDataType");
63919 find mustExist(problem, interpretation, from);
63920 find mustExist(problem, interpretation, to);
63921 find mustInstanceOfEDataType_class(problem,interpretation,from);
63922 BooleanElement(to);
63923 find mayInRelationserializable_attribute_EDataType(problem,interpretation,from,to);
63924 neg find mustInRelationserializable_attribute_EDataType(problem,interpretation,from,to);
63925}
63926pattern refineRelation_value_attribute_EEnumLiteral(
63927 problem:LogicProblem, interpretation:PartialInterpretation,
63928 relationIterpretation:PartialRelationInterpretation,
63929 from: DefinedElement, to: DefinedElement)
63930{
63931 find interpretation(problem,interpretation);
63932 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
63933 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"value attribute EEnumLiteral");
63934 find mustExist(problem, interpretation, from);
63935 find mustExist(problem, interpretation, to);
63936 find mustInstanceOfEEnumLiteral_class(problem,interpretation,from);
63937 IntegerElement(to);
63938 find mayInRelationvalue_attribute_EEnumLiteral(problem,interpretation,from,to);
63939 neg find mustInRelationvalue_attribute_EEnumLiteral(problem,interpretation,from,to);
63940}
63941pattern refineRelation_literal_attribute_EEnumLiteral(
63942 problem:LogicProblem, interpretation:PartialInterpretation,
63943 relationIterpretation:PartialRelationInterpretation,
63944 from: DefinedElement, to: DefinedElement)
63945{
63946 find interpretation(problem,interpretation);
63947 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
63948 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"literal attribute EEnumLiteral");
63949 find mustExist(problem, interpretation, from);
63950 find mustExist(problem, interpretation, to);
63951 find mustInstanceOfEEnumLiteral_class(problem,interpretation,from);
63952 StringElement(to);
63953 find mayInRelationliteral_attribute_EEnumLiteral(problem,interpretation,from,to);
63954 neg find mustInRelationliteral_attribute_EEnumLiteral(problem,interpretation,from,to);
63955}
63956pattern refineRelation_name_attribute_ENamedElement(
63957 problem:LogicProblem, interpretation:PartialInterpretation,
63958 relationIterpretation:PartialRelationInterpretation,
63959 from: DefinedElement, to: DefinedElement)
63960{
63961 find interpretation(problem,interpretation);
63962 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
63963 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"name attribute ENamedElement");
63964 find mustExist(problem, interpretation, from);
63965 find mustExist(problem, interpretation, to);
63966 find mustInstanceOfENamedElement_class(problem,interpretation,from);
63967 StringElement(to);
63968 find mayInRelationname_attribute_ENamedElement(problem,interpretation,from,to);
63969 neg find mustInRelationname_attribute_ENamedElement(problem,interpretation,from,to);
63970}
63971pattern refineRelation_nsURI_attribute_EPackage(
63972 problem:LogicProblem, interpretation:PartialInterpretation,
63973 relationIterpretation:PartialRelationInterpretation,
63974 from: DefinedElement, to: DefinedElement)
63975{
63976 find interpretation(problem,interpretation);
63977 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
63978 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"nsURI attribute EPackage");
63979 find mustExist(problem, interpretation, from);
63980 find mustExist(problem, interpretation, to);
63981 find mustInstanceOfEPackage_class(problem,interpretation,from);
63982 StringElement(to);
63983 find mayInRelationnsURI_attribute_EPackage(problem,interpretation,from,to);
63984 neg find mustInRelationnsURI_attribute_EPackage(problem,interpretation,from,to);
63985}
63986pattern refineRelation_nsPrefix_attribute_EPackage(
63987 problem:LogicProblem, interpretation:PartialInterpretation,
63988 relationIterpretation:PartialRelationInterpretation,
63989 from: DefinedElement, to: DefinedElement)
63990{
63991 find interpretation(problem,interpretation);
63992 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
63993 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"nsPrefix attribute EPackage");
63994 find mustExist(problem, interpretation, from);
63995 find mustExist(problem, interpretation, to);
63996 find mustInstanceOfEPackage_class(problem,interpretation,from);
63997 StringElement(to);
63998 find mayInRelationnsPrefix_attribute_EPackage(problem,interpretation,from,to);
63999 neg find mustInRelationnsPrefix_attribute_EPackage(problem,interpretation,from,to);
64000}
64001pattern refineRelation_containment_attribute_EReference(
64002 problem:LogicProblem, interpretation:PartialInterpretation,
64003 relationIterpretation:PartialRelationInterpretation,
64004 from: DefinedElement, to: DefinedElement)
64005{
64006 find interpretation(problem,interpretation);
64007 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
64008 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"containment attribute EReference");
64009 find mustExist(problem, interpretation, from);
64010 find mustExist(problem, interpretation, to);
64011 find mustInstanceOfEReference_class(problem,interpretation,from);
64012 BooleanElement(to);
64013 find mayInRelationcontainment_attribute_EReference(problem,interpretation,from,to);
64014 neg find mustInRelationcontainment_attribute_EReference(problem,interpretation,from,to);
64015}
64016pattern refineRelation_container_attribute_EReference(
64017 problem:LogicProblem, interpretation:PartialInterpretation,
64018 relationIterpretation:PartialRelationInterpretation,
64019 from: DefinedElement, to: DefinedElement)
64020{
64021 find interpretation(problem,interpretation);
64022 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
64023 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"container attribute EReference");
64024 find mustExist(problem, interpretation, from);
64025 find mustExist(problem, interpretation, to);
64026 find mustInstanceOfEReference_class(problem,interpretation,from);
64027 BooleanElement(to);
64028 find mayInRelationcontainer_attribute_EReference(problem,interpretation,from,to);
64029 neg find mustInRelationcontainer_attribute_EReference(problem,interpretation,from,to);
64030}
64031pattern refineRelation_resolveProxies_attribute_EReference(
64032 problem:LogicProblem, interpretation:PartialInterpretation,
64033 relationIterpretation:PartialRelationInterpretation,
64034 from: DefinedElement, to: DefinedElement)
64035{
64036 find interpretation(problem,interpretation);
64037 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
64038 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"resolveProxies attribute EReference");
64039 find mustExist(problem, interpretation, from);
64040 find mustExist(problem, interpretation, to);
64041 find mustInstanceOfEReference_class(problem,interpretation,from);
64042 BooleanElement(to);
64043 find mayInRelationresolveProxies_attribute_EReference(problem,interpretation,from,to);
64044 neg find mustInRelationresolveProxies_attribute_EReference(problem,interpretation,from,to);
64045}
64046pattern refineRelation_changeable_attribute_EStructuralFeature(
64047 problem:LogicProblem, interpretation:PartialInterpretation,
64048 relationIterpretation:PartialRelationInterpretation,
64049 from: DefinedElement, to: DefinedElement)
64050{
64051 find interpretation(problem,interpretation);
64052 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
64053 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"changeable attribute EStructuralFeature");
64054 find mustExist(problem, interpretation, from);
64055 find mustExist(problem, interpretation, to);
64056 find mustInstanceOfEStructuralFeature_class(problem,interpretation,from);
64057 BooleanElement(to);
64058 find mayInRelationchangeable_attribute_EStructuralFeature(problem,interpretation,from,to);
64059 neg find mustInRelationchangeable_attribute_EStructuralFeature(problem,interpretation,from,to);
64060}
64061pattern refineRelation_volatile_attribute_EStructuralFeature(
64062 problem:LogicProblem, interpretation:PartialInterpretation,
64063 relationIterpretation:PartialRelationInterpretation,
64064 from: DefinedElement, to: DefinedElement)
64065{
64066 find interpretation(problem,interpretation);
64067 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
64068 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"volatile attribute EStructuralFeature");
64069 find mustExist(problem, interpretation, from);
64070 find mustExist(problem, interpretation, to);
64071 find mustInstanceOfEStructuralFeature_class(problem,interpretation,from);
64072 BooleanElement(to);
64073 find mayInRelationvolatile_attribute_EStructuralFeature(problem,interpretation,from,to);
64074 neg find mustInRelationvolatile_attribute_EStructuralFeature(problem,interpretation,from,to);
64075}
64076pattern refineRelation_transient_attribute_EStructuralFeature(
64077 problem:LogicProblem, interpretation:PartialInterpretation,
64078 relationIterpretation:PartialRelationInterpretation,
64079 from: DefinedElement, to: DefinedElement)
64080{
64081 find interpretation(problem,interpretation);
64082 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
64083 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"transient attribute EStructuralFeature");
64084 find mustExist(problem, interpretation, from);
64085 find mustExist(problem, interpretation, to);
64086 find mustInstanceOfEStructuralFeature_class(problem,interpretation,from);
64087 BooleanElement(to);
64088 find mayInRelationtransient_attribute_EStructuralFeature(problem,interpretation,from,to);
64089 neg find mustInRelationtransient_attribute_EStructuralFeature(problem,interpretation,from,to);
64090}
64091pattern refineRelation_defaultValueLiteral_attribute_EStructuralFeature(
64092 problem:LogicProblem, interpretation:PartialInterpretation,
64093 relationIterpretation:PartialRelationInterpretation,
64094 from: DefinedElement, to: DefinedElement)
64095{
64096 find interpretation(problem,interpretation);
64097 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
64098 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"defaultValueLiteral attribute EStructuralFeature");
64099 find mustExist(problem, interpretation, from);
64100 find mustExist(problem, interpretation, to);
64101 find mustInstanceOfEStructuralFeature_class(problem,interpretation,from);
64102 StringElement(to);
64103 find mayInRelationdefaultValueLiteral_attribute_EStructuralFeature(problem,interpretation,from,to);
64104 neg find mustInRelationdefaultValueLiteral_attribute_EStructuralFeature(problem,interpretation,from,to);
64105}
64106pattern refineRelation_unsettable_attribute_EStructuralFeature(
64107 problem:LogicProblem, interpretation:PartialInterpretation,
64108 relationIterpretation:PartialRelationInterpretation,
64109 from: DefinedElement, to: DefinedElement)
64110{
64111 find interpretation(problem,interpretation);
64112 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
64113 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"unsettable attribute EStructuralFeature");
64114 find mustExist(problem, interpretation, from);
64115 find mustExist(problem, interpretation, to);
64116 find mustInstanceOfEStructuralFeature_class(problem,interpretation,from);
64117 BooleanElement(to);
64118 find mayInRelationunsettable_attribute_EStructuralFeature(problem,interpretation,from,to);
64119 neg find mustInRelationunsettable_attribute_EStructuralFeature(problem,interpretation,from,to);
64120}
64121pattern refineRelation_derived_attribute_EStructuralFeature(
64122 problem:LogicProblem, interpretation:PartialInterpretation,
64123 relationIterpretation:PartialRelationInterpretation,
64124 from: DefinedElement, to: DefinedElement)
64125{
64126 find interpretation(problem,interpretation);
64127 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
64128 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"derived attribute EStructuralFeature");
64129 find mustExist(problem, interpretation, from);
64130 find mustExist(problem, interpretation, to);
64131 find mustInstanceOfEStructuralFeature_class(problem,interpretation,from);
64132 BooleanElement(to);
64133 find mayInRelationderived_attribute_EStructuralFeature(problem,interpretation,from,to);
64134 neg find mustInRelationderived_attribute_EStructuralFeature(problem,interpretation,from,to);
64135}
64136pattern refineRelation_ordered_attribute_ETypedElement(
64137 problem:LogicProblem, interpretation:PartialInterpretation,
64138 relationIterpretation:PartialRelationInterpretation,
64139 from: DefinedElement, to: DefinedElement)
64140{
64141 find interpretation(problem,interpretation);
64142 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
64143 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"ordered attribute ETypedElement");
64144 find mustExist(problem, interpretation, from);
64145 find mustExist(problem, interpretation, to);
64146 find mustInstanceOfETypedElement_class(problem,interpretation,from);
64147 BooleanElement(to);
64148 find mayInRelationordered_attribute_ETypedElement(problem,interpretation,from,to);
64149 neg find mustInRelationordered_attribute_ETypedElement(problem,interpretation,from,to);
64150}
64151pattern refineRelation_unique_attribute_ETypedElement(
64152 problem:LogicProblem, interpretation:PartialInterpretation,
64153 relationIterpretation:PartialRelationInterpretation,
64154 from: DefinedElement, to: DefinedElement)
64155{
64156 find interpretation(problem,interpretation);
64157 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
64158 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"unique attribute ETypedElement");
64159 find mustExist(problem, interpretation, from);
64160 find mustExist(problem, interpretation, to);
64161 find mustInstanceOfETypedElement_class(problem,interpretation,from);
64162 BooleanElement(to);
64163 find mayInRelationunique_attribute_ETypedElement(problem,interpretation,from,to);
64164 neg find mustInRelationunique_attribute_ETypedElement(problem,interpretation,from,to);
64165}
64166pattern refineRelation_lowerBound_attribute_ETypedElement(
64167 problem:LogicProblem, interpretation:PartialInterpretation,
64168 relationIterpretation:PartialRelationInterpretation,
64169 from: DefinedElement, to: DefinedElement)
64170{
64171 find interpretation(problem,interpretation);
64172 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
64173 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"lowerBound attribute ETypedElement");
64174 find mustExist(problem, interpretation, from);
64175 find mustExist(problem, interpretation, to);
64176 find mustInstanceOfETypedElement_class(problem,interpretation,from);
64177 IntegerElement(to);
64178 find mayInRelationlowerBound_attribute_ETypedElement(problem,interpretation,from,to);
64179 neg find mustInRelationlowerBound_attribute_ETypedElement(problem,interpretation,from,to);
64180}
64181pattern refineRelation_upperBound_attribute_ETypedElement(
64182 problem:LogicProblem, interpretation:PartialInterpretation,
64183 relationIterpretation:PartialRelationInterpretation,
64184 from: DefinedElement, to: DefinedElement)
64185{
64186 find interpretation(problem,interpretation);
64187 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
64188 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"upperBound attribute ETypedElement");
64189 find mustExist(problem, interpretation, from);
64190 find mustExist(problem, interpretation, to);
64191 find mustInstanceOfETypedElement_class(problem,interpretation,from);
64192 IntegerElement(to);
64193 find mayInRelationupperBound_attribute_ETypedElement(problem,interpretation,from,to);
64194 neg find mustInRelationupperBound_attribute_ETypedElement(problem,interpretation,from,to);
64195}
64196pattern refineRelation_many_attribute_ETypedElement(
64197 problem:LogicProblem, interpretation:PartialInterpretation,
64198 relationIterpretation:PartialRelationInterpretation,
64199 from: DefinedElement, to: DefinedElement)
64200{
64201 find interpretation(problem,interpretation);
64202 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
64203 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"many attribute ETypedElement");
64204 find mustExist(problem, interpretation, from);
64205 find mustExist(problem, interpretation, to);
64206 find mustInstanceOfETypedElement_class(problem,interpretation,from);
64207 BooleanElement(to);
64208 find mayInRelationmany_attribute_ETypedElement(problem,interpretation,from,to);
64209 neg find mustInRelationmany_attribute_ETypedElement(problem,interpretation,from,to);
64210}
64211pattern refineRelation_required_attribute_ETypedElement(
64212 problem:LogicProblem, interpretation:PartialInterpretation,
64213 relationIterpretation:PartialRelationInterpretation,
64214 from: DefinedElement, to: DefinedElement)
64215{
64216 find interpretation(problem,interpretation);
64217 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
64218 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"required attribute ETypedElement");
64219 find mustExist(problem, interpretation, from);
64220 find mustExist(problem, interpretation, to);
64221 find mustInstanceOfETypedElement_class(problem,interpretation,from);
64222 BooleanElement(to);
64223 find mayInRelationrequired_attribute_ETypedElement(problem,interpretation,from,to);
64224 neg find mustInRelationrequired_attribute_ETypedElement(problem,interpretation,from,to);
64225}
64226pattern refineRelation_key_attribute_EStringToStringMapEntry(
64227 problem:LogicProblem, interpretation:PartialInterpretation,
64228 relationIterpretation:PartialRelationInterpretation,
64229 from: DefinedElement, to: DefinedElement)
64230{
64231 find interpretation(problem,interpretation);
64232 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
64233 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"key attribute EStringToStringMapEntry");
64234 find mustExist(problem, interpretation, from);
64235 find mustExist(problem, interpretation, to);
64236 find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,from);
64237 StringElement(to);
64238 find mayInRelationkey_attribute_EStringToStringMapEntry(problem,interpretation,from,to);
64239 neg find mustInRelationkey_attribute_EStringToStringMapEntry(problem,interpretation,from,to);
64240}
64241pattern refineRelation_value_attribute_EStringToStringMapEntry(
64242 problem:LogicProblem, interpretation:PartialInterpretation,
64243 relationIterpretation:PartialRelationInterpretation,
64244 from: DefinedElement, to: DefinedElement)
64245{
64246 find interpretation(problem,interpretation);
64247 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
64248 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"value attribute EStringToStringMapEntry");
64249 find mustExist(problem, interpretation, from);
64250 find mustExist(problem, interpretation, to);
64251 find mustInstanceOfEStringToStringMapEntry_class(problem,interpretation,from);
64252 StringElement(to);
64253 find mayInRelationvalue_attribute_EStringToStringMapEntry(problem,interpretation,from,to);
64254 neg find mustInRelationvalue_attribute_EStringToStringMapEntry(problem,interpretation,from,to);
64255}
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
index ab657f0b..169eadb3 100644
--- 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
@@ -1995,7 +1995,7 @@
1995 <parameters xsi:type="language_1:StringTypeReference"/> 1995 <parameters xsi:type="language_1:StringTypeReference"/>
1996 </relations> 1996 </relations>
1997 <elements name="o 1" definedInType="//@types.19 //@types.21 //@types.23"/> 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"/> 1998 <containmentHierarchies typesOrderedInHierarchy="//@types.10 //@types.8 //@types.16 //@types.6 //@types.17 //@types.9 //@types.0 //@types.11 //@types.12 //@types.4 //@types.3 //@types.14 //@types.7 //@types.1 //@types.18 //@types.13 //@types.5 //@types.15 //@types.2 //@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"/> 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"/> 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"/> 2001 <annotations xsi:type="ecore2logicannotations:UpperMultiplicityAssertion" target="//@assertions.2" relation="//@relations.2" upper="1"/>
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/debug/problem.als b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/debug/problem.als
new file mode 100644
index 00000000..16ff4006
--- /dev/null
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/debug/problem.als
@@ -0,0 +1,203 @@
1one sig util'language {
2 util'root : one type'FunctionalArchitectureModel'class + (type'FunctionalData'class + (type'Function'class + (type'FAMTerminator'class + (type'InformationLink'class + (type'FunctionalInterface'class + (type'FunctionalElement'class + (type'FunctionalInput'class + (type'FunctionalOutput'class + (type'FunctionalArchitectureModel'class'DefinedPart + type'FunctionalArchitectureModel'class'UndefinedPart))))))))),
3 util'contains : (type'FunctionalArchitectureModel'class + (type'FunctionalData'class + (type'Function'class + (type'FAMTerminator'class + (type'InformationLink'class + (type'FunctionalInterface'class + (type'FunctionalElement'class + (type'FunctionalInput'class + (type'FunctionalOutput'class + (type'FunctionalArchitectureModel'class'DefinedPart + type'FunctionalArchitectureModel'class'UndefinedPart)))))))))) lone->set (type'FunctionalArchitectureModel'class + (type'FunctionalData'class + (type'Function'class + (type'FAMTerminator'class + (type'InformationLink'class + (type'FunctionalInterface'class + (type'FunctionalElement'class + (type'FunctionalInput'class + (type'FunctionalOutput'class + (type'FunctionalArchitectureModel'class'DefinedPart + type'FunctionalArchitectureModel'class'UndefinedPart))))))))))
4}
5abstract sig util'Object {
6}
7sig type'FunctionalElement'class in util'Object {
8 interface'reference'FunctionalElement : lone type'FunctionalInterface'class,
9 parent'reference'FunctionalElement : lone type'Function'class
10}
11sig type'FunctionalArchitectureModel'class in util'Object {
12 rootElements'reference'FunctionalArchitectureModel : set type'FunctionalElement'class
13}
14sig type'Function'class in type'FunctionalElement'class {
15 subElements'reference'Function : set type'FunctionalElement'class
16}
17sig type'FAMTerminator'class in util'Object {
18 data'reference'FAMTerminator : lone type'FunctionalData'class
19}
20sig type'InformationLink'class in util'Object {
21 from'reference'InformationLink : lone type'FunctionalOutput'class,
22 to'reference'InformationLink : one type'FunctionalInput'class
23}
24sig type'FunctionalInterface'class in util'Object {
25 data'reference'FunctionalInterface : set type'FunctionalData'class,
26 element'reference'FunctionalInterface : lone type'FunctionalElement'class
27}
28sig type'FunctionalInput'class in type'FunctionalData'class {
29 IncomingLinks'reference'FunctionalInput : set type'InformationLink'class
30}
31sig type'FunctionalOutput'class in type'FunctionalData'class {
32 outgoingLinks'reference'FunctionalOutput : set type'InformationLink'class
33}
34sig type'FunctionalData'class in util'Object {
35 terminator'reference'FunctionalData : lone type'FAMTerminator'class,
36 interface'reference'FunctionalData : lone type'FunctionalInterface'class
37}
38sig type'FunctionType'enum in util'Object {
39}
40sig type'FunctionalArchitectureModel'class'DefinedPart in type'FunctionalArchitectureModel'class {
41}
42sig type'FunctionalArchitectureModel'class'UndefinedPart in type'FunctionalArchitectureModel'class {
43}
44one sig element'o'1 in type'FunctionalArchitectureModel'class'DefinedPart {
45}
46one sig element'Root'literal'FunctionType,
47element'Intermediate'literal'FunctionType,
48element'Leaf'literal'FunctionType in type'FunctionType'enum {
49}
50pred pattern'ca'mcgill'ecse'dslreasoner'standalone'test'fam'queries'terminatorAndInformation [parameter'T: type'FAMTerminator'class, parameter'I: type'InformationLink'class] {
51 (some variable'Out: type'FunctionalOutput'class { parameter'I in variable'Out.outgoingLinks'reference'FunctionalOutput && parameter'T in variable'Out.terminator'reference'FunctionalData }) || (some variable'In: type'FunctionalInput'class { variable'In in parameter'I.to'reference'InformationLink && (variable'In in type'FunctionalInput'class && parameter'T in variable'In.terminator'reference'FunctionalData) })
52}
53pred pattern'ca'mcgill'ecse'dslreasoner'standalone'test'fam'queries'type [parameter'This: type'Function'class, parameter'Target: type'FunctionType'enum] {
54 (some variable'Model: type'FunctionalArchitectureModel'class { pattern'ca'mcgill'ecse'dslreasoner'standalone'test'fam'queries'rootElements [ variable'Model , parameter'This ] && parameter'Target = element'Root'literal'FunctionType }) || ((all variable'Child: type'Function'class, variable'Model: type'FunctionalArchitectureModel'class { parameter'This in type'Function'class && (! (pattern'ca'mcgill'ecse'dslreasoner'standalone'test'fam'queries'parent [ variable'Child , parameter'This ]) && (! (pattern'ca'mcgill'ecse'dslreasoner'standalone'test'fam'queries'rootElements [ variable'Model , parameter'This ]) && parameter'Target = element'Leaf'literal'FunctionType)) }) || (some variable'Par: type'Function'class, variable'Child: type'Function'class { pattern'ca'mcgill'ecse'dslreasoner'standalone'test'fam'queries'parent [ parameter'This , variable'Par ] && (pattern'ca'mcgill'ecse'dslreasoner'standalone'test'fam'queries'parent [ variable'Child , parameter'This ] && parameter'Target = element'Intermediate'literal'FunctionType) }))
55}
56pred pattern'ca'mcgill'ecse'dslreasoner'standalone'test'fam'queries'rootElements [parameter'Model: type'FunctionalArchitectureModel'class, parameter'Root: type'Function'class] {
57 parameter'Root in type'Function'class && parameter'Root in parameter'Model.rootElements'reference'FunctionalArchitectureModel
58}
59pred pattern'ca'mcgill'ecse'dslreasoner'standalone'test'fam'queries'parent [parameter'Func: type'Function'class, parameter'Par: type'Function'class] {
60 parameter'Func in type'Function'class && (parameter'Par in parameter'Func.parent'reference'FunctionalElement && parameter'Par in type'Function'class)
61}
62pred pattern'ca'mcgill'ecse'dslreasoner'standalone'test'fam'queries'model [parameter'This: type'FunctionalElement'class, parameter'Target: type'FunctionalArchitectureModel'class] {
63 parameter'This in type'FunctionalElement'class && parameter'Target in type'FunctionalArchitectureModel'class
64}
65fact typedefinition'FunctionType'enum {
66 type'FunctionType'enum = element'Root'literal'FunctionType + (element'Intermediate'literal'FunctionType + element'Leaf'literal'FunctionType)
67}
68fact typedefinition'FunctionalArchitectureModel'class'DefinedPart {
69 type'FunctionalArchitectureModel'class'DefinedPart = element'o'1
70}
71fact typeElementsUnique'FunctionType'enum {
72 element'Root'literal'FunctionType != element'Intermediate'literal'FunctionType && (element'Root'literal'FunctionType != element'Leaf'literal'FunctionType && (element'Root'literal'FunctionType != element'o'1 && (element'Intermediate'literal'FunctionType != element'Leaf'literal'FunctionType && (element'Intermediate'literal'FunctionType != element'o'1 && element'Leaf'literal'FunctionType != element'o'1))))
73}
74fact typeElementsUnique'FunctionalArchitectureModel'class'DefinedPart {
75 element'Root'literal'FunctionType != element'Intermediate'literal'FunctionType && (element'Root'literal'FunctionType != element'Leaf'literal'FunctionType && (element'Root'literal'FunctionType != element'o'1 && (element'Intermediate'literal'FunctionType != element'Leaf'literal'FunctionType && (element'Intermediate'literal'FunctionType != element'o'1 && element'Leaf'literal'FunctionType != element'o'1))))
76}
77fact abstract'FunctionalElement'class {
78 type'FunctionalElement'class = type'Function'class
79}
80fact abstract'FunctionalArchitectureModel'class {
81 type'FunctionalArchitectureModel'class = type'FunctionalArchitectureModel'class'DefinedPart + type'FunctionalArchitectureModel'class'UndefinedPart
82}
83fact abstract'FunctionalData'class {
84 type'FunctionalData'class = type'FunctionalInput'class + type'FunctionalOutput'class
85}
86fact ObjectTypeDefinition {
87 util'Object = type'FunctionalElement'class + (type'FunctionalArchitectureModel'class + (type'FAMTerminator'class + (type'InformationLink'class + (type'FunctionalInterface'class + (type'FunctionalData'class + type'FunctionType'enum)))))
88}
89fact common'types'FunctionalArchitectureModel'class'FunctionalElement'class {
90 type'FunctionalArchitectureModel'class & type'FunctionalElement'class = none
91}
92fact common'types'FAMTerminator'class'FunctionalElement'class {
93 type'FAMTerminator'class & type'FunctionalElement'class = none
94}
95fact common'types'FAMTerminator'class'FunctionalArchitectureModel'class {
96 type'FAMTerminator'class & type'FunctionalArchitectureModel'class = none
97}
98fact common'types'InformationLink'class'FunctionalElement'class {
99 type'InformationLink'class & type'FunctionalElement'class = none
100}
101fact common'types'InformationLink'class'FunctionalArchitectureModel'class {
102 type'InformationLink'class & type'FunctionalArchitectureModel'class = none
103}
104fact common'types'InformationLink'class'FAMTerminator'class {
105 type'InformationLink'class & type'FAMTerminator'class = none
106}
107fact common'types'FunctionalInterface'class'FunctionalElement'class {
108 type'FunctionalInterface'class & type'FunctionalElement'class = none
109}
110fact common'types'FunctionalInterface'class'FunctionalArchitectureModel'class {
111 type'FunctionalInterface'class & type'FunctionalArchitectureModel'class = none
112}
113fact common'types'FunctionalInterface'class'FAMTerminator'class {
114 type'FunctionalInterface'class & type'FAMTerminator'class = none
115}
116fact common'types'FunctionalInterface'class'InformationLink'class {
117 type'FunctionalInterface'class & type'InformationLink'class = none
118}
119fact common'types'FunctionalData'class'FunctionalElement'class {
120 type'FunctionalData'class & type'FunctionalElement'class = none
121}
122fact common'types'FunctionalData'class'FunctionalArchitectureModel'class {
123 type'FunctionalData'class & type'FunctionalArchitectureModel'class = none
124}
125fact common'types'FunctionalData'class'FAMTerminator'class {
126 type'FunctionalData'class & type'FAMTerminator'class = none
127}
128fact common'types'FunctionalData'class'InformationLink'class {
129 type'FunctionalData'class & type'InformationLink'class = none
130}
131fact common'types'FunctionalData'class'FunctionalInterface'class {
132 type'FunctionalData'class & type'FunctionalInterface'class = none
133}
134fact common'types'FunctionType'enum'FunctionalElement'class {
135 type'FunctionType'enum & type'FunctionalElement'class = none
136}
137fact common'types'FunctionType'enum'FunctionalArchitectureModel'class {
138 type'FunctionType'enum & type'FunctionalArchitectureModel'class = none
139}
140fact common'types'FunctionType'enum'FAMTerminator'class {
141 type'FunctionType'enum & type'FAMTerminator'class = none
142}
143fact common'types'FunctionType'enum'InformationLink'class {
144 type'FunctionType'enum & type'InformationLink'class = none
145}
146fact common'types'FunctionType'enum'FunctionalInterface'class {
147 type'FunctionType'enum & type'FunctionalInterface'class = none
148}
149fact common'types'FunctionType'enum'FunctionalData'class {
150 type'FunctionType'enum & type'FunctionalData'class = none
151}
152fact common'types'FunctionalArchitectureModel'class'UndefinedPart'FunctionalArchitectureModel'class'DefinedPart {
153 type'FunctionalArchitectureModel'class'UndefinedPart & type'FunctionalArchitectureModel'class'DefinedPart = none
154}
155fact common'types'FunctionalOutput'class'FunctionalInput'class {
156 type'FunctionalOutput'class & type'FunctionalInput'class = none
157}
158fact util'containmentDefinition {
159 util'language.util'contains = interface'reference'FunctionalElement + (rootElements'reference'FunctionalArchitectureModel + (subElements'reference'Function + (data'reference'FunctionalInterface + (outgoingLinks'reference'FunctionalOutput + terminator'reference'FunctionalData))))
160}
161fact util'noParentForRoot {
162 no parent: type'FunctionalArchitectureModel'class + (type'FunctionalData'class + (type'Function'class + (type'FAMTerminator'class + (type'InformationLink'class + (type'FunctionalInterface'class + (type'FunctionalElement'class + (type'FunctionalInput'class + (type'FunctionalOutput'class + (type'FunctionalArchitectureModel'class'DefinedPart + type'FunctionalArchitectureModel'class'UndefinedPart))))))))) { parent->(util'language.util'root) in util'language.util'contains }
163}
164fact util'atLeastOneParent {
165 all child: type'FunctionalArchitectureModel'class + (type'FunctionalData'class + (type'Function'class + (type'FAMTerminator'class + (type'InformationLink'class + (type'FunctionalInterface'class + (type'FunctionalElement'class + (type'FunctionalInput'class + (type'FunctionalOutput'class + (type'FunctionalArchitectureModel'class'DefinedPart + type'FunctionalArchitectureModel'class'UndefinedPart))))))))) { child = util'language.util'root || (some parent: type'FunctionalArchitectureModel'class + (type'FunctionalData'class + (type'Function'class + (type'FAMTerminator'class + (type'InformationLink'class + (type'FunctionalInterface'class + (type'FunctionalElement'class + (type'FunctionalInput'class + (type'FunctionalOutput'class + (type'FunctionalArchitectureModel'class'DefinedPart + type'FunctionalArchitectureModel'class'UndefinedPart))))))))) { parent->child in util'language.util'contains }) }
166}
167fact util'noCircularContainment {
168 no circle: type'FunctionalArchitectureModel'class + (type'FunctionalData'class + (type'Function'class + (type'FAMTerminator'class + (type'InformationLink'class + (type'FunctionalInterface'class + (type'FunctionalElement'class + (type'FunctionalInput'class + (type'FunctionalOutput'class + (type'FunctionalArchitectureModel'class'DefinedPart + type'FunctionalArchitectureModel'class'UndefinedPart))))))))) { circle->circle in ^ (util'language.util'contains) }
169}
170fact lowerMultiplicity'model'FunctionalElement {
171 all src: type'FunctionalElement'class { some trg'1: type'FunctionalArchitectureModel'class { pattern'ca'mcgill'ecse'dslreasoner'standalone'test'fam'queries'model [ src , trg'1 ] } }
172}
173fact upperMultiplicity'model'FunctionalElement {
174 all src: type'FunctionalElement'class, trg'1: type'FunctionalArchitectureModel'class, trg'2: type'FunctionalArchitectureModel'class { pattern'ca'mcgill'ecse'dslreasoner'standalone'test'fam'queries'model [ src , trg'1 ] && pattern'ca'mcgill'ecse'dslreasoner'standalone'test'fam'queries'model [ src , trg'2 ] => ! (trg'1 != trg'2) }
175}
176fact oppositeReference'interface'FunctionalElement {
177 interface'reference'FunctionalElement = ~ element'reference'FunctionalInterface
178}
179fact oppositeReference'parent'FunctionalElement {
180 parent'reference'FunctionalElement = ~ subElements'reference'Function
181}
182fact oppositeReference'data'FAMTerminator {
183 data'reference'FAMTerminator = ~ terminator'reference'FunctionalData
184}
185fact oppositeReference'from'InformationLink {
186 from'reference'InformationLink = ~ outgoingLinks'reference'FunctionalOutput
187}
188fact oppositeReference'to'InformationLink {
189 to'reference'InformationLink = ~ IncomingLinks'reference'FunctionalInput
190}
191fact oppositeReference'data'FunctionalInterface {
192 data'reference'FunctionalInterface = ~ interface'reference'FunctionalData
193}
194fact lowerMultiplicity'type'Function {
195 all src: type'Function'class { some trg'1: type'FunctionType'enum { pattern'ca'mcgill'ecse'dslreasoner'standalone'test'fam'queries'type [ src , trg'1 ] } }
196}
197fact upperMultiplicity'type'Function {
198 all src: type'Function'class, trg'1: type'FunctionType'enum, trg'2: type'FunctionType'enum { pattern'ca'mcgill'ecse'dslreasoner'standalone'test'fam'queries'type [ src , trg'1 ] && pattern'ca'mcgill'ecse'dslreasoner'standalone'test'fam'queries'type [ src , trg'2 ] => ! (trg'1 != trg'2) }
199}
200fact errorpattern'ca'mcgill'ecse'dslreasoner'standalone'test'fam'queries'terminatorAndInformation {
201 all p0: type'FAMTerminator'class, p1: type'InformationLink'class { ! (pattern'ca'mcgill'ecse'dslreasoner'standalone'test'fam'queries'terminatorAndInformation [ p0 , p1 ]) }
202}
203run { } for exactly 5 util'Object , 31 Int , exactly 0 String \ No newline at end of file
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
index 69222b92..8c87a095 100644
--- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/log.txt
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/log.txt
@@ -1 +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 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 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 startedModel generation startedModel generation startedModel generation startedModel 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 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, 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 startedModel generation startedModel 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 startedModel 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 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
index c55209f7..9eac10b7 100644
--- 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
@@ -7639,3 +7639,6782 @@ graph
7639 ] 7639 ]
7640 ] 7640 ]
7641] 7641]
7642graph
7643[
7644 node
7645 [
7646 id 0
7647 graphics
7648 [
7649 w 226.60000000000002
7650 h 40
7651 type "rectangle"
7652 fill "#FFFFFF"
7653 fill2 "#FFFFFF"
7654 outline "#000000"
7655 ]
7656 LabelGraphics
7657 [
7658 text "Root literal FunctionType"
7659 outline "#000000"
7660 fill "#FFFFFF"
7661 fontSize 16
7662 fontName "Monospace"
7663 autoSizePolicy "node_width"
7664 anchor "t"
7665 borderDistance 0.0
7666 ]
7667 LabelGraphics
7668 [
7669 text "
7670 FunctionType enum
7671 "
7672 fontSize 14
7673 fontName "Consolas"
7674 alignment "left"
7675 anchor "tl"
7676 borderDistance 6
7677 ]
7678 ]
7679
7680 node
7681 [
7682 id 1
7683 graphics
7684 [
7685 w 297.0
7686 h 40
7687 type "rectangle"
7688 fill "#FFFFFF"
7689 fill2 "#FFFFFF"
7690 outline "#000000"
7691 ]
7692 LabelGraphics
7693 [
7694 text "Intermediate literal FunctionType"
7695 outline "#000000"
7696 fill "#FFFFFF"
7697 fontSize 16
7698 fontName "Monospace"
7699 autoSizePolicy "node_width"
7700 anchor "t"
7701 borderDistance 0.0
7702 ]
7703 LabelGraphics
7704 [
7705 text "
7706 FunctionType enum
7707 "
7708 fontSize 14
7709 fontName "Consolas"
7710 alignment "left"
7711 anchor "tl"
7712 borderDistance 6
7713 ]
7714 ]
7715
7716 node
7717 [
7718 id 2
7719 graphics
7720 [
7721 w 226.60000000000002
7722 h 40
7723 type "rectangle"
7724 fill "#FFFFFF"
7725 fill2 "#FFFFFF"
7726 outline "#000000"
7727 ]
7728 LabelGraphics
7729 [
7730 text "Leaf literal FunctionType"
7731 outline "#000000"
7732 fill "#FFFFFF"
7733 fontSize 16
7734 fontName "Monospace"
7735 autoSizePolicy "node_width"
7736 anchor "t"
7737 borderDistance 0.0
7738 ]
7739 LabelGraphics
7740 [
7741 text "
7742 FunctionType enum
7743 "
7744 fontSize 14
7745 fontName "Consolas"
7746 alignment "left"
7747 anchor "tl"
7748 borderDistance 6
7749 ]
7750 ]
7751
7752 node
7753 [
7754 id 3
7755 graphics
7756 [
7757 w 361.90000000000003
7758 h 54
7759 type "rectangle"
7760 fill "#FFFFFF"
7761 fill2 "#FFFFFF"
7762 outline "#000000"
7763 ]
7764 LabelGraphics
7765 [
7766 text "o 1"
7767 outline "#000000"
7768 fill "#FFFFFF"
7769 fontSize 16
7770 fontName "Monospace"
7771 autoSizePolicy "node_width"
7772 anchor "t"
7773 borderDistance 0.0
7774 ]
7775 LabelGraphics
7776 [
7777 text "
7778 FunctionalArchitectureModel class DefinedPart
7779 FunctionalArchitectureModel class
7780 "
7781 fontSize 14
7782 fontName "Consolas"
7783 alignment "left"
7784 anchor "tl"
7785 borderDistance 6
7786 ]
7787 ]
7788
7789 node
7790 [
7791 id 4
7792 graphics
7793 [
7794 w 41.800000000000004
7795 h 26
7796 type "rectangle"
7797 fill "#FFFFFF"
7798 fill2 "#FFFFFF"
7799 outline "#000000"
7800 ]
7801 LabelGraphics
7802 [
7803 text "true"
7804 outline "#000000"
7805 fill "#FFFFFF"
7806 fontSize 16
7807 fontName "Monospace"
7808 autoSizePolicy "node_width"
7809 anchor "t"
7810 borderDistance 0.0
7811 ]
7812 LabelGraphics
7813 [
7814 text "
7815 "
7816 fontSize 14
7817 fontName "Consolas"
7818 alignment "left"
7819 anchor "tl"
7820 borderDistance 6
7821 ]
7822 ]
7823
7824 node
7825 [
7826 id 5
7827 graphics
7828 [
7829 w 50.6
7830 h 26
7831 type "rectangle"
7832 fill "#FFFFFF"
7833 fill2 "#FFFFFF"
7834 outline "#000000"
7835 ]
7836 LabelGraphics
7837 [
7838 text "false"
7839 outline "#000000"
7840 fill "#FFFFFF"
7841 fontSize 16
7842 fontName "Monospace"
7843 autoSizePolicy "node_width"
7844 anchor "t"
7845 borderDistance 0.0
7846 ]
7847 LabelGraphics
7848 [
7849 text "
7850 "
7851 fontSize 14
7852 fontName "Consolas"
7853 alignment "left"
7854 anchor "tl"
7855 borderDistance 6
7856 ]
7857 ]
7858
7859 node
7860 [
7861 id 6
7862 graphics
7863 [
7864 w 192.50000000000003
7865 h 54
7866 type "rectangle"
7867 fill "#FFFFFF"
7868 fill2 "#FFFFFF"
7869 outline "#000000"
7870 ]
7871 LabelGraphics
7872 [
7873 text "null"
7874 outline "#000000"
7875 fill "#FFFFFF"
7876 fontSize 16
7877 fontName "Monospace"
7878 autoSizePolicy "node_width"
7879 anchor "t"
7880 borderDistance 0.0
7881 ]
7882 LabelGraphics
7883 [
7884 text "
7885 FunctionalElement class
7886 Function class
7887 "
7888 fontSize 14
7889 fontName "Consolas"
7890 alignment "left"
7891 anchor "tl"
7892 borderDistance 6
7893 ]
7894 ]
7895
7896 node
7897 [
7898 id 7
7899 graphics
7900 [
7901 w 112.2
7902 h 26
7903 type "rectangle"
7904 fill "#FFFFFF"
7905 fill2 "#FFFFFF"
7906 outline "#000000"
7907 ]
7908 LabelGraphics
7909 [
7910 text "New Integers"
7911 outline "#000000"
7912 fill "#FFFFFF"
7913 fontSize 16
7914 fontName "Monospace"
7915 autoSizePolicy "node_width"
7916 anchor "t"
7917 borderDistance 0.0
7918 ]
7919 LabelGraphics
7920 [
7921 text "
7922 "
7923 fontSize 14
7924 fontName "Consolas"
7925 alignment "left"
7926 anchor "tl"
7927 borderDistance 6
7928 ]
7929 ]
7930
7931 node
7932 [
7933 id 8
7934 graphics
7935 [
7936 w 85.80000000000001
7937 h 26
7938 type "rectangle"
7939 fill "#FFFFFF"
7940 fill2 "#FFFFFF"
7941 outline "#000000"
7942 ]
7943 LabelGraphics
7944 [
7945 text "New Reals"
7946 outline "#000000"
7947 fill "#FFFFFF"
7948 fontSize 16
7949 fontName "Monospace"
7950 autoSizePolicy "node_width"
7951 anchor "t"
7952 borderDistance 0.0
7953 ]
7954 LabelGraphics
7955 [
7956 text "
7957 "
7958 fontSize 14
7959 fontName "Consolas"
7960 alignment "left"
7961 anchor "tl"
7962 borderDistance 6
7963 ]
7964 ]
7965
7966 node
7967 [
7968 id 9
7969 graphics
7970 [
7971 w 103.4
7972 h 26
7973 type "rectangle"
7974 fill "#FFFFFF"
7975 fill2 "#FFFFFF"
7976 outline "#000000"
7977 ]
7978 LabelGraphics
7979 [
7980 text "New Strings"
7981 outline "#000000"
7982 fill "#FFFFFF"
7983 fontSize 16
7984 fontName "Monospace"
7985 autoSizePolicy "node_width"
7986 anchor "t"
7987 borderDistance 0.0
7988 ]
7989 LabelGraphics
7990 [
7991 text "
7992 "
7993 fontSize 14
7994 fontName "Consolas"
7995 alignment "left"
7996 anchor "tl"
7997 borderDistance 6
7998 ]
7999 ]
8000
8001 node
8002 [
8003 id 10
8004 graphics
8005 [
8006 w 103.4
8007 h 26
8008 type "rectangle"
8009 fill "#FFFFFF"
8010 fill2 "#FFFFFF"
8011 outline "#000000"
8012 ]
8013 LabelGraphics
8014 [
8015 text "New Objects"
8016 outline "#000000"
8017 fill "#FFFFFF"
8018 fontSize 16
8019 fontName "Monospace"
8020 autoSizePolicy "node_width"
8021 anchor "t"
8022 borderDistance 0.0
8023 ]
8024 LabelGraphics
8025 [
8026 text "
8027 "
8028 fontSize 14
8029 fontName "Consolas"
8030 alignment "left"
8031 anchor "tl"
8032 borderDistance 6
8033 ]
8034 ]
8035 edge
8036 [
8037 source 6
8038 target 3
8039 graphics
8040 [
8041 fill "#000000"
8042 targetArrow "standard"
8043 ]
8044 LabelGraphics
8045 [
8046 text "model reference FunctionalElement"
8047 fontSize 14
8048 fontName "Consolas"
8049 configuration "AutoFlippingLabel"
8050 model "six_pos"
8051 position "thead"
8052 ]
8053 ]
8054 edge
8055 [
8056 source 3
8057 target 6
8058 graphics
8059 [
8060 fill "#000000"
8061 width 3
8062 targetArrow "standard"
8063 ]
8064 LabelGraphics
8065 [
8066 text "rootElements reference FunctionalArchitectureModel"
8067 fontSize 14
8068 fontName "Consolas"
8069 configuration "AutoFlippingLabel"
8070 model "six_pos"
8071 position "thead"
8072 ]
8073 ]
8074 edge
8075 [
8076 source 6
8077 target 0
8078 graphics
8079 [
8080 fill "#000000"
8081 targetArrow "standard"
8082 ]
8083 LabelGraphics
8084 [
8085 text "type attribute Function"
8086 fontSize 14
8087 fontName "Consolas"
8088 configuration "AutoFlippingLabel"
8089 model "six_pos"
8090 position "thead"
8091 ]
8092 ]
8093]
8094graph
8095[
8096 node
8097 [
8098 id 0
8099 graphics
8100 [
8101 w 226.60000000000002
8102 h 40
8103 type "rectangle"
8104 fill "#FFFFFF"
8105 fill2 "#FFFFFF"
8106 outline "#000000"
8107 ]
8108 LabelGraphics
8109 [
8110 text "Root literal FunctionType"
8111 outline "#000000"
8112 fill "#FFFFFF"
8113 fontSize 16
8114 fontName "Monospace"
8115 autoSizePolicy "node_width"
8116 anchor "t"
8117 borderDistance 0.0
8118 ]
8119 LabelGraphics
8120 [
8121 text "
8122 FunctionType enum
8123 "
8124 fontSize 14
8125 fontName "Consolas"
8126 alignment "left"
8127 anchor "tl"
8128 borderDistance 6
8129 ]
8130 ]
8131
8132 node
8133 [
8134 id 1
8135 graphics
8136 [
8137 w 297.0
8138 h 40
8139 type "rectangle"
8140 fill "#FFFFFF"
8141 fill2 "#FFFFFF"
8142 outline "#000000"
8143 ]
8144 LabelGraphics
8145 [
8146 text "Intermediate literal FunctionType"
8147 outline "#000000"
8148 fill "#FFFFFF"
8149 fontSize 16
8150 fontName "Monospace"
8151 autoSizePolicy "node_width"
8152 anchor "t"
8153 borderDistance 0.0
8154 ]
8155 LabelGraphics
8156 [
8157 text "
8158 FunctionType enum
8159 "
8160 fontSize 14
8161 fontName "Consolas"
8162 alignment "left"
8163 anchor "tl"
8164 borderDistance 6
8165 ]
8166 ]
8167
8168 node
8169 [
8170 id 2
8171 graphics
8172 [
8173 w 226.60000000000002
8174 h 40
8175 type "rectangle"
8176 fill "#FFFFFF"
8177 fill2 "#FFFFFF"
8178 outline "#000000"
8179 ]
8180 LabelGraphics
8181 [
8182 text "Leaf literal FunctionType"
8183 outline "#000000"
8184 fill "#FFFFFF"
8185 fontSize 16
8186 fontName "Monospace"
8187 autoSizePolicy "node_width"
8188 anchor "t"
8189 borderDistance 0.0
8190 ]
8191 LabelGraphics
8192 [
8193 text "
8194 FunctionType enum
8195 "
8196 fontSize 14
8197 fontName "Consolas"
8198 alignment "left"
8199 anchor "tl"
8200 borderDistance 6
8201 ]
8202 ]
8203
8204 node
8205 [
8206 id 3
8207 graphics
8208 [
8209 w 361.90000000000003
8210 h 54
8211 type "rectangle"
8212 fill "#FFFFFF"
8213 fill2 "#FFFFFF"
8214 outline "#000000"
8215 ]
8216 LabelGraphics
8217 [
8218 text "o 1"
8219 outline "#000000"
8220 fill "#FFFFFF"
8221 fontSize 16
8222 fontName "Monospace"
8223 autoSizePolicy "node_width"
8224 anchor "t"
8225 borderDistance 0.0
8226 ]
8227 LabelGraphics
8228 [
8229 text "
8230 FunctionalArchitectureModel class DefinedPart
8231 FunctionalArchitectureModel class
8232 "
8233 fontSize 14
8234 fontName "Consolas"
8235 alignment "left"
8236 anchor "tl"
8237 borderDistance 6
8238 ]
8239 ]
8240
8241 node
8242 [
8243 id 4
8244 graphics
8245 [
8246 w 41.800000000000004
8247 h 26
8248 type "rectangle"
8249 fill "#FFFFFF"
8250 fill2 "#FFFFFF"
8251 outline "#000000"
8252 ]
8253 LabelGraphics
8254 [
8255 text "true"
8256 outline "#000000"
8257 fill "#FFFFFF"
8258 fontSize 16
8259 fontName "Monospace"
8260 autoSizePolicy "node_width"
8261 anchor "t"
8262 borderDistance 0.0
8263 ]
8264 LabelGraphics
8265 [
8266 text "
8267 "
8268 fontSize 14
8269 fontName "Consolas"
8270 alignment "left"
8271 anchor "tl"
8272 borderDistance 6
8273 ]
8274 ]
8275
8276 node
8277 [
8278 id 5
8279 graphics
8280 [
8281 w 50.6
8282 h 26
8283 type "rectangle"
8284 fill "#FFFFFF"
8285 fill2 "#FFFFFF"
8286 outline "#000000"
8287 ]
8288 LabelGraphics
8289 [
8290 text "false"
8291 outline "#000000"
8292 fill "#FFFFFF"
8293 fontSize 16
8294 fontName "Monospace"
8295 autoSizePolicy "node_width"
8296 anchor "t"
8297 borderDistance 0.0
8298 ]
8299 LabelGraphics
8300 [
8301 text "
8302 "
8303 fontSize 14
8304 fontName "Consolas"
8305 alignment "left"
8306 anchor "tl"
8307 borderDistance 6
8308 ]
8309 ]
8310
8311 node
8312 [
8313 id 6
8314 graphics
8315 [
8316 w 192.50000000000003
8317 h 54
8318 type "rectangle"
8319 fill "#FFFFFF"
8320 fill2 "#FFFFFF"
8321 outline "#000000"
8322 ]
8323 LabelGraphics
8324 [
8325 text "null"
8326 outline "#000000"
8327 fill "#FFFFFF"
8328 fontSize 16
8329 fontName "Monospace"
8330 autoSizePolicy "node_width"
8331 anchor "t"
8332 borderDistance 0.0
8333 ]
8334 LabelGraphics
8335 [
8336 text "
8337 FunctionalElement class
8338 Function class
8339 "
8340 fontSize 14
8341 fontName "Consolas"
8342 alignment "left"
8343 anchor "tl"
8344 borderDistance 6
8345 ]
8346 ]
8347
8348 node
8349 [
8350 id 7
8351 graphics
8352 [
8353 w 112.2
8354 h 26
8355 type "rectangle"
8356 fill "#FFFFFF"
8357 fill2 "#FFFFFF"
8358 outline "#000000"
8359 ]
8360 LabelGraphics
8361 [
8362 text "New Integers"
8363 outline "#000000"
8364 fill "#FFFFFF"
8365 fontSize 16
8366 fontName "Monospace"
8367 autoSizePolicy "node_width"
8368 anchor "t"
8369 borderDistance 0.0
8370 ]
8371 LabelGraphics
8372 [
8373 text "
8374 "
8375 fontSize 14
8376 fontName "Consolas"
8377 alignment "left"
8378 anchor "tl"
8379 borderDistance 6
8380 ]
8381 ]
8382
8383 node
8384 [
8385 id 8
8386 graphics
8387 [
8388 w 85.80000000000001
8389 h 26
8390 type "rectangle"
8391 fill "#FFFFFF"
8392 fill2 "#FFFFFF"
8393 outline "#000000"
8394 ]
8395 LabelGraphics
8396 [
8397 text "New Reals"
8398 outline "#000000"
8399 fill "#FFFFFF"
8400 fontSize 16
8401 fontName "Monospace"
8402 autoSizePolicy "node_width"
8403 anchor "t"
8404 borderDistance 0.0
8405 ]
8406 LabelGraphics
8407 [
8408 text "
8409 "
8410 fontSize 14
8411 fontName "Consolas"
8412 alignment "left"
8413 anchor "tl"
8414 borderDistance 6
8415 ]
8416 ]
8417
8418 node
8419 [
8420 id 9
8421 graphics
8422 [
8423 w 103.4
8424 h 26
8425 type "rectangle"
8426 fill "#FFFFFF"
8427 fill2 "#FFFFFF"
8428 outline "#000000"
8429 ]
8430 LabelGraphics
8431 [
8432 text "New Strings"
8433 outline "#000000"
8434 fill "#FFFFFF"
8435 fontSize 16
8436 fontName "Monospace"
8437 autoSizePolicy "node_width"
8438 anchor "t"
8439 borderDistance 0.0
8440 ]
8441 LabelGraphics
8442 [
8443 text "
8444 "
8445 fontSize 14
8446 fontName "Consolas"
8447 alignment "left"
8448 anchor "tl"
8449 borderDistance 6
8450 ]
8451 ]
8452
8453 node
8454 [
8455 id 10
8456 graphics
8457 [
8458 w 103.4
8459 h 26
8460 type "rectangle"
8461 fill "#FFFFFF"
8462 fill2 "#FFFFFF"
8463 outline "#000000"
8464 ]
8465 LabelGraphics
8466 [
8467 text "New Objects"
8468 outline "#000000"
8469 fill "#FFFFFF"
8470 fontSize 16
8471 fontName "Monospace"
8472 autoSizePolicy "node_width"
8473 anchor "t"
8474 borderDistance 0.0
8475 ]
8476 LabelGraphics
8477 [
8478 text "
8479 "
8480 fontSize 14
8481 fontName "Consolas"
8482 alignment "left"
8483 anchor "tl"
8484 borderDistance 6
8485 ]
8486 ]
8487 edge
8488 [
8489 source 6
8490 target 3
8491 graphics
8492 [
8493 fill "#000000"
8494 targetArrow "standard"
8495 ]
8496 LabelGraphics
8497 [
8498 text "model reference FunctionalElement"
8499 fontSize 14
8500 fontName "Consolas"
8501 configuration "AutoFlippingLabel"
8502 model "six_pos"
8503 position "thead"
8504 ]
8505 ]
8506 edge
8507 [
8508 source 3
8509 target 6
8510 graphics
8511 [
8512 fill "#000000"
8513 width 3
8514 targetArrow "standard"
8515 ]
8516 LabelGraphics
8517 [
8518 text "rootElements reference FunctionalArchitectureModel"
8519 fontSize 14
8520 fontName "Consolas"
8521 configuration "AutoFlippingLabel"
8522 model "six_pos"
8523 position "thead"
8524 ]
8525 ]
8526 edge
8527 [
8528 source 6
8529 target 2
8530 graphics
8531 [
8532 fill "#000000"
8533 targetArrow "standard"
8534 ]
8535 LabelGraphics
8536 [
8537 text "type attribute Function"
8538 fontSize 14
8539 fontName "Consolas"
8540 configuration "AutoFlippingLabel"
8541 model "six_pos"
8542 position "thead"
8543 ]
8544 ]
8545]
8546graph
8547[
8548 node
8549 [
8550 id 0
8551 graphics
8552 [
8553 w 254.10000000000002
8554 h 110
8555 type "rectangle"
8556 fill "#FFFFFF"
8557 fill2 "#FFFFFF"
8558 outline "#000000"
8559 ]
8560 LabelGraphics
8561 [
8562 text "o 1"
8563 outline "#000000"
8564 fill "#FFFFFF"
8565 fontSize 16
8566 fontName "Monospace"
8567 autoSizePolicy "node_width"
8568 anchor "t"
8569 borderDistance 0.0
8570 ]
8571 LabelGraphics
8572 [
8573 text "
8574 EModelElement class DefinedPart
8575 ENamedElement class DefinedPart
8576 EPackage class DefinedPart
8577 EModelElement class
8578 ENamedElement class
8579 EPackage class
8580 "
8581 fontSize 14
8582 fontName "Consolas"
8583 alignment "left"
8584 anchor "tl"
8585 borderDistance 6
8586 ]
8587 ]
8588
8589 node
8590 [
8591 id 1
8592 graphics
8593 [
8594 w 41.800000000000004
8595 h 26
8596 type "rectangle"
8597 fill "#FFFFFF"
8598 fill2 "#FFFFFF"
8599 outline "#000000"
8600 ]
8601 LabelGraphics
8602 [
8603 text "true"
8604 outline "#000000"
8605 fill "#FFFFFF"
8606 fontSize 16
8607 fontName "Monospace"
8608 autoSizePolicy "node_width"
8609 anchor "t"
8610 borderDistance 0.0
8611 ]
8612 LabelGraphics
8613 [
8614 text "
8615 "
8616 fontSize 14
8617 fontName "Consolas"
8618 alignment "left"
8619 anchor "tl"
8620 borderDistance 6
8621 ]
8622 ]
8623
8624 node
8625 [
8626 id 2
8627 graphics
8628 [
8629 w 50.6
8630 h 26
8631 type "rectangle"
8632 fill "#FFFFFF"
8633 fill2 "#FFFFFF"
8634 outline "#000000"
8635 ]
8636 LabelGraphics
8637 [
8638 text "false"
8639 outline "#000000"
8640 fill "#FFFFFF"
8641 fontSize 16
8642 fontName "Monospace"
8643 autoSizePolicy "node_width"
8644 anchor "t"
8645 borderDistance 0.0
8646 ]
8647 LabelGraphics
8648 [
8649 text "
8650 "
8651 fontSize 14
8652 fontName "Consolas"
8653 alignment "left"
8654 anchor "tl"
8655 borderDistance 6
8656 ]
8657 ]
8658
8659 node
8660 [
8661 id 3
8662 graphics
8663 [
8664 w 24.200000000000003
8665 h 26
8666 type "rectangle"
8667 fill "#FFFFFF"
8668 fill2 "#FFFFFF"
8669 outline "#000000"
8670 ]
8671 LabelGraphics
8672 [
8673 text "-1"
8674 outline "#000000"
8675 fill "#FFFFFF"
8676 fontSize 16
8677 fontName "Monospace"
8678 autoSizePolicy "node_width"
8679 anchor "t"
8680 borderDistance 0.0
8681 ]
8682 LabelGraphics
8683 [
8684 text "
8685 "
8686 fontSize 14
8687 fontName "Consolas"
8688 alignment "left"
8689 anchor "tl"
8690 borderDistance 6
8691 ]
8692 ]
8693
8694 node
8695 [
8696 id 4
8697 graphics
8698 [
8699 w 15.400000000000002
8700 h 26
8701 type "rectangle"
8702 fill "#FFFFFF"
8703 fill2 "#FFFFFF"
8704 outline "#000000"
8705 ]
8706 LabelGraphics
8707 [
8708 text "0"
8709 outline "#000000"
8710 fill "#FFFFFF"
8711 fontSize 16
8712 fontName "Monospace"
8713 autoSizePolicy "node_width"
8714 anchor "t"
8715 borderDistance 0.0
8716 ]
8717 LabelGraphics
8718 [
8719 text "
8720 "
8721 fontSize 14
8722 fontName "Consolas"
8723 alignment "left"
8724 anchor "tl"
8725 borderDistance 6
8726 ]
8727 ]
8728
8729 node
8730 [
8731 id 5
8732 graphics
8733 [
8734 w 15.400000000000002
8735 h 26
8736 type "rectangle"
8737 fill "#FFFFFF"
8738 fill2 "#FFFFFF"
8739 outline "#000000"
8740 ]
8741 LabelGraphics
8742 [
8743 text "1"
8744 outline "#000000"
8745 fill "#FFFFFF"
8746 fontSize 16
8747 fontName "Monospace"
8748 autoSizePolicy "node_width"
8749 anchor "t"
8750 borderDistance 0.0
8751 ]
8752 LabelGraphics
8753 [
8754 text "
8755 "
8756 fontSize 14
8757 fontName "Consolas"
8758 alignment "left"
8759 anchor "tl"
8760 borderDistance 6
8761 ]
8762 ]
8763
8764 node
8765 [
8766 id 6
8767 graphics
8768 [
8769 w 33.0
8770 h 26
8771 type "rectangle"
8772 fill "#FFFFFF"
8773 fill2 "#FFFFFF"
8774 outline "#000000"
8775 ]
8776 LabelGraphics
8777 [
8778 text ""A""
8779 outline "#000000"
8780 fill "#FFFFFF"
8781 fontSize 16
8782 fontName "Monospace"
8783 autoSizePolicy "node_width"
8784 anchor "t"
8785 borderDistance 0.0
8786 ]
8787 LabelGraphics
8788 [
8789 text "
8790 "
8791 fontSize 14
8792 fontName "Consolas"
8793 alignment "left"
8794 anchor "tl"
8795 borderDistance 6
8796 ]
8797 ]
8798
8799 node
8800 [
8801 id 7
8802 graphics
8803 [
8804 w 33.0
8805 h 26
8806 type "rectangle"
8807 fill "#FFFFFF"
8808 fill2 "#FFFFFF"
8809 outline "#000000"
8810 ]
8811 LabelGraphics
8812 [
8813 text ""B""
8814 outline "#000000"
8815 fill "#FFFFFF"
8816 fontSize 16
8817 fontName "Monospace"
8818 autoSizePolicy "node_width"
8819 anchor "t"
8820 borderDistance 0.0
8821 ]
8822 LabelGraphics
8823 [
8824 text "
8825 "
8826 fontSize 14
8827 fontName "Consolas"
8828 alignment "left"
8829 anchor "tl"
8830 borderDistance 6
8831 ]
8832 ]
8833
8834 node
8835 [
8836 id 8
8837 graphics
8838 [
8839 w 94.60000000000001
8840 h 26
8841 type "rectangle"
8842 fill "#FFFFFF"
8843 fill2 "#FFFFFF"
8844 outline "#000000"
8845 ]
8846 LabelGraphics
8847 [
8848 text ""nsPrefix""
8849 outline "#000000"
8850 fill "#FFFFFF"
8851 fontSize 16
8852 fontName "Monospace"
8853 autoSizePolicy "node_width"
8854 anchor "t"
8855 borderDistance 0.0
8856 ]
8857 LabelGraphics
8858 [
8859 text "
8860 "
8861 fontSize 14
8862 fontName "Consolas"
8863 alignment "left"
8864 anchor "tl"
8865 borderDistance 6
8866 ]
8867 ]
8868
8869 node
8870 [
8871 id 9
8872 graphics
8873 [
8874 w 68.2
8875 h 26
8876 type "rectangle"
8877 fill "#FFFFFF"
8878 fill2 "#FFFFFF"
8879 outline "#000000"
8880 ]
8881 LabelGraphics
8882 [
8883 text ""nsUri""
8884 outline "#000000"
8885 fill "#FFFFFF"
8886 fontSize 16
8887 fontName "Monospace"
8888 autoSizePolicy "node_width"
8889 anchor "t"
8890 borderDistance 0.0
8891 ]
8892 LabelGraphics
8893 [
8894 text "
8895 "
8896 fontSize 14
8897 fontName "Consolas"
8898 alignment "left"
8899 anchor "tl"
8900 borderDistance 6
8901 ]
8902 ]
8903
8904 node
8905 [
8906 id 10
8907 graphics
8908 [
8909 w 121.00000000000001
8910 h 26
8911 type "rectangle"
8912 fill "#FFFFFF"
8913 fill2 "#FFFFFF"
8914 outline "#000000"
8915 ]
8916 LabelGraphics
8917 [
8918 text ""packageName""
8919 outline "#000000"
8920 fill "#FFFFFF"
8921 fontSize 16
8922 fontName "Monospace"
8923 autoSizePolicy "node_width"
8924 anchor "t"
8925 borderDistance 0.0
8926 ]
8927 LabelGraphics
8928 [
8929 text "
8930 "
8931 fontSize 14
8932 fontName "Consolas"
8933 alignment "left"
8934 anchor "tl"
8935 borderDistance 6
8936 ]
8937 ]
8938
8939 node
8940 [
8941 id 11
8942 graphics
8943 [
8944 w 269.5
8945 h 110
8946 type "rectangle"
8947 fill "#FFFFFF"
8948 fill2 "#FFFFFF"
8949 outline "#000000"
8950 ]
8951 LabelGraphics
8952 [
8953 text "null"
8954 outline "#000000"
8955 fill "#FFFFFF"
8956 fontSize 16
8957 fontName "Monospace"
8958 autoSizePolicy "node_width"
8959 anchor "t"
8960 borderDistance 0.0
8961 ]
8962 LabelGraphics
8963 [
8964 text "
8965 EClassifier class
8966 EDataType class
8967 EModelElement class
8968 ENamedElement class
8969 EModelElement class UndefinedPart
8970 ENamedElement class UndefinedPart
8971 "
8972 fontSize 14
8973 fontName "Consolas"
8974 alignment "left"
8975 anchor "tl"
8976 borderDistance 6
8977 ]
8978 ]
8979
8980 node
8981 [
8982 id 12
8983 graphics
8984 [
8985 w 269.5
8986 h 68
8987 type "rectangle"
8988 fill "#FFFFFF"
8989 fill2 "#FFFFFF"
8990 outline "#000000"
8991 ]
8992 LabelGraphics
8993 [
8994 text "null"
8995 outline "#000000"
8996 fill "#FFFFFF"
8997 fontSize 16
8998 fontName "Monospace"
8999 autoSizePolicy "node_width"
9000 anchor "t"
9001 borderDistance 0.0
9002 ]
9003 LabelGraphics
9004 [
9005 text "
9006 EAnnotation class
9007 EModelElement class
9008 EModelElement class UndefinedPart
9009 "
9010 fontSize 14
9011 fontName "Consolas"
9012 alignment "left"
9013 anchor "tl"
9014 borderDistance 6
9015 ]
9016 ]
9017
9018 node
9019 [
9020 id 13
9021 graphics
9022 [
9023 w 269.5
9024 h 110
9025 type "rectangle"
9026 fill "#FFFFFF"
9027 fill2 "#FFFFFF"
9028 outline "#000000"
9029 ]
9030 LabelGraphics
9031 [
9032 text "null"
9033 outline "#000000"
9034 fill "#FFFFFF"
9035 fontSize 16
9036 fontName "Monospace"
9037 autoSizePolicy "node_width"
9038 anchor "t"
9039 borderDistance 0.0
9040 ]
9041 LabelGraphics
9042 [
9043 text "
9044 EClass class
9045 EClassifier class
9046 EModelElement class
9047 ENamedElement class
9048 EModelElement class UndefinedPart
9049 ENamedElement class UndefinedPart
9050 "
9051 fontSize 14
9052 fontName "Consolas"
9053 alignment "left"
9054 anchor "tl"
9055 borderDistance 6
9056 ]
9057 ]
9058
9059 node
9060 [
9061 id 14
9062 graphics
9063 [
9064 w 269.5
9065 h 110
9066 type "rectangle"
9067 fill "#FFFFFF"
9068 fill2 "#FFFFFF"
9069 outline "#000000"
9070 ]
9071 LabelGraphics
9072 [
9073 text "null"
9074 outline "#000000"
9075 fill "#FFFFFF"
9076 fontSize 16
9077 fontName "Monospace"
9078 autoSizePolicy "node_width"
9079 anchor "t"
9080 borderDistance 0.0
9081 ]
9082 LabelGraphics
9083 [
9084 text "
9085 EClassifier class
9086 EDataType class
9087 EModelElement class
9088 ENamedElement class
9089 EModelElement class UndefinedPart
9090 ENamedElement class UndefinedPart
9091 "
9092 fontSize 14
9093 fontName "Consolas"
9094 alignment "left"
9095 anchor "tl"
9096 borderDistance 6
9097 ]
9098 ]
9099
9100 node
9101 [
9102 id 15
9103 graphics
9104 [
9105 w 269.5
9106 h 68
9107 type "rectangle"
9108 fill "#FFFFFF"
9109 fill2 "#FFFFFF"
9110 outline "#000000"
9111 ]
9112 LabelGraphics
9113 [
9114 text "null"
9115 outline "#000000"
9116 fill "#FFFFFF"
9117 fontSize 16
9118 fontName "Monospace"
9119 autoSizePolicy "node_width"
9120 anchor "t"
9121 borderDistance 0.0
9122 ]
9123 LabelGraphics
9124 [
9125 text "
9126 EAnnotation class
9127 EModelElement class
9128 EModelElement class UndefinedPart
9129 "
9130 fontSize 14
9131 fontName "Consolas"
9132 alignment "left"
9133 anchor "tl"
9134 borderDistance 6
9135 ]
9136 ]
9137
9138 node
9139 [
9140 id 16
9141 graphics
9142 [
9143 w 112.2
9144 h 26
9145 type "rectangle"
9146 fill "#FFFFFF"
9147 fill2 "#FFFFFF"
9148 outline "#000000"
9149 ]
9150 LabelGraphics
9151 [
9152 text "New Integers"
9153 outline "#000000"
9154 fill "#FFFFFF"
9155 fontSize 16
9156 fontName "Monospace"
9157 autoSizePolicy "node_width"
9158 anchor "t"
9159 borderDistance 0.0
9160 ]
9161 LabelGraphics
9162 [
9163 text "
9164 "
9165 fontSize 14
9166 fontName "Consolas"
9167 alignment "left"
9168 anchor "tl"
9169 borderDistance 6
9170 ]
9171 ]
9172
9173 node
9174 [
9175 id 17
9176 graphics
9177 [
9178 w 85.80000000000001
9179 h 26
9180 type "rectangle"
9181 fill "#FFFFFF"
9182 fill2 "#FFFFFF"
9183 outline "#000000"
9184 ]
9185 LabelGraphics
9186 [
9187 text "New Reals"
9188 outline "#000000"
9189 fill "#FFFFFF"
9190 fontSize 16
9191 fontName "Monospace"
9192 autoSizePolicy "node_width"
9193 anchor "t"
9194 borderDistance 0.0
9195 ]
9196 LabelGraphics
9197 [
9198 text "
9199 "
9200 fontSize 14
9201 fontName "Consolas"
9202 alignment "left"
9203 anchor "tl"
9204 borderDistance 6
9205 ]
9206 ]
9207
9208 node
9209 [
9210 id 18
9211 graphics
9212 [
9213 w 103.4
9214 h 26
9215 type "rectangle"
9216 fill "#FFFFFF"
9217 fill2 "#FFFFFF"
9218 outline "#000000"
9219 ]
9220 LabelGraphics
9221 [
9222 text "New Strings"
9223 outline "#000000"
9224 fill "#FFFFFF"
9225 fontSize 16
9226 fontName "Monospace"
9227 autoSizePolicy "node_width"
9228 anchor "t"
9229 borderDistance 0.0
9230 ]
9231 LabelGraphics
9232 [
9233 text "
9234 "
9235 fontSize 14
9236 fontName "Consolas"
9237 alignment "left"
9238 anchor "tl"
9239 borderDistance 6
9240 ]
9241 ]
9242
9243 node
9244 [
9245 id 19
9246 graphics
9247 [
9248 w 103.4
9249 h 26
9250 type "rectangle"
9251 fill "#FFFFFF"
9252 fill2 "#FFFFFF"
9253 outline "#000000"
9254 ]
9255 LabelGraphics
9256 [
9257 text "New Objects"
9258 outline "#000000"
9259 fill "#FFFFFF"
9260 fontSize 16
9261 fontName "Monospace"
9262 autoSizePolicy "node_width"
9263 anchor "t"
9264 borderDistance 0.0
9265 ]
9266 LabelGraphics
9267 [
9268 text "
9269 "
9270 fontSize 14
9271 fontName "Consolas"
9272 alignment "left"
9273 anchor "tl"
9274 borderDistance 6
9275 ]
9276 ]
9277 edge
9278 [
9279 source 12
9280 target 0
9281 graphics
9282 [
9283 fill "#000000"
9284 targetArrow "standard"
9285 ]
9286 LabelGraphics
9287 [
9288 text "eModelElement reference EAnnotation"
9289 fontSize 14
9290 fontName "Consolas"
9291 configuration "AutoFlippingLabel"
9292 model "six_pos"
9293 position "thead"
9294 ]
9295 ]
9296 edge
9297 [
9298 source 15
9299 target 0
9300 graphics
9301 [
9302 fill "#000000"
9303 targetArrow "standard"
9304 ]
9305 LabelGraphics
9306 [
9307 text "eModelElement reference EAnnotation"
9308 fontSize 14
9309 fontName "Consolas"
9310 configuration "AutoFlippingLabel"
9311 model "six_pos"
9312 position "thead"
9313 ]
9314 ]
9315 edge
9316 [
9317 source 11
9318 target 0
9319 graphics
9320 [
9321 fill "#000000"
9322 targetArrow "standard"
9323 ]
9324 LabelGraphics
9325 [
9326 text "ePackage reference EClassifier"
9327 fontSize 14
9328 fontName "Consolas"
9329 configuration "AutoFlippingLabel"
9330 model "six_pos"
9331 position "thead"
9332 ]
9333 ]
9334 edge
9335 [
9336 source 13
9337 target 0
9338 graphics
9339 [
9340 fill "#000000"
9341 targetArrow "standard"
9342 ]
9343 LabelGraphics
9344 [
9345 text "ePackage reference EClassifier"
9346 fontSize 14
9347 fontName "Consolas"
9348 configuration "AutoFlippingLabel"
9349 model "six_pos"
9350 position "thead"
9351 ]
9352 ]
9353 edge
9354 [
9355 source 14
9356 target 0
9357 graphics
9358 [
9359 fill "#000000"
9360 targetArrow "standard"
9361 ]
9362 LabelGraphics
9363 [
9364 text "ePackage reference EClassifier"
9365 fontSize 14
9366 fontName "Consolas"
9367 configuration "AutoFlippingLabel"
9368 model "six_pos"
9369 position "thead"
9370 ]
9371 ]
9372 edge
9373 [
9374 source 0
9375 target 12
9376 graphics
9377 [
9378 fill "#000000"
9379 width 3
9380 targetArrow "standard"
9381 ]
9382 LabelGraphics
9383 [
9384 text "eAnnotations reference EModelElement"
9385 fontSize 14
9386 fontName "Consolas"
9387 configuration "AutoFlippingLabel"
9388 model "six_pos"
9389 position "thead"
9390 ]
9391 ]
9392 edge
9393 [
9394 source 0
9395 target 15
9396 graphics
9397 [
9398 fill "#000000"
9399 width 3
9400 targetArrow "standard"
9401 ]
9402 LabelGraphics
9403 [
9404 text "eAnnotations reference EModelElement"
9405 fontSize 14
9406 fontName "Consolas"
9407 configuration "AutoFlippingLabel"
9408 model "six_pos"
9409 position "thead"
9410 ]
9411 ]
9412 edge
9413 [
9414 source 0
9415 target 11
9416 graphics
9417 [
9418 fill "#000000"
9419 width 3
9420 targetArrow "standard"
9421 ]
9422 LabelGraphics
9423 [
9424 text "eClassifiers reference EPackage"
9425 fontSize 14
9426 fontName "Consolas"
9427 configuration "AutoFlippingLabel"
9428 model "six_pos"
9429 position "thead"
9430 ]
9431 ]
9432 edge
9433 [
9434 source 0
9435 target 13
9436 graphics
9437 [
9438 fill "#000000"
9439 width 3
9440 targetArrow "standard"
9441 ]
9442 LabelGraphics
9443 [
9444 text "eClassifiers reference EPackage"
9445 fontSize 14
9446 fontName "Consolas"
9447 configuration "AutoFlippingLabel"
9448 model "six_pos"
9449 position "thead"
9450 ]
9451 ]
9452 edge
9453 [
9454 source 0
9455 target 14
9456 graphics
9457 [
9458 fill "#000000"
9459 width 3
9460 targetArrow "standard"
9461 ]
9462 LabelGraphics
9463 [
9464 text "eClassifiers reference EPackage"
9465 fontSize 14
9466 fontName "Consolas"
9467 configuration "AutoFlippingLabel"
9468 model "six_pos"
9469 position "thead"
9470 ]
9471 ]
9472 edge
9473 [
9474 source 12
9475 target 7
9476 graphics
9477 [
9478 fill "#000000"
9479 targetArrow "standard"
9480 ]
9481 LabelGraphics
9482 [
9483 text "source attribute EAnnotation"
9484 fontSize 14
9485 fontName "Consolas"
9486 configuration "AutoFlippingLabel"
9487 model "six_pos"
9488 position "thead"
9489 ]
9490 ]
9491 edge
9492 [
9493 source 11
9494 target 8
9495 graphics
9496 [
9497 fill "#000000"
9498 targetArrow "standard"
9499 ]
9500 LabelGraphics
9501 [
9502 text "instanceClassName attribute EClassifier"
9503 fontSize 14
9504 fontName "Consolas"
9505 configuration "AutoFlippingLabel"
9506 model "six_pos"
9507 position "thead"
9508 ]
9509 ]
9510 edge
9511 [
9512 source 11
9513 target 9
9514 graphics
9515 [
9516 fill "#000000"
9517 targetArrow "standard"
9518 ]
9519 LabelGraphics
9520 [
9521 text "instanceTypeName attribute EClassifier"
9522 fontSize 14
9523 fontName "Consolas"
9524 configuration "AutoFlippingLabel"
9525 model "six_pos"
9526 position "thead"
9527 ]
9528 ]
9529 edge
9530 [
9531 source 0
9532 target 10
9533 graphics
9534 [
9535 fill "#000000"
9536 targetArrow "standard"
9537 ]
9538 LabelGraphics
9539 [
9540 text "name attribute ENamedElement"
9541 fontSize 14
9542 fontName "Consolas"
9543 configuration "AutoFlippingLabel"
9544 model "six_pos"
9545 position "thead"
9546 ]
9547 ]
9548 edge
9549 [
9550 source 11
9551 target 8
9552 graphics
9553 [
9554 fill "#000000"
9555 targetArrow "standard"
9556 ]
9557 LabelGraphics
9558 [
9559 text "name attribute ENamedElement"
9560 fontSize 14
9561 fontName "Consolas"
9562 configuration "AutoFlippingLabel"
9563 model "six_pos"
9564 position "thead"
9565 ]
9566 ]
9567 edge
9568 [
9569 source 13
9570 target 9
9571 graphics
9572 [
9573 fill "#000000"
9574 targetArrow "standard"
9575 ]
9576 LabelGraphics
9577 [
9578 text "name attribute ENamedElement"
9579 fontSize 14
9580 fontName "Consolas"
9581 configuration "AutoFlippingLabel"
9582 model "six_pos"
9583 position "thead"
9584 ]
9585 ]
9586 edge
9587 [
9588 source 0
9589 target 9
9590 graphics
9591 [
9592 fill "#000000"
9593 targetArrow "standard"
9594 ]
9595 LabelGraphics
9596 [
9597 text "nsURI attribute EPackage"
9598 fontSize 14
9599 fontName "Consolas"
9600 configuration "AutoFlippingLabel"
9601 model "six_pos"
9602 position "thead"
9603 ]
9604 ]
9605 edge
9606 [
9607 source 0
9608 target 8
9609 graphics
9610 [
9611 fill "#000000"
9612 targetArrow "standard"
9613 ]
9614 LabelGraphics
9615 [
9616 text "nsPrefix attribute EPackage"
9617 fontSize 14
9618 fontName "Consolas"
9619 configuration "AutoFlippingLabel"
9620 model "six_pos"
9621 position "thead"
9622 ]
9623 ]
9624]
9625graph
9626[
9627 node
9628 [
9629 id 0
9630 graphics
9631 [
9632 w 254.10000000000002
9633 h 110
9634 type "rectangle"
9635 fill "#FFFFFF"
9636 fill2 "#FFFFFF"
9637 outline "#000000"
9638 ]
9639 LabelGraphics
9640 [
9641 text "o 1"
9642 outline "#000000"
9643 fill "#FFFFFF"
9644 fontSize 16
9645 fontName "Monospace"
9646 autoSizePolicy "node_width"
9647 anchor "t"
9648 borderDistance 0.0
9649 ]
9650 LabelGraphics
9651 [
9652 text "
9653 EModelElement class DefinedPart
9654 ENamedElement class DefinedPart
9655 EPackage class DefinedPart
9656 EModelElement class
9657 ENamedElement class
9658 EPackage class
9659 "
9660 fontSize 14
9661 fontName "Consolas"
9662 alignment "left"
9663 anchor "tl"
9664 borderDistance 6
9665 ]
9666 ]
9667
9668 node
9669 [
9670 id 1
9671 graphics
9672 [
9673 w 41.800000000000004
9674 h 26
9675 type "rectangle"
9676 fill "#FFFFFF"
9677 fill2 "#FFFFFF"
9678 outline "#000000"
9679 ]
9680 LabelGraphics
9681 [
9682 text "true"
9683 outline "#000000"
9684 fill "#FFFFFF"
9685 fontSize 16
9686 fontName "Monospace"
9687 autoSizePolicy "node_width"
9688 anchor "t"
9689 borderDistance 0.0
9690 ]
9691 LabelGraphics
9692 [
9693 text "
9694 "
9695 fontSize 14
9696 fontName "Consolas"
9697 alignment "left"
9698 anchor "tl"
9699 borderDistance 6
9700 ]
9701 ]
9702
9703 node
9704 [
9705 id 2
9706 graphics
9707 [
9708 w 50.6
9709 h 26
9710 type "rectangle"
9711 fill "#FFFFFF"
9712 fill2 "#FFFFFF"
9713 outline "#000000"
9714 ]
9715 LabelGraphics
9716 [
9717 text "false"
9718 outline "#000000"
9719 fill "#FFFFFF"
9720 fontSize 16
9721 fontName "Monospace"
9722 autoSizePolicy "node_width"
9723 anchor "t"
9724 borderDistance 0.0
9725 ]
9726 LabelGraphics
9727 [
9728 text "
9729 "
9730 fontSize 14
9731 fontName "Consolas"
9732 alignment "left"
9733 anchor "tl"
9734 borderDistance 6
9735 ]
9736 ]
9737
9738 node
9739 [
9740 id 3
9741 graphics
9742 [
9743 w 24.200000000000003
9744 h 26
9745 type "rectangle"
9746 fill "#FFFFFF"
9747 fill2 "#FFFFFF"
9748 outline "#000000"
9749 ]
9750 LabelGraphics
9751 [
9752 text "-1"
9753 outline "#000000"
9754 fill "#FFFFFF"
9755 fontSize 16
9756 fontName "Monospace"
9757 autoSizePolicy "node_width"
9758 anchor "t"
9759 borderDistance 0.0
9760 ]
9761 LabelGraphics
9762 [
9763 text "
9764 "
9765 fontSize 14
9766 fontName "Consolas"
9767 alignment "left"
9768 anchor "tl"
9769 borderDistance 6
9770 ]
9771 ]
9772
9773 node
9774 [
9775 id 4
9776 graphics
9777 [
9778 w 15.400000000000002
9779 h 26
9780 type "rectangle"
9781 fill "#FFFFFF"
9782 fill2 "#FFFFFF"
9783 outline "#000000"
9784 ]
9785 LabelGraphics
9786 [
9787 text "0"
9788 outline "#000000"
9789 fill "#FFFFFF"
9790 fontSize 16
9791 fontName "Monospace"
9792 autoSizePolicy "node_width"
9793 anchor "t"
9794 borderDistance 0.0
9795 ]
9796 LabelGraphics
9797 [
9798 text "
9799 "
9800 fontSize 14
9801 fontName "Consolas"
9802 alignment "left"
9803 anchor "tl"
9804 borderDistance 6
9805 ]
9806 ]
9807
9808 node
9809 [
9810 id 5
9811 graphics
9812 [
9813 w 15.400000000000002
9814 h 26
9815 type "rectangle"
9816 fill "#FFFFFF"
9817 fill2 "#FFFFFF"
9818 outline "#000000"
9819 ]
9820 LabelGraphics
9821 [
9822 text "1"
9823 outline "#000000"
9824 fill "#FFFFFF"
9825 fontSize 16
9826 fontName "Monospace"
9827 autoSizePolicy "node_width"
9828 anchor "t"
9829 borderDistance 0.0
9830 ]
9831 LabelGraphics
9832 [
9833 text "
9834 "
9835 fontSize 14
9836 fontName "Consolas"
9837 alignment "left"
9838 anchor "tl"
9839 borderDistance 6
9840 ]
9841 ]
9842
9843 node
9844 [
9845 id 6
9846 graphics
9847 [
9848 w 33.0
9849 h 26
9850 type "rectangle"
9851 fill "#FFFFFF"
9852 fill2 "#FFFFFF"
9853 outline "#000000"
9854 ]
9855 LabelGraphics
9856 [
9857 text ""A""
9858 outline "#000000"
9859 fill "#FFFFFF"
9860 fontSize 16
9861 fontName "Monospace"
9862 autoSizePolicy "node_width"
9863 anchor "t"
9864 borderDistance 0.0
9865 ]
9866 LabelGraphics
9867 [
9868 text "
9869 "
9870 fontSize 14
9871 fontName "Consolas"
9872 alignment "left"
9873 anchor "tl"
9874 borderDistance 6
9875 ]
9876 ]
9877
9878 node
9879 [
9880 id 7
9881 graphics
9882 [
9883 w 33.0
9884 h 26
9885 type "rectangle"
9886 fill "#FFFFFF"
9887 fill2 "#FFFFFF"
9888 outline "#000000"
9889 ]
9890 LabelGraphics
9891 [
9892 text ""B""
9893 outline "#000000"
9894 fill "#FFFFFF"
9895 fontSize 16
9896 fontName "Monospace"
9897 autoSizePolicy "node_width"
9898 anchor "t"
9899 borderDistance 0.0
9900 ]
9901 LabelGraphics
9902 [
9903 text "
9904 "
9905 fontSize 14
9906 fontName "Consolas"
9907 alignment "left"
9908 anchor "tl"
9909 borderDistance 6
9910 ]
9911 ]
9912
9913 node
9914 [
9915 id 8
9916 graphics
9917 [
9918 w 94.60000000000001
9919 h 26
9920 type "rectangle"
9921 fill "#FFFFFF"
9922 fill2 "#FFFFFF"
9923 outline "#000000"
9924 ]
9925 LabelGraphics
9926 [
9927 text ""nsPrefix""
9928 outline "#000000"
9929 fill "#FFFFFF"
9930 fontSize 16
9931 fontName "Monospace"
9932 autoSizePolicy "node_width"
9933 anchor "t"
9934 borderDistance 0.0
9935 ]
9936 LabelGraphics
9937 [
9938 text "
9939 "
9940 fontSize 14
9941 fontName "Consolas"
9942 alignment "left"
9943 anchor "tl"
9944 borderDistance 6
9945 ]
9946 ]
9947
9948 node
9949 [
9950 id 9
9951 graphics
9952 [
9953 w 68.2
9954 h 26
9955 type "rectangle"
9956 fill "#FFFFFF"
9957 fill2 "#FFFFFF"
9958 outline "#000000"
9959 ]
9960 LabelGraphics
9961 [
9962 text ""nsUri""
9963 outline "#000000"
9964 fill "#FFFFFF"
9965 fontSize 16
9966 fontName "Monospace"
9967 autoSizePolicy "node_width"
9968 anchor "t"
9969 borderDistance 0.0
9970 ]
9971 LabelGraphics
9972 [
9973 text "
9974 "
9975 fontSize 14
9976 fontName "Consolas"
9977 alignment "left"
9978 anchor "tl"
9979 borderDistance 6
9980 ]
9981 ]
9982
9983 node
9984 [
9985 id 10
9986 graphics
9987 [
9988 w 121.00000000000001
9989 h 26
9990 type "rectangle"
9991 fill "#FFFFFF"
9992 fill2 "#FFFFFF"
9993 outline "#000000"
9994 ]
9995 LabelGraphics
9996 [
9997 text ""packageName""
9998 outline "#000000"
9999 fill "#FFFFFF"
10000 fontSize 16
10001 fontName "Monospace"
10002 autoSizePolicy "node_width"
10003 anchor "t"
10004 borderDistance 0.0
10005 ]
10006 LabelGraphics
10007 [
10008 text "
10009 "
10010 fontSize 14
10011 fontName "Consolas"
10012 alignment "left"
10013 anchor "tl"
10014 borderDistance 6
10015 ]
10016 ]
10017
10018 node
10019 [
10020 id 11
10021 graphics
10022 [
10023 w 269.5
10024 h 124
10025 type "rectangle"
10026 fill "#FFFFFF"
10027 fill2 "#FFFFFF"
10028 outline "#000000"
10029 ]
10030 LabelGraphics
10031 [
10032 text "null"
10033 outline "#000000"
10034 fill "#FFFFFF"
10035 fontSize 16
10036 fontName "Monospace"
10037 autoSizePolicy "node_width"
10038 anchor "t"
10039 borderDistance 0.0
10040 ]
10041 LabelGraphics
10042 [
10043 text "
10044 EClassifier class
10045 EDataType class
10046 EEnum class
10047 EModelElement class
10048 ENamedElement class
10049 EModelElement class UndefinedPart
10050 ENamedElement class UndefinedPart
10051 "
10052 fontSize 14
10053 fontName "Consolas"
10054 alignment "left"
10055 anchor "tl"
10056 borderDistance 6
10057 ]
10058 ]
10059
10060 node
10061 [
10062 id 12
10063 graphics
10064 [
10065 w 269.5
10066 h 124
10067 type "rectangle"
10068 fill "#FFFFFF"
10069 fill2 "#FFFFFF"
10070 outline "#000000"
10071 ]
10072 LabelGraphics
10073 [
10074 text "null"
10075 outline "#000000"
10076 fill "#FFFFFF"
10077 fontSize 16
10078 fontName "Monospace"
10079 autoSizePolicy "node_width"
10080 anchor "t"
10081 borderDistance 0.0
10082 ]
10083 LabelGraphics
10084 [
10085 text "
10086 EClassifier class
10087 EDataType class
10088 EEnum class
10089 EModelElement class
10090 ENamedElement class
10091 EModelElement class UndefinedPart
10092 ENamedElement class UndefinedPart
10093 "
10094 fontSize 14
10095 fontName "Consolas"
10096 alignment "left"
10097 anchor "tl"
10098 borderDistance 6
10099 ]
10100 ]
10101
10102 node
10103 [
10104 id 13
10105 graphics
10106 [
10107 w 269.5
10108 h 96
10109 type "rectangle"
10110 fill "#FFFFFF"
10111 fill2 "#FFFFFF"
10112 outline "#000000"
10113 ]
10114 LabelGraphics
10115 [
10116 text "null"
10117 outline "#000000"
10118 fill "#FFFFFF"
10119 fontSize 16
10120 fontName "Monospace"
10121 autoSizePolicy "node_width"
10122 anchor "t"
10123 borderDistance 0.0
10124 ]
10125 LabelGraphics
10126 [
10127 text "
10128 EEnumLiteral class
10129 EModelElement class
10130 ENamedElement class
10131 EModelElement class UndefinedPart
10132 ENamedElement class UndefinedPart
10133 "
10134 fontSize 14
10135 fontName "Consolas"
10136 alignment "left"
10137 anchor "tl"
10138 borderDistance 6
10139 ]
10140 ]
10141
10142 node
10143 [
10144 id 14
10145 graphics
10146 [
10147 w 269.5
10148 h 68
10149 type "rectangle"
10150 fill "#FFFFFF"
10151 fill2 "#FFFFFF"
10152 outline "#000000"
10153 ]
10154 LabelGraphics
10155 [
10156 text "null"
10157 outline "#000000"
10158 fill "#FFFFFF"
10159 fontSize 16
10160 fontName "Monospace"
10161 autoSizePolicy "node_width"
10162 anchor "t"
10163 borderDistance 0.0
10164 ]
10165 LabelGraphics
10166 [
10167 text "
10168 EAnnotation class
10169 EModelElement class
10170 EModelElement class UndefinedPart
10171 "
10172 fontSize 14
10173 fontName "Consolas"
10174 alignment "left"
10175 anchor "tl"
10176 borderDistance 6
10177 ]
10178 ]
10179
10180 node
10181 [
10182 id 15
10183 graphics
10184 [
10185 w 269.5
10186 h 96
10187 type "rectangle"
10188 fill "#FFFFFF"
10189 fill2 "#FFFFFF"
10190 outline "#000000"
10191 ]
10192 LabelGraphics
10193 [
10194 text "null"
10195 outline "#000000"
10196 fill "#FFFFFF"
10197 fontSize 16
10198 fontName "Monospace"
10199 autoSizePolicy "node_width"
10200 anchor "t"
10201 borderDistance 0.0
10202 ]
10203 LabelGraphics
10204 [
10205 text "
10206 EModelElement class
10207 ENamedElement class
10208 ETypeParameter class
10209 EModelElement class UndefinedPart
10210 ENamedElement class UndefinedPart
10211 "
10212 fontSize 14
10213 fontName "Consolas"
10214 alignment "left"
10215 anchor "tl"
10216 borderDistance 6
10217 ]
10218 ]
10219
10220 node
10221 [
10222 id 16
10223 graphics
10224 [
10225 w 112.2
10226 h 26
10227 type "rectangle"
10228 fill "#FFFFFF"
10229 fill2 "#FFFFFF"
10230 outline "#000000"
10231 ]
10232 LabelGraphics
10233 [
10234 text "New Integers"
10235 outline "#000000"
10236 fill "#FFFFFF"
10237 fontSize 16
10238 fontName "Monospace"
10239 autoSizePolicy "node_width"
10240 anchor "t"
10241 borderDistance 0.0
10242 ]
10243 LabelGraphics
10244 [
10245 text "
10246 "
10247 fontSize 14
10248 fontName "Consolas"
10249 alignment "left"
10250 anchor "tl"
10251 borderDistance 6
10252 ]
10253 ]
10254
10255 node
10256 [
10257 id 17
10258 graphics
10259 [
10260 w 85.80000000000001
10261 h 26
10262 type "rectangle"
10263 fill "#FFFFFF"
10264 fill2 "#FFFFFF"
10265 outline "#000000"
10266 ]
10267 LabelGraphics
10268 [
10269 text "New Reals"
10270 outline "#000000"
10271 fill "#FFFFFF"
10272 fontSize 16
10273 fontName "Monospace"
10274 autoSizePolicy "node_width"
10275 anchor "t"
10276 borderDistance 0.0
10277 ]
10278 LabelGraphics
10279 [
10280 text "
10281 "
10282 fontSize 14
10283 fontName "Consolas"
10284 alignment "left"
10285 anchor "tl"
10286 borderDistance 6
10287 ]
10288 ]
10289
10290 node
10291 [
10292 id 18
10293 graphics
10294 [
10295 w 103.4
10296 h 26
10297 type "rectangle"
10298 fill "#FFFFFF"
10299 fill2 "#FFFFFF"
10300 outline "#000000"
10301 ]
10302 LabelGraphics
10303 [
10304 text "New Strings"
10305 outline "#000000"
10306 fill "#FFFFFF"
10307 fontSize 16
10308 fontName "Monospace"
10309 autoSizePolicy "node_width"
10310 anchor "t"
10311 borderDistance 0.0
10312 ]
10313 LabelGraphics
10314 [
10315 text "
10316 "
10317 fontSize 14
10318 fontName "Consolas"
10319 alignment "left"
10320 anchor "tl"
10321 borderDistance 6
10322 ]
10323 ]
10324
10325 node
10326 [
10327 id 19
10328 graphics
10329 [
10330 w 103.4
10331 h 26
10332 type "rectangle"
10333 fill "#FFFFFF"
10334 fill2 "#FFFFFF"
10335 outline "#000000"
10336 ]
10337 LabelGraphics
10338 [
10339 text "New Objects"
10340 outline "#000000"
10341 fill "#FFFFFF"
10342 fontSize 16
10343 fontName "Monospace"
10344 autoSizePolicy "node_width"
10345 anchor "t"
10346 borderDistance 0.0
10347 ]
10348 LabelGraphics
10349 [
10350 text "
10351 "
10352 fontSize 14
10353 fontName "Consolas"
10354 alignment "left"
10355 anchor "tl"
10356 borderDistance 6
10357 ]
10358 ]
10359 edge
10360 [
10361 source 14
10362 target 0
10363 graphics
10364 [
10365 fill "#000000"
10366 targetArrow "standard"
10367 ]
10368 LabelGraphics
10369 [
10370 text "eModelElement reference EAnnotation"
10371 fontSize 14
10372 fontName "Consolas"
10373 configuration "AutoFlippingLabel"
10374 model "six_pos"
10375 position "thead"
10376 ]
10377 ]
10378 edge
10379 [
10380 source 11
10381 target 0
10382 graphics
10383 [
10384 fill "#000000"
10385 targetArrow "standard"
10386 ]
10387 LabelGraphics
10388 [
10389 text "ePackage reference EClassifier"
10390 fontSize 14
10391 fontName "Consolas"
10392 configuration "AutoFlippingLabel"
10393 model "six_pos"
10394 position "thead"
10395 ]
10396 ]
10397 edge
10398 [
10399 source 12
10400 target 0
10401 graphics
10402 [
10403 fill "#000000"
10404 targetArrow "standard"
10405 ]
10406 LabelGraphics
10407 [
10408 text "ePackage reference EClassifier"
10409 fontSize 14
10410 fontName "Consolas"
10411 configuration "AutoFlippingLabel"
10412 model "six_pos"
10413 position "thead"
10414 ]
10415 ]
10416 edge
10417 [
10418 source 12
10419 target 15
10420 graphics
10421 [
10422 fill "#000000"
10423 width 3
10424 targetArrow "standard"
10425 ]
10426 LabelGraphics
10427 [
10428 text "eTypeParameters reference EClassifier"
10429 fontSize 14
10430 fontName "Consolas"
10431 configuration "AutoFlippingLabel"
10432 model "six_pos"
10433 position "thead"
10434 ]
10435 ]
10436 edge
10437 [
10438 source 11
10439 target 13
10440 graphics
10441 [
10442 fill "#000000"
10443 width 3
10444 targetArrow "standard"
10445 ]
10446 LabelGraphics
10447 [
10448 text "eLiterals reference EEnum"
10449 fontSize 14
10450 fontName "Consolas"
10451 configuration "AutoFlippingLabel"
10452 model "six_pos"
10453 position "thead"
10454 ]
10455 ]
10456 edge
10457 [
10458 source 13
10459 target 11
10460 graphics
10461 [
10462 fill "#000000"
10463 targetArrow "standard"
10464 ]
10465 LabelGraphics
10466 [
10467 text "eEnum reference EEnumLiteral"
10468 fontSize 14
10469 fontName "Consolas"
10470 configuration "AutoFlippingLabel"
10471 model "six_pos"
10472 position "thead"
10473 ]
10474 ]
10475 edge
10476 [
10477 source 0
10478 target 14
10479 graphics
10480 [
10481 fill "#000000"
10482 width 3
10483 targetArrow "standard"
10484 ]
10485 LabelGraphics
10486 [
10487 text "eAnnotations reference EModelElement"
10488 fontSize 14
10489 fontName "Consolas"
10490 configuration "AutoFlippingLabel"
10491 model "six_pos"
10492 position "thead"
10493 ]
10494 ]
10495 edge
10496 [
10497 source 0
10498 target 11
10499 graphics
10500 [
10501 fill "#000000"
10502 width 3
10503 targetArrow "standard"
10504 ]
10505 LabelGraphics
10506 [
10507 text "eClassifiers reference EPackage"
10508 fontSize 14
10509 fontName "Consolas"
10510 configuration "AutoFlippingLabel"
10511 model "six_pos"
10512 position "thead"
10513 ]
10514 ]
10515 edge
10516 [
10517 source 0
10518 target 12
10519 graphics
10520 [
10521 fill "#000000"
10522 width 3
10523 targetArrow "standard"
10524 ]
10525 LabelGraphics
10526 [
10527 text "eClassifiers reference EPackage"
10528 fontSize 14
10529 fontName "Consolas"
10530 configuration "AutoFlippingLabel"
10531 model "six_pos"
10532 position "thead"
10533 ]
10534 ]
10535 edge
10536 [
10537 source 11
10538 target 8
10539 graphics
10540 [
10541 fill "#000000"
10542 targetArrow "standard"
10543 ]
10544 LabelGraphics
10545 [
10546 text "instanceClassName attribute EClassifier"
10547 fontSize 14
10548 fontName "Consolas"
10549 configuration "AutoFlippingLabel"
10550 model "six_pos"
10551 position "thead"
10552 ]
10553 ]
10554 edge
10555 [
10556 source 11
10557 target 9
10558 graphics
10559 [
10560 fill "#000000"
10561 targetArrow "standard"
10562 ]
10563 LabelGraphics
10564 [
10565 text "instanceTypeName attribute EClassifier"
10566 fontSize 14
10567 fontName "Consolas"
10568 configuration "AutoFlippingLabel"
10569 model "six_pos"
10570 position "thead"
10571 ]
10572 ]
10573 edge
10574 [
10575 source 12
10576 target 9
10577 graphics
10578 [
10579 fill "#000000"
10580 targetArrow "standard"
10581 ]
10582 LabelGraphics
10583 [
10584 text "instanceTypeName attribute EClassifier"
10585 fontSize 14
10586 fontName "Consolas"
10587 configuration "AutoFlippingLabel"
10588 model "six_pos"
10589 position "thead"
10590 ]
10591 ]
10592 edge
10593 [
10594 source 11
10595 target 2
10596 graphics
10597 [
10598 fill "#000000"
10599 targetArrow "standard"
10600 ]
10601 LabelGraphics
10602 [
10603 text "serializable attribute EDataType"
10604 fontSize 14
10605 fontName "Consolas"
10606 configuration "AutoFlippingLabel"
10607 model "six_pos"
10608 position "thead"
10609 ]
10610 ]
10611 edge
10612 [
10613 source 12
10614 target 2
10615 graphics
10616 [
10617 fill "#000000"
10618 targetArrow "standard"
10619 ]
10620 LabelGraphics
10621 [
10622 text "serializable attribute EDataType"
10623 fontSize 14
10624 fontName "Consolas"
10625 configuration "AutoFlippingLabel"
10626 model "six_pos"
10627 position "thead"
10628 ]
10629 ]
10630 edge
10631 [
10632 source 13
10633 target 9
10634 graphics
10635 [
10636 fill "#000000"
10637 targetArrow "standard"
10638 ]
10639 LabelGraphics
10640 [
10641 text "literal attribute EEnumLiteral"
10642 fontSize 14
10643 fontName "Consolas"
10644 configuration "AutoFlippingLabel"
10645 model "six_pos"
10646 position "thead"
10647 ]
10648 ]
10649 edge
10650 [
10651 source 0
10652 target 10
10653 graphics
10654 [
10655 fill "#000000"
10656 targetArrow "standard"
10657 ]
10658 LabelGraphics
10659 [
10660 text "name attribute ENamedElement"
10661 fontSize 14
10662 fontName "Consolas"
10663 configuration "AutoFlippingLabel"
10664 model "six_pos"
10665 position "thead"
10666 ]
10667 ]
10668 edge
10669 [
10670 source 12
10671 target 10
10672 graphics
10673 [
10674 fill "#000000"
10675 targetArrow "standard"
10676 ]
10677 LabelGraphics
10678 [
10679 text "name attribute ENamedElement"
10680 fontSize 14
10681 fontName "Consolas"
10682 configuration "AutoFlippingLabel"
10683 model "six_pos"
10684 position "thead"
10685 ]
10686 ]
10687 edge
10688 [
10689 source 0
10690 target 9
10691 graphics
10692 [
10693 fill "#000000"
10694 targetArrow "standard"
10695 ]
10696 LabelGraphics
10697 [
10698 text "nsURI attribute EPackage"
10699 fontSize 14
10700 fontName "Consolas"
10701 configuration "AutoFlippingLabel"
10702 model "six_pos"
10703 position "thead"
10704 ]
10705 ]
10706 edge
10707 [
10708 source 0
10709 target 8
10710 graphics
10711 [
10712 fill "#000000"
10713 targetArrow "standard"
10714 ]
10715 LabelGraphics
10716 [
10717 text "nsPrefix attribute EPackage"
10718 fontSize 14
10719 fontName "Consolas"
10720 configuration "AutoFlippingLabel"
10721 model "six_pos"
10722 position "thead"
10723 ]
10724 ]
10725]
10726graph
10727[
10728 node
10729 [
10730 id 0
10731 graphics
10732 [
10733 w 254.10000000000002
10734 h 110
10735 type "rectangle"
10736 fill "#FFFFFF"
10737 fill2 "#FFFFFF"
10738 outline "#000000"
10739 ]
10740 LabelGraphics
10741 [
10742 text "o 1"
10743 outline "#000000"
10744 fill "#FFFFFF"
10745 fontSize 16
10746 fontName "Monospace"
10747 autoSizePolicy "node_width"
10748 anchor "t"
10749 borderDistance 0.0
10750 ]
10751 LabelGraphics
10752 [
10753 text "
10754 EModelElement class DefinedPart
10755 ENamedElement class DefinedPart
10756 EPackage class DefinedPart
10757 EModelElement class
10758 ENamedElement class
10759 EPackage class
10760 "
10761 fontSize 14
10762 fontName "Consolas"
10763 alignment "left"
10764 anchor "tl"
10765 borderDistance 6
10766 ]
10767 ]
10768
10769 node
10770 [
10771 id 1
10772 graphics
10773 [
10774 w 41.800000000000004
10775 h 26
10776 type "rectangle"
10777 fill "#FFFFFF"
10778 fill2 "#FFFFFF"
10779 outline "#000000"
10780 ]
10781 LabelGraphics
10782 [
10783 text "true"
10784 outline "#000000"
10785 fill "#FFFFFF"
10786 fontSize 16
10787 fontName "Monospace"
10788 autoSizePolicy "node_width"
10789 anchor "t"
10790 borderDistance 0.0
10791 ]
10792 LabelGraphics
10793 [
10794 text "
10795 "
10796 fontSize 14
10797 fontName "Consolas"
10798 alignment "left"
10799 anchor "tl"
10800 borderDistance 6
10801 ]
10802 ]
10803
10804 node
10805 [
10806 id 2
10807 graphics
10808 [
10809 w 50.6
10810 h 26
10811 type "rectangle"
10812 fill "#FFFFFF"
10813 fill2 "#FFFFFF"
10814 outline "#000000"
10815 ]
10816 LabelGraphics
10817 [
10818 text "false"
10819 outline "#000000"
10820 fill "#FFFFFF"
10821 fontSize 16
10822 fontName "Monospace"
10823 autoSizePolicy "node_width"
10824 anchor "t"
10825 borderDistance 0.0
10826 ]
10827 LabelGraphics
10828 [
10829 text "
10830 "
10831 fontSize 14
10832 fontName "Consolas"
10833 alignment "left"
10834 anchor "tl"
10835 borderDistance 6
10836 ]
10837 ]
10838
10839 node
10840 [
10841 id 3
10842 graphics
10843 [
10844 w 24.200000000000003
10845 h 26
10846 type "rectangle"
10847 fill "#FFFFFF"
10848 fill2 "#FFFFFF"
10849 outline "#000000"
10850 ]
10851 LabelGraphics
10852 [
10853 text "-1"
10854 outline "#000000"
10855 fill "#FFFFFF"
10856 fontSize 16
10857 fontName "Monospace"
10858 autoSizePolicy "node_width"
10859 anchor "t"
10860 borderDistance 0.0
10861 ]
10862 LabelGraphics
10863 [
10864 text "
10865 "
10866 fontSize 14
10867 fontName "Consolas"
10868 alignment "left"
10869 anchor "tl"
10870 borderDistance 6
10871 ]
10872 ]
10873
10874 node
10875 [
10876 id 4
10877 graphics
10878 [
10879 w 15.400000000000002
10880 h 26
10881 type "rectangle"
10882 fill "#FFFFFF"
10883 fill2 "#FFFFFF"
10884 outline "#000000"
10885 ]
10886 LabelGraphics
10887 [
10888 text "0"
10889 outline "#000000"
10890 fill "#FFFFFF"
10891 fontSize 16
10892 fontName "Monospace"
10893 autoSizePolicy "node_width"
10894 anchor "t"
10895 borderDistance 0.0
10896 ]
10897 LabelGraphics
10898 [
10899 text "
10900 "
10901 fontSize 14
10902 fontName "Consolas"
10903 alignment "left"
10904 anchor "tl"
10905 borderDistance 6
10906 ]
10907 ]
10908
10909 node
10910 [
10911 id 5
10912 graphics
10913 [
10914 w 15.400000000000002
10915 h 26
10916 type "rectangle"
10917 fill "#FFFFFF"
10918 fill2 "#FFFFFF"
10919 outline "#000000"
10920 ]
10921 LabelGraphics
10922 [
10923 text "1"
10924 outline "#000000"
10925 fill "#FFFFFF"
10926 fontSize 16
10927 fontName "Monospace"
10928 autoSizePolicy "node_width"
10929 anchor "t"
10930 borderDistance 0.0
10931 ]
10932 LabelGraphics
10933 [
10934 text "
10935 "
10936 fontSize 14
10937 fontName "Consolas"
10938 alignment "left"
10939 anchor "tl"
10940 borderDistance 6
10941 ]
10942 ]
10943
10944 node
10945 [
10946 id 6
10947 graphics
10948 [
10949 w 33.0
10950 h 26
10951 type "rectangle"
10952 fill "#FFFFFF"
10953 fill2 "#FFFFFF"
10954 outline "#000000"
10955 ]
10956 LabelGraphics
10957 [
10958 text ""A""
10959 outline "#000000"
10960 fill "#FFFFFF"
10961 fontSize 16
10962 fontName "Monospace"
10963 autoSizePolicy "node_width"
10964 anchor "t"
10965 borderDistance 0.0
10966 ]
10967 LabelGraphics
10968 [
10969 text "
10970 "
10971 fontSize 14
10972 fontName "Consolas"
10973 alignment "left"
10974 anchor "tl"
10975 borderDistance 6
10976 ]
10977 ]
10978
10979 node
10980 [
10981 id 7
10982 graphics
10983 [
10984 w 33.0
10985 h 26
10986 type "rectangle"
10987 fill "#FFFFFF"
10988 fill2 "#FFFFFF"
10989 outline "#000000"
10990 ]
10991 LabelGraphics
10992 [
10993 text ""B""
10994 outline "#000000"
10995 fill "#FFFFFF"
10996 fontSize 16
10997 fontName "Monospace"
10998 autoSizePolicy "node_width"
10999 anchor "t"
11000 borderDistance 0.0
11001 ]
11002 LabelGraphics
11003 [
11004 text "
11005 "
11006 fontSize 14
11007 fontName "Consolas"
11008 alignment "left"
11009 anchor "tl"
11010 borderDistance 6
11011 ]
11012 ]
11013
11014 node
11015 [
11016 id 8
11017 graphics
11018 [
11019 w 94.60000000000001
11020 h 26
11021 type "rectangle"
11022 fill "#FFFFFF"
11023 fill2 "#FFFFFF"
11024 outline "#000000"
11025 ]
11026 LabelGraphics
11027 [
11028 text ""nsPrefix""
11029 outline "#000000"
11030 fill "#FFFFFF"
11031 fontSize 16
11032 fontName "Monospace"
11033 autoSizePolicy "node_width"
11034 anchor "t"
11035 borderDistance 0.0
11036 ]
11037 LabelGraphics
11038 [
11039 text "
11040 "
11041 fontSize 14
11042 fontName "Consolas"
11043 alignment "left"
11044 anchor "tl"
11045 borderDistance 6
11046 ]
11047 ]
11048
11049 node
11050 [
11051 id 9
11052 graphics
11053 [
11054 w 68.2
11055 h 26
11056 type "rectangle"
11057 fill "#FFFFFF"
11058 fill2 "#FFFFFF"
11059 outline "#000000"
11060 ]
11061 LabelGraphics
11062 [
11063 text ""nsUri""
11064 outline "#000000"
11065 fill "#FFFFFF"
11066 fontSize 16
11067 fontName "Monospace"
11068 autoSizePolicy "node_width"
11069 anchor "t"
11070 borderDistance 0.0
11071 ]
11072 LabelGraphics
11073 [
11074 text "
11075 "
11076 fontSize 14
11077 fontName "Consolas"
11078 alignment "left"
11079 anchor "tl"
11080 borderDistance 6
11081 ]
11082 ]
11083
11084 node
11085 [
11086 id 10
11087 graphics
11088 [
11089 w 121.00000000000001
11090 h 26
11091 type "rectangle"
11092 fill "#FFFFFF"
11093 fill2 "#FFFFFF"
11094 outline "#000000"
11095 ]
11096 LabelGraphics
11097 [
11098 text ""packageName""
11099 outline "#000000"
11100 fill "#FFFFFF"
11101 fontSize 16
11102 fontName "Monospace"
11103 autoSizePolicy "node_width"
11104 anchor "t"
11105 borderDistance 0.0
11106 ]
11107 LabelGraphics
11108 [
11109 text "
11110 "
11111 fontSize 14
11112 fontName "Consolas"
11113 alignment "left"
11114 anchor "tl"
11115 borderDistance 6
11116 ]
11117 ]
11118
11119 node
11120 [
11121 id 11
11122 graphics
11123 [
11124 w 269.5
11125 h 110
11126 type "rectangle"
11127 fill "#FFFFFF"
11128 fill2 "#FFFFFF"
11129 outline "#000000"
11130 ]
11131 LabelGraphics
11132 [
11133 text "null"
11134 outline "#000000"
11135 fill "#FFFFFF"
11136 fontSize 16
11137 fontName "Monospace"
11138 autoSizePolicy "node_width"
11139 anchor "t"
11140 borderDistance 0.0
11141 ]
11142 LabelGraphics
11143 [
11144 text "
11145 EClassifier class
11146 EDataType class
11147 EModelElement class
11148 ENamedElement class
11149 EModelElement class UndefinedPart
11150 ENamedElement class UndefinedPart
11151 "
11152 fontSize 14
11153 fontName "Consolas"
11154 alignment "left"
11155 anchor "tl"
11156 borderDistance 6
11157 ]
11158 ]
11159
11160 node
11161 [
11162 id 12
11163 graphics
11164 [
11165 w 269.5
11166 h 110
11167 type "rectangle"
11168 fill "#FFFFFF"
11169 fill2 "#FFFFFF"
11170 outline "#000000"
11171 ]
11172 LabelGraphics
11173 [
11174 text "null"
11175 outline "#000000"
11176 fill "#FFFFFF"
11177 fontSize 16
11178 fontName "Monospace"
11179 autoSizePolicy "node_width"
11180 anchor "t"
11181 borderDistance 0.0
11182 ]
11183 LabelGraphics
11184 [
11185 text "
11186 EModelElement class
11187 ENamedElement class
11188 EPackage class
11189 EModelElement class UndefinedPart
11190 ENamedElement class UndefinedPart
11191 EPackage class UndefinedPart
11192 "
11193 fontSize 14
11194 fontName "Consolas"
11195 alignment "left"
11196 anchor "tl"
11197 borderDistance 6
11198 ]
11199 ]
11200
11201 node
11202 [
11203 id 13
11204 graphics
11205 [
11206 w 269.5
11207 h 124
11208 type "rectangle"
11209 fill "#FFFFFF"
11210 fill2 "#FFFFFF"
11211 outline "#000000"
11212 ]
11213 LabelGraphics
11214 [
11215 text "null"
11216 outline "#000000"
11217 fill "#FFFFFF"
11218 fontSize 16
11219 fontName "Monospace"
11220 autoSizePolicy "node_width"
11221 anchor "t"
11222 borderDistance 0.0
11223 ]
11224 LabelGraphics
11225 [
11226 text "
11227 EClassifier class
11228 EDataType class
11229 EEnum class
11230 EModelElement class
11231 ENamedElement class
11232 EModelElement class UndefinedPart
11233 ENamedElement class UndefinedPart
11234 "
11235 fontSize 14
11236 fontName "Consolas"
11237 alignment "left"
11238 anchor "tl"
11239 borderDistance 6
11240 ]
11241 ]
11242
11243 node
11244 [
11245 id 14
11246 graphics
11247 [
11248 w 269.5
11249 h 96
11250 type "rectangle"
11251 fill "#FFFFFF"
11252 fill2 "#FFFFFF"
11253 outline "#000000"
11254 ]
11255 LabelGraphics
11256 [
11257 text "null"
11258 outline "#000000"
11259 fill "#FFFFFF"
11260 fontSize 16
11261 fontName "Monospace"
11262 autoSizePolicy "node_width"
11263 anchor "t"
11264 borderDistance 0.0
11265 ]
11266 LabelGraphics
11267 [
11268 text "
11269 EModelElement class
11270 ENamedElement class
11271 ETypeParameter class
11272 EModelElement class UndefinedPart
11273 ENamedElement class UndefinedPart
11274 "
11275 fontSize 14
11276 fontName "Consolas"
11277 alignment "left"
11278 anchor "tl"
11279 borderDistance 6
11280 ]
11281 ]
11282
11283 node
11284 [
11285 id 15
11286 graphics
11287 [
11288 w 269.5
11289 h 68
11290 type "rectangle"
11291 fill "#FFFFFF"
11292 fill2 "#FFFFFF"
11293 outline "#000000"
11294 ]
11295 LabelGraphics
11296 [
11297 text "null"
11298 outline "#000000"
11299 fill "#FFFFFF"
11300 fontSize 16
11301 fontName "Monospace"
11302 autoSizePolicy "node_width"
11303 anchor "t"
11304 borderDistance 0.0
11305 ]
11306 LabelGraphics
11307 [
11308 text "
11309 EAnnotation class
11310 EModelElement class
11311 EModelElement class UndefinedPart
11312 "
11313 fontSize 14
11314 fontName "Consolas"
11315 alignment "left"
11316 anchor "tl"
11317 borderDistance 6
11318 ]
11319 ]
11320
11321 node
11322 [
11323 id 16
11324 graphics
11325 [
11326 w 112.2
11327 h 26
11328 type "rectangle"
11329 fill "#FFFFFF"
11330 fill2 "#FFFFFF"
11331 outline "#000000"
11332 ]
11333 LabelGraphics
11334 [
11335 text "New Integers"
11336 outline "#000000"
11337 fill "#FFFFFF"
11338 fontSize 16
11339 fontName "Monospace"
11340 autoSizePolicy "node_width"
11341 anchor "t"
11342 borderDistance 0.0
11343 ]
11344 LabelGraphics
11345 [
11346 text "
11347 "
11348 fontSize 14
11349 fontName "Consolas"
11350 alignment "left"
11351 anchor "tl"
11352 borderDistance 6
11353 ]
11354 ]
11355
11356 node
11357 [
11358 id 17
11359 graphics
11360 [
11361 w 85.80000000000001
11362 h 26
11363 type "rectangle"
11364 fill "#FFFFFF"
11365 fill2 "#FFFFFF"
11366 outline "#000000"
11367 ]
11368 LabelGraphics
11369 [
11370 text "New Reals"
11371 outline "#000000"
11372 fill "#FFFFFF"
11373 fontSize 16
11374 fontName "Monospace"
11375 autoSizePolicy "node_width"
11376 anchor "t"
11377 borderDistance 0.0
11378 ]
11379 LabelGraphics
11380 [
11381 text "
11382 "
11383 fontSize 14
11384 fontName "Consolas"
11385 alignment "left"
11386 anchor "tl"
11387 borderDistance 6
11388 ]
11389 ]
11390
11391 node
11392 [
11393 id 18
11394 graphics
11395 [
11396 w 103.4
11397 h 26
11398 type "rectangle"
11399 fill "#FFFFFF"
11400 fill2 "#FFFFFF"
11401 outline "#000000"
11402 ]
11403 LabelGraphics
11404 [
11405 text "New Strings"
11406 outline "#000000"
11407 fill "#FFFFFF"
11408 fontSize 16
11409 fontName "Monospace"
11410 autoSizePolicy "node_width"
11411 anchor "t"
11412 borderDistance 0.0
11413 ]
11414 LabelGraphics
11415 [
11416 text "
11417 "
11418 fontSize 14
11419 fontName "Consolas"
11420 alignment "left"
11421 anchor "tl"
11422 borderDistance 6
11423 ]
11424 ]
11425
11426 node
11427 [
11428 id 19
11429 graphics
11430 [
11431 w 103.4
11432 h 26
11433 type "rectangle"
11434 fill "#FFFFFF"
11435 fill2 "#FFFFFF"
11436 outline "#000000"
11437 ]
11438 LabelGraphics
11439 [
11440 text "New Objects"
11441 outline "#000000"
11442 fill "#FFFFFF"
11443 fontSize 16
11444 fontName "Monospace"
11445 autoSizePolicy "node_width"
11446 anchor "t"
11447 borderDistance 0.0
11448 ]
11449 LabelGraphics
11450 [
11451 text "
11452 "
11453 fontSize 14
11454 fontName "Consolas"
11455 alignment "left"
11456 anchor "tl"
11457 borderDistance 6
11458 ]
11459 ]
11460 edge
11461 [
11462 source 15
11463 target 0
11464 graphics
11465 [
11466 fill "#000000"
11467 targetArrow "standard"
11468 ]
11469 LabelGraphics
11470 [
11471 text "eModelElement reference EAnnotation"
11472 fontSize 14
11473 fontName "Consolas"
11474 configuration "AutoFlippingLabel"
11475 model "six_pos"
11476 position "thead"
11477 ]
11478 ]
11479 edge
11480 [
11481 source 11
11482 target 0
11483 graphics
11484 [
11485 fill "#000000"
11486 targetArrow "standard"
11487 ]
11488 LabelGraphics
11489 [
11490 text "ePackage reference EClassifier"
11491 fontSize 14
11492 fontName "Consolas"
11493 configuration "AutoFlippingLabel"
11494 model "six_pos"
11495 position "thead"
11496 ]
11497 ]
11498 edge
11499 [
11500 source 13
11501 target 0
11502 graphics
11503 [
11504 fill "#000000"
11505 targetArrow "standard"
11506 ]
11507 LabelGraphics
11508 [
11509 text "ePackage reference EClassifier"
11510 fontSize 14
11511 fontName "Consolas"
11512 configuration "AutoFlippingLabel"
11513 model "six_pos"
11514 position "thead"
11515 ]
11516 ]
11517 edge
11518 [
11519 source 13
11520 target 14
11521 graphics
11522 [
11523 fill "#000000"
11524 width 3
11525 targetArrow "standard"
11526 ]
11527 LabelGraphics
11528 [
11529 text "eTypeParameters reference EClassifier"
11530 fontSize 14
11531 fontName "Consolas"
11532 configuration "AutoFlippingLabel"
11533 model "six_pos"
11534 position "thead"
11535 ]
11536 ]
11537 edge
11538 [
11539 source 0
11540 target 15
11541 graphics
11542 [
11543 fill "#000000"
11544 width 3
11545 targetArrow "standard"
11546 ]
11547 LabelGraphics
11548 [
11549 text "eAnnotations reference EModelElement"
11550 fontSize 14
11551 fontName "Consolas"
11552 configuration "AutoFlippingLabel"
11553 model "six_pos"
11554 position "thead"
11555 ]
11556 ]
11557 edge
11558 [
11559 source 0
11560 target 11
11561 graphics
11562 [
11563 fill "#000000"
11564 width 3
11565 targetArrow "standard"
11566 ]
11567 LabelGraphics
11568 [
11569 text "eClassifiers reference EPackage"
11570 fontSize 14
11571 fontName "Consolas"
11572 configuration "AutoFlippingLabel"
11573 model "six_pos"
11574 position "thead"
11575 ]
11576 ]
11577 edge
11578 [
11579 source 0
11580 target 13
11581 graphics
11582 [
11583 fill "#000000"
11584 width 3
11585 targetArrow "standard"
11586 ]
11587 LabelGraphics
11588 [
11589 text "eClassifiers reference EPackage"
11590 fontSize 14
11591 fontName "Consolas"
11592 configuration "AutoFlippingLabel"
11593 model "six_pos"
11594 position "thead"
11595 ]
11596 ]
11597 edge
11598 [
11599 source 0
11600 target 12
11601 graphics
11602 [
11603 fill "#000000"
11604 width 3
11605 targetArrow "standard"
11606 ]
11607 LabelGraphics
11608 [
11609 text "eSubpackages reference EPackage"
11610 fontSize 14
11611 fontName "Consolas"
11612 configuration "AutoFlippingLabel"
11613 model "six_pos"
11614 position "thead"
11615 ]
11616 ]
11617 edge
11618 [
11619 source 12
11620 target 0
11621 graphics
11622 [
11623 fill "#000000"
11624 targetArrow "standard"
11625 ]
11626 LabelGraphics
11627 [
11628 text "eSuperPackage reference EPackage"
11629 fontSize 14
11630 fontName "Consolas"
11631 configuration "AutoFlippingLabel"
11632 model "six_pos"
11633 position "thead"
11634 ]
11635 ]
11636 edge
11637 [
11638 source 11
11639 target 6
11640 graphics
11641 [
11642 fill "#000000"
11643 targetArrow "standard"
11644 ]
11645 LabelGraphics
11646 [
11647 text "instanceClassName attribute EClassifier"
11648 fontSize 14
11649 fontName "Consolas"
11650 configuration "AutoFlippingLabel"
11651 model "six_pos"
11652 position "thead"
11653 ]
11654 ]
11655 edge
11656 [
11657 source 11
11658 target 1
11659 graphics
11660 [
11661 fill "#000000"
11662 targetArrow "standard"
11663 ]
11664 LabelGraphics
11665 [
11666 text "serializable attribute EDataType"
11667 fontSize 14
11668 fontName "Consolas"
11669 configuration "AutoFlippingLabel"
11670 model "six_pos"
11671 position "thead"
11672 ]
11673 ]
11674 edge
11675 [
11676 source 0
11677 target 10
11678 graphics
11679 [
11680 fill "#000000"
11681 targetArrow "standard"
11682 ]
11683 LabelGraphics
11684 [
11685 text "name attribute ENamedElement"
11686 fontSize 14
11687 fontName "Consolas"
11688 configuration "AutoFlippingLabel"
11689 model "six_pos"
11690 position "thead"
11691 ]
11692 ]
11693 edge
11694 [
11695 source 12
11696 target 6
11697 graphics
11698 [
11699 fill "#000000"
11700 targetArrow "standard"
11701 ]
11702 LabelGraphics
11703 [
11704 text "name attribute ENamedElement"
11705 fontSize 14
11706 fontName "Consolas"
11707 configuration "AutoFlippingLabel"
11708 model "six_pos"
11709 position "thead"
11710 ]
11711 ]
11712 edge
11713 [
11714 source 0
11715 target 9
11716 graphics
11717 [
11718 fill "#000000"
11719 targetArrow "standard"
11720 ]
11721 LabelGraphics
11722 [
11723 text "nsURI attribute EPackage"
11724 fontSize 14
11725 fontName "Consolas"
11726 configuration "AutoFlippingLabel"
11727 model "six_pos"
11728 position "thead"
11729 ]
11730 ]
11731 edge
11732 [
11733 source 12
11734 target 10
11735 graphics
11736 [
11737 fill "#000000"
11738 targetArrow "standard"
11739 ]
11740 LabelGraphics
11741 [
11742 text "nsURI attribute EPackage"
11743 fontSize 14
11744 fontName "Consolas"
11745 configuration "AutoFlippingLabel"
11746 model "six_pos"
11747 position "thead"
11748 ]
11749 ]
11750 edge
11751 [
11752 source 0
11753 target 8
11754 graphics
11755 [
11756 fill "#000000"
11757 targetArrow "standard"
11758 ]
11759 LabelGraphics
11760 [
11761 text "nsPrefix attribute EPackage"
11762 fontSize 14
11763 fontName "Consolas"
11764 configuration "AutoFlippingLabel"
11765 model "six_pos"
11766 position "thead"
11767 ]
11768 ]
11769 edge
11770 [
11771 source 12
11772 target 8
11773 graphics
11774 [
11775 fill "#000000"
11776 targetArrow "standard"
11777 ]
11778 LabelGraphics
11779 [
11780 text "nsPrefix attribute EPackage"
11781 fontSize 14
11782 fontName "Consolas"
11783 configuration "AutoFlippingLabel"
11784 model "six_pos"
11785 position "thead"
11786 ]
11787 ]
11788]
11789graph
11790[
11791 node
11792 [
11793 id 0
11794 graphics
11795 [
11796 w 254.10000000000002
11797 h 110
11798 type "rectangle"
11799 fill "#FFFFFF"
11800 fill2 "#FFFFFF"
11801 outline "#000000"
11802 ]
11803 LabelGraphics
11804 [
11805 text "o 1"
11806 outline "#000000"
11807 fill "#FFFFFF"
11808 fontSize 16
11809 fontName "Monospace"
11810 autoSizePolicy "node_width"
11811 anchor "t"
11812 borderDistance 0.0
11813 ]
11814 LabelGraphics
11815 [
11816 text "
11817 EModelElement class DefinedPart
11818 ENamedElement class DefinedPart
11819 EPackage class DefinedPart
11820 EModelElement class
11821 ENamedElement class
11822 EPackage class
11823 "
11824 fontSize 14
11825 fontName "Consolas"
11826 alignment "left"
11827 anchor "tl"
11828 borderDistance 6
11829 ]
11830 ]
11831
11832 node
11833 [
11834 id 1
11835 graphics
11836 [
11837 w 41.800000000000004
11838 h 26
11839 type "rectangle"
11840 fill "#FFFFFF"
11841 fill2 "#FFFFFF"
11842 outline "#000000"
11843 ]
11844 LabelGraphics
11845 [
11846 text "true"
11847 outline "#000000"
11848 fill "#FFFFFF"
11849 fontSize 16
11850 fontName "Monospace"
11851 autoSizePolicy "node_width"
11852 anchor "t"
11853 borderDistance 0.0
11854 ]
11855 LabelGraphics
11856 [
11857 text "
11858 "
11859 fontSize 14
11860 fontName "Consolas"
11861 alignment "left"
11862 anchor "tl"
11863 borderDistance 6
11864 ]
11865 ]
11866
11867 node
11868 [
11869 id 2
11870 graphics
11871 [
11872 w 50.6
11873 h 26
11874 type "rectangle"
11875 fill "#FFFFFF"
11876 fill2 "#FFFFFF"
11877 outline "#000000"
11878 ]
11879 LabelGraphics
11880 [
11881 text "false"
11882 outline "#000000"
11883 fill "#FFFFFF"
11884 fontSize 16
11885 fontName "Monospace"
11886 autoSizePolicy "node_width"
11887 anchor "t"
11888 borderDistance 0.0
11889 ]
11890 LabelGraphics
11891 [
11892 text "
11893 "
11894 fontSize 14
11895 fontName "Consolas"
11896 alignment "left"
11897 anchor "tl"
11898 borderDistance 6
11899 ]
11900 ]
11901
11902 node
11903 [
11904 id 3
11905 graphics
11906 [
11907 w 24.200000000000003
11908 h 26
11909 type "rectangle"
11910 fill "#FFFFFF"
11911 fill2 "#FFFFFF"
11912 outline "#000000"
11913 ]
11914 LabelGraphics
11915 [
11916 text "-1"
11917 outline "#000000"
11918 fill "#FFFFFF"
11919 fontSize 16
11920 fontName "Monospace"
11921 autoSizePolicy "node_width"
11922 anchor "t"
11923 borderDistance 0.0
11924 ]
11925 LabelGraphics
11926 [
11927 text "
11928 "
11929 fontSize 14
11930 fontName "Consolas"
11931 alignment "left"
11932 anchor "tl"
11933 borderDistance 6
11934 ]
11935 ]
11936
11937 node
11938 [
11939 id 4
11940 graphics
11941 [
11942 w 15.400000000000002
11943 h 26
11944 type "rectangle"
11945 fill "#FFFFFF"
11946 fill2 "#FFFFFF"
11947 outline "#000000"
11948 ]
11949 LabelGraphics
11950 [
11951 text "0"
11952 outline "#000000"
11953 fill "#FFFFFF"
11954 fontSize 16
11955 fontName "Monospace"
11956 autoSizePolicy "node_width"
11957 anchor "t"
11958 borderDistance 0.0
11959 ]
11960 LabelGraphics
11961 [
11962 text "
11963 "
11964 fontSize 14
11965 fontName "Consolas"
11966 alignment "left"
11967 anchor "tl"
11968 borderDistance 6
11969 ]
11970 ]
11971
11972 node
11973 [
11974 id 5
11975 graphics
11976 [
11977 w 15.400000000000002
11978 h 26
11979 type "rectangle"
11980 fill "#FFFFFF"
11981 fill2 "#FFFFFF"
11982 outline "#000000"
11983 ]
11984 LabelGraphics
11985 [
11986 text "1"
11987 outline "#000000"
11988 fill "#FFFFFF"
11989 fontSize 16
11990 fontName "Monospace"
11991 autoSizePolicy "node_width"
11992 anchor "t"
11993 borderDistance 0.0
11994 ]
11995 LabelGraphics
11996 [
11997 text "
11998 "
11999 fontSize 14
12000 fontName "Consolas"
12001 alignment "left"
12002 anchor "tl"
12003 borderDistance 6
12004 ]
12005 ]
12006
12007 node
12008 [
12009 id 6
12010 graphics
12011 [
12012 w 33.0
12013 h 26
12014 type "rectangle"
12015 fill "#FFFFFF"
12016 fill2 "#FFFFFF"
12017 outline "#000000"
12018 ]
12019 LabelGraphics
12020 [
12021 text ""A""
12022 outline "#000000"
12023 fill "#FFFFFF"
12024 fontSize 16
12025 fontName "Monospace"
12026 autoSizePolicy "node_width"
12027 anchor "t"
12028 borderDistance 0.0
12029 ]
12030 LabelGraphics
12031 [
12032 text "
12033 "
12034 fontSize 14
12035 fontName "Consolas"
12036 alignment "left"
12037 anchor "tl"
12038 borderDistance 6
12039 ]
12040 ]
12041
12042 node
12043 [
12044 id 7
12045 graphics
12046 [
12047 w 33.0
12048 h 26
12049 type "rectangle"
12050 fill "#FFFFFF"
12051 fill2 "#FFFFFF"
12052 outline "#000000"
12053 ]
12054 LabelGraphics
12055 [
12056 text ""B""
12057 outline "#000000"
12058 fill "#FFFFFF"
12059 fontSize 16
12060 fontName "Monospace"
12061 autoSizePolicy "node_width"
12062 anchor "t"
12063 borderDistance 0.0
12064 ]
12065 LabelGraphics
12066 [
12067 text "
12068 "
12069 fontSize 14
12070 fontName "Consolas"
12071 alignment "left"
12072 anchor "tl"
12073 borderDistance 6
12074 ]
12075 ]
12076
12077 node
12078 [
12079 id 8
12080 graphics
12081 [
12082 w 94.60000000000001
12083 h 26
12084 type "rectangle"
12085 fill "#FFFFFF"
12086 fill2 "#FFFFFF"
12087 outline "#000000"
12088 ]
12089 LabelGraphics
12090 [
12091 text ""nsPrefix""
12092 outline "#000000"
12093 fill "#FFFFFF"
12094 fontSize 16
12095 fontName "Monospace"
12096 autoSizePolicy "node_width"
12097 anchor "t"
12098 borderDistance 0.0
12099 ]
12100 LabelGraphics
12101 [
12102 text "
12103 "
12104 fontSize 14
12105 fontName "Consolas"
12106 alignment "left"
12107 anchor "tl"
12108 borderDistance 6
12109 ]
12110 ]
12111
12112 node
12113 [
12114 id 9
12115 graphics
12116 [
12117 w 68.2
12118 h 26
12119 type "rectangle"
12120 fill "#FFFFFF"
12121 fill2 "#FFFFFF"
12122 outline "#000000"
12123 ]
12124 LabelGraphics
12125 [
12126 text ""nsUri""
12127 outline "#000000"
12128 fill "#FFFFFF"
12129 fontSize 16
12130 fontName "Monospace"
12131 autoSizePolicy "node_width"
12132 anchor "t"
12133 borderDistance 0.0
12134 ]
12135 LabelGraphics
12136 [
12137 text "
12138 "
12139 fontSize 14
12140 fontName "Consolas"
12141 alignment "left"
12142 anchor "tl"
12143 borderDistance 6
12144 ]
12145 ]
12146
12147 node
12148 [
12149 id 10
12150 graphics
12151 [
12152 w 121.00000000000001
12153 h 26
12154 type "rectangle"
12155 fill "#FFFFFF"
12156 fill2 "#FFFFFF"
12157 outline "#000000"
12158 ]
12159 LabelGraphics
12160 [
12161 text ""packageName""
12162 outline "#000000"
12163 fill "#FFFFFF"
12164 fontSize 16
12165 fontName "Monospace"
12166 autoSizePolicy "node_width"
12167 anchor "t"
12168 borderDistance 0.0
12169 ]
12170 LabelGraphics
12171 [
12172 text "
12173 "
12174 fontSize 14
12175 fontName "Consolas"
12176 alignment "left"
12177 anchor "tl"
12178 borderDistance 6
12179 ]
12180 ]
12181
12182 node
12183 [
12184 id 11
12185 graphics
12186 [
12187 w 269.5
12188 h 110
12189 type "rectangle"
12190 fill "#FFFFFF"
12191 fill2 "#FFFFFF"
12192 outline "#000000"
12193 ]
12194 LabelGraphics
12195 [
12196 text "null"
12197 outline "#000000"
12198 fill "#FFFFFF"
12199 fontSize 16
12200 fontName "Monospace"
12201 autoSizePolicy "node_width"
12202 anchor "t"
12203 borderDistance 0.0
12204 ]
12205 LabelGraphics
12206 [
12207 text "
12208 EClass class
12209 EClassifier class
12210 EModelElement class
12211 ENamedElement class
12212 EModelElement class UndefinedPart
12213 ENamedElement class UndefinedPart
12214 "
12215 fontSize 14
12216 fontName "Consolas"
12217 alignment "left"
12218 anchor "tl"
12219 borderDistance 6
12220 ]
12221 ]
12222
12223 node
12224 [
12225 id 12
12226 graphics
12227 [
12228 w 269.5
12229 h 110
12230 type "rectangle"
12231 fill "#FFFFFF"
12232 fill2 "#FFFFFF"
12233 outline "#000000"
12234 ]
12235 LabelGraphics
12236 [
12237 text "null"
12238 outline "#000000"
12239 fill "#FFFFFF"
12240 fontSize 16
12241 fontName "Monospace"
12242 autoSizePolicy "node_width"
12243 anchor "t"
12244 borderDistance 0.0
12245 ]
12246 LabelGraphics
12247 [
12248 text "
12249 EModelElement class
12250 ENamedElement class
12251 EPackage class
12252 EModelElement class UndefinedPart
12253 ENamedElement class UndefinedPart
12254 EPackage class UndefinedPart
12255 "
12256 fontSize 14
12257 fontName "Consolas"
12258 alignment "left"
12259 anchor "tl"
12260 borderDistance 6
12261 ]
12262 ]
12263
12264 node
12265 [
12266 id 13
12267 graphics
12268 [
12269 w 269.5
12270 h 110
12271 type "rectangle"
12272 fill "#FFFFFF"
12273 fill2 "#FFFFFF"
12274 outline "#000000"
12275 ]
12276 LabelGraphics
12277 [
12278 text "null"
12279 outline "#000000"
12280 fill "#FFFFFF"
12281 fontSize 16
12282 fontName "Monospace"
12283 autoSizePolicy "node_width"
12284 anchor "t"
12285 borderDistance 0.0
12286 ]
12287 LabelGraphics
12288 [
12289 text "
12290 EModelElement class
12291 ENamedElement class
12292 EPackage class
12293 EModelElement class UndefinedPart
12294 ENamedElement class UndefinedPart
12295 EPackage class UndefinedPart
12296 "
12297 fontSize 14
12298 fontName "Consolas"
12299 alignment "left"
12300 anchor "tl"
12301 borderDistance 6
12302 ]
12303 ]
12304
12305 node
12306 [
12307 id 14
12308 graphics
12309 [
12310 w 269.5
12311 h 96
12312 type "rectangle"
12313 fill "#FFFFFF"
12314 fill2 "#FFFFFF"
12315 outline "#000000"
12316 ]
12317 LabelGraphics
12318 [
12319 text "null"
12320 outline "#000000"
12321 fill "#FFFFFF"
12322 fontSize 16
12323 fontName "Monospace"
12324 autoSizePolicy "node_width"
12325 anchor "t"
12326 borderDistance 0.0
12327 ]
12328 LabelGraphics
12329 [
12330 text "
12331 EModelElement class
12332 ENamedElement class
12333 ETypeParameter class
12334 EModelElement class UndefinedPart
12335 ENamedElement class UndefinedPart
12336 "
12337 fontSize 14
12338 fontName "Consolas"
12339 alignment "left"
12340 anchor "tl"
12341 borderDistance 6
12342 ]
12343 ]
12344
12345 node
12346 [
12347 id 15
12348 graphics
12349 [
12350 w 269.5
12351 h 110
12352 type "rectangle"
12353 fill "#FFFFFF"
12354 fill2 "#FFFFFF"
12355 outline "#000000"
12356 ]
12357 LabelGraphics
12358 [
12359 text "null"
12360 outline "#000000"
12361 fill "#FFFFFF"
12362 fontSize 16
12363 fontName "Monospace"
12364 autoSizePolicy "node_width"
12365 anchor "t"
12366 borderDistance 0.0
12367 ]
12368 LabelGraphics
12369 [
12370 text "
12371 EClass class
12372 EClassifier class
12373 EModelElement class
12374 ENamedElement class
12375 EModelElement class UndefinedPart
12376 ENamedElement class UndefinedPart
12377 "
12378 fontSize 14
12379 fontName "Consolas"
12380 alignment "left"
12381 anchor "tl"
12382 borderDistance 6
12383 ]
12384 ]
12385
12386 node
12387 [
12388 id 16
12389 graphics
12390 [
12391 w 112.2
12392 h 26
12393 type "rectangle"
12394 fill "#FFFFFF"
12395 fill2 "#FFFFFF"
12396 outline "#000000"
12397 ]
12398 LabelGraphics
12399 [
12400 text "New Integers"
12401 outline "#000000"
12402 fill "#FFFFFF"
12403 fontSize 16
12404 fontName "Monospace"
12405 autoSizePolicy "node_width"
12406 anchor "t"
12407 borderDistance 0.0
12408 ]
12409 LabelGraphics
12410 [
12411 text "
12412 "
12413 fontSize 14
12414 fontName "Consolas"
12415 alignment "left"
12416 anchor "tl"
12417 borderDistance 6
12418 ]
12419 ]
12420
12421 node
12422 [
12423 id 17
12424 graphics
12425 [
12426 w 85.80000000000001
12427 h 26
12428 type "rectangle"
12429 fill "#FFFFFF"
12430 fill2 "#FFFFFF"
12431 outline "#000000"
12432 ]
12433 LabelGraphics
12434 [
12435 text "New Reals"
12436 outline "#000000"
12437 fill "#FFFFFF"
12438 fontSize 16
12439 fontName "Monospace"
12440 autoSizePolicy "node_width"
12441 anchor "t"
12442 borderDistance 0.0
12443 ]
12444 LabelGraphics
12445 [
12446 text "
12447 "
12448 fontSize 14
12449 fontName "Consolas"
12450 alignment "left"
12451 anchor "tl"
12452 borderDistance 6
12453 ]
12454 ]
12455
12456 node
12457 [
12458 id 18
12459 graphics
12460 [
12461 w 103.4
12462 h 26
12463 type "rectangle"
12464 fill "#FFFFFF"
12465 fill2 "#FFFFFF"
12466 outline "#000000"
12467 ]
12468 LabelGraphics
12469 [
12470 text "New Strings"
12471 outline "#000000"
12472 fill "#FFFFFF"
12473 fontSize 16
12474 fontName "Monospace"
12475 autoSizePolicy "node_width"
12476 anchor "t"
12477 borderDistance 0.0
12478 ]
12479 LabelGraphics
12480 [
12481 text "
12482 "
12483 fontSize 14
12484 fontName "Consolas"
12485 alignment "left"
12486 anchor "tl"
12487 borderDistance 6
12488 ]
12489 ]
12490
12491 node
12492 [
12493 id 19
12494 graphics
12495 [
12496 w 103.4
12497 h 26
12498 type "rectangle"
12499 fill "#FFFFFF"
12500 fill2 "#FFFFFF"
12501 outline "#000000"
12502 ]
12503 LabelGraphics
12504 [
12505 text "New Objects"
12506 outline "#000000"
12507 fill "#FFFFFF"
12508 fontSize 16
12509 fontName "Monospace"
12510 autoSizePolicy "node_width"
12511 anchor "t"
12512 borderDistance 0.0
12513 ]
12514 LabelGraphics
12515 [
12516 text "
12517 "
12518 fontSize 14
12519 fontName "Consolas"
12520 alignment "left"
12521 anchor "tl"
12522 borderDistance 6
12523 ]
12524 ]
12525 edge
12526 [
12527 source 11
12528 target 0
12529 graphics
12530 [
12531 fill "#000000"
12532 targetArrow "standard"
12533 ]
12534 LabelGraphics
12535 [
12536 text "ePackage reference EClassifier"
12537 fontSize 14
12538 fontName "Consolas"
12539 configuration "AutoFlippingLabel"
12540 model "six_pos"
12541 position "thead"
12542 ]
12543 ]
12544 edge
12545 [
12546 source 15
12547 target 13
12548 graphics
12549 [
12550 fill "#000000"
12551 targetArrow "standard"
12552 ]
12553 LabelGraphics
12554 [
12555 text "ePackage reference EClassifier"
12556 fontSize 14
12557 fontName "Consolas"
12558 configuration "AutoFlippingLabel"
12559 model "six_pos"
12560 position "thead"
12561 ]
12562 ]
12563 edge
12564 [
12565 source 11
12566 target 14
12567 graphics
12568 [
12569 fill "#000000"
12570 width 3
12571 targetArrow "standard"
12572 ]
12573 LabelGraphics
12574 [
12575 text "eTypeParameters reference EClassifier"
12576 fontSize 14
12577 fontName "Consolas"
12578 configuration "AutoFlippingLabel"
12579 model "six_pos"
12580 position "thead"
12581 ]
12582 ]
12583 edge
12584 [
12585 source 0
12586 target 11
12587 graphics
12588 [
12589 fill "#000000"
12590 width 3
12591 targetArrow "standard"
12592 ]
12593 LabelGraphics
12594 [
12595 text "eClassifiers reference EPackage"
12596 fontSize 14
12597 fontName "Consolas"
12598 configuration "AutoFlippingLabel"
12599 model "six_pos"
12600 position "thead"
12601 ]
12602 ]
12603 edge
12604 [
12605 source 13
12606 target 15
12607 graphics
12608 [
12609 fill "#000000"
12610 width 3
12611 targetArrow "standard"
12612 ]
12613 LabelGraphics
12614 [
12615 text "eClassifiers reference EPackage"
12616 fontSize 14
12617 fontName "Consolas"
12618 configuration "AutoFlippingLabel"
12619 model "six_pos"
12620 position "thead"
12621 ]
12622 ]
12623 edge
12624 [
12625 source 0
12626 target 12
12627 graphics
12628 [
12629 fill "#000000"
12630 width 3
12631 targetArrow "standard"
12632 ]
12633 LabelGraphics
12634 [
12635 text "eSubpackages reference EPackage"
12636 fontSize 14
12637 fontName "Consolas"
12638 configuration "AutoFlippingLabel"
12639 model "six_pos"
12640 position "thead"
12641 ]
12642 ]
12643 edge
12644 [
12645 source 12
12646 target 13
12647 graphics
12648 [
12649 fill "#000000"
12650 width 3
12651 targetArrow "standard"
12652 ]
12653 LabelGraphics
12654 [
12655 text "eSubpackages reference EPackage"
12656 fontSize 14
12657 fontName "Consolas"
12658 configuration "AutoFlippingLabel"
12659 model "six_pos"
12660 position "thead"
12661 ]
12662 ]
12663 edge
12664 [
12665 source 12
12666 target 0
12667 graphics
12668 [
12669 fill "#000000"
12670 targetArrow "standard"
12671 ]
12672 LabelGraphics
12673 [
12674 text "eSuperPackage reference EPackage"
12675 fontSize 14
12676 fontName "Consolas"
12677 configuration "AutoFlippingLabel"
12678 model "six_pos"
12679 position "thead"
12680 ]
12681 ]
12682 edge
12683 [
12684 source 13
12685 target 12
12686 graphics
12687 [
12688 fill "#000000"
12689 targetArrow "standard"
12690 ]
12691 LabelGraphics
12692 [
12693 text "eSuperPackage reference EPackage"
12694 fontSize 14
12695 fontName "Consolas"
12696 configuration "AutoFlippingLabel"
12697 model "six_pos"
12698 position "thead"
12699 ]
12700 ]
12701 edge
12702 [
12703 source 11
12704 target 1
12705 graphics
12706 [
12707 fill "#000000"
12708 targetArrow "standard"
12709 ]
12710 LabelGraphics
12711 [
12712 text "abstract attribute EClass"
12713 fontSize 14
12714 fontName "Consolas"
12715 configuration "AutoFlippingLabel"
12716 model "six_pos"
12717 position "thead"
12718 ]
12719 ]
12720 edge
12721 [
12722 source 11
12723 target 2
12724 graphics
12725 [
12726 fill "#000000"
12727 targetArrow "standard"
12728 ]
12729 LabelGraphics
12730 [
12731 text "interface attribute EClass"
12732 fontSize 14
12733 fontName "Consolas"
12734 configuration "AutoFlippingLabel"
12735 model "six_pos"
12736 position "thead"
12737 ]
12738 ]
12739 edge
12740 [
12741 source 11
12742 target 8
12743 graphics
12744 [
12745 fill "#000000"
12746 targetArrow "standard"
12747 ]
12748 LabelGraphics
12749 [
12750 text "instanceTypeName attribute EClassifier"
12751 fontSize 14
12752 fontName "Consolas"
12753 configuration "AutoFlippingLabel"
12754 model "six_pos"
12755 position "thead"
12756 ]
12757 ]
12758 edge
12759 [
12760 source 0
12761 target 10
12762 graphics
12763 [
12764 fill "#000000"
12765 targetArrow "standard"
12766 ]
12767 LabelGraphics
12768 [
12769 text "name attribute ENamedElement"
12770 fontSize 14
12771 fontName "Consolas"
12772 configuration "AutoFlippingLabel"
12773 model "six_pos"
12774 position "thead"
12775 ]
12776 ]
12777 edge
12778 [
12779 source 13
12780 target 8
12781 graphics
12782 [
12783 fill "#000000"
12784 targetArrow "standard"
12785 ]
12786 LabelGraphics
12787 [
12788 text "name attribute ENamedElement"
12789 fontSize 14
12790 fontName "Consolas"
12791 configuration "AutoFlippingLabel"
12792 model "six_pos"
12793 position "thead"
12794 ]
12795 ]
12796 edge
12797 [
12798 source 0
12799 target 9
12800 graphics
12801 [
12802 fill "#000000"
12803 targetArrow "standard"
12804 ]
12805 LabelGraphics
12806 [
12807 text "nsURI attribute EPackage"
12808 fontSize 14
12809 fontName "Consolas"
12810 configuration "AutoFlippingLabel"
12811 model "six_pos"
12812 position "thead"
12813 ]
12814 ]
12815 edge
12816 [
12817 source 13
12818 target 7
12819 graphics
12820 [
12821 fill "#000000"
12822 targetArrow "standard"
12823 ]
12824 LabelGraphics
12825 [
12826 text "nsURI attribute EPackage"
12827 fontSize 14
12828 fontName "Consolas"
12829 configuration "AutoFlippingLabel"
12830 model "six_pos"
12831 position "thead"
12832 ]
12833 ]
12834 edge
12835 [
12836 source 12
12837 target 7
12838 graphics
12839 [
12840 fill "#000000"
12841 targetArrow "standard"
12842 ]
12843 LabelGraphics
12844 [
12845 text "nsURI attribute EPackage"
12846 fontSize 14
12847 fontName "Consolas"
12848 configuration "AutoFlippingLabel"
12849 model "six_pos"
12850 position "thead"
12851 ]
12852 ]
12853 edge
12854 [
12855 source 0
12856 target 8
12857 graphics
12858 [
12859 fill "#000000"
12860 targetArrow "standard"
12861 ]
12862 LabelGraphics
12863 [
12864 text "nsPrefix attribute EPackage"
12865 fontSize 14
12866 fontName "Consolas"
12867 configuration "AutoFlippingLabel"
12868 model "six_pos"
12869 position "thead"
12870 ]
12871 ]
12872]
12873graph
12874[
12875 node
12876 [
12877 id 0
12878 graphics
12879 [
12880 w 226.60000000000002
12881 h 40
12882 type "rectangle"
12883 fill "#FFFFFF"
12884 fill2 "#FFFFFF"
12885 outline "#000000"
12886 ]
12887 LabelGraphics
12888 [
12889 text "Root literal FunctionType"
12890 outline "#000000"
12891 fill "#FFFFFF"
12892 fontSize 16
12893 fontName "Monospace"
12894 autoSizePolicy "node_width"
12895 anchor "t"
12896 borderDistance 0.0
12897 ]
12898 LabelGraphics
12899 [
12900 text "
12901 FunctionType enum
12902 "
12903 fontSize 14
12904 fontName "Consolas"
12905 alignment "left"
12906 anchor "tl"
12907 borderDistance 6
12908 ]
12909 ]
12910
12911 node
12912 [
12913 id 1
12914 graphics
12915 [
12916 w 297.0
12917 h 40
12918 type "rectangle"
12919 fill "#FFFFFF"
12920 fill2 "#FFFFFF"
12921 outline "#000000"
12922 ]
12923 LabelGraphics
12924 [
12925 text "Intermediate literal FunctionType"
12926 outline "#000000"
12927 fill "#FFFFFF"
12928 fontSize 16
12929 fontName "Monospace"
12930 autoSizePolicy "node_width"
12931 anchor "t"
12932 borderDistance 0.0
12933 ]
12934 LabelGraphics
12935 [
12936 text "
12937 FunctionType enum
12938 "
12939 fontSize 14
12940 fontName "Consolas"
12941 alignment "left"
12942 anchor "tl"
12943 borderDistance 6
12944 ]
12945 ]
12946
12947 node
12948 [
12949 id 2
12950 graphics
12951 [
12952 w 226.60000000000002
12953 h 40
12954 type "rectangle"
12955 fill "#FFFFFF"
12956 fill2 "#FFFFFF"
12957 outline "#000000"
12958 ]
12959 LabelGraphics
12960 [
12961 text "Leaf literal FunctionType"
12962 outline "#000000"
12963 fill "#FFFFFF"
12964 fontSize 16
12965 fontName "Monospace"
12966 autoSizePolicy "node_width"
12967 anchor "t"
12968 borderDistance 0.0
12969 ]
12970 LabelGraphics
12971 [
12972 text "
12973 FunctionType enum
12974 "
12975 fontSize 14
12976 fontName "Consolas"
12977 alignment "left"
12978 anchor "tl"
12979 borderDistance 6
12980 ]
12981 ]
12982
12983 node
12984 [
12985 id 3
12986 graphics
12987 [
12988 w 361.90000000000003
12989 h 54
12990 type "rectangle"
12991 fill "#FFFFFF"
12992 fill2 "#FFFFFF"
12993 outline "#000000"
12994 ]
12995 LabelGraphics
12996 [
12997 text "o 1"
12998 outline "#000000"
12999 fill "#FFFFFF"
13000 fontSize 16
13001 fontName "Monospace"
13002 autoSizePolicy "node_width"
13003 anchor "t"
13004 borderDistance 0.0
13005 ]
13006 LabelGraphics
13007 [
13008 text "
13009 FunctionalArchitectureModel class DefinedPart
13010 FunctionalArchitectureModel class
13011 "
13012 fontSize 14
13013 fontName "Consolas"
13014 alignment "left"
13015 anchor "tl"
13016 borderDistance 6
13017 ]
13018 ]
13019
13020 node
13021 [
13022 id 4
13023 graphics
13024 [
13025 w 41.800000000000004
13026 h 26
13027 type "rectangle"
13028 fill "#FFFFFF"
13029 fill2 "#FFFFFF"
13030 outline "#000000"
13031 ]
13032 LabelGraphics
13033 [
13034 text "true"
13035 outline "#000000"
13036 fill "#FFFFFF"
13037 fontSize 16
13038 fontName "Monospace"
13039 autoSizePolicy "node_width"
13040 anchor "t"
13041 borderDistance 0.0
13042 ]
13043 LabelGraphics
13044 [
13045 text "
13046 "
13047 fontSize 14
13048 fontName "Consolas"
13049 alignment "left"
13050 anchor "tl"
13051 borderDistance 6
13052 ]
13053 ]
13054
13055 node
13056 [
13057 id 5
13058 graphics
13059 [
13060 w 50.6
13061 h 26
13062 type "rectangle"
13063 fill "#FFFFFF"
13064 fill2 "#FFFFFF"
13065 outline "#000000"
13066 ]
13067 LabelGraphics
13068 [
13069 text "false"
13070 outline "#000000"
13071 fill "#FFFFFF"
13072 fontSize 16
13073 fontName "Monospace"
13074 autoSizePolicy "node_width"
13075 anchor "t"
13076 borderDistance 0.0
13077 ]
13078 LabelGraphics
13079 [
13080 text "
13081 "
13082 fontSize 14
13083 fontName "Consolas"
13084 alignment "left"
13085 anchor "tl"
13086 borderDistance 6
13087 ]
13088 ]
13089
13090 node
13091 [
13092 id 6
13093 graphics
13094 [
13095 w 192.50000000000003
13096 h 54
13097 type "rectangle"
13098 fill "#FFFFFF"
13099 fill2 "#FFFFFF"
13100 outline "#000000"
13101 ]
13102 LabelGraphics
13103 [
13104 text "null"
13105 outline "#000000"
13106 fill "#FFFFFF"
13107 fontSize 16
13108 fontName "Monospace"
13109 autoSizePolicy "node_width"
13110 anchor "t"
13111 borderDistance 0.0
13112 ]
13113 LabelGraphics
13114 [
13115 text "
13116 FunctionalElement class
13117 Function class
13118 "
13119 fontSize 14
13120 fontName "Consolas"
13121 alignment "left"
13122 anchor "tl"
13123 borderDistance 6
13124 ]
13125 ]
13126
13127 node
13128 [
13129 id 7
13130 graphics
13131 [
13132 w 112.2
13133 h 26
13134 type "rectangle"
13135 fill "#FFFFFF"
13136 fill2 "#FFFFFF"
13137 outline "#000000"
13138 ]
13139 LabelGraphics
13140 [
13141 text "New Integers"
13142 outline "#000000"
13143 fill "#FFFFFF"
13144 fontSize 16
13145 fontName "Monospace"
13146 autoSizePolicy "node_width"
13147 anchor "t"
13148 borderDistance 0.0
13149 ]
13150 LabelGraphics
13151 [
13152 text "
13153 "
13154 fontSize 14
13155 fontName "Consolas"
13156 alignment "left"
13157 anchor "tl"
13158 borderDistance 6
13159 ]
13160 ]
13161
13162 node
13163 [
13164 id 8
13165 graphics
13166 [
13167 w 85.80000000000001
13168 h 26
13169 type "rectangle"
13170 fill "#FFFFFF"
13171 fill2 "#FFFFFF"
13172 outline "#000000"
13173 ]
13174 LabelGraphics
13175 [
13176 text "New Reals"
13177 outline "#000000"
13178 fill "#FFFFFF"
13179 fontSize 16
13180 fontName "Monospace"
13181 autoSizePolicy "node_width"
13182 anchor "t"
13183 borderDistance 0.0
13184 ]
13185 LabelGraphics
13186 [
13187 text "
13188 "
13189 fontSize 14
13190 fontName "Consolas"
13191 alignment "left"
13192 anchor "tl"
13193 borderDistance 6
13194 ]
13195 ]
13196
13197 node
13198 [
13199 id 9
13200 graphics
13201 [
13202 w 103.4
13203 h 26
13204 type "rectangle"
13205 fill "#FFFFFF"
13206 fill2 "#FFFFFF"
13207 outline "#000000"
13208 ]
13209 LabelGraphics
13210 [
13211 text "New Strings"
13212 outline "#000000"
13213 fill "#FFFFFF"
13214 fontSize 16
13215 fontName "Monospace"
13216 autoSizePolicy "node_width"
13217 anchor "t"
13218 borderDistance 0.0
13219 ]
13220 LabelGraphics
13221 [
13222 text "
13223 "
13224 fontSize 14
13225 fontName "Consolas"
13226 alignment "left"
13227 anchor "tl"
13228 borderDistance 6
13229 ]
13230 ]
13231
13232 node
13233 [
13234 id 10
13235 graphics
13236 [
13237 w 103.4
13238 h 26
13239 type "rectangle"
13240 fill "#FFFFFF"
13241 fill2 "#FFFFFF"
13242 outline "#000000"
13243 ]
13244 LabelGraphics
13245 [
13246 text "New Objects"
13247 outline "#000000"
13248 fill "#FFFFFF"
13249 fontSize 16
13250 fontName "Monospace"
13251 autoSizePolicy "node_width"
13252 anchor "t"
13253 borderDistance 0.0
13254 ]
13255 LabelGraphics
13256 [
13257 text "
13258 "
13259 fontSize 14
13260 fontName "Consolas"
13261 alignment "left"
13262 anchor "tl"
13263 borderDistance 6
13264 ]
13265 ]
13266 edge
13267 [
13268 source 6
13269 target 3
13270 graphics
13271 [
13272 fill "#000000"
13273 targetArrow "standard"
13274 ]
13275 LabelGraphics
13276 [
13277 text "model reference FunctionalElement"
13278 fontSize 14
13279 fontName "Consolas"
13280 configuration "AutoFlippingLabel"
13281 model "six_pos"
13282 position "thead"
13283 ]
13284 ]
13285 edge
13286 [
13287 source 3
13288 target 6
13289 graphics
13290 [
13291 fill "#000000"
13292 width 3
13293 targetArrow "standard"
13294 ]
13295 LabelGraphics
13296 [
13297 text "rootElements reference FunctionalArchitectureModel"
13298 fontSize 14
13299 fontName "Consolas"
13300 configuration "AutoFlippingLabel"
13301 model "six_pos"
13302 position "thead"
13303 ]
13304 ]
13305 edge
13306 [
13307 source 6
13308 target 0
13309 graphics
13310 [
13311 fill "#000000"
13312 targetArrow "standard"
13313 ]
13314 LabelGraphics
13315 [
13316 text "type attribute Function"
13317 fontSize 14
13318 fontName "Consolas"
13319 configuration "AutoFlippingLabel"
13320 model "six_pos"
13321 position "thead"
13322 ]
13323 ]
13324]
13325graph
13326[
13327 node
13328 [
13329 id 0
13330 graphics
13331 [
13332 w 254.10000000000002
13333 h 110
13334 type "rectangle"
13335 fill "#FFFFFF"
13336 fill2 "#FFFFFF"
13337 outline "#000000"
13338 ]
13339 LabelGraphics
13340 [
13341 text "o 1"
13342 outline "#000000"
13343 fill "#FFFFFF"
13344 fontSize 16
13345 fontName "Monospace"
13346 autoSizePolicy "node_width"
13347 anchor "t"
13348 borderDistance 0.0
13349 ]
13350 LabelGraphics
13351 [
13352 text "
13353 EModelElement class DefinedPart
13354 ENamedElement class DefinedPart
13355 EPackage class DefinedPart
13356 EModelElement class
13357 ENamedElement class
13358 EPackage class
13359 "
13360 fontSize 14
13361 fontName "Consolas"
13362 alignment "left"
13363 anchor "tl"
13364 borderDistance 6
13365 ]
13366 ]
13367
13368 node
13369 [
13370 id 1
13371 graphics
13372 [
13373 w 41.800000000000004
13374 h 26
13375 type "rectangle"
13376 fill "#FFFFFF"
13377 fill2 "#FFFFFF"
13378 outline "#000000"
13379 ]
13380 LabelGraphics
13381 [
13382 text "true"
13383 outline "#000000"
13384 fill "#FFFFFF"
13385 fontSize 16
13386 fontName "Monospace"
13387 autoSizePolicy "node_width"
13388 anchor "t"
13389 borderDistance 0.0
13390 ]
13391 LabelGraphics
13392 [
13393 text "
13394 "
13395 fontSize 14
13396 fontName "Consolas"
13397 alignment "left"
13398 anchor "tl"
13399 borderDistance 6
13400 ]
13401 ]
13402
13403 node
13404 [
13405 id 2
13406 graphics
13407 [
13408 w 50.6
13409 h 26
13410 type "rectangle"
13411 fill "#FFFFFF"
13412 fill2 "#FFFFFF"
13413 outline "#000000"
13414 ]
13415 LabelGraphics
13416 [
13417 text "false"
13418 outline "#000000"
13419 fill "#FFFFFF"
13420 fontSize 16
13421 fontName "Monospace"
13422 autoSizePolicy "node_width"
13423 anchor "t"
13424 borderDistance 0.0
13425 ]
13426 LabelGraphics
13427 [
13428 text "
13429 "
13430 fontSize 14
13431 fontName "Consolas"
13432 alignment "left"
13433 anchor "tl"
13434 borderDistance 6
13435 ]
13436 ]
13437
13438 node
13439 [
13440 id 3
13441 graphics
13442 [
13443 w 24.200000000000003
13444 h 26
13445 type "rectangle"
13446 fill "#FFFFFF"
13447 fill2 "#FFFFFF"
13448 outline "#000000"
13449 ]
13450 LabelGraphics
13451 [
13452 text "-1"
13453 outline "#000000"
13454 fill "#FFFFFF"
13455 fontSize 16
13456 fontName "Monospace"
13457 autoSizePolicy "node_width"
13458 anchor "t"
13459 borderDistance 0.0
13460 ]
13461 LabelGraphics
13462 [
13463 text "
13464 "
13465 fontSize 14
13466 fontName "Consolas"
13467 alignment "left"
13468 anchor "tl"
13469 borderDistance 6
13470 ]
13471 ]
13472
13473 node
13474 [
13475 id 4
13476 graphics
13477 [
13478 w 15.400000000000002
13479 h 26
13480 type "rectangle"
13481 fill "#FFFFFF"
13482 fill2 "#FFFFFF"
13483 outline "#000000"
13484 ]
13485 LabelGraphics
13486 [
13487 text "0"
13488 outline "#000000"
13489 fill "#FFFFFF"
13490 fontSize 16
13491 fontName "Monospace"
13492 autoSizePolicy "node_width"
13493 anchor "t"
13494 borderDistance 0.0
13495 ]
13496 LabelGraphics
13497 [
13498 text "
13499 "
13500 fontSize 14
13501 fontName "Consolas"
13502 alignment "left"
13503 anchor "tl"
13504 borderDistance 6
13505 ]
13506 ]
13507
13508 node
13509 [
13510 id 5
13511 graphics
13512 [
13513 w 15.400000000000002
13514 h 26
13515 type "rectangle"
13516 fill "#FFFFFF"
13517 fill2 "#FFFFFF"
13518 outline "#000000"
13519 ]
13520 LabelGraphics
13521 [
13522 text "1"
13523 outline "#000000"
13524 fill "#FFFFFF"
13525 fontSize 16
13526 fontName "Monospace"
13527 autoSizePolicy "node_width"
13528 anchor "t"
13529 borderDistance 0.0
13530 ]
13531 LabelGraphics
13532 [
13533 text "
13534 "
13535 fontSize 14
13536 fontName "Consolas"
13537 alignment "left"
13538 anchor "tl"
13539 borderDistance 6
13540 ]
13541 ]
13542
13543 node
13544 [
13545 id 6
13546 graphics
13547 [
13548 w 33.0
13549 h 26
13550 type "rectangle"
13551 fill "#FFFFFF"
13552 fill2 "#FFFFFF"
13553 outline "#000000"
13554 ]
13555 LabelGraphics
13556 [
13557 text ""A""
13558 outline "#000000"
13559 fill "#FFFFFF"
13560 fontSize 16
13561 fontName "Monospace"
13562 autoSizePolicy "node_width"
13563 anchor "t"
13564 borderDistance 0.0
13565 ]
13566 LabelGraphics
13567 [
13568 text "
13569 "
13570 fontSize 14
13571 fontName "Consolas"
13572 alignment "left"
13573 anchor "tl"
13574 borderDistance 6
13575 ]
13576 ]
13577
13578 node
13579 [
13580 id 7
13581 graphics
13582 [
13583 w 33.0
13584 h 26
13585 type "rectangle"
13586 fill "#FFFFFF"
13587 fill2 "#FFFFFF"
13588 outline "#000000"
13589 ]
13590 LabelGraphics
13591 [
13592 text ""B""
13593 outline "#000000"
13594 fill "#FFFFFF"
13595 fontSize 16
13596 fontName "Monospace"
13597 autoSizePolicy "node_width"
13598 anchor "t"
13599 borderDistance 0.0
13600 ]
13601 LabelGraphics
13602 [
13603 text "
13604 "
13605 fontSize 14
13606 fontName "Consolas"
13607 alignment "left"
13608 anchor "tl"
13609 borderDistance 6
13610 ]
13611 ]
13612
13613 node
13614 [
13615 id 8
13616 graphics
13617 [
13618 w 94.60000000000001
13619 h 26
13620 type "rectangle"
13621 fill "#FFFFFF"
13622 fill2 "#FFFFFF"
13623 outline "#000000"
13624 ]
13625 LabelGraphics
13626 [
13627 text ""nsPrefix""
13628 outline "#000000"
13629 fill "#FFFFFF"
13630 fontSize 16
13631 fontName "Monospace"
13632 autoSizePolicy "node_width"
13633 anchor "t"
13634 borderDistance 0.0
13635 ]
13636 LabelGraphics
13637 [
13638 text "
13639 "
13640 fontSize 14
13641 fontName "Consolas"
13642 alignment "left"
13643 anchor "tl"
13644 borderDistance 6
13645 ]
13646 ]
13647
13648 node
13649 [
13650 id 9
13651 graphics
13652 [
13653 w 68.2
13654 h 26
13655 type "rectangle"
13656 fill "#FFFFFF"
13657 fill2 "#FFFFFF"
13658 outline "#000000"
13659 ]
13660 LabelGraphics
13661 [
13662 text ""nsUri""
13663 outline "#000000"
13664 fill "#FFFFFF"
13665 fontSize 16
13666 fontName "Monospace"
13667 autoSizePolicy "node_width"
13668 anchor "t"
13669 borderDistance 0.0
13670 ]
13671 LabelGraphics
13672 [
13673 text "
13674 "
13675 fontSize 14
13676 fontName "Consolas"
13677 alignment "left"
13678 anchor "tl"
13679 borderDistance 6
13680 ]
13681 ]
13682
13683 node
13684 [
13685 id 10
13686 graphics
13687 [
13688 w 121.00000000000001
13689 h 26
13690 type "rectangle"
13691 fill "#FFFFFF"
13692 fill2 "#FFFFFF"
13693 outline "#000000"
13694 ]
13695 LabelGraphics
13696 [
13697 text ""packageName""
13698 outline "#000000"
13699 fill "#FFFFFF"
13700 fontSize 16
13701 fontName "Monospace"
13702 autoSizePolicy "node_width"
13703 anchor "t"
13704 borderDistance 0.0
13705 ]
13706 LabelGraphics
13707 [
13708 text "
13709 "
13710 fontSize 14
13711 fontName "Consolas"
13712 alignment "left"
13713 anchor "tl"
13714 borderDistance 6
13715 ]
13716 ]
13717
13718 node
13719 [
13720 id 11
13721 graphics
13722 [
13723 w 269.5
13724 h 110
13725 type "rectangle"
13726 fill "#FFFFFF"
13727 fill2 "#FFFFFF"
13728 outline "#000000"
13729 ]
13730 LabelGraphics
13731 [
13732 text "null"
13733 outline "#000000"
13734 fill "#FFFFFF"
13735 fontSize 16
13736 fontName "Monospace"
13737 autoSizePolicy "node_width"
13738 anchor "t"
13739 borderDistance 0.0
13740 ]
13741 LabelGraphics
13742 [
13743 text "
13744 EClass class
13745 EClassifier class
13746 EModelElement class
13747 ENamedElement class
13748 EModelElement class UndefinedPart
13749 ENamedElement class UndefinedPart
13750 "
13751 fontSize 14
13752 fontName "Consolas"
13753 alignment "left"
13754 anchor "tl"
13755 borderDistance 6
13756 ]
13757 ]
13758
13759 node
13760 [
13761 id 12
13762 graphics
13763 [
13764 w 269.5
13765 h 110
13766 type "rectangle"
13767 fill "#FFFFFF"
13768 fill2 "#FFFFFF"
13769 outline "#000000"
13770 ]
13771 LabelGraphics
13772 [
13773 text "null"
13774 outline "#000000"
13775 fill "#FFFFFF"
13776 fontSize 16
13777 fontName "Monospace"
13778 autoSizePolicy "node_width"
13779 anchor "t"
13780 borderDistance 0.0
13781 ]
13782 LabelGraphics
13783 [
13784 text "
13785 EModelElement class
13786 ENamedElement class
13787 EPackage class
13788 EModelElement class UndefinedPart
13789 ENamedElement class UndefinedPart
13790 EPackage class UndefinedPart
13791 "
13792 fontSize 14
13793 fontName "Consolas"
13794 alignment "left"
13795 anchor "tl"
13796 borderDistance 6
13797 ]
13798 ]
13799
13800 node
13801 [
13802 id 13
13803 graphics
13804 [
13805 w 269.5
13806 h 110
13807 type "rectangle"
13808 fill "#FFFFFF"
13809 fill2 "#FFFFFF"
13810 outline "#000000"
13811 ]
13812 LabelGraphics
13813 [
13814 text "null"
13815 outline "#000000"
13816 fill "#FFFFFF"
13817 fontSize 16
13818 fontName "Monospace"
13819 autoSizePolicy "node_width"
13820 anchor "t"
13821 borderDistance 0.0
13822 ]
13823 LabelGraphics
13824 [
13825 text "
13826 EModelElement class
13827 ENamedElement class
13828 EOperation class
13829 ETypedElement class
13830 EModelElement class UndefinedPart
13831 ENamedElement class UndefinedPart
13832 "
13833 fontSize 14
13834 fontName "Consolas"
13835 alignment "left"
13836 anchor "tl"
13837 borderDistance 6
13838 ]
13839 ]
13840
13841 node
13842 [
13843 id 14
13844 graphics
13845 [
13846 w 269.5
13847 h 68
13848 type "rectangle"
13849 fill "#FFFFFF"
13850 fill2 "#FFFFFF"
13851 outline "#000000"
13852 ]
13853 LabelGraphics
13854 [
13855 text "null"
13856 outline "#000000"
13857 fill "#FFFFFF"
13858 fontSize 16
13859 fontName "Monospace"
13860 autoSizePolicy "node_width"
13861 anchor "t"
13862 borderDistance 0.0
13863 ]
13864 LabelGraphics
13865 [
13866 text "
13867 EAnnotation class
13868 EModelElement class
13869 EModelElement class UndefinedPart
13870 "
13871 fontSize 14
13872 fontName "Consolas"
13873 alignment "left"
13874 anchor "tl"
13875 borderDistance 6
13876 ]
13877 ]
13878
13879 node
13880 [
13881 id 15
13882 graphics
13883 [
13884 w 238.70000000000002
13885 h 40
13886 type "rectangle"
13887 fill "#FFFFFF"
13888 fill2 "#FFFFFF"
13889 outline "#000000"
13890 ]
13891 LabelGraphics
13892 [
13893 text "null"
13894 outline "#000000"
13895 fill "#FFFFFF"
13896 fontSize 16
13897 fontName "Monospace"
13898 autoSizePolicy "node_width"
13899 anchor "t"
13900 borderDistance 0.0
13901 ]
13902 LabelGraphics
13903 [
13904 text "
13905 EStringToStringMapEntry class
13906 "
13907 fontSize 14
13908 fontName "Consolas"
13909 alignment "left"
13910 anchor "tl"
13911 borderDistance 6
13912 ]
13913 ]
13914
13915 node
13916 [
13917 id 16
13918 graphics
13919 [
13920 w 112.2
13921 h 26
13922 type "rectangle"
13923 fill "#FFFFFF"
13924 fill2 "#FFFFFF"
13925 outline "#000000"
13926 ]
13927 LabelGraphics
13928 [
13929 text "New Integers"
13930 outline "#000000"
13931 fill "#FFFFFF"
13932 fontSize 16
13933 fontName "Monospace"
13934 autoSizePolicy "node_width"
13935 anchor "t"
13936 borderDistance 0.0
13937 ]
13938 LabelGraphics
13939 [
13940 text "
13941 "
13942 fontSize 14
13943 fontName "Consolas"
13944 alignment "left"
13945 anchor "tl"
13946 borderDistance 6
13947 ]
13948 ]
13949
13950 node
13951 [
13952 id 17
13953 graphics
13954 [
13955 w 85.80000000000001
13956 h 26
13957 type "rectangle"
13958 fill "#FFFFFF"
13959 fill2 "#FFFFFF"
13960 outline "#000000"
13961 ]
13962 LabelGraphics
13963 [
13964 text "New Reals"
13965 outline "#000000"
13966 fill "#FFFFFF"
13967 fontSize 16
13968 fontName "Monospace"
13969 autoSizePolicy "node_width"
13970 anchor "t"
13971 borderDistance 0.0
13972 ]
13973 LabelGraphics
13974 [
13975 text "
13976 "
13977 fontSize 14
13978 fontName "Consolas"
13979 alignment "left"
13980 anchor "tl"
13981 borderDistance 6
13982 ]
13983 ]
13984
13985 node
13986 [
13987 id 18
13988 graphics
13989 [
13990 w 103.4
13991 h 26
13992 type "rectangle"
13993 fill "#FFFFFF"
13994 fill2 "#FFFFFF"
13995 outline "#000000"
13996 ]
13997 LabelGraphics
13998 [
13999 text "New Strings"
14000 outline "#000000"
14001 fill "#FFFFFF"
14002 fontSize 16
14003 fontName "Monospace"
14004 autoSizePolicy "node_width"
14005 anchor "t"
14006 borderDistance 0.0
14007 ]
14008 LabelGraphics
14009 [
14010 text "
14011 "
14012 fontSize 14
14013 fontName "Consolas"
14014 alignment "left"
14015 anchor "tl"
14016 borderDistance 6
14017 ]
14018 ]
14019
14020 node
14021 [
14022 id 19
14023 graphics
14024 [
14025 w 103.4
14026 h 26
14027 type "rectangle"
14028 fill "#FFFFFF"
14029 fill2 "#FFFFFF"
14030 outline "#000000"
14031 ]
14032 LabelGraphics
14033 [
14034 text "New Objects"
14035 outline "#000000"
14036 fill "#FFFFFF"
14037 fontSize 16
14038 fontName "Monospace"
14039 autoSizePolicy "node_width"
14040 anchor "t"
14041 borderDistance 0.0
14042 ]
14043 LabelGraphics
14044 [
14045 text "
14046 "
14047 fontSize 14
14048 fontName "Consolas"
14049 alignment "left"
14050 anchor "tl"
14051 borderDistance 6
14052 ]
14053 ]
14054 edge
14055 [
14056 source 14
14057 target 15
14058 graphics
14059 [
14060 fill "#000000"
14061 width 3
14062 targetArrow "standard"
14063 ]
14064 LabelGraphics
14065 [
14066 text "details reference EAnnotation"
14067 fontSize 14
14068 fontName "Consolas"
14069 configuration "AutoFlippingLabel"
14070 model "six_pos"
14071 position "thead"
14072 ]
14073 ]
14074 edge
14075 [
14076 source 14
14077 target 0
14078 graphics
14079 [
14080 fill "#000000"
14081 targetArrow "standard"
14082 ]
14083 LabelGraphics
14084 [
14085 text "eModelElement reference EAnnotation"
14086 fontSize 14
14087 fontName "Consolas"
14088 configuration "AutoFlippingLabel"
14089 model "six_pos"
14090 position "thead"
14091 ]
14092 ]
14093 edge
14094 [
14095 source 11
14096 target 11
14097 graphics
14098 [
14099 fill "#000000"
14100 targetArrow "standard"
14101 ]
14102 LabelGraphics
14103 [
14104 text "eSuperTypes reference EClass"
14105 fontSize 14
14106 fontName "Consolas"
14107 configuration "AutoFlippingLabel"
14108 model "six_pos"
14109 position "thead"
14110 ]
14111 ]
14112 edge
14113 [
14114 source 11
14115 target 13
14116 graphics
14117 [
14118 fill "#000000"
14119 width 3
14120 targetArrow "standard"
14121 ]
14122 LabelGraphics
14123 [
14124 text "eOperations reference EClass"
14125 fontSize 14
14126 fontName "Consolas"
14127 configuration "AutoFlippingLabel"
14128 model "six_pos"
14129 position "thead"
14130 ]
14131 ]
14132 edge
14133 [
14134 source 11
14135 target 11
14136 graphics
14137 [
14138 fill "#000000"
14139 targetArrow "standard"
14140 ]
14141 LabelGraphics
14142 [
14143 text "eAllSuperTypes reference EClass"
14144 fontSize 14
14145 fontName "Consolas"
14146 configuration "AutoFlippingLabel"
14147 model "six_pos"
14148 position "thead"
14149 ]
14150 ]
14151 edge
14152 [
14153 source 11
14154 target 0
14155 graphics
14156 [
14157 fill "#000000"
14158 targetArrow "standard"
14159 ]
14160 LabelGraphics
14161 [
14162 text "ePackage reference EClassifier"
14163 fontSize 14
14164 fontName "Consolas"
14165 configuration "AutoFlippingLabel"
14166 model "six_pos"
14167 position "thead"
14168 ]
14169 ]
14170 edge
14171 [
14172 source 0
14173 target 14
14174 graphics
14175 [
14176 fill "#000000"
14177 width 3
14178 targetArrow "standard"
14179 ]
14180 LabelGraphics
14181 [
14182 text "eAnnotations reference EModelElement"
14183 fontSize 14
14184 fontName "Consolas"
14185 configuration "AutoFlippingLabel"
14186 model "six_pos"
14187 position "thead"
14188 ]
14189 ]
14190 edge
14191 [
14192 source 13
14193 target 11
14194 graphics
14195 [
14196 fill "#000000"
14197 targetArrow "standard"
14198 ]
14199 LabelGraphics
14200 [
14201 text "eContainingClass reference EOperation"
14202 fontSize 14
14203 fontName "Consolas"
14204 configuration "AutoFlippingLabel"
14205 model "six_pos"
14206 position "thead"
14207 ]
14208 ]
14209 edge
14210 [
14211 source 0
14212 target 11
14213 graphics
14214 [
14215 fill "#000000"
14216 width 3
14217 targetArrow "standard"
14218 ]
14219 LabelGraphics
14220 [
14221 text "eClassifiers reference EPackage"
14222 fontSize 14
14223 fontName "Consolas"
14224 configuration "AutoFlippingLabel"
14225 model "six_pos"
14226 position "thead"
14227 ]
14228 ]
14229 edge
14230 [
14231 source 0
14232 target 12
14233 graphics
14234 [
14235 fill "#000000"
14236 width 3
14237 targetArrow "standard"
14238 ]
14239 LabelGraphics
14240 [
14241 text "eSubpackages reference EPackage"
14242 fontSize 14
14243 fontName "Consolas"
14244 configuration "AutoFlippingLabel"
14245 model "six_pos"
14246 position "thead"
14247 ]
14248 ]
14249 edge
14250 [
14251 source 12
14252 target 0
14253 graphics
14254 [
14255 fill "#000000"
14256 targetArrow "standard"
14257 ]
14258 LabelGraphics
14259 [
14260 text "eSuperPackage reference EPackage"
14261 fontSize 14
14262 fontName "Consolas"
14263 configuration "AutoFlippingLabel"
14264 model "six_pos"
14265 position "thead"
14266 ]
14267 ]
14268 edge
14269 [
14270 source 11
14271 target 8
14272 graphics
14273 [
14274 fill "#000000"
14275 targetArrow "standard"
14276 ]
14277 LabelGraphics
14278 [
14279 text "instanceClassName attribute EClassifier"
14280 fontSize 14
14281 fontName "Consolas"
14282 configuration "AutoFlippingLabel"
14283 model "six_pos"
14284 position "thead"
14285 ]
14286 ]
14287 edge
14288 [
14289 source 0
14290 target 10
14291 graphics
14292 [
14293 fill "#000000"
14294 targetArrow "standard"
14295 ]
14296 LabelGraphics
14297 [
14298 text "name attribute ENamedElement"
14299 fontSize 14
14300 fontName "Consolas"
14301 configuration "AutoFlippingLabel"
14302 model "six_pos"
14303 position "thead"
14304 ]
14305 ]
14306 edge
14307 [
14308 source 12
14309 target 7
14310 graphics
14311 [
14312 fill "#000000"
14313 targetArrow "standard"
14314 ]
14315 LabelGraphics
14316 [
14317 text "name attribute ENamedElement"
14318 fontSize 14
14319 fontName "Consolas"
14320 configuration "AutoFlippingLabel"
14321 model "six_pos"
14322 position "thead"
14323 ]
14324 ]
14325 edge
14326 [
14327 source 0
14328 target 9
14329 graphics
14330 [
14331 fill "#000000"
14332 targetArrow "standard"
14333 ]
14334 LabelGraphics
14335 [
14336 text "nsURI attribute EPackage"
14337 fontSize 14
14338 fontName "Consolas"
14339 configuration "AutoFlippingLabel"
14340 model "six_pos"
14341 position "thead"
14342 ]
14343 ]
14344 edge
14345 [
14346 source 12
14347 target 8
14348 graphics
14349 [
14350 fill "#000000"
14351 targetArrow "standard"
14352 ]
14353 LabelGraphics
14354 [
14355 text "nsURI attribute EPackage"
14356 fontSize 14
14357 fontName "Consolas"
14358 configuration "AutoFlippingLabel"
14359 model "six_pos"
14360 position "thead"
14361 ]
14362 ]
14363 edge
14364 [
14365 source 0
14366 target 8
14367 graphics
14368 [
14369 fill "#000000"
14370 targetArrow "standard"
14371 ]
14372 LabelGraphics
14373 [
14374 text "nsPrefix attribute EPackage"
14375 fontSize 14
14376 fontName "Consolas"
14377 configuration "AutoFlippingLabel"
14378 model "six_pos"
14379 position "thead"
14380 ]
14381 ]
14382 edge
14383 [
14384 source 13
14385 target 1
14386 graphics
14387 [
14388 fill "#000000"
14389 targetArrow "standard"
14390 ]
14391 LabelGraphics
14392 [
14393 text "unique attribute ETypedElement"
14394 fontSize 14
14395 fontName "Consolas"
14396 configuration "AutoFlippingLabel"
14397 model "six_pos"
14398 position "thead"
14399 ]
14400 ]
14401 edge
14402 [
14403 source 13
14404 target 4
14405 graphics
14406 [
14407 fill "#000000"
14408 targetArrow "standard"
14409 ]
14410 LabelGraphics
14411 [
14412 text "upperBound attribute ETypedElement"
14413 fontSize 14
14414 fontName "Consolas"
14415 configuration "AutoFlippingLabel"
14416 model "six_pos"
14417 position "thead"
14418 ]
14419 ]
14420]
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
index c1d6f49f..0ea0ef1b 100644
--- 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
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
index d9529633..cb79481b 100644
--- 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
@@ -1,9 +1,10 @@
1<?xml version="1.0" encoding="ASCII"?> 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"> 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"/> 3 <eAnnotations>
4 <eClassifiers xsi:type="ecore:EEnum"/> 4 <details/>
5 <eClassifiers xsi:type="ecore:EEnum" name="packageName" instanceClassName="nsPrefix"/> 5 </eAnnotations>
6 <eSubpackages name="A"> 6 <eClassifiers xsi:type="ecore:EClass" instanceClassName="nsPrefix" eSuperTypes="//%">
7 <eClassifiers xsi:type="ecore:EEnum"/> 7 <eOperations upperBound="0"/>
8 </eSubpackages> 8 </eClassifiers>
9 <eSubpackages name="B" nsURI="nsPrefix"/>
9</ecore:EPackage> 10</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
index f6242732..77ffa87d 100644
--- 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
@@ -4760,3 +4760,6877 @@ graph
4760 ] 4760 ]
4761 ] 4761 ]
4762] 4762]
4763graph
4764[
4765 node
4766 [
4767 id 0
4768 graphics
4769 [
4770 w 226.60000000000002
4771 h 40
4772 type "rectangle"
4773 fill "#FFFFFF"
4774 fill2 "#FFFFFF"
4775 outline "#000000"
4776 ]
4777 LabelGraphics
4778 [
4779 text "Root literal FunctionType"
4780 outline "#000000"
4781 fill "#FFFFFF"
4782 fontSize 16
4783 fontName "Monospace"
4784 autoSizePolicy "node_width"
4785 anchor "t"
4786 borderDistance 0.0
4787 ]
4788 LabelGraphics
4789 [
4790 text "
4791 FunctionType enum
4792 "
4793 fontSize 14
4794 fontName "Consolas"
4795 alignment "left"
4796 anchor "tl"
4797 borderDistance 6
4798 ]
4799 ]
4800
4801 node
4802 [
4803 id 1
4804 graphics
4805 [
4806 w 297.0
4807 h 40
4808 type "rectangle"
4809 fill "#FFFFFF"
4810 fill2 "#FFFFFF"
4811 outline "#000000"
4812 ]
4813 LabelGraphics
4814 [
4815 text "Intermediate literal FunctionType"
4816 outline "#000000"
4817 fill "#FFFFFF"
4818 fontSize 16
4819 fontName "Monospace"
4820 autoSizePolicy "node_width"
4821 anchor "t"
4822 borderDistance 0.0
4823 ]
4824 LabelGraphics
4825 [
4826 text "
4827 FunctionType enum
4828 "
4829 fontSize 14
4830 fontName "Consolas"
4831 alignment "left"
4832 anchor "tl"
4833 borderDistance 6
4834 ]
4835 ]
4836
4837 node
4838 [
4839 id 2
4840 graphics
4841 [
4842 w 226.60000000000002
4843 h 40
4844 type "rectangle"
4845 fill "#FFFFFF"
4846 fill2 "#FFFFFF"
4847 outline "#000000"
4848 ]
4849 LabelGraphics
4850 [
4851 text "Leaf literal FunctionType"
4852 outline "#000000"
4853 fill "#FFFFFF"
4854 fontSize 16
4855 fontName "Monospace"
4856 autoSizePolicy "node_width"
4857 anchor "t"
4858 borderDistance 0.0
4859 ]
4860 LabelGraphics
4861 [
4862 text "
4863 FunctionType enum
4864 "
4865 fontSize 14
4866 fontName "Consolas"
4867 alignment "left"
4868 anchor "tl"
4869 borderDistance 6
4870 ]
4871 ]
4872
4873 node
4874 [
4875 id 3
4876 graphics
4877 [
4878 w 361.90000000000003
4879 h 54
4880 type "rectangle"
4881 fill "#FFFFFF"
4882 fill2 "#FFFFFF"
4883 outline "#000000"
4884 ]
4885 LabelGraphics
4886 [
4887 text "o 1"
4888 outline "#000000"
4889 fill "#FFFFFF"
4890 fontSize 16
4891 fontName "Monospace"
4892 autoSizePolicy "node_width"
4893 anchor "t"
4894 borderDistance 0.0
4895 ]
4896 LabelGraphics
4897 [
4898 text "
4899 FunctionalArchitectureModel class DefinedPart
4900 FunctionalArchitectureModel class
4901 "
4902 fontSize 14
4903 fontName "Consolas"
4904 alignment "left"
4905 anchor "tl"
4906 borderDistance 6
4907 ]
4908 ]
4909
4910 node
4911 [
4912 id 4
4913 graphics
4914 [
4915 w 41.800000000000004
4916 h 26
4917 type "rectangle"
4918 fill "#FFFFFF"
4919 fill2 "#FFFFFF"
4920 outline "#000000"
4921 ]
4922 LabelGraphics
4923 [
4924 text "true"
4925 outline "#000000"
4926 fill "#FFFFFF"
4927 fontSize 16
4928 fontName "Monospace"
4929 autoSizePolicy "node_width"
4930 anchor "t"
4931 borderDistance 0.0
4932 ]
4933 LabelGraphics
4934 [
4935 text "
4936 "
4937 fontSize 14
4938 fontName "Consolas"
4939 alignment "left"
4940 anchor "tl"
4941 borderDistance 6
4942 ]
4943 ]
4944
4945 node
4946 [
4947 id 5
4948 graphics
4949 [
4950 w 50.6
4951 h 26
4952 type "rectangle"
4953 fill "#FFFFFF"
4954 fill2 "#FFFFFF"
4955 outline "#000000"
4956 ]
4957 LabelGraphics
4958 [
4959 text "false"
4960 outline "#000000"
4961 fill "#FFFFFF"
4962 fontSize 16
4963 fontName "Monospace"
4964 autoSizePolicy "node_width"
4965 anchor "t"
4966 borderDistance 0.0
4967 ]
4968 LabelGraphics
4969 [
4970 text "
4971 "
4972 fontSize 14
4973 fontName "Consolas"
4974 alignment "left"
4975 anchor "tl"
4976 borderDistance 6
4977 ]
4978 ]
4979
4980 node
4981 [
4982 id 6
4983 graphics
4984 [
4985 w 192.50000000000003
4986 h 54
4987 type "rectangle"
4988 fill "#FFFFFF"
4989 fill2 "#FFFFFF"
4990 outline "#000000"
4991 ]
4992 LabelGraphics
4993 [
4994 text "null"
4995 outline "#000000"
4996 fill "#FFFFFF"
4997 fontSize 16
4998 fontName "Monospace"
4999 autoSizePolicy "node_width"
5000 anchor "t"
5001 borderDistance 0.0
5002 ]
5003 LabelGraphics
5004 [
5005 text "
5006 FunctionalElement class
5007 Function class
5008 "
5009 fontSize 14
5010 fontName "Consolas"
5011 alignment "left"
5012 anchor "tl"
5013 borderDistance 6
5014 ]
5015 ]
5016
5017 node
5018 [
5019 id 7
5020 graphics
5021 [
5022 w 112.2
5023 h 26
5024 type "rectangle"
5025 fill "#FFFFFF"
5026 fill2 "#FFFFFF"
5027 outline "#000000"
5028 ]
5029 LabelGraphics
5030 [
5031 text "New Integers"
5032 outline "#000000"
5033 fill "#FFFFFF"
5034 fontSize 16
5035 fontName "Monospace"
5036 autoSizePolicy "node_width"
5037 anchor "t"
5038 borderDistance 0.0
5039 ]
5040 LabelGraphics
5041 [
5042 text "
5043 "
5044 fontSize 14
5045 fontName "Consolas"
5046 alignment "left"
5047 anchor "tl"
5048 borderDistance 6
5049 ]
5050 ]
5051
5052 node
5053 [
5054 id 8
5055 graphics
5056 [
5057 w 85.80000000000001
5058 h 26
5059 type "rectangle"
5060 fill "#FFFFFF"
5061 fill2 "#FFFFFF"
5062 outline "#000000"
5063 ]
5064 LabelGraphics
5065 [
5066 text "New Reals"
5067 outline "#000000"
5068 fill "#FFFFFF"
5069 fontSize 16
5070 fontName "Monospace"
5071 autoSizePolicy "node_width"
5072 anchor "t"
5073 borderDistance 0.0
5074 ]
5075 LabelGraphics
5076 [
5077 text "
5078 "
5079 fontSize 14
5080 fontName "Consolas"
5081 alignment "left"
5082 anchor "tl"
5083 borderDistance 6
5084 ]
5085 ]
5086
5087 node
5088 [
5089 id 9
5090 graphics
5091 [
5092 w 103.4
5093 h 26
5094 type "rectangle"
5095 fill "#FFFFFF"
5096 fill2 "#FFFFFF"
5097 outline "#000000"
5098 ]
5099 LabelGraphics
5100 [
5101 text "New Strings"
5102 outline "#000000"
5103 fill "#FFFFFF"
5104 fontSize 16
5105 fontName "Monospace"
5106 autoSizePolicy "node_width"
5107 anchor "t"
5108 borderDistance 0.0
5109 ]
5110 LabelGraphics
5111 [
5112 text "
5113 "
5114 fontSize 14
5115 fontName "Consolas"
5116 alignment "left"
5117 anchor "tl"
5118 borderDistance 6
5119 ]
5120 ]
5121
5122 node
5123 [
5124 id 10
5125 graphics
5126 [
5127 w 103.4
5128 h 26
5129 type "rectangle"
5130 fill "#FFFFFF"
5131 fill2 "#FFFFFF"
5132 outline "#000000"
5133 ]
5134 LabelGraphics
5135 [
5136 text "New Objects"
5137 outline "#000000"
5138 fill "#FFFFFF"
5139 fontSize 16
5140 fontName "Monospace"
5141 autoSizePolicy "node_width"
5142 anchor "t"
5143 borderDistance 0.0
5144 ]
5145 LabelGraphics
5146 [
5147 text "
5148 "
5149 fontSize 14
5150 fontName "Consolas"
5151 alignment "left"
5152 anchor "tl"
5153 borderDistance 6
5154 ]
5155 ]
5156 edge
5157 [
5158 source 6
5159 target 3
5160 graphics
5161 [
5162 fill "#000000"
5163 targetArrow "standard"
5164 ]
5165 LabelGraphics
5166 [
5167 text "model reference FunctionalElement"
5168 fontSize 14
5169 fontName "Consolas"
5170 configuration "AutoFlippingLabel"
5171 model "six_pos"
5172 position "thead"
5173 ]
5174 ]
5175 edge
5176 [
5177 source 3
5178 target 6
5179 graphics
5180 [
5181 fill "#000000"
5182 width 3
5183 targetArrow "standard"
5184 ]
5185 LabelGraphics
5186 [
5187 text "rootElements reference FunctionalArchitectureModel"
5188 fontSize 14
5189 fontName "Consolas"
5190 configuration "AutoFlippingLabel"
5191 model "six_pos"
5192 position "thead"
5193 ]
5194 ]
5195 edge
5196 [
5197 source 6
5198 target 2
5199 graphics
5200 [
5201 fill "#000000"
5202 targetArrow "standard"
5203 ]
5204 LabelGraphics
5205 [
5206 text "type attribute Function"
5207 fontSize 14
5208 fontName "Consolas"
5209 configuration "AutoFlippingLabel"
5210 model "six_pos"
5211 position "thead"
5212 ]
5213 ]
5214]
5215graph
5216[
5217 node
5218 [
5219 id 0
5220 graphics
5221 [
5222 w 226.60000000000002
5223 h 40
5224 type "rectangle"
5225 fill "#FFFFFF"
5226 fill2 "#FFFFFF"
5227 outline "#000000"
5228 ]
5229 LabelGraphics
5230 [
5231 text "Root literal FunctionType"
5232 outline "#000000"
5233 fill "#FFFFFF"
5234 fontSize 16
5235 fontName "Monospace"
5236 autoSizePolicy "node_width"
5237 anchor "t"
5238 borderDistance 0.0
5239 ]
5240 LabelGraphics
5241 [
5242 text "
5243 FunctionType enum
5244 "
5245 fontSize 14
5246 fontName "Consolas"
5247 alignment "left"
5248 anchor "tl"
5249 borderDistance 6
5250 ]
5251 ]
5252
5253 node
5254 [
5255 id 1
5256 graphics
5257 [
5258 w 297.0
5259 h 40
5260 type "rectangle"
5261 fill "#FFFFFF"
5262 fill2 "#FFFFFF"
5263 outline "#000000"
5264 ]
5265 LabelGraphics
5266 [
5267 text "Intermediate literal FunctionType"
5268 outline "#000000"
5269 fill "#FFFFFF"
5270 fontSize 16
5271 fontName "Monospace"
5272 autoSizePolicy "node_width"
5273 anchor "t"
5274 borderDistance 0.0
5275 ]
5276 LabelGraphics
5277 [
5278 text "
5279 FunctionType enum
5280 "
5281 fontSize 14
5282 fontName "Consolas"
5283 alignment "left"
5284 anchor "tl"
5285 borderDistance 6
5286 ]
5287 ]
5288
5289 node
5290 [
5291 id 2
5292 graphics
5293 [
5294 w 226.60000000000002
5295 h 40
5296 type "rectangle"
5297 fill "#FFFFFF"
5298 fill2 "#FFFFFF"
5299 outline "#000000"
5300 ]
5301 LabelGraphics
5302 [
5303 text "Leaf literal FunctionType"
5304 outline "#000000"
5305 fill "#FFFFFF"
5306 fontSize 16
5307 fontName "Monospace"
5308 autoSizePolicy "node_width"
5309 anchor "t"
5310 borderDistance 0.0
5311 ]
5312 LabelGraphics
5313 [
5314 text "
5315 FunctionType enum
5316 "
5317 fontSize 14
5318 fontName "Consolas"
5319 alignment "left"
5320 anchor "tl"
5321 borderDistance 6
5322 ]
5323 ]
5324
5325 node
5326 [
5327 id 3
5328 graphics
5329 [
5330 w 361.90000000000003
5331 h 54
5332 type "rectangle"
5333 fill "#FFFFFF"
5334 fill2 "#FFFFFF"
5335 outline "#000000"
5336 ]
5337 LabelGraphics
5338 [
5339 text "o 1"
5340 outline "#000000"
5341 fill "#FFFFFF"
5342 fontSize 16
5343 fontName "Monospace"
5344 autoSizePolicy "node_width"
5345 anchor "t"
5346 borderDistance 0.0
5347 ]
5348 LabelGraphics
5349 [
5350 text "
5351 FunctionalArchitectureModel class DefinedPart
5352 FunctionalArchitectureModel class
5353 "
5354 fontSize 14
5355 fontName "Consolas"
5356 alignment "left"
5357 anchor "tl"
5358 borderDistance 6
5359 ]
5360 ]
5361
5362 node
5363 [
5364 id 4
5365 graphics
5366 [
5367 w 41.800000000000004
5368 h 26
5369 type "rectangle"
5370 fill "#FFFFFF"
5371 fill2 "#FFFFFF"
5372 outline "#000000"
5373 ]
5374 LabelGraphics
5375 [
5376 text "true"
5377 outline "#000000"
5378 fill "#FFFFFF"
5379 fontSize 16
5380 fontName "Monospace"
5381 autoSizePolicy "node_width"
5382 anchor "t"
5383 borderDistance 0.0
5384 ]
5385 LabelGraphics
5386 [
5387 text "
5388 "
5389 fontSize 14
5390 fontName "Consolas"
5391 alignment "left"
5392 anchor "tl"
5393 borderDistance 6
5394 ]
5395 ]
5396
5397 node
5398 [
5399 id 5
5400 graphics
5401 [
5402 w 50.6
5403 h 26
5404 type "rectangle"
5405 fill "#FFFFFF"
5406 fill2 "#FFFFFF"
5407 outline "#000000"
5408 ]
5409 LabelGraphics
5410 [
5411 text "false"
5412 outline "#000000"
5413 fill "#FFFFFF"
5414 fontSize 16
5415 fontName "Monospace"
5416 autoSizePolicy "node_width"
5417 anchor "t"
5418 borderDistance 0.0
5419 ]
5420 LabelGraphics
5421 [
5422 text "
5423 "
5424 fontSize 14
5425 fontName "Consolas"
5426 alignment "left"
5427 anchor "tl"
5428 borderDistance 6
5429 ]
5430 ]
5431
5432 node
5433 [
5434 id 6
5435 graphics
5436 [
5437 w 192.50000000000003
5438 h 54
5439 type "rectangle"
5440 fill "#FFFFFF"
5441 fill2 "#FFFFFF"
5442 outline "#000000"
5443 ]
5444 LabelGraphics
5445 [
5446 text "null"
5447 outline "#000000"
5448 fill "#FFFFFF"
5449 fontSize 16
5450 fontName "Monospace"
5451 autoSizePolicy "node_width"
5452 anchor "t"
5453 borderDistance 0.0
5454 ]
5455 LabelGraphics
5456 [
5457 text "
5458 FunctionalElement class
5459 Function class
5460 "
5461 fontSize 14
5462 fontName "Consolas"
5463 alignment "left"
5464 anchor "tl"
5465 borderDistance 6
5466 ]
5467 ]
5468
5469 node
5470 [
5471 id 7
5472 graphics
5473 [
5474 w 112.2
5475 h 26
5476 type "rectangle"
5477 fill "#FFFFFF"
5478 fill2 "#FFFFFF"
5479 outline "#000000"
5480 ]
5481 LabelGraphics
5482 [
5483 text "New Integers"
5484 outline "#000000"
5485 fill "#FFFFFF"
5486 fontSize 16
5487 fontName "Monospace"
5488 autoSizePolicy "node_width"
5489 anchor "t"
5490 borderDistance 0.0
5491 ]
5492 LabelGraphics
5493 [
5494 text "
5495 "
5496 fontSize 14
5497 fontName "Consolas"
5498 alignment "left"
5499 anchor "tl"
5500 borderDistance 6
5501 ]
5502 ]
5503
5504 node
5505 [
5506 id 8
5507 graphics
5508 [
5509 w 85.80000000000001
5510 h 26
5511 type "rectangle"
5512 fill "#FFFFFF"
5513 fill2 "#FFFFFF"
5514 outline "#000000"
5515 ]
5516 LabelGraphics
5517 [
5518 text "New Reals"
5519 outline "#000000"
5520 fill "#FFFFFF"
5521 fontSize 16
5522 fontName "Monospace"
5523 autoSizePolicy "node_width"
5524 anchor "t"
5525 borderDistance 0.0
5526 ]
5527 LabelGraphics
5528 [
5529 text "
5530 "
5531 fontSize 14
5532 fontName "Consolas"
5533 alignment "left"
5534 anchor "tl"
5535 borderDistance 6
5536 ]
5537 ]
5538
5539 node
5540 [
5541 id 9
5542 graphics
5543 [
5544 w 103.4
5545 h 26
5546 type "rectangle"
5547 fill "#FFFFFF"
5548 fill2 "#FFFFFF"
5549 outline "#000000"
5550 ]
5551 LabelGraphics
5552 [
5553 text "New Strings"
5554 outline "#000000"
5555 fill "#FFFFFF"
5556 fontSize 16
5557 fontName "Monospace"
5558 autoSizePolicy "node_width"
5559 anchor "t"
5560 borderDistance 0.0
5561 ]
5562 LabelGraphics
5563 [
5564 text "
5565 "
5566 fontSize 14
5567 fontName "Consolas"
5568 alignment "left"
5569 anchor "tl"
5570 borderDistance 6
5571 ]
5572 ]
5573
5574 node
5575 [
5576 id 10
5577 graphics
5578 [
5579 w 103.4
5580 h 26
5581 type "rectangle"
5582 fill "#FFFFFF"
5583 fill2 "#FFFFFF"
5584 outline "#000000"
5585 ]
5586 LabelGraphics
5587 [
5588 text "New Objects"
5589 outline "#000000"
5590 fill "#FFFFFF"
5591 fontSize 16
5592 fontName "Monospace"
5593 autoSizePolicy "node_width"
5594 anchor "t"
5595 borderDistance 0.0
5596 ]
5597 LabelGraphics
5598 [
5599 text "
5600 "
5601 fontSize 14
5602 fontName "Consolas"
5603 alignment "left"
5604 anchor "tl"
5605 borderDistance 6
5606 ]
5607 ]
5608 edge
5609 [
5610 source 6
5611 target 3
5612 graphics
5613 [
5614 fill "#000000"
5615 targetArrow "standard"
5616 ]
5617 LabelGraphics
5618 [
5619 text "model reference FunctionalElement"
5620 fontSize 14
5621 fontName "Consolas"
5622 configuration "AutoFlippingLabel"
5623 model "six_pos"
5624 position "thead"
5625 ]
5626 ]
5627 edge
5628 [
5629 source 3
5630 target 6
5631 graphics
5632 [
5633 fill "#000000"
5634 width 3
5635 targetArrow "standard"
5636 ]
5637 LabelGraphics
5638 [
5639 text "rootElements reference FunctionalArchitectureModel"
5640 fontSize 14
5641 fontName "Consolas"
5642 configuration "AutoFlippingLabel"
5643 model "six_pos"
5644 position "thead"
5645 ]
5646 ]
5647 edge
5648 [
5649 source 6
5650 target 1
5651 graphics
5652 [
5653 fill "#000000"
5654 targetArrow "standard"
5655 ]
5656 LabelGraphics
5657 [
5658 text "type attribute Function"
5659 fontSize 14
5660 fontName "Consolas"
5661 configuration "AutoFlippingLabel"
5662 model "six_pos"
5663 position "thead"
5664 ]
5665 ]
5666]
5667graph
5668[
5669 node
5670 [
5671 id 0
5672 graphics
5673 [
5674 w 254.10000000000002
5675 h 110
5676 type "rectangle"
5677 fill "#FFFFFF"
5678 fill2 "#FFFFFF"
5679 outline "#000000"
5680 ]
5681 LabelGraphics
5682 [
5683 text "o 1"
5684 outline "#000000"
5685 fill "#FFFFFF"
5686 fontSize 16
5687 fontName "Monospace"
5688 autoSizePolicy "node_width"
5689 anchor "t"
5690 borderDistance 0.0
5691 ]
5692 LabelGraphics
5693 [
5694 text "
5695 EModelElement class DefinedPart
5696 ENamedElement class DefinedPart
5697 EPackage class DefinedPart
5698 EModelElement class
5699 ENamedElement class
5700 EPackage class
5701 "
5702 fontSize 14
5703 fontName "Consolas"
5704 alignment "left"
5705 anchor "tl"
5706 borderDistance 6
5707 ]
5708 ]
5709
5710 node
5711 [
5712 id 1
5713 graphics
5714 [
5715 w 41.800000000000004
5716 h 26
5717 type "rectangle"
5718 fill "#FFFFFF"
5719 fill2 "#FFFFFF"
5720 outline "#000000"
5721 ]
5722 LabelGraphics
5723 [
5724 text "true"
5725 outline "#000000"
5726 fill "#FFFFFF"
5727 fontSize 16
5728 fontName "Monospace"
5729 autoSizePolicy "node_width"
5730 anchor "t"
5731 borderDistance 0.0
5732 ]
5733 LabelGraphics
5734 [
5735 text "
5736 "
5737 fontSize 14
5738 fontName "Consolas"
5739 alignment "left"
5740 anchor "tl"
5741 borderDistance 6
5742 ]
5743 ]
5744
5745 node
5746 [
5747 id 2
5748 graphics
5749 [
5750 w 50.6
5751 h 26
5752 type "rectangle"
5753 fill "#FFFFFF"
5754 fill2 "#FFFFFF"
5755 outline "#000000"
5756 ]
5757 LabelGraphics
5758 [
5759 text "false"
5760 outline "#000000"
5761 fill "#FFFFFF"
5762 fontSize 16
5763 fontName "Monospace"
5764 autoSizePolicy "node_width"
5765 anchor "t"
5766 borderDistance 0.0
5767 ]
5768 LabelGraphics
5769 [
5770 text "
5771 "
5772 fontSize 14
5773 fontName "Consolas"
5774 alignment "left"
5775 anchor "tl"
5776 borderDistance 6
5777 ]
5778 ]
5779
5780 node
5781 [
5782 id 3
5783 graphics
5784 [
5785 w 24.200000000000003
5786 h 26
5787 type "rectangle"
5788 fill "#FFFFFF"
5789 fill2 "#FFFFFF"
5790 outline "#000000"
5791 ]
5792 LabelGraphics
5793 [
5794 text "-1"
5795 outline "#000000"
5796 fill "#FFFFFF"
5797 fontSize 16
5798 fontName "Monospace"
5799 autoSizePolicy "node_width"
5800 anchor "t"
5801 borderDistance 0.0
5802 ]
5803 LabelGraphics
5804 [
5805 text "
5806 "
5807 fontSize 14
5808 fontName "Consolas"
5809 alignment "left"
5810 anchor "tl"
5811 borderDistance 6
5812 ]
5813 ]
5814
5815 node
5816 [
5817 id 4
5818 graphics
5819 [
5820 w 15.400000000000002
5821 h 26
5822 type "rectangle"
5823 fill "#FFFFFF"
5824 fill2 "#FFFFFF"
5825 outline "#000000"
5826 ]
5827 LabelGraphics
5828 [
5829 text "0"
5830 outline "#000000"
5831 fill "#FFFFFF"
5832 fontSize 16
5833 fontName "Monospace"
5834 autoSizePolicy "node_width"
5835 anchor "t"
5836 borderDistance 0.0
5837 ]
5838 LabelGraphics
5839 [
5840 text "
5841 "
5842 fontSize 14
5843 fontName "Consolas"
5844 alignment "left"
5845 anchor "tl"
5846 borderDistance 6
5847 ]
5848 ]
5849
5850 node
5851 [
5852 id 5
5853 graphics
5854 [
5855 w 15.400000000000002
5856 h 26
5857 type "rectangle"
5858 fill "#FFFFFF"
5859 fill2 "#FFFFFF"
5860 outline "#000000"
5861 ]
5862 LabelGraphics
5863 [
5864 text "1"
5865 outline "#000000"
5866 fill "#FFFFFF"
5867 fontSize 16
5868 fontName "Monospace"
5869 autoSizePolicy "node_width"
5870 anchor "t"
5871 borderDistance 0.0
5872 ]
5873 LabelGraphics
5874 [
5875 text "
5876 "
5877 fontSize 14
5878 fontName "Consolas"
5879 alignment "left"
5880 anchor "tl"
5881 borderDistance 6
5882 ]
5883 ]
5884
5885 node
5886 [
5887 id 6
5888 graphics
5889 [
5890 w 33.0
5891 h 26
5892 type "rectangle"
5893 fill "#FFFFFF"
5894 fill2 "#FFFFFF"
5895 outline "#000000"
5896 ]
5897 LabelGraphics
5898 [
5899 text ""A""
5900 outline "#000000"
5901 fill "#FFFFFF"
5902 fontSize 16
5903 fontName "Monospace"
5904 autoSizePolicy "node_width"
5905 anchor "t"
5906 borderDistance 0.0
5907 ]
5908 LabelGraphics
5909 [
5910 text "
5911 "
5912 fontSize 14
5913 fontName "Consolas"
5914 alignment "left"
5915 anchor "tl"
5916 borderDistance 6
5917 ]
5918 ]
5919
5920 node
5921 [
5922 id 7
5923 graphics
5924 [
5925 w 33.0
5926 h 26
5927 type "rectangle"
5928 fill "#FFFFFF"
5929 fill2 "#FFFFFF"
5930 outline "#000000"
5931 ]
5932 LabelGraphics
5933 [
5934 text ""B""
5935 outline "#000000"
5936 fill "#FFFFFF"
5937 fontSize 16
5938 fontName "Monospace"
5939 autoSizePolicy "node_width"
5940 anchor "t"
5941 borderDistance 0.0
5942 ]
5943 LabelGraphics
5944 [
5945 text "
5946 "
5947 fontSize 14
5948 fontName "Consolas"
5949 alignment "left"
5950 anchor "tl"
5951 borderDistance 6
5952 ]
5953 ]
5954
5955 node
5956 [
5957 id 8
5958 graphics
5959 [
5960 w 94.60000000000001
5961 h 26
5962 type "rectangle"
5963 fill "#FFFFFF"
5964 fill2 "#FFFFFF"
5965 outline "#000000"
5966 ]
5967 LabelGraphics
5968 [
5969 text ""nsPrefix""
5970 outline "#000000"
5971 fill "#FFFFFF"
5972 fontSize 16
5973 fontName "Monospace"
5974 autoSizePolicy "node_width"
5975 anchor "t"
5976 borderDistance 0.0
5977 ]
5978 LabelGraphics
5979 [
5980 text "
5981 "
5982 fontSize 14
5983 fontName "Consolas"
5984 alignment "left"
5985 anchor "tl"
5986 borderDistance 6
5987 ]
5988 ]
5989
5990 node
5991 [
5992 id 9
5993 graphics
5994 [
5995 w 68.2
5996 h 26
5997 type "rectangle"
5998 fill "#FFFFFF"
5999 fill2 "#FFFFFF"
6000 outline "#000000"
6001 ]
6002 LabelGraphics
6003 [
6004 text ""nsUri""
6005 outline "#000000"
6006 fill "#FFFFFF"
6007 fontSize 16
6008 fontName "Monospace"
6009 autoSizePolicy "node_width"
6010 anchor "t"
6011 borderDistance 0.0
6012 ]
6013 LabelGraphics
6014 [
6015 text "
6016 "
6017 fontSize 14
6018 fontName "Consolas"
6019 alignment "left"
6020 anchor "tl"
6021 borderDistance 6
6022 ]
6023 ]
6024
6025 node
6026 [
6027 id 10
6028 graphics
6029 [
6030 w 121.00000000000001
6031 h 26
6032 type "rectangle"
6033 fill "#FFFFFF"
6034 fill2 "#FFFFFF"
6035 outline "#000000"
6036 ]
6037 LabelGraphics
6038 [
6039 text ""packageName""
6040 outline "#000000"
6041 fill "#FFFFFF"
6042 fontSize 16
6043 fontName "Monospace"
6044 autoSizePolicy "node_width"
6045 anchor "t"
6046 borderDistance 0.0
6047 ]
6048 LabelGraphics
6049 [
6050 text "
6051 "
6052 fontSize 14
6053 fontName "Consolas"
6054 alignment "left"
6055 anchor "tl"
6056 borderDistance 6
6057 ]
6058 ]
6059
6060 node
6061 [
6062 id 11
6063 graphics
6064 [
6065 w 269.5
6066 h 110
6067 type "rectangle"
6068 fill "#FFFFFF"
6069 fill2 "#FFFFFF"
6070 outline "#000000"
6071 ]
6072 LabelGraphics
6073 [
6074 text "null"
6075 outline "#000000"
6076 fill "#FFFFFF"
6077 fontSize 16
6078 fontName "Monospace"
6079 autoSizePolicy "node_width"
6080 anchor "t"
6081 borderDistance 0.0
6082 ]
6083 LabelGraphics
6084 [
6085 text "
6086 EClassifier class
6087 EDataType class
6088 EModelElement class
6089 ENamedElement class
6090 EModelElement class UndefinedPart
6091 ENamedElement class UndefinedPart
6092 "
6093 fontSize 14
6094 fontName "Consolas"
6095 alignment "left"
6096 anchor "tl"
6097 borderDistance 6
6098 ]
6099 ]
6100
6101 node
6102 [
6103 id 12
6104 graphics
6105 [
6106 w 269.5
6107 h 68
6108 type "rectangle"
6109 fill "#FFFFFF"
6110 fill2 "#FFFFFF"
6111 outline "#000000"
6112 ]
6113 LabelGraphics
6114 [
6115 text "null"
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 EAnnotation class
6128 EModelElement class
6129 EModelElement class UndefinedPart
6130 "
6131 fontSize 14
6132 fontName "Consolas"
6133 alignment "left"
6134 anchor "tl"
6135 borderDistance 6
6136 ]
6137 ]
6138
6139 node
6140 [
6141 id 13
6142 graphics
6143 [
6144 w 269.5
6145 h 110
6146 type "rectangle"
6147 fill "#FFFFFF"
6148 fill2 "#FFFFFF"
6149 outline "#000000"
6150 ]
6151 LabelGraphics
6152 [
6153 text "null"
6154 outline "#000000"
6155 fill "#FFFFFF"
6156 fontSize 16
6157 fontName "Monospace"
6158 autoSizePolicy "node_width"
6159 anchor "t"
6160 borderDistance 0.0
6161 ]
6162 LabelGraphics
6163 [
6164 text "
6165 EClass class
6166 EClassifier class
6167 EModelElement class
6168 ENamedElement class
6169 EModelElement class UndefinedPart
6170 ENamedElement class UndefinedPart
6171 "
6172 fontSize 14
6173 fontName "Consolas"
6174 alignment "left"
6175 anchor "tl"
6176 borderDistance 6
6177 ]
6178 ]
6179
6180 node
6181 [
6182 id 14
6183 graphics
6184 [
6185 w 269.5
6186 h 110
6187 type "rectangle"
6188 fill "#FFFFFF"
6189 fill2 "#FFFFFF"
6190 outline "#000000"
6191 ]
6192 LabelGraphics
6193 [
6194 text "null"
6195 outline "#000000"
6196 fill "#FFFFFF"
6197 fontSize 16
6198 fontName "Monospace"
6199 autoSizePolicy "node_width"
6200 anchor "t"
6201 borderDistance 0.0
6202 ]
6203 LabelGraphics
6204 [
6205 text "
6206 EClassifier class
6207 EDataType class
6208 EModelElement class
6209 ENamedElement class
6210 EModelElement class UndefinedPart
6211 ENamedElement class UndefinedPart
6212 "
6213 fontSize 14
6214 fontName "Consolas"
6215 alignment "left"
6216 anchor "tl"
6217 borderDistance 6
6218 ]
6219 ]
6220
6221 node
6222 [
6223 id 15
6224 graphics
6225 [
6226 w 269.5
6227 h 68
6228 type "rectangle"
6229 fill "#FFFFFF"
6230 fill2 "#FFFFFF"
6231 outline "#000000"
6232 ]
6233 LabelGraphics
6234 [
6235 text "null"
6236 outline "#000000"
6237 fill "#FFFFFF"
6238 fontSize 16
6239 fontName "Monospace"
6240 autoSizePolicy "node_width"
6241 anchor "t"
6242 borderDistance 0.0
6243 ]
6244 LabelGraphics
6245 [
6246 text "
6247 EAnnotation class
6248 EModelElement class
6249 EModelElement class UndefinedPart
6250 "
6251 fontSize 14
6252 fontName "Consolas"
6253 alignment "left"
6254 anchor "tl"
6255 borderDistance 6
6256 ]
6257 ]
6258
6259 node
6260 [
6261 id 16
6262 graphics
6263 [
6264 w 112.2
6265 h 26
6266 type "rectangle"
6267 fill "#FFFFFF"
6268 fill2 "#FFFFFF"
6269 outline "#000000"
6270 ]
6271 LabelGraphics
6272 [
6273 text "New Integers"
6274 outline "#000000"
6275 fill "#FFFFFF"
6276 fontSize 16
6277 fontName "Monospace"
6278 autoSizePolicy "node_width"
6279 anchor "t"
6280 borderDistance 0.0
6281 ]
6282 LabelGraphics
6283 [
6284 text "
6285 "
6286 fontSize 14
6287 fontName "Consolas"
6288 alignment "left"
6289 anchor "tl"
6290 borderDistance 6
6291 ]
6292 ]
6293
6294 node
6295 [
6296 id 17
6297 graphics
6298 [
6299 w 85.80000000000001
6300 h 26
6301 type "rectangle"
6302 fill "#FFFFFF"
6303 fill2 "#FFFFFF"
6304 outline "#000000"
6305 ]
6306 LabelGraphics
6307 [
6308 text "New Reals"
6309 outline "#000000"
6310 fill "#FFFFFF"
6311 fontSize 16
6312 fontName "Monospace"
6313 autoSizePolicy "node_width"
6314 anchor "t"
6315 borderDistance 0.0
6316 ]
6317 LabelGraphics
6318 [
6319 text "
6320 "
6321 fontSize 14
6322 fontName "Consolas"
6323 alignment "left"
6324 anchor "tl"
6325 borderDistance 6
6326 ]
6327 ]
6328
6329 node
6330 [
6331 id 18
6332 graphics
6333 [
6334 w 103.4
6335 h 26
6336 type "rectangle"
6337 fill "#FFFFFF"
6338 fill2 "#FFFFFF"
6339 outline "#000000"
6340 ]
6341 LabelGraphics
6342 [
6343 text "New Strings"
6344 outline "#000000"
6345 fill "#FFFFFF"
6346 fontSize 16
6347 fontName "Monospace"
6348 autoSizePolicy "node_width"
6349 anchor "t"
6350 borderDistance 0.0
6351 ]
6352 LabelGraphics
6353 [
6354 text "
6355 "
6356 fontSize 14
6357 fontName "Consolas"
6358 alignment "left"
6359 anchor "tl"
6360 borderDistance 6
6361 ]
6362 ]
6363
6364 node
6365 [
6366 id 19
6367 graphics
6368 [
6369 w 103.4
6370 h 26
6371 type "rectangle"
6372 fill "#FFFFFF"
6373 fill2 "#FFFFFF"
6374 outline "#000000"
6375 ]
6376 LabelGraphics
6377 [
6378 text "New Objects"
6379 outline "#000000"
6380 fill "#FFFFFF"
6381 fontSize 16
6382 fontName "Monospace"
6383 autoSizePolicy "node_width"
6384 anchor "t"
6385 borderDistance 0.0
6386 ]
6387 LabelGraphics
6388 [
6389 text "
6390 "
6391 fontSize 14
6392 fontName "Consolas"
6393 alignment "left"
6394 anchor "tl"
6395 borderDistance 6
6396 ]
6397 ]
6398 edge
6399 [
6400 source 12
6401 target 0
6402 graphics
6403 [
6404 fill "#000000"
6405 targetArrow "standard"
6406 ]
6407 LabelGraphics
6408 [
6409 text "eModelElement reference EAnnotation"
6410 fontSize 14
6411 fontName "Consolas"
6412 configuration "AutoFlippingLabel"
6413 model "six_pos"
6414 position "thead"
6415 ]
6416 ]
6417 edge
6418 [
6419 source 15
6420 target 0
6421 graphics
6422 [
6423 fill "#000000"
6424 targetArrow "standard"
6425 ]
6426 LabelGraphics
6427 [
6428 text "eModelElement reference EAnnotation"
6429 fontSize 14
6430 fontName "Consolas"
6431 configuration "AutoFlippingLabel"
6432 model "six_pos"
6433 position "thead"
6434 ]
6435 ]
6436 edge
6437 [
6438 source 11
6439 target 0
6440 graphics
6441 [
6442 fill "#000000"
6443 targetArrow "standard"
6444 ]
6445 LabelGraphics
6446 [
6447 text "ePackage reference EClassifier"
6448 fontSize 14
6449 fontName "Consolas"
6450 configuration "AutoFlippingLabel"
6451 model "six_pos"
6452 position "thead"
6453 ]
6454 ]
6455 edge
6456 [
6457 source 13
6458 target 0
6459 graphics
6460 [
6461 fill "#000000"
6462 targetArrow "standard"
6463 ]
6464 LabelGraphics
6465 [
6466 text "ePackage reference EClassifier"
6467 fontSize 14
6468 fontName "Consolas"
6469 configuration "AutoFlippingLabel"
6470 model "six_pos"
6471 position "thead"
6472 ]
6473 ]
6474 edge
6475 [
6476 source 14
6477 target 0
6478 graphics
6479 [
6480 fill "#000000"
6481 targetArrow "standard"
6482 ]
6483 LabelGraphics
6484 [
6485 text "ePackage reference EClassifier"
6486 fontSize 14
6487 fontName "Consolas"
6488 configuration "AutoFlippingLabel"
6489 model "six_pos"
6490 position "thead"
6491 ]
6492 ]
6493 edge
6494 [
6495 source 0
6496 target 12
6497 graphics
6498 [
6499 fill "#000000"
6500 width 3
6501 targetArrow "standard"
6502 ]
6503 LabelGraphics
6504 [
6505 text "eAnnotations reference EModelElement"
6506 fontSize 14
6507 fontName "Consolas"
6508 configuration "AutoFlippingLabel"
6509 model "six_pos"
6510 position "thead"
6511 ]
6512 ]
6513 edge
6514 [
6515 source 0
6516 target 15
6517 graphics
6518 [
6519 fill "#000000"
6520 width 3
6521 targetArrow "standard"
6522 ]
6523 LabelGraphics
6524 [
6525 text "eAnnotations reference EModelElement"
6526 fontSize 14
6527 fontName "Consolas"
6528 configuration "AutoFlippingLabel"
6529 model "six_pos"
6530 position "thead"
6531 ]
6532 ]
6533 edge
6534 [
6535 source 0
6536 target 11
6537 graphics
6538 [
6539 fill "#000000"
6540 width 3
6541 targetArrow "standard"
6542 ]
6543 LabelGraphics
6544 [
6545 text "eClassifiers reference EPackage"
6546 fontSize 14
6547 fontName "Consolas"
6548 configuration "AutoFlippingLabel"
6549 model "six_pos"
6550 position "thead"
6551 ]
6552 ]
6553 edge
6554 [
6555 source 0
6556 target 13
6557 graphics
6558 [
6559 fill "#000000"
6560 width 3
6561 targetArrow "standard"
6562 ]
6563 LabelGraphics
6564 [
6565 text "eClassifiers reference EPackage"
6566 fontSize 14
6567 fontName "Consolas"
6568 configuration "AutoFlippingLabel"
6569 model "six_pos"
6570 position "thead"
6571 ]
6572 ]
6573 edge
6574 [
6575 source 0
6576 target 14
6577 graphics
6578 [
6579 fill "#000000"
6580 width 3
6581 targetArrow "standard"
6582 ]
6583 LabelGraphics
6584 [
6585 text "eClassifiers reference EPackage"
6586 fontSize 14
6587 fontName "Consolas"
6588 configuration "AutoFlippingLabel"
6589 model "six_pos"
6590 position "thead"
6591 ]
6592 ]
6593 edge
6594 [
6595 source 12
6596 target 7
6597 graphics
6598 [
6599 fill "#000000"
6600 targetArrow "standard"
6601 ]
6602 LabelGraphics
6603 [
6604 text "source attribute EAnnotation"
6605 fontSize 14
6606 fontName "Consolas"
6607 configuration "AutoFlippingLabel"
6608 model "six_pos"
6609 position "thead"
6610 ]
6611 ]
6612 edge
6613 [
6614 source 11
6615 target 8
6616 graphics
6617 [
6618 fill "#000000"
6619 targetArrow "standard"
6620 ]
6621 LabelGraphics
6622 [
6623 text "instanceClassName attribute EClassifier"
6624 fontSize 14
6625 fontName "Consolas"
6626 configuration "AutoFlippingLabel"
6627 model "six_pos"
6628 position "thead"
6629 ]
6630 ]
6631 edge
6632 [
6633 source 11
6634 target 9
6635 graphics
6636 [
6637 fill "#000000"
6638 targetArrow "standard"
6639 ]
6640 LabelGraphics
6641 [
6642 text "instanceTypeName attribute EClassifier"
6643 fontSize 14
6644 fontName "Consolas"
6645 configuration "AutoFlippingLabel"
6646 model "six_pos"
6647 position "thead"
6648 ]
6649 ]
6650 edge
6651 [
6652 source 0
6653 target 10
6654 graphics
6655 [
6656 fill "#000000"
6657 targetArrow "standard"
6658 ]
6659 LabelGraphics
6660 [
6661 text "name attribute ENamedElement"
6662 fontSize 14
6663 fontName "Consolas"
6664 configuration "AutoFlippingLabel"
6665 model "six_pos"
6666 position "thead"
6667 ]
6668 ]
6669 edge
6670 [
6671 source 11
6672 target 8
6673 graphics
6674 [
6675 fill "#000000"
6676 targetArrow "standard"
6677 ]
6678 LabelGraphics
6679 [
6680 text "name attribute ENamedElement"
6681 fontSize 14
6682 fontName "Consolas"
6683 configuration "AutoFlippingLabel"
6684 model "six_pos"
6685 position "thead"
6686 ]
6687 ]
6688 edge
6689 [
6690 source 13
6691 target 9
6692 graphics
6693 [
6694 fill "#000000"
6695 targetArrow "standard"
6696 ]
6697 LabelGraphics
6698 [
6699 text "name attribute ENamedElement"
6700 fontSize 14
6701 fontName "Consolas"
6702 configuration "AutoFlippingLabel"
6703 model "six_pos"
6704 position "thead"
6705 ]
6706 ]
6707 edge
6708 [
6709 source 14
6710 target 8
6711 graphics
6712 [
6713 fill "#000000"
6714 targetArrow "standard"
6715 ]
6716 LabelGraphics
6717 [
6718 text "name attribute ENamedElement"
6719 fontSize 14
6720 fontName "Consolas"
6721 configuration "AutoFlippingLabel"
6722 model "six_pos"
6723 position "thead"
6724 ]
6725 ]
6726 edge
6727 [
6728 source 0
6729 target 9
6730 graphics
6731 [
6732 fill "#000000"
6733 targetArrow "standard"
6734 ]
6735 LabelGraphics
6736 [
6737 text "nsURI attribute EPackage"
6738 fontSize 14
6739 fontName "Consolas"
6740 configuration "AutoFlippingLabel"
6741 model "six_pos"
6742 position "thead"
6743 ]
6744 ]
6745 edge
6746 [
6747 source 0
6748 target 8
6749 graphics
6750 [
6751 fill "#000000"
6752 targetArrow "standard"
6753 ]
6754 LabelGraphics
6755 [
6756 text "nsPrefix attribute EPackage"
6757 fontSize 14
6758 fontName "Consolas"
6759 configuration "AutoFlippingLabel"
6760 model "six_pos"
6761 position "thead"
6762 ]
6763 ]
6764]
6765graph
6766[
6767 node
6768 [
6769 id 0
6770 graphics
6771 [
6772 w 254.10000000000002
6773 h 110
6774 type "rectangle"
6775 fill "#FFFFFF"
6776 fill2 "#FFFFFF"
6777 outline "#000000"
6778 ]
6779 LabelGraphics
6780 [
6781 text "o 1"
6782 outline "#000000"
6783 fill "#FFFFFF"
6784 fontSize 16
6785 fontName "Monospace"
6786 autoSizePolicy "node_width"
6787 anchor "t"
6788 borderDistance 0.0
6789 ]
6790 LabelGraphics
6791 [
6792 text "
6793 EModelElement class DefinedPart
6794 ENamedElement class DefinedPart
6795 EPackage class DefinedPart
6796 EModelElement class
6797 ENamedElement class
6798 EPackage class
6799 "
6800 fontSize 14
6801 fontName "Consolas"
6802 alignment "left"
6803 anchor "tl"
6804 borderDistance 6
6805 ]
6806 ]
6807
6808 node
6809 [
6810 id 1
6811 graphics
6812 [
6813 w 41.800000000000004
6814 h 26
6815 type "rectangle"
6816 fill "#FFFFFF"
6817 fill2 "#FFFFFF"
6818 outline "#000000"
6819 ]
6820 LabelGraphics
6821 [
6822 text "true"
6823 outline "#000000"
6824 fill "#FFFFFF"
6825 fontSize 16
6826 fontName "Monospace"
6827 autoSizePolicy "node_width"
6828 anchor "t"
6829 borderDistance 0.0
6830 ]
6831 LabelGraphics
6832 [
6833 text "
6834 "
6835 fontSize 14
6836 fontName "Consolas"
6837 alignment "left"
6838 anchor "tl"
6839 borderDistance 6
6840 ]
6841 ]
6842
6843 node
6844 [
6845 id 2
6846 graphics
6847 [
6848 w 50.6
6849 h 26
6850 type "rectangle"
6851 fill "#FFFFFF"
6852 fill2 "#FFFFFF"
6853 outline "#000000"
6854 ]
6855 LabelGraphics
6856 [
6857 text "false"
6858 outline "#000000"
6859 fill "#FFFFFF"
6860 fontSize 16
6861 fontName "Monospace"
6862 autoSizePolicy "node_width"
6863 anchor "t"
6864 borderDistance 0.0
6865 ]
6866 LabelGraphics
6867 [
6868 text "
6869 "
6870 fontSize 14
6871 fontName "Consolas"
6872 alignment "left"
6873 anchor "tl"
6874 borderDistance 6
6875 ]
6876 ]
6877
6878 node
6879 [
6880 id 3
6881 graphics
6882 [
6883 w 24.200000000000003
6884 h 26
6885 type "rectangle"
6886 fill "#FFFFFF"
6887 fill2 "#FFFFFF"
6888 outline "#000000"
6889 ]
6890 LabelGraphics
6891 [
6892 text "-1"
6893 outline "#000000"
6894 fill "#FFFFFF"
6895 fontSize 16
6896 fontName "Monospace"
6897 autoSizePolicy "node_width"
6898 anchor "t"
6899 borderDistance 0.0
6900 ]
6901 LabelGraphics
6902 [
6903 text "
6904 "
6905 fontSize 14
6906 fontName "Consolas"
6907 alignment "left"
6908 anchor "tl"
6909 borderDistance 6
6910 ]
6911 ]
6912
6913 node
6914 [
6915 id 4
6916 graphics
6917 [
6918 w 15.400000000000002
6919 h 26
6920 type "rectangle"
6921 fill "#FFFFFF"
6922 fill2 "#FFFFFF"
6923 outline "#000000"
6924 ]
6925 LabelGraphics
6926 [
6927 text "0"
6928 outline "#000000"
6929 fill "#FFFFFF"
6930 fontSize 16
6931 fontName "Monospace"
6932 autoSizePolicy "node_width"
6933 anchor "t"
6934 borderDistance 0.0
6935 ]
6936 LabelGraphics
6937 [
6938 text "
6939 "
6940 fontSize 14
6941 fontName "Consolas"
6942 alignment "left"
6943 anchor "tl"
6944 borderDistance 6
6945 ]
6946 ]
6947
6948 node
6949 [
6950 id 5
6951 graphics
6952 [
6953 w 15.400000000000002
6954 h 26
6955 type "rectangle"
6956 fill "#FFFFFF"
6957 fill2 "#FFFFFF"
6958 outline "#000000"
6959 ]
6960 LabelGraphics
6961 [
6962 text "1"
6963 outline "#000000"
6964 fill "#FFFFFF"
6965 fontSize 16
6966 fontName "Monospace"
6967 autoSizePolicy "node_width"
6968 anchor "t"
6969 borderDistance 0.0
6970 ]
6971 LabelGraphics
6972 [
6973 text "
6974 "
6975 fontSize 14
6976 fontName "Consolas"
6977 alignment "left"
6978 anchor "tl"
6979 borderDistance 6
6980 ]
6981 ]
6982
6983 node
6984 [
6985 id 6
6986 graphics
6987 [
6988 w 33.0
6989 h 26
6990 type "rectangle"
6991 fill "#FFFFFF"
6992 fill2 "#FFFFFF"
6993 outline "#000000"
6994 ]
6995 LabelGraphics
6996 [
6997 text ""A""
6998 outline "#000000"
6999 fill "#FFFFFF"
7000 fontSize 16
7001 fontName "Monospace"
7002 autoSizePolicy "node_width"
7003 anchor "t"
7004 borderDistance 0.0
7005 ]
7006 LabelGraphics
7007 [
7008 text "
7009 "
7010 fontSize 14
7011 fontName "Consolas"
7012 alignment "left"
7013 anchor "tl"
7014 borderDistance 6
7015 ]
7016 ]
7017
7018 node
7019 [
7020 id 7
7021 graphics
7022 [
7023 w 33.0
7024 h 26
7025 type "rectangle"
7026 fill "#FFFFFF"
7027 fill2 "#FFFFFF"
7028 outline "#000000"
7029 ]
7030 LabelGraphics
7031 [
7032 text ""B""
7033 outline "#000000"
7034 fill "#FFFFFF"
7035 fontSize 16
7036 fontName "Monospace"
7037 autoSizePolicy "node_width"
7038 anchor "t"
7039 borderDistance 0.0
7040 ]
7041 LabelGraphics
7042 [
7043 text "
7044 "
7045 fontSize 14
7046 fontName "Consolas"
7047 alignment "left"
7048 anchor "tl"
7049 borderDistance 6
7050 ]
7051 ]
7052
7053 node
7054 [
7055 id 8
7056 graphics
7057 [
7058 w 94.60000000000001
7059 h 26
7060 type "rectangle"
7061 fill "#FFFFFF"
7062 fill2 "#FFFFFF"
7063 outline "#000000"
7064 ]
7065 LabelGraphics
7066 [
7067 text ""nsPrefix""
7068 outline "#000000"
7069 fill "#FFFFFF"
7070 fontSize 16
7071 fontName "Monospace"
7072 autoSizePolicy "node_width"
7073 anchor "t"
7074 borderDistance 0.0
7075 ]
7076 LabelGraphics
7077 [
7078 text "
7079 "
7080 fontSize 14
7081 fontName "Consolas"
7082 alignment "left"
7083 anchor "tl"
7084 borderDistance 6
7085 ]
7086 ]
7087
7088 node
7089 [
7090 id 9
7091 graphics
7092 [
7093 w 68.2
7094 h 26
7095 type "rectangle"
7096 fill "#FFFFFF"
7097 fill2 "#FFFFFF"
7098 outline "#000000"
7099 ]
7100 LabelGraphics
7101 [
7102 text ""nsUri""
7103 outline "#000000"
7104 fill "#FFFFFF"
7105 fontSize 16
7106 fontName "Monospace"
7107 autoSizePolicy "node_width"
7108 anchor "t"
7109 borderDistance 0.0
7110 ]
7111 LabelGraphics
7112 [
7113 text "
7114 "
7115 fontSize 14
7116 fontName "Consolas"
7117 alignment "left"
7118 anchor "tl"
7119 borderDistance 6
7120 ]
7121 ]
7122
7123 node
7124 [
7125 id 10
7126 graphics
7127 [
7128 w 121.00000000000001
7129 h 26
7130 type "rectangle"
7131 fill "#FFFFFF"
7132 fill2 "#FFFFFF"
7133 outline "#000000"
7134 ]
7135 LabelGraphics
7136 [
7137 text ""packageName""
7138 outline "#000000"
7139 fill "#FFFFFF"
7140 fontSize 16
7141 fontName "Monospace"
7142 autoSizePolicy "node_width"
7143 anchor "t"
7144 borderDistance 0.0
7145 ]
7146 LabelGraphics
7147 [
7148 text "
7149 "
7150 fontSize 14
7151 fontName "Consolas"
7152 alignment "left"
7153 anchor "tl"
7154 borderDistance 6
7155 ]
7156 ]
7157
7158 node
7159 [
7160 id 11
7161 graphics
7162 [
7163 w 269.5
7164 h 124
7165 type "rectangle"
7166 fill "#FFFFFF"
7167 fill2 "#FFFFFF"
7168 outline "#000000"
7169 ]
7170 LabelGraphics
7171 [
7172 text "null"
7173 outline "#000000"
7174 fill "#FFFFFF"
7175 fontSize 16
7176 fontName "Monospace"
7177 autoSizePolicy "node_width"
7178 anchor "t"
7179 borderDistance 0.0
7180 ]
7181 LabelGraphics
7182 [
7183 text "
7184 EClassifier class
7185 EDataType class
7186 EEnum class
7187 EModelElement class
7188 ENamedElement class
7189 EModelElement class UndefinedPart
7190 ENamedElement class UndefinedPart
7191 "
7192 fontSize 14
7193 fontName "Consolas"
7194 alignment "left"
7195 anchor "tl"
7196 borderDistance 6
7197 ]
7198 ]
7199
7200 node
7201 [
7202 id 12
7203 graphics
7204 [
7205 w 269.5
7206 h 124
7207 type "rectangle"
7208 fill "#FFFFFF"
7209 fill2 "#FFFFFF"
7210 outline "#000000"
7211 ]
7212 LabelGraphics
7213 [
7214 text "null"
7215 outline "#000000"
7216 fill "#FFFFFF"
7217 fontSize 16
7218 fontName "Monospace"
7219 autoSizePolicy "node_width"
7220 anchor "t"
7221 borderDistance 0.0
7222 ]
7223 LabelGraphics
7224 [
7225 text "
7226 EClassifier class
7227 EDataType class
7228 EEnum class
7229 EModelElement class
7230 ENamedElement class
7231 EModelElement class UndefinedPart
7232 ENamedElement class UndefinedPart
7233 "
7234 fontSize 14
7235 fontName "Consolas"
7236 alignment "left"
7237 anchor "tl"
7238 borderDistance 6
7239 ]
7240 ]
7241
7242 node
7243 [
7244 id 13
7245 graphics
7246 [
7247 w 269.5
7248 h 96
7249 type "rectangle"
7250 fill "#FFFFFF"
7251 fill2 "#FFFFFF"
7252 outline "#000000"
7253 ]
7254 LabelGraphics
7255 [
7256 text "null"
7257 outline "#000000"
7258 fill "#FFFFFF"
7259 fontSize 16
7260 fontName "Monospace"
7261 autoSizePolicy "node_width"
7262 anchor "t"
7263 borderDistance 0.0
7264 ]
7265 LabelGraphics
7266 [
7267 text "
7268 EEnumLiteral class
7269 EModelElement class
7270 ENamedElement class
7271 EModelElement class UndefinedPart
7272 ENamedElement class UndefinedPart
7273 "
7274 fontSize 14
7275 fontName "Consolas"
7276 alignment "left"
7277 anchor "tl"
7278 borderDistance 6
7279 ]
7280 ]
7281
7282 node
7283 [
7284 id 14
7285 graphics
7286 [
7287 w 269.5
7288 h 68
7289 type "rectangle"
7290 fill "#FFFFFF"
7291 fill2 "#FFFFFF"
7292 outline "#000000"
7293 ]
7294 LabelGraphics
7295 [
7296 text "null"
7297 outline "#000000"
7298 fill "#FFFFFF"
7299 fontSize 16
7300 fontName "Monospace"
7301 autoSizePolicy "node_width"
7302 anchor "t"
7303 borderDistance 0.0
7304 ]
7305 LabelGraphics
7306 [
7307 text "
7308 EAnnotation class
7309 EModelElement class
7310 EModelElement class UndefinedPart
7311 "
7312 fontSize 14
7313 fontName "Consolas"
7314 alignment "left"
7315 anchor "tl"
7316 borderDistance 6
7317 ]
7318 ]
7319
7320 node
7321 [
7322 id 15
7323 graphics
7324 [
7325 w 269.5
7326 h 96
7327 type "rectangle"
7328 fill "#FFFFFF"
7329 fill2 "#FFFFFF"
7330 outline "#000000"
7331 ]
7332 LabelGraphics
7333 [
7334 text "null"
7335 outline "#000000"
7336 fill "#FFFFFF"
7337 fontSize 16
7338 fontName "Monospace"
7339 autoSizePolicy "node_width"
7340 anchor "t"
7341 borderDistance 0.0
7342 ]
7343 LabelGraphics
7344 [
7345 text "
7346 EModelElement class
7347 ENamedElement class
7348 ETypeParameter class
7349 EModelElement class UndefinedPart
7350 ENamedElement class UndefinedPart
7351 "
7352 fontSize 14
7353 fontName "Consolas"
7354 alignment "left"
7355 anchor "tl"
7356 borderDistance 6
7357 ]
7358 ]
7359
7360 node
7361 [
7362 id 16
7363 graphics
7364 [
7365 w 112.2
7366 h 26
7367 type "rectangle"
7368 fill "#FFFFFF"
7369 fill2 "#FFFFFF"
7370 outline "#000000"
7371 ]
7372 LabelGraphics
7373 [
7374 text "New Integers"
7375 outline "#000000"
7376 fill "#FFFFFF"
7377 fontSize 16
7378 fontName "Monospace"
7379 autoSizePolicy "node_width"
7380 anchor "t"
7381 borderDistance 0.0
7382 ]
7383 LabelGraphics
7384 [
7385 text "
7386 "
7387 fontSize 14
7388 fontName "Consolas"
7389 alignment "left"
7390 anchor "tl"
7391 borderDistance 6
7392 ]
7393 ]
7394
7395 node
7396 [
7397 id 17
7398 graphics
7399 [
7400 w 85.80000000000001
7401 h 26
7402 type "rectangle"
7403 fill "#FFFFFF"
7404 fill2 "#FFFFFF"
7405 outline "#000000"
7406 ]
7407 LabelGraphics
7408 [
7409 text "New Reals"
7410 outline "#000000"
7411 fill "#FFFFFF"
7412 fontSize 16
7413 fontName "Monospace"
7414 autoSizePolicy "node_width"
7415 anchor "t"
7416 borderDistance 0.0
7417 ]
7418 LabelGraphics
7419 [
7420 text "
7421 "
7422 fontSize 14
7423 fontName "Consolas"
7424 alignment "left"
7425 anchor "tl"
7426 borderDistance 6
7427 ]
7428 ]
7429
7430 node
7431 [
7432 id 18
7433 graphics
7434 [
7435 w 103.4
7436 h 26
7437 type "rectangle"
7438 fill "#FFFFFF"
7439 fill2 "#FFFFFF"
7440 outline "#000000"
7441 ]
7442 LabelGraphics
7443 [
7444 text "New Strings"
7445 outline "#000000"
7446 fill "#FFFFFF"
7447 fontSize 16
7448 fontName "Monospace"
7449 autoSizePolicy "node_width"
7450 anchor "t"
7451 borderDistance 0.0
7452 ]
7453 LabelGraphics
7454 [
7455 text "
7456 "
7457 fontSize 14
7458 fontName "Consolas"
7459 alignment "left"
7460 anchor "tl"
7461 borderDistance 6
7462 ]
7463 ]
7464
7465 node
7466 [
7467 id 19
7468 graphics
7469 [
7470 w 103.4
7471 h 26
7472 type "rectangle"
7473 fill "#FFFFFF"
7474 fill2 "#FFFFFF"
7475 outline "#000000"
7476 ]
7477 LabelGraphics
7478 [
7479 text "New Objects"
7480 outline "#000000"
7481 fill "#FFFFFF"
7482 fontSize 16
7483 fontName "Monospace"
7484 autoSizePolicy "node_width"
7485 anchor "t"
7486 borderDistance 0.0
7487 ]
7488 LabelGraphics
7489 [
7490 text "
7491 "
7492 fontSize 14
7493 fontName "Consolas"
7494 alignment "left"
7495 anchor "tl"
7496 borderDistance 6
7497 ]
7498 ]
7499 edge
7500 [
7501 source 14
7502 target 0
7503 graphics
7504 [
7505 fill "#000000"
7506 targetArrow "standard"
7507 ]
7508 LabelGraphics
7509 [
7510 text "eModelElement reference EAnnotation"
7511 fontSize 14
7512 fontName "Consolas"
7513 configuration "AutoFlippingLabel"
7514 model "six_pos"
7515 position "thead"
7516 ]
7517 ]
7518 edge
7519 [
7520 source 11
7521 target 0
7522 graphics
7523 [
7524 fill "#000000"
7525 targetArrow "standard"
7526 ]
7527 LabelGraphics
7528 [
7529 text "ePackage reference EClassifier"
7530 fontSize 14
7531 fontName "Consolas"
7532 configuration "AutoFlippingLabel"
7533 model "six_pos"
7534 position "thead"
7535 ]
7536 ]
7537 edge
7538 [
7539 source 12
7540 target 0
7541 graphics
7542 [
7543 fill "#000000"
7544 targetArrow "standard"
7545 ]
7546 LabelGraphics
7547 [
7548 text "ePackage reference EClassifier"
7549 fontSize 14
7550 fontName "Consolas"
7551 configuration "AutoFlippingLabel"
7552 model "six_pos"
7553 position "thead"
7554 ]
7555 ]
7556 edge
7557 [
7558 source 12
7559 target 15
7560 graphics
7561 [
7562 fill "#000000"
7563 width 3
7564 targetArrow "standard"
7565 ]
7566 LabelGraphics
7567 [
7568 text "eTypeParameters reference EClassifier"
7569 fontSize 14
7570 fontName "Consolas"
7571 configuration "AutoFlippingLabel"
7572 model "six_pos"
7573 position "thead"
7574 ]
7575 ]
7576 edge
7577 [
7578 source 11
7579 target 13
7580 graphics
7581 [
7582 fill "#000000"
7583 width 3
7584 targetArrow "standard"
7585 ]
7586 LabelGraphics
7587 [
7588 text "eLiterals reference EEnum"
7589 fontSize 14
7590 fontName "Consolas"
7591 configuration "AutoFlippingLabel"
7592 model "six_pos"
7593 position "thead"
7594 ]
7595 ]
7596 edge
7597 [
7598 source 13
7599 target 11
7600 graphics
7601 [
7602 fill "#000000"
7603 targetArrow "standard"
7604 ]
7605 LabelGraphics
7606 [
7607 text "eEnum reference EEnumLiteral"
7608 fontSize 14
7609 fontName "Consolas"
7610 configuration "AutoFlippingLabel"
7611 model "six_pos"
7612 position "thead"
7613 ]
7614 ]
7615 edge
7616 [
7617 source 0
7618 target 14
7619 graphics
7620 [
7621 fill "#000000"
7622 width 3
7623 targetArrow "standard"
7624 ]
7625 LabelGraphics
7626 [
7627 text "eAnnotations reference EModelElement"
7628 fontSize 14
7629 fontName "Consolas"
7630 configuration "AutoFlippingLabel"
7631 model "six_pos"
7632 position "thead"
7633 ]
7634 ]
7635 edge
7636 [
7637 source 0
7638 target 11
7639 graphics
7640 [
7641 fill "#000000"
7642 width 3
7643 targetArrow "standard"
7644 ]
7645 LabelGraphics
7646 [
7647 text "eClassifiers reference EPackage"
7648 fontSize 14
7649 fontName "Consolas"
7650 configuration "AutoFlippingLabel"
7651 model "six_pos"
7652 position "thead"
7653 ]
7654 ]
7655 edge
7656 [
7657 source 0
7658 target 12
7659 graphics
7660 [
7661 fill "#000000"
7662 width 3
7663 targetArrow "standard"
7664 ]
7665 LabelGraphics
7666 [
7667 text "eClassifiers reference EPackage"
7668 fontSize 14
7669 fontName "Consolas"
7670 configuration "AutoFlippingLabel"
7671 model "six_pos"
7672 position "thead"
7673 ]
7674 ]
7675 edge
7676 [
7677 source 14
7678 target 10
7679 graphics
7680 [
7681 fill "#000000"
7682 targetArrow "standard"
7683 ]
7684 LabelGraphics
7685 [
7686 text "source attribute EAnnotation"
7687 fontSize 14
7688 fontName "Consolas"
7689 configuration "AutoFlippingLabel"
7690 model "six_pos"
7691 position "thead"
7692 ]
7693 ]
7694 edge
7695 [
7696 source 11
7697 target 8
7698 graphics
7699 [
7700 fill "#000000"
7701 targetArrow "standard"
7702 ]
7703 LabelGraphics
7704 [
7705 text "instanceClassName attribute EClassifier"
7706 fontSize 14
7707 fontName "Consolas"
7708 configuration "AutoFlippingLabel"
7709 model "six_pos"
7710 position "thead"
7711 ]
7712 ]
7713 edge
7714 [
7715 source 11
7716 target 9
7717 graphics
7718 [
7719 fill "#000000"
7720 targetArrow "standard"
7721 ]
7722 LabelGraphics
7723 [
7724 text "instanceTypeName attribute EClassifier"
7725 fontSize 14
7726 fontName "Consolas"
7727 configuration "AutoFlippingLabel"
7728 model "six_pos"
7729 position "thead"
7730 ]
7731 ]
7732 edge
7733 [
7734 source 12
7735 target 9
7736 graphics
7737 [
7738 fill "#000000"
7739 targetArrow "standard"
7740 ]
7741 LabelGraphics
7742 [
7743 text "instanceTypeName attribute EClassifier"
7744 fontSize 14
7745 fontName "Consolas"
7746 configuration "AutoFlippingLabel"
7747 model "six_pos"
7748 position "thead"
7749 ]
7750 ]
7751 edge
7752 [
7753 source 11
7754 target 2
7755 graphics
7756 [
7757 fill "#000000"
7758 targetArrow "standard"
7759 ]
7760 LabelGraphics
7761 [
7762 text "serializable attribute EDataType"
7763 fontSize 14
7764 fontName "Consolas"
7765 configuration "AutoFlippingLabel"
7766 model "six_pos"
7767 position "thead"
7768 ]
7769 ]
7770 edge
7771 [
7772 source 12
7773 target 2
7774 graphics
7775 [
7776 fill "#000000"
7777 targetArrow "standard"
7778 ]
7779 LabelGraphics
7780 [
7781 text "serializable attribute EDataType"
7782 fontSize 14
7783 fontName "Consolas"
7784 configuration "AutoFlippingLabel"
7785 model "six_pos"
7786 position "thead"
7787 ]
7788 ]
7789 edge
7790 [
7791 source 13
7792 target 9
7793 graphics
7794 [
7795 fill "#000000"
7796 targetArrow "standard"
7797 ]
7798 LabelGraphics
7799 [
7800 text "literal attribute EEnumLiteral"
7801 fontSize 14
7802 fontName "Consolas"
7803 configuration "AutoFlippingLabel"
7804 model "six_pos"
7805 position "thead"
7806 ]
7807 ]
7808 edge
7809 [
7810 source 0
7811 target 10
7812 graphics
7813 [
7814 fill "#000000"
7815 targetArrow "standard"
7816 ]
7817 LabelGraphics
7818 [
7819 text "name attribute ENamedElement"
7820 fontSize 14
7821 fontName "Consolas"
7822 configuration "AutoFlippingLabel"
7823 model "six_pos"
7824 position "thead"
7825 ]
7826 ]
7827 edge
7828 [
7829 source 12
7830 target 10
7831 graphics
7832 [
7833 fill "#000000"
7834 targetArrow "standard"
7835 ]
7836 LabelGraphics
7837 [
7838 text "name attribute ENamedElement"
7839 fontSize 14
7840 fontName "Consolas"
7841 configuration "AutoFlippingLabel"
7842 model "six_pos"
7843 position "thead"
7844 ]
7845 ]
7846 edge
7847 [
7848 source 0
7849 target 9
7850 graphics
7851 [
7852 fill "#000000"
7853 targetArrow "standard"
7854 ]
7855 LabelGraphics
7856 [
7857 text "nsURI attribute EPackage"
7858 fontSize 14
7859 fontName "Consolas"
7860 configuration "AutoFlippingLabel"
7861 model "six_pos"
7862 position "thead"
7863 ]
7864 ]
7865 edge
7866 [
7867 source 0
7868 target 8
7869 graphics
7870 [
7871 fill "#000000"
7872 targetArrow "standard"
7873 ]
7874 LabelGraphics
7875 [
7876 text "nsPrefix attribute EPackage"
7877 fontSize 14
7878 fontName "Consolas"
7879 configuration "AutoFlippingLabel"
7880 model "six_pos"
7881 position "thead"
7882 ]
7883 ]
7884]
7885graph
7886[
7887 node
7888 [
7889 id 0
7890 graphics
7891 [
7892 w 254.10000000000002
7893 h 110
7894 type "rectangle"
7895 fill "#FFFFFF"
7896 fill2 "#FFFFFF"
7897 outline "#000000"
7898 ]
7899 LabelGraphics
7900 [
7901 text "o 1"
7902 outline "#000000"
7903 fill "#FFFFFF"
7904 fontSize 16
7905 fontName "Monospace"
7906 autoSizePolicy "node_width"
7907 anchor "t"
7908 borderDistance 0.0
7909 ]
7910 LabelGraphics
7911 [
7912 text "
7913 EModelElement class DefinedPart
7914 ENamedElement class DefinedPart
7915 EPackage class DefinedPart
7916 EModelElement class
7917 ENamedElement class
7918 EPackage class
7919 "
7920 fontSize 14
7921 fontName "Consolas"
7922 alignment "left"
7923 anchor "tl"
7924 borderDistance 6
7925 ]
7926 ]
7927
7928 node
7929 [
7930 id 1
7931 graphics
7932 [
7933 w 41.800000000000004
7934 h 26
7935 type "rectangle"
7936 fill "#FFFFFF"
7937 fill2 "#FFFFFF"
7938 outline "#000000"
7939 ]
7940 LabelGraphics
7941 [
7942 text "true"
7943 outline "#000000"
7944 fill "#FFFFFF"
7945 fontSize 16
7946 fontName "Monospace"
7947 autoSizePolicy "node_width"
7948 anchor "t"
7949 borderDistance 0.0
7950 ]
7951 LabelGraphics
7952 [
7953 text "
7954 "
7955 fontSize 14
7956 fontName "Consolas"
7957 alignment "left"
7958 anchor "tl"
7959 borderDistance 6
7960 ]
7961 ]
7962
7963 node
7964 [
7965 id 2
7966 graphics
7967 [
7968 w 50.6
7969 h 26
7970 type "rectangle"
7971 fill "#FFFFFF"
7972 fill2 "#FFFFFF"
7973 outline "#000000"
7974 ]
7975 LabelGraphics
7976 [
7977 text "false"
7978 outline "#000000"
7979 fill "#FFFFFF"
7980 fontSize 16
7981 fontName "Monospace"
7982 autoSizePolicy "node_width"
7983 anchor "t"
7984 borderDistance 0.0
7985 ]
7986 LabelGraphics
7987 [
7988 text "
7989 "
7990 fontSize 14
7991 fontName "Consolas"
7992 alignment "left"
7993 anchor "tl"
7994 borderDistance 6
7995 ]
7996 ]
7997
7998 node
7999 [
8000 id 3
8001 graphics
8002 [
8003 w 24.200000000000003
8004 h 26
8005 type "rectangle"
8006 fill "#FFFFFF"
8007 fill2 "#FFFFFF"
8008 outline "#000000"
8009 ]
8010 LabelGraphics
8011 [
8012 text "-1"
8013 outline "#000000"
8014 fill "#FFFFFF"
8015 fontSize 16
8016 fontName "Monospace"
8017 autoSizePolicy "node_width"
8018 anchor "t"
8019 borderDistance 0.0
8020 ]
8021 LabelGraphics
8022 [
8023 text "
8024 "
8025 fontSize 14
8026 fontName "Consolas"
8027 alignment "left"
8028 anchor "tl"
8029 borderDistance 6
8030 ]
8031 ]
8032
8033 node
8034 [
8035 id 4
8036 graphics
8037 [
8038 w 15.400000000000002
8039 h 26
8040 type "rectangle"
8041 fill "#FFFFFF"
8042 fill2 "#FFFFFF"
8043 outline "#000000"
8044 ]
8045 LabelGraphics
8046 [
8047 text "0"
8048 outline "#000000"
8049 fill "#FFFFFF"
8050 fontSize 16
8051 fontName "Monospace"
8052 autoSizePolicy "node_width"
8053 anchor "t"
8054 borderDistance 0.0
8055 ]
8056 LabelGraphics
8057 [
8058 text "
8059 "
8060 fontSize 14
8061 fontName "Consolas"
8062 alignment "left"
8063 anchor "tl"
8064 borderDistance 6
8065 ]
8066 ]
8067
8068 node
8069 [
8070 id 5
8071 graphics
8072 [
8073 w 15.400000000000002
8074 h 26
8075 type "rectangle"
8076 fill "#FFFFFF"
8077 fill2 "#FFFFFF"
8078 outline "#000000"
8079 ]
8080 LabelGraphics
8081 [
8082 text "1"
8083 outline "#000000"
8084 fill "#FFFFFF"
8085 fontSize 16
8086 fontName "Monospace"
8087 autoSizePolicy "node_width"
8088 anchor "t"
8089 borderDistance 0.0
8090 ]
8091 LabelGraphics
8092 [
8093 text "
8094 "
8095 fontSize 14
8096 fontName "Consolas"
8097 alignment "left"
8098 anchor "tl"
8099 borderDistance 6
8100 ]
8101 ]
8102
8103 node
8104 [
8105 id 6
8106 graphics
8107 [
8108 w 33.0
8109 h 26
8110 type "rectangle"
8111 fill "#FFFFFF"
8112 fill2 "#FFFFFF"
8113 outline "#000000"
8114 ]
8115 LabelGraphics
8116 [
8117 text ""A""
8118 outline "#000000"
8119 fill "#FFFFFF"
8120 fontSize 16
8121 fontName "Monospace"
8122 autoSizePolicy "node_width"
8123 anchor "t"
8124 borderDistance 0.0
8125 ]
8126 LabelGraphics
8127 [
8128 text "
8129 "
8130 fontSize 14
8131 fontName "Consolas"
8132 alignment "left"
8133 anchor "tl"
8134 borderDistance 6
8135 ]
8136 ]
8137
8138 node
8139 [
8140 id 7
8141 graphics
8142 [
8143 w 33.0
8144 h 26
8145 type "rectangle"
8146 fill "#FFFFFF"
8147 fill2 "#FFFFFF"
8148 outline "#000000"
8149 ]
8150 LabelGraphics
8151 [
8152 text ""B""
8153 outline "#000000"
8154 fill "#FFFFFF"
8155 fontSize 16
8156 fontName "Monospace"
8157 autoSizePolicy "node_width"
8158 anchor "t"
8159 borderDistance 0.0
8160 ]
8161 LabelGraphics
8162 [
8163 text "
8164 "
8165 fontSize 14
8166 fontName "Consolas"
8167 alignment "left"
8168 anchor "tl"
8169 borderDistance 6
8170 ]
8171 ]
8172
8173 node
8174 [
8175 id 8
8176 graphics
8177 [
8178 w 94.60000000000001
8179 h 26
8180 type "rectangle"
8181 fill "#FFFFFF"
8182 fill2 "#FFFFFF"
8183 outline "#000000"
8184 ]
8185 LabelGraphics
8186 [
8187 text ""nsPrefix""
8188 outline "#000000"
8189 fill "#FFFFFF"
8190 fontSize 16
8191 fontName "Monospace"
8192 autoSizePolicy "node_width"
8193 anchor "t"
8194 borderDistance 0.0
8195 ]
8196 LabelGraphics
8197 [
8198 text "
8199 "
8200 fontSize 14
8201 fontName "Consolas"
8202 alignment "left"
8203 anchor "tl"
8204 borderDistance 6
8205 ]
8206 ]
8207
8208 node
8209 [
8210 id 9
8211 graphics
8212 [
8213 w 68.2
8214 h 26
8215 type "rectangle"
8216 fill "#FFFFFF"
8217 fill2 "#FFFFFF"
8218 outline "#000000"
8219 ]
8220 LabelGraphics
8221 [
8222 text ""nsUri""
8223 outline "#000000"
8224 fill "#FFFFFF"
8225 fontSize 16
8226 fontName "Monospace"
8227 autoSizePolicy "node_width"
8228 anchor "t"
8229 borderDistance 0.0
8230 ]
8231 LabelGraphics
8232 [
8233 text "
8234 "
8235 fontSize 14
8236 fontName "Consolas"
8237 alignment "left"
8238 anchor "tl"
8239 borderDistance 6
8240 ]
8241 ]
8242
8243 node
8244 [
8245 id 10
8246 graphics
8247 [
8248 w 121.00000000000001
8249 h 26
8250 type "rectangle"
8251 fill "#FFFFFF"
8252 fill2 "#FFFFFF"
8253 outline "#000000"
8254 ]
8255 LabelGraphics
8256 [
8257 text ""packageName""
8258 outline "#000000"
8259 fill "#FFFFFF"
8260 fontSize 16
8261 fontName "Monospace"
8262 autoSizePolicy "node_width"
8263 anchor "t"
8264 borderDistance 0.0
8265 ]
8266 LabelGraphics
8267 [
8268 text "
8269 "
8270 fontSize 14
8271 fontName "Consolas"
8272 alignment "left"
8273 anchor "tl"
8274 borderDistance 6
8275 ]
8276 ]
8277
8278 node
8279 [
8280 id 11
8281 graphics
8282 [
8283 w 269.5
8284 h 110
8285 type "rectangle"
8286 fill "#FFFFFF"
8287 fill2 "#FFFFFF"
8288 outline "#000000"
8289 ]
8290 LabelGraphics
8291 [
8292 text "null"
8293 outline "#000000"
8294 fill "#FFFFFF"
8295 fontSize 16
8296 fontName "Monospace"
8297 autoSizePolicy "node_width"
8298 anchor "t"
8299 borderDistance 0.0
8300 ]
8301 LabelGraphics
8302 [
8303 text "
8304 EClassifier class
8305 EDataType class
8306 EModelElement class
8307 ENamedElement class
8308 EModelElement class UndefinedPart
8309 ENamedElement class UndefinedPart
8310 "
8311 fontSize 14
8312 fontName "Consolas"
8313 alignment "left"
8314 anchor "tl"
8315 borderDistance 6
8316 ]
8317 ]
8318
8319 node
8320 [
8321 id 12
8322 graphics
8323 [
8324 w 269.5
8325 h 110
8326 type "rectangle"
8327 fill "#FFFFFF"
8328 fill2 "#FFFFFF"
8329 outline "#000000"
8330 ]
8331 LabelGraphics
8332 [
8333 text "null"
8334 outline "#000000"
8335 fill "#FFFFFF"
8336 fontSize 16
8337 fontName "Monospace"
8338 autoSizePolicy "node_width"
8339 anchor "t"
8340 borderDistance 0.0
8341 ]
8342 LabelGraphics
8343 [
8344 text "
8345 EModelElement class
8346 ENamedElement class
8347 EPackage class
8348 EModelElement class UndefinedPart
8349 ENamedElement class UndefinedPart
8350 EPackage class UndefinedPart
8351 "
8352 fontSize 14
8353 fontName "Consolas"
8354 alignment "left"
8355 anchor "tl"
8356 borderDistance 6
8357 ]
8358 ]
8359
8360 node
8361 [
8362 id 13
8363 graphics
8364 [
8365 w 269.5
8366 h 124
8367 type "rectangle"
8368 fill "#FFFFFF"
8369 fill2 "#FFFFFF"
8370 outline "#000000"
8371 ]
8372 LabelGraphics
8373 [
8374 text "null"
8375 outline "#000000"
8376 fill "#FFFFFF"
8377 fontSize 16
8378 fontName "Monospace"
8379 autoSizePolicy "node_width"
8380 anchor "t"
8381 borderDistance 0.0
8382 ]
8383 LabelGraphics
8384 [
8385 text "
8386 EClassifier class
8387 EDataType class
8388 EEnum class
8389 EModelElement class
8390 ENamedElement class
8391 EModelElement class UndefinedPart
8392 ENamedElement class UndefinedPart
8393 "
8394 fontSize 14
8395 fontName "Consolas"
8396 alignment "left"
8397 anchor "tl"
8398 borderDistance 6
8399 ]
8400 ]
8401
8402 node
8403 [
8404 id 14
8405 graphics
8406 [
8407 w 269.5
8408 h 96
8409 type "rectangle"
8410 fill "#FFFFFF"
8411 fill2 "#FFFFFF"
8412 outline "#000000"
8413 ]
8414 LabelGraphics
8415 [
8416 text "null"
8417 outline "#000000"
8418 fill "#FFFFFF"
8419 fontSize 16
8420 fontName "Monospace"
8421 autoSizePolicy "node_width"
8422 anchor "t"
8423 borderDistance 0.0
8424 ]
8425 LabelGraphics
8426 [
8427 text "
8428 EModelElement class
8429 ENamedElement class
8430 ETypeParameter class
8431 EModelElement class UndefinedPart
8432 ENamedElement class UndefinedPart
8433 "
8434 fontSize 14
8435 fontName "Consolas"
8436 alignment "left"
8437 anchor "tl"
8438 borderDistance 6
8439 ]
8440 ]
8441
8442 node
8443 [
8444 id 15
8445 graphics
8446 [
8447 w 269.5
8448 h 68
8449 type "rectangle"
8450 fill "#FFFFFF"
8451 fill2 "#FFFFFF"
8452 outline "#000000"
8453 ]
8454 LabelGraphics
8455 [
8456 text "null"
8457 outline "#000000"
8458 fill "#FFFFFF"
8459 fontSize 16
8460 fontName "Monospace"
8461 autoSizePolicy "node_width"
8462 anchor "t"
8463 borderDistance 0.0
8464 ]
8465 LabelGraphics
8466 [
8467 text "
8468 EAnnotation class
8469 EModelElement class
8470 EModelElement class UndefinedPart
8471 "
8472 fontSize 14
8473 fontName "Consolas"
8474 alignment "left"
8475 anchor "tl"
8476 borderDistance 6
8477 ]
8478 ]
8479
8480 node
8481 [
8482 id 16
8483 graphics
8484 [
8485 w 112.2
8486 h 26
8487 type "rectangle"
8488 fill "#FFFFFF"
8489 fill2 "#FFFFFF"
8490 outline "#000000"
8491 ]
8492 LabelGraphics
8493 [
8494 text "New Integers"
8495 outline "#000000"
8496 fill "#FFFFFF"
8497 fontSize 16
8498 fontName "Monospace"
8499 autoSizePolicy "node_width"
8500 anchor "t"
8501 borderDistance 0.0
8502 ]
8503 LabelGraphics
8504 [
8505 text "
8506 "
8507 fontSize 14
8508 fontName "Consolas"
8509 alignment "left"
8510 anchor "tl"
8511 borderDistance 6
8512 ]
8513 ]
8514
8515 node
8516 [
8517 id 17
8518 graphics
8519 [
8520 w 85.80000000000001
8521 h 26
8522 type "rectangle"
8523 fill "#FFFFFF"
8524 fill2 "#FFFFFF"
8525 outline "#000000"
8526 ]
8527 LabelGraphics
8528 [
8529 text "New Reals"
8530 outline "#000000"
8531 fill "#FFFFFF"
8532 fontSize 16
8533 fontName "Monospace"
8534 autoSizePolicy "node_width"
8535 anchor "t"
8536 borderDistance 0.0
8537 ]
8538 LabelGraphics
8539 [
8540 text "
8541 "
8542 fontSize 14
8543 fontName "Consolas"
8544 alignment "left"
8545 anchor "tl"
8546 borderDistance 6
8547 ]
8548 ]
8549
8550 node
8551 [
8552 id 18
8553 graphics
8554 [
8555 w 103.4
8556 h 26
8557 type "rectangle"
8558 fill "#FFFFFF"
8559 fill2 "#FFFFFF"
8560 outline "#000000"
8561 ]
8562 LabelGraphics
8563 [
8564 text "New Strings"
8565 outline "#000000"
8566 fill "#FFFFFF"
8567 fontSize 16
8568 fontName "Monospace"
8569 autoSizePolicy "node_width"
8570 anchor "t"
8571 borderDistance 0.0
8572 ]
8573 LabelGraphics
8574 [
8575 text "
8576 "
8577 fontSize 14
8578 fontName "Consolas"
8579 alignment "left"
8580 anchor "tl"
8581 borderDistance 6
8582 ]
8583 ]
8584
8585 node
8586 [
8587 id 19
8588 graphics
8589 [
8590 w 103.4
8591 h 26
8592 type "rectangle"
8593 fill "#FFFFFF"
8594 fill2 "#FFFFFF"
8595 outline "#000000"
8596 ]
8597 LabelGraphics
8598 [
8599 text "New Objects"
8600 outline "#000000"
8601 fill "#FFFFFF"
8602 fontSize 16
8603 fontName "Monospace"
8604 autoSizePolicy "node_width"
8605 anchor "t"
8606 borderDistance 0.0
8607 ]
8608 LabelGraphics
8609 [
8610 text "
8611 "
8612 fontSize 14
8613 fontName "Consolas"
8614 alignment "left"
8615 anchor "tl"
8616 borderDistance 6
8617 ]
8618 ]
8619 edge
8620 [
8621 source 15
8622 target 0
8623 graphics
8624 [
8625 fill "#000000"
8626 targetArrow "standard"
8627 ]
8628 LabelGraphics
8629 [
8630 text "eModelElement reference EAnnotation"
8631 fontSize 14
8632 fontName "Consolas"
8633 configuration "AutoFlippingLabel"
8634 model "six_pos"
8635 position "thead"
8636 ]
8637 ]
8638 edge
8639 [
8640 source 11
8641 target 0
8642 graphics
8643 [
8644 fill "#000000"
8645 targetArrow "standard"
8646 ]
8647 LabelGraphics
8648 [
8649 text "ePackage reference EClassifier"
8650 fontSize 14
8651 fontName "Consolas"
8652 configuration "AutoFlippingLabel"
8653 model "six_pos"
8654 position "thead"
8655 ]
8656 ]
8657 edge
8658 [
8659 source 13
8660 target 0
8661 graphics
8662 [
8663 fill "#000000"
8664 targetArrow "standard"
8665 ]
8666 LabelGraphics
8667 [
8668 text "ePackage reference EClassifier"
8669 fontSize 14
8670 fontName "Consolas"
8671 configuration "AutoFlippingLabel"
8672 model "six_pos"
8673 position "thead"
8674 ]
8675 ]
8676 edge
8677 [
8678 source 13
8679 target 14
8680 graphics
8681 [
8682 fill "#000000"
8683 width 3
8684 targetArrow "standard"
8685 ]
8686 LabelGraphics
8687 [
8688 text "eTypeParameters reference EClassifier"
8689 fontSize 14
8690 fontName "Consolas"
8691 configuration "AutoFlippingLabel"
8692 model "six_pos"
8693 position "thead"
8694 ]
8695 ]
8696 edge
8697 [
8698 source 0
8699 target 15
8700 graphics
8701 [
8702 fill "#000000"
8703 width 3
8704 targetArrow "standard"
8705 ]
8706 LabelGraphics
8707 [
8708 text "eAnnotations reference EModelElement"
8709 fontSize 14
8710 fontName "Consolas"
8711 configuration "AutoFlippingLabel"
8712 model "six_pos"
8713 position "thead"
8714 ]
8715 ]
8716 edge
8717 [
8718 source 0
8719 target 11
8720 graphics
8721 [
8722 fill "#000000"
8723 width 3
8724 targetArrow "standard"
8725 ]
8726 LabelGraphics
8727 [
8728 text "eClassifiers reference EPackage"
8729 fontSize 14
8730 fontName "Consolas"
8731 configuration "AutoFlippingLabel"
8732 model "six_pos"
8733 position "thead"
8734 ]
8735 ]
8736 edge
8737 [
8738 source 0
8739 target 13
8740 graphics
8741 [
8742 fill "#000000"
8743 width 3
8744 targetArrow "standard"
8745 ]
8746 LabelGraphics
8747 [
8748 text "eClassifiers reference EPackage"
8749 fontSize 14
8750 fontName "Consolas"
8751 configuration "AutoFlippingLabel"
8752 model "six_pos"
8753 position "thead"
8754 ]
8755 ]
8756 edge
8757 [
8758 source 0
8759 target 12
8760 graphics
8761 [
8762 fill "#000000"
8763 width 3
8764 targetArrow "standard"
8765 ]
8766 LabelGraphics
8767 [
8768 text "eSubpackages reference EPackage"
8769 fontSize 14
8770 fontName "Consolas"
8771 configuration "AutoFlippingLabel"
8772 model "six_pos"
8773 position "thead"
8774 ]
8775 ]
8776 edge
8777 [
8778 source 12
8779 target 0
8780 graphics
8781 [
8782 fill "#000000"
8783 targetArrow "standard"
8784 ]
8785 LabelGraphics
8786 [
8787 text "eSuperPackage reference EPackage"
8788 fontSize 14
8789 fontName "Consolas"
8790 configuration "AutoFlippingLabel"
8791 model "six_pos"
8792 position "thead"
8793 ]
8794 ]
8795 edge
8796 [
8797 source 11
8798 target 6
8799 graphics
8800 [
8801 fill "#000000"
8802 targetArrow "standard"
8803 ]
8804 LabelGraphics
8805 [
8806 text "instanceClassName attribute EClassifier"
8807 fontSize 14
8808 fontName "Consolas"
8809 configuration "AutoFlippingLabel"
8810 model "six_pos"
8811 position "thead"
8812 ]
8813 ]
8814 edge
8815 [
8816 source 13
8817 target 7
8818 graphics
8819 [
8820 fill "#000000"
8821 targetArrow "standard"
8822 ]
8823 LabelGraphics
8824 [
8825 text "instanceClassName attribute EClassifier"
8826 fontSize 14
8827 fontName "Consolas"
8828 configuration "AutoFlippingLabel"
8829 model "six_pos"
8830 position "thead"
8831 ]
8832 ]
8833 edge
8834 [
8835 source 11
8836 target 1
8837 graphics
8838 [
8839 fill "#000000"
8840 targetArrow "standard"
8841 ]
8842 LabelGraphics
8843 [
8844 text "serializable attribute EDataType"
8845 fontSize 14
8846 fontName "Consolas"
8847 configuration "AutoFlippingLabel"
8848 model "six_pos"
8849 position "thead"
8850 ]
8851 ]
8852 edge
8853 [
8854 source 0
8855 target 10
8856 graphics
8857 [
8858 fill "#000000"
8859 targetArrow "standard"
8860 ]
8861 LabelGraphics
8862 [
8863 text "name attribute ENamedElement"
8864 fontSize 14
8865 fontName "Consolas"
8866 configuration "AutoFlippingLabel"
8867 model "six_pos"
8868 position "thead"
8869 ]
8870 ]
8871 edge
8872 [
8873 source 12
8874 target 6
8875 graphics
8876 [
8877 fill "#000000"
8878 targetArrow "standard"
8879 ]
8880 LabelGraphics
8881 [
8882 text "name attribute ENamedElement"
8883 fontSize 14
8884 fontName "Consolas"
8885 configuration "AutoFlippingLabel"
8886 model "six_pos"
8887 position "thead"
8888 ]
8889 ]
8890 edge
8891 [
8892 source 0
8893 target 9
8894 graphics
8895 [
8896 fill "#000000"
8897 targetArrow "standard"
8898 ]
8899 LabelGraphics
8900 [
8901 text "nsURI attribute EPackage"
8902 fontSize 14
8903 fontName "Consolas"
8904 configuration "AutoFlippingLabel"
8905 model "six_pos"
8906 position "thead"
8907 ]
8908 ]
8909 edge
8910 [
8911 source 12
8912 target 10
8913 graphics
8914 [
8915 fill "#000000"
8916 targetArrow "standard"
8917 ]
8918 LabelGraphics
8919 [
8920 text "nsURI attribute EPackage"
8921 fontSize 14
8922 fontName "Consolas"
8923 configuration "AutoFlippingLabel"
8924 model "six_pos"
8925 position "thead"
8926 ]
8927 ]
8928 edge
8929 [
8930 source 0
8931 target 8
8932 graphics
8933 [
8934 fill "#000000"
8935 targetArrow "standard"
8936 ]
8937 LabelGraphics
8938 [
8939 text "nsPrefix attribute EPackage"
8940 fontSize 14
8941 fontName "Consolas"
8942 configuration "AutoFlippingLabel"
8943 model "six_pos"
8944 position "thead"
8945 ]
8946 ]
8947 edge
8948 [
8949 source 12
8950 target 8
8951 graphics
8952 [
8953 fill "#000000"
8954 targetArrow "standard"
8955 ]
8956 LabelGraphics
8957 [
8958 text "nsPrefix attribute EPackage"
8959 fontSize 14
8960 fontName "Consolas"
8961 configuration "AutoFlippingLabel"
8962 model "six_pos"
8963 position "thead"
8964 ]
8965 ]
8966]
8967graph
8968[
8969 node
8970 [
8971 id 0
8972 graphics
8973 [
8974 w 254.10000000000002
8975 h 110
8976 type "rectangle"
8977 fill "#FFFFFF"
8978 fill2 "#FFFFFF"
8979 outline "#000000"
8980 ]
8981 LabelGraphics
8982 [
8983 text "o 1"
8984 outline "#000000"
8985 fill "#FFFFFF"
8986 fontSize 16
8987 fontName "Monospace"
8988 autoSizePolicy "node_width"
8989 anchor "t"
8990 borderDistance 0.0
8991 ]
8992 LabelGraphics
8993 [
8994 text "
8995 EModelElement class DefinedPart
8996 ENamedElement class DefinedPart
8997 EPackage class DefinedPart
8998 EModelElement class
8999 ENamedElement class
9000 EPackage class
9001 "
9002 fontSize 14
9003 fontName "Consolas"
9004 alignment "left"
9005 anchor "tl"
9006 borderDistance 6
9007 ]
9008 ]
9009
9010 node
9011 [
9012 id 1
9013 graphics
9014 [
9015 w 41.800000000000004
9016 h 26
9017 type "rectangle"
9018 fill "#FFFFFF"
9019 fill2 "#FFFFFF"
9020 outline "#000000"
9021 ]
9022 LabelGraphics
9023 [
9024 text "true"
9025 outline "#000000"
9026 fill "#FFFFFF"
9027 fontSize 16
9028 fontName "Monospace"
9029 autoSizePolicy "node_width"
9030 anchor "t"
9031 borderDistance 0.0
9032 ]
9033 LabelGraphics
9034 [
9035 text "
9036 "
9037 fontSize 14
9038 fontName "Consolas"
9039 alignment "left"
9040 anchor "tl"
9041 borderDistance 6
9042 ]
9043 ]
9044
9045 node
9046 [
9047 id 2
9048 graphics
9049 [
9050 w 50.6
9051 h 26
9052 type "rectangle"
9053 fill "#FFFFFF"
9054 fill2 "#FFFFFF"
9055 outline "#000000"
9056 ]
9057 LabelGraphics
9058 [
9059 text "false"
9060 outline "#000000"
9061 fill "#FFFFFF"
9062 fontSize 16
9063 fontName "Monospace"
9064 autoSizePolicy "node_width"
9065 anchor "t"
9066 borderDistance 0.0
9067 ]
9068 LabelGraphics
9069 [
9070 text "
9071 "
9072 fontSize 14
9073 fontName "Consolas"
9074 alignment "left"
9075 anchor "tl"
9076 borderDistance 6
9077 ]
9078 ]
9079
9080 node
9081 [
9082 id 3
9083 graphics
9084 [
9085 w 24.200000000000003
9086 h 26
9087 type "rectangle"
9088 fill "#FFFFFF"
9089 fill2 "#FFFFFF"
9090 outline "#000000"
9091 ]
9092 LabelGraphics
9093 [
9094 text "-1"
9095 outline "#000000"
9096 fill "#FFFFFF"
9097 fontSize 16
9098 fontName "Monospace"
9099 autoSizePolicy "node_width"
9100 anchor "t"
9101 borderDistance 0.0
9102 ]
9103 LabelGraphics
9104 [
9105 text "
9106 "
9107 fontSize 14
9108 fontName "Consolas"
9109 alignment "left"
9110 anchor "tl"
9111 borderDistance 6
9112 ]
9113 ]
9114
9115 node
9116 [
9117 id 4
9118 graphics
9119 [
9120 w 15.400000000000002
9121 h 26
9122 type "rectangle"
9123 fill "#FFFFFF"
9124 fill2 "#FFFFFF"
9125 outline "#000000"
9126 ]
9127 LabelGraphics
9128 [
9129 text "0"
9130 outline "#000000"
9131 fill "#FFFFFF"
9132 fontSize 16
9133 fontName "Monospace"
9134 autoSizePolicy "node_width"
9135 anchor "t"
9136 borderDistance 0.0
9137 ]
9138 LabelGraphics
9139 [
9140 text "
9141 "
9142 fontSize 14
9143 fontName "Consolas"
9144 alignment "left"
9145 anchor "tl"
9146 borderDistance 6
9147 ]
9148 ]
9149
9150 node
9151 [
9152 id 5
9153 graphics
9154 [
9155 w 15.400000000000002
9156 h 26
9157 type "rectangle"
9158 fill "#FFFFFF"
9159 fill2 "#FFFFFF"
9160 outline "#000000"
9161 ]
9162 LabelGraphics
9163 [
9164 text "1"
9165 outline "#000000"
9166 fill "#FFFFFF"
9167 fontSize 16
9168 fontName "Monospace"
9169 autoSizePolicy "node_width"
9170 anchor "t"
9171 borderDistance 0.0
9172 ]
9173 LabelGraphics
9174 [
9175 text "
9176 "
9177 fontSize 14
9178 fontName "Consolas"
9179 alignment "left"
9180 anchor "tl"
9181 borderDistance 6
9182 ]
9183 ]
9184
9185 node
9186 [
9187 id 6
9188 graphics
9189 [
9190 w 33.0
9191 h 26
9192 type "rectangle"
9193 fill "#FFFFFF"
9194 fill2 "#FFFFFF"
9195 outline "#000000"
9196 ]
9197 LabelGraphics
9198 [
9199 text ""A""
9200 outline "#000000"
9201 fill "#FFFFFF"
9202 fontSize 16
9203 fontName "Monospace"
9204 autoSizePolicy "node_width"
9205 anchor "t"
9206 borderDistance 0.0
9207 ]
9208 LabelGraphics
9209 [
9210 text "
9211 "
9212 fontSize 14
9213 fontName "Consolas"
9214 alignment "left"
9215 anchor "tl"
9216 borderDistance 6
9217 ]
9218 ]
9219
9220 node
9221 [
9222 id 7
9223 graphics
9224 [
9225 w 33.0
9226 h 26
9227 type "rectangle"
9228 fill "#FFFFFF"
9229 fill2 "#FFFFFF"
9230 outline "#000000"
9231 ]
9232 LabelGraphics
9233 [
9234 text ""B""
9235 outline "#000000"
9236 fill "#FFFFFF"
9237 fontSize 16
9238 fontName "Monospace"
9239 autoSizePolicy "node_width"
9240 anchor "t"
9241 borderDistance 0.0
9242 ]
9243 LabelGraphics
9244 [
9245 text "
9246 "
9247 fontSize 14
9248 fontName "Consolas"
9249 alignment "left"
9250 anchor "tl"
9251 borderDistance 6
9252 ]
9253 ]
9254
9255 node
9256 [
9257 id 8
9258 graphics
9259 [
9260 w 94.60000000000001
9261 h 26
9262 type "rectangle"
9263 fill "#FFFFFF"
9264 fill2 "#FFFFFF"
9265 outline "#000000"
9266 ]
9267 LabelGraphics
9268 [
9269 text ""nsPrefix""
9270 outline "#000000"
9271 fill "#FFFFFF"
9272 fontSize 16
9273 fontName "Monospace"
9274 autoSizePolicy "node_width"
9275 anchor "t"
9276 borderDistance 0.0
9277 ]
9278 LabelGraphics
9279 [
9280 text "
9281 "
9282 fontSize 14
9283 fontName "Consolas"
9284 alignment "left"
9285 anchor "tl"
9286 borderDistance 6
9287 ]
9288 ]
9289
9290 node
9291 [
9292 id 9
9293 graphics
9294 [
9295 w 68.2
9296 h 26
9297 type "rectangle"
9298 fill "#FFFFFF"
9299 fill2 "#FFFFFF"
9300 outline "#000000"
9301 ]
9302 LabelGraphics
9303 [
9304 text ""nsUri""
9305 outline "#000000"
9306 fill "#FFFFFF"
9307 fontSize 16
9308 fontName "Monospace"
9309 autoSizePolicy "node_width"
9310 anchor "t"
9311 borderDistance 0.0
9312 ]
9313 LabelGraphics
9314 [
9315 text "
9316 "
9317 fontSize 14
9318 fontName "Consolas"
9319 alignment "left"
9320 anchor "tl"
9321 borderDistance 6
9322 ]
9323 ]
9324
9325 node
9326 [
9327 id 10
9328 graphics
9329 [
9330 w 121.00000000000001
9331 h 26
9332 type "rectangle"
9333 fill "#FFFFFF"
9334 fill2 "#FFFFFF"
9335 outline "#000000"
9336 ]
9337 LabelGraphics
9338 [
9339 text ""packageName""
9340 outline "#000000"
9341 fill "#FFFFFF"
9342 fontSize 16
9343 fontName "Monospace"
9344 autoSizePolicy "node_width"
9345 anchor "t"
9346 borderDistance 0.0
9347 ]
9348 LabelGraphics
9349 [
9350 text "
9351 "
9352 fontSize 14
9353 fontName "Consolas"
9354 alignment "left"
9355 anchor "tl"
9356 borderDistance 6
9357 ]
9358 ]
9359
9360 node
9361 [
9362 id 11
9363 graphics
9364 [
9365 w 269.5
9366 h 110
9367 type "rectangle"
9368 fill "#FFFFFF"
9369 fill2 "#FFFFFF"
9370 outline "#000000"
9371 ]
9372 LabelGraphics
9373 [
9374 text "null"
9375 outline "#000000"
9376 fill "#FFFFFF"
9377 fontSize 16
9378 fontName "Monospace"
9379 autoSizePolicy "node_width"
9380 anchor "t"
9381 borderDistance 0.0
9382 ]
9383 LabelGraphics
9384 [
9385 text "
9386 EClass class
9387 EClassifier class
9388 EModelElement class
9389 ENamedElement class
9390 EModelElement class UndefinedPart
9391 ENamedElement class UndefinedPart
9392 "
9393 fontSize 14
9394 fontName "Consolas"
9395 alignment "left"
9396 anchor "tl"
9397 borderDistance 6
9398 ]
9399 ]
9400
9401 node
9402 [
9403 id 12
9404 graphics
9405 [
9406 w 269.5
9407 h 110
9408 type "rectangle"
9409 fill "#FFFFFF"
9410 fill2 "#FFFFFF"
9411 outline "#000000"
9412 ]
9413 LabelGraphics
9414 [
9415 text "null"
9416 outline "#000000"
9417 fill "#FFFFFF"
9418 fontSize 16
9419 fontName "Monospace"
9420 autoSizePolicy "node_width"
9421 anchor "t"
9422 borderDistance 0.0
9423 ]
9424 LabelGraphics
9425 [
9426 text "
9427 EModelElement class
9428 ENamedElement class
9429 EPackage class
9430 EModelElement class UndefinedPart
9431 ENamedElement class UndefinedPart
9432 EPackage class UndefinedPart
9433 "
9434 fontSize 14
9435 fontName "Consolas"
9436 alignment "left"
9437 anchor "tl"
9438 borderDistance 6
9439 ]
9440 ]
9441
9442 node
9443 [
9444 id 13
9445 graphics
9446 [
9447 w 269.5
9448 h 110
9449 type "rectangle"
9450 fill "#FFFFFF"
9451 fill2 "#FFFFFF"
9452 outline "#000000"
9453 ]
9454 LabelGraphics
9455 [
9456 text "null"
9457 outline "#000000"
9458 fill "#FFFFFF"
9459 fontSize 16
9460 fontName "Monospace"
9461 autoSizePolicy "node_width"
9462 anchor "t"
9463 borderDistance 0.0
9464 ]
9465 LabelGraphics
9466 [
9467 text "
9468 EModelElement class
9469 ENamedElement class
9470 EPackage class
9471 EModelElement class UndefinedPart
9472 ENamedElement class UndefinedPart
9473 EPackage class UndefinedPart
9474 "
9475 fontSize 14
9476 fontName "Consolas"
9477 alignment "left"
9478 anchor "tl"
9479 borderDistance 6
9480 ]
9481 ]
9482
9483 node
9484 [
9485 id 14
9486 graphics
9487 [
9488 w 269.5
9489 h 96
9490 type "rectangle"
9491 fill "#FFFFFF"
9492 fill2 "#FFFFFF"
9493 outline "#000000"
9494 ]
9495 LabelGraphics
9496 [
9497 text "null"
9498 outline "#000000"
9499 fill "#FFFFFF"
9500 fontSize 16
9501 fontName "Monospace"
9502 autoSizePolicy "node_width"
9503 anchor "t"
9504 borderDistance 0.0
9505 ]
9506 LabelGraphics
9507 [
9508 text "
9509 EModelElement class
9510 ENamedElement class
9511 ETypeParameter class
9512 EModelElement class UndefinedPart
9513 ENamedElement class UndefinedPart
9514 "
9515 fontSize 14
9516 fontName "Consolas"
9517 alignment "left"
9518 anchor "tl"
9519 borderDistance 6
9520 ]
9521 ]
9522
9523 node
9524 [
9525 id 15
9526 graphics
9527 [
9528 w 269.5
9529 h 110
9530 type "rectangle"
9531 fill "#FFFFFF"
9532 fill2 "#FFFFFF"
9533 outline "#000000"
9534 ]
9535 LabelGraphics
9536 [
9537 text "null"
9538 outline "#000000"
9539 fill "#FFFFFF"
9540 fontSize 16
9541 fontName "Monospace"
9542 autoSizePolicy "node_width"
9543 anchor "t"
9544 borderDistance 0.0
9545 ]
9546 LabelGraphics
9547 [
9548 text "
9549 EClass class
9550 EClassifier class
9551 EModelElement class
9552 ENamedElement class
9553 EModelElement class UndefinedPart
9554 ENamedElement class UndefinedPart
9555 "
9556 fontSize 14
9557 fontName "Consolas"
9558 alignment "left"
9559 anchor "tl"
9560 borderDistance 6
9561 ]
9562 ]
9563
9564 node
9565 [
9566 id 16
9567 graphics
9568 [
9569 w 112.2
9570 h 26
9571 type "rectangle"
9572 fill "#FFFFFF"
9573 fill2 "#FFFFFF"
9574 outline "#000000"
9575 ]
9576 LabelGraphics
9577 [
9578 text "New Integers"
9579 outline "#000000"
9580 fill "#FFFFFF"
9581 fontSize 16
9582 fontName "Monospace"
9583 autoSizePolicy "node_width"
9584 anchor "t"
9585 borderDistance 0.0
9586 ]
9587 LabelGraphics
9588 [
9589 text "
9590 "
9591 fontSize 14
9592 fontName "Consolas"
9593 alignment "left"
9594 anchor "tl"
9595 borderDistance 6
9596 ]
9597 ]
9598
9599 node
9600 [
9601 id 17
9602 graphics
9603 [
9604 w 85.80000000000001
9605 h 26
9606 type "rectangle"
9607 fill "#FFFFFF"
9608 fill2 "#FFFFFF"
9609 outline "#000000"
9610 ]
9611 LabelGraphics
9612 [
9613 text "New Reals"
9614 outline "#000000"
9615 fill "#FFFFFF"
9616 fontSize 16
9617 fontName "Monospace"
9618 autoSizePolicy "node_width"
9619 anchor "t"
9620 borderDistance 0.0
9621 ]
9622 LabelGraphics
9623 [
9624 text "
9625 "
9626 fontSize 14
9627 fontName "Consolas"
9628 alignment "left"
9629 anchor "tl"
9630 borderDistance 6
9631 ]
9632 ]
9633
9634 node
9635 [
9636 id 18
9637 graphics
9638 [
9639 w 103.4
9640 h 26
9641 type "rectangle"
9642 fill "#FFFFFF"
9643 fill2 "#FFFFFF"
9644 outline "#000000"
9645 ]
9646 LabelGraphics
9647 [
9648 text "New Strings"
9649 outline "#000000"
9650 fill "#FFFFFF"
9651 fontSize 16
9652 fontName "Monospace"
9653 autoSizePolicy "node_width"
9654 anchor "t"
9655 borderDistance 0.0
9656 ]
9657 LabelGraphics
9658 [
9659 text "
9660 "
9661 fontSize 14
9662 fontName "Consolas"
9663 alignment "left"
9664 anchor "tl"
9665 borderDistance 6
9666 ]
9667 ]
9668
9669 node
9670 [
9671 id 19
9672 graphics
9673 [
9674 w 103.4
9675 h 26
9676 type "rectangle"
9677 fill "#FFFFFF"
9678 fill2 "#FFFFFF"
9679 outline "#000000"
9680 ]
9681 LabelGraphics
9682 [
9683 text "New Objects"
9684 outline "#000000"
9685 fill "#FFFFFF"
9686 fontSize 16
9687 fontName "Monospace"
9688 autoSizePolicy "node_width"
9689 anchor "t"
9690 borderDistance 0.0
9691 ]
9692 LabelGraphics
9693 [
9694 text "
9695 "
9696 fontSize 14
9697 fontName "Consolas"
9698 alignment "left"
9699 anchor "tl"
9700 borderDistance 6
9701 ]
9702 ]
9703 edge
9704 [
9705 source 11
9706 target 0
9707 graphics
9708 [
9709 fill "#000000"
9710 targetArrow "standard"
9711 ]
9712 LabelGraphics
9713 [
9714 text "ePackage reference EClassifier"
9715 fontSize 14
9716 fontName "Consolas"
9717 configuration "AutoFlippingLabel"
9718 model "six_pos"
9719 position "thead"
9720 ]
9721 ]
9722 edge
9723 [
9724 source 15
9725 target 13
9726 graphics
9727 [
9728 fill "#000000"
9729 targetArrow "standard"
9730 ]
9731 LabelGraphics
9732 [
9733 text "ePackage reference EClassifier"
9734 fontSize 14
9735 fontName "Consolas"
9736 configuration "AutoFlippingLabel"
9737 model "six_pos"
9738 position "thead"
9739 ]
9740 ]
9741 edge
9742 [
9743 source 11
9744 target 14
9745 graphics
9746 [
9747 fill "#000000"
9748 width 3
9749 targetArrow "standard"
9750 ]
9751 LabelGraphics
9752 [
9753 text "eTypeParameters reference EClassifier"
9754 fontSize 14
9755 fontName "Consolas"
9756 configuration "AutoFlippingLabel"
9757 model "six_pos"
9758 position "thead"
9759 ]
9760 ]
9761 edge
9762 [
9763 source 0
9764 target 11
9765 graphics
9766 [
9767 fill "#000000"
9768 width 3
9769 targetArrow "standard"
9770 ]
9771 LabelGraphics
9772 [
9773 text "eClassifiers reference EPackage"
9774 fontSize 14
9775 fontName "Consolas"
9776 configuration "AutoFlippingLabel"
9777 model "six_pos"
9778 position "thead"
9779 ]
9780 ]
9781 edge
9782 [
9783 source 13
9784 target 15
9785 graphics
9786 [
9787 fill "#000000"
9788 width 3
9789 targetArrow "standard"
9790 ]
9791 LabelGraphics
9792 [
9793 text "eClassifiers reference EPackage"
9794 fontSize 14
9795 fontName "Consolas"
9796 configuration "AutoFlippingLabel"
9797 model "six_pos"
9798 position "thead"
9799 ]
9800 ]
9801 edge
9802 [
9803 source 0
9804 target 12
9805 graphics
9806 [
9807 fill "#000000"
9808 width 3
9809 targetArrow "standard"
9810 ]
9811 LabelGraphics
9812 [
9813 text "eSubpackages reference EPackage"
9814 fontSize 14
9815 fontName "Consolas"
9816 configuration "AutoFlippingLabel"
9817 model "six_pos"
9818 position "thead"
9819 ]
9820 ]
9821 edge
9822 [
9823 source 12
9824 target 13
9825 graphics
9826 [
9827 fill "#000000"
9828 width 3
9829 targetArrow "standard"
9830 ]
9831 LabelGraphics
9832 [
9833 text "eSubpackages reference EPackage"
9834 fontSize 14
9835 fontName "Consolas"
9836 configuration "AutoFlippingLabel"
9837 model "six_pos"
9838 position "thead"
9839 ]
9840 ]
9841 edge
9842 [
9843 source 12
9844 target 0
9845 graphics
9846 [
9847 fill "#000000"
9848 targetArrow "standard"
9849 ]
9850 LabelGraphics
9851 [
9852 text "eSuperPackage reference EPackage"
9853 fontSize 14
9854 fontName "Consolas"
9855 configuration "AutoFlippingLabel"
9856 model "six_pos"
9857 position "thead"
9858 ]
9859 ]
9860 edge
9861 [
9862 source 13
9863 target 12
9864 graphics
9865 [
9866 fill "#000000"
9867 targetArrow "standard"
9868 ]
9869 LabelGraphics
9870 [
9871 text "eSuperPackage reference EPackage"
9872 fontSize 14
9873 fontName "Consolas"
9874 configuration "AutoFlippingLabel"
9875 model "six_pos"
9876 position "thead"
9877 ]
9878 ]
9879 edge
9880 [
9881 source 11
9882 target 1
9883 graphics
9884 [
9885 fill "#000000"
9886 targetArrow "standard"
9887 ]
9888 LabelGraphics
9889 [
9890 text "abstract attribute EClass"
9891 fontSize 14
9892 fontName "Consolas"
9893 configuration "AutoFlippingLabel"
9894 model "six_pos"
9895 position "thead"
9896 ]
9897 ]
9898 edge
9899 [
9900 source 11
9901 target 2
9902 graphics
9903 [
9904 fill "#000000"
9905 targetArrow "standard"
9906 ]
9907 LabelGraphics
9908 [
9909 text "interface attribute EClass"
9910 fontSize 14
9911 fontName "Consolas"
9912 configuration "AutoFlippingLabel"
9913 model "six_pos"
9914 position "thead"
9915 ]
9916 ]
9917 edge
9918 [
9919 source 11
9920 target 8
9921 graphics
9922 [
9923 fill "#000000"
9924 targetArrow "standard"
9925 ]
9926 LabelGraphics
9927 [
9928 text "instanceTypeName attribute EClassifier"
9929 fontSize 14
9930 fontName "Consolas"
9931 configuration "AutoFlippingLabel"
9932 model "six_pos"
9933 position "thead"
9934 ]
9935 ]
9936 edge
9937 [
9938 source 15
9939 target 6
9940 graphics
9941 [
9942 fill "#000000"
9943 targetArrow "standard"
9944 ]
9945 LabelGraphics
9946 [
9947 text "instanceTypeName attribute EClassifier"
9948 fontSize 14
9949 fontName "Consolas"
9950 configuration "AutoFlippingLabel"
9951 model "six_pos"
9952 position "thead"
9953 ]
9954 ]
9955 edge
9956 [
9957 source 0
9958 target 10
9959 graphics
9960 [
9961 fill "#000000"
9962 targetArrow "standard"
9963 ]
9964 LabelGraphics
9965 [
9966 text "name attribute ENamedElement"
9967 fontSize 14
9968 fontName "Consolas"
9969 configuration "AutoFlippingLabel"
9970 model "six_pos"
9971 position "thead"
9972 ]
9973 ]
9974 edge
9975 [
9976 source 13
9977 target 8
9978 graphics
9979 [
9980 fill "#000000"
9981 targetArrow "standard"
9982 ]
9983 LabelGraphics
9984 [
9985 text "name attribute ENamedElement"
9986 fontSize 14
9987 fontName "Consolas"
9988 configuration "AutoFlippingLabel"
9989 model "six_pos"
9990 position "thead"
9991 ]
9992 ]
9993 edge
9994 [
9995 source 0
9996 target 9
9997 graphics
9998 [
9999 fill "#000000"
10000 targetArrow "standard"
10001 ]
10002 LabelGraphics
10003 [
10004 text "nsURI attribute EPackage"
10005 fontSize 14
10006 fontName "Consolas"
10007 configuration "AutoFlippingLabel"
10008 model "six_pos"
10009 position "thead"
10010 ]
10011 ]
10012 edge
10013 [
10014 source 13
10015 target 7
10016 graphics
10017 [
10018 fill "#000000"
10019 targetArrow "standard"
10020 ]
10021 LabelGraphics
10022 [
10023 text "nsURI attribute EPackage"
10024 fontSize 14
10025 fontName "Consolas"
10026 configuration "AutoFlippingLabel"
10027 model "six_pos"
10028 position "thead"
10029 ]
10030 ]
10031 edge
10032 [
10033 source 12
10034 target 7
10035 graphics
10036 [
10037 fill "#000000"
10038 targetArrow "standard"
10039 ]
10040 LabelGraphics
10041 [
10042 text "nsURI attribute EPackage"
10043 fontSize 14
10044 fontName "Consolas"
10045 configuration "AutoFlippingLabel"
10046 model "six_pos"
10047 position "thead"
10048 ]
10049 ]
10050 edge
10051 [
10052 source 0
10053 target 8
10054 graphics
10055 [
10056 fill "#000000"
10057 targetArrow "standard"
10058 ]
10059 LabelGraphics
10060 [
10061 text "nsPrefix attribute EPackage"
10062 fontSize 14
10063 fontName "Consolas"
10064 configuration "AutoFlippingLabel"
10065 model "six_pos"
10066 position "thead"
10067 ]
10068 ]
10069]
10070graph
10071[
10072 node
10073 [
10074 id 0
10075 graphics
10076 [
10077 w 226.60000000000002
10078 h 40
10079 type "rectangle"
10080 fill "#FFFFFF"
10081 fill2 "#FFFFFF"
10082 outline "#000000"
10083 ]
10084 LabelGraphics
10085 [
10086 text "Root literal FunctionType"
10087 outline "#000000"
10088 fill "#FFFFFF"
10089 fontSize 16
10090 fontName "Monospace"
10091 autoSizePolicy "node_width"
10092 anchor "t"
10093 borderDistance 0.0
10094 ]
10095 LabelGraphics
10096 [
10097 text "
10098 FunctionType enum
10099 "
10100 fontSize 14
10101 fontName "Consolas"
10102 alignment "left"
10103 anchor "tl"
10104 borderDistance 6
10105 ]
10106 ]
10107
10108 node
10109 [
10110 id 1
10111 graphics
10112 [
10113 w 297.0
10114 h 40
10115 type "rectangle"
10116 fill "#FFFFFF"
10117 fill2 "#FFFFFF"
10118 outline "#000000"
10119 ]
10120 LabelGraphics
10121 [
10122 text "Intermediate literal FunctionType"
10123 outline "#000000"
10124 fill "#FFFFFF"
10125 fontSize 16
10126 fontName "Monospace"
10127 autoSizePolicy "node_width"
10128 anchor "t"
10129 borderDistance 0.0
10130 ]
10131 LabelGraphics
10132 [
10133 text "
10134 FunctionType enum
10135 "
10136 fontSize 14
10137 fontName "Consolas"
10138 alignment "left"
10139 anchor "tl"
10140 borderDistance 6
10141 ]
10142 ]
10143
10144 node
10145 [
10146 id 2
10147 graphics
10148 [
10149 w 226.60000000000002
10150 h 40
10151 type "rectangle"
10152 fill "#FFFFFF"
10153 fill2 "#FFFFFF"
10154 outline "#000000"
10155 ]
10156 LabelGraphics
10157 [
10158 text "Leaf literal FunctionType"
10159 outline "#000000"
10160 fill "#FFFFFF"
10161 fontSize 16
10162 fontName "Monospace"
10163 autoSizePolicy "node_width"
10164 anchor "t"
10165 borderDistance 0.0
10166 ]
10167 LabelGraphics
10168 [
10169 text "
10170 FunctionType enum
10171 "
10172 fontSize 14
10173 fontName "Consolas"
10174 alignment "left"
10175 anchor "tl"
10176 borderDistance 6
10177 ]
10178 ]
10179
10180 node
10181 [
10182 id 3
10183 graphics
10184 [
10185 w 361.90000000000003
10186 h 54
10187 type "rectangle"
10188 fill "#FFFFFF"
10189 fill2 "#FFFFFF"
10190 outline "#000000"
10191 ]
10192 LabelGraphics
10193 [
10194 text "o 1"
10195 outline "#000000"
10196 fill "#FFFFFF"
10197 fontSize 16
10198 fontName "Monospace"
10199 autoSizePolicy "node_width"
10200 anchor "t"
10201 borderDistance 0.0
10202 ]
10203 LabelGraphics
10204 [
10205 text "
10206 FunctionalArchitectureModel class DefinedPart
10207 FunctionalArchitectureModel class
10208 "
10209 fontSize 14
10210 fontName "Consolas"
10211 alignment "left"
10212 anchor "tl"
10213 borderDistance 6
10214 ]
10215 ]
10216
10217 node
10218 [
10219 id 4
10220 graphics
10221 [
10222 w 41.800000000000004
10223 h 26
10224 type "rectangle"
10225 fill "#FFFFFF"
10226 fill2 "#FFFFFF"
10227 outline "#000000"
10228 ]
10229 LabelGraphics
10230 [
10231 text "true"
10232 outline "#000000"
10233 fill "#FFFFFF"
10234 fontSize 16
10235 fontName "Monospace"
10236 autoSizePolicy "node_width"
10237 anchor "t"
10238 borderDistance 0.0
10239 ]
10240 LabelGraphics
10241 [
10242 text "
10243 "
10244 fontSize 14
10245 fontName "Consolas"
10246 alignment "left"
10247 anchor "tl"
10248 borderDistance 6
10249 ]
10250 ]
10251
10252 node
10253 [
10254 id 5
10255 graphics
10256 [
10257 w 50.6
10258 h 26
10259 type "rectangle"
10260 fill "#FFFFFF"
10261 fill2 "#FFFFFF"
10262 outline "#000000"
10263 ]
10264 LabelGraphics
10265 [
10266 text "false"
10267 outline "#000000"
10268 fill "#FFFFFF"
10269 fontSize 16
10270 fontName "Monospace"
10271 autoSizePolicy "node_width"
10272 anchor "t"
10273 borderDistance 0.0
10274 ]
10275 LabelGraphics
10276 [
10277 text "
10278 "
10279 fontSize 14
10280 fontName "Consolas"
10281 alignment "left"
10282 anchor "tl"
10283 borderDistance 6
10284 ]
10285 ]
10286
10287 node
10288 [
10289 id 6
10290 graphics
10291 [
10292 w 192.50000000000003
10293 h 54
10294 type "rectangle"
10295 fill "#FFFFFF"
10296 fill2 "#FFFFFF"
10297 outline "#000000"
10298 ]
10299 LabelGraphics
10300 [
10301 text "null"
10302 outline "#000000"
10303 fill "#FFFFFF"
10304 fontSize 16
10305 fontName "Monospace"
10306 autoSizePolicy "node_width"
10307 anchor "t"
10308 borderDistance 0.0
10309 ]
10310 LabelGraphics
10311 [
10312 text "
10313 FunctionalElement class
10314 Function class
10315 "
10316 fontSize 14
10317 fontName "Consolas"
10318 alignment "left"
10319 anchor "tl"
10320 borderDistance 6
10321 ]
10322 ]
10323
10324 node
10325 [
10326 id 7
10327 graphics
10328 [
10329 w 112.2
10330 h 26
10331 type "rectangle"
10332 fill "#FFFFFF"
10333 fill2 "#FFFFFF"
10334 outline "#000000"
10335 ]
10336 LabelGraphics
10337 [
10338 text "New Integers"
10339 outline "#000000"
10340 fill "#FFFFFF"
10341 fontSize 16
10342 fontName "Monospace"
10343 autoSizePolicy "node_width"
10344 anchor "t"
10345 borderDistance 0.0
10346 ]
10347 LabelGraphics
10348 [
10349 text "
10350 "
10351 fontSize 14
10352 fontName "Consolas"
10353 alignment "left"
10354 anchor "tl"
10355 borderDistance 6
10356 ]
10357 ]
10358
10359 node
10360 [
10361 id 8
10362 graphics
10363 [
10364 w 85.80000000000001
10365 h 26
10366 type "rectangle"
10367 fill "#FFFFFF"
10368 fill2 "#FFFFFF"
10369 outline "#000000"
10370 ]
10371 LabelGraphics
10372 [
10373 text "New Reals"
10374 outline "#000000"
10375 fill "#FFFFFF"
10376 fontSize 16
10377 fontName "Monospace"
10378 autoSizePolicy "node_width"
10379 anchor "t"
10380 borderDistance 0.0
10381 ]
10382 LabelGraphics
10383 [
10384 text "
10385 "
10386 fontSize 14
10387 fontName "Consolas"
10388 alignment "left"
10389 anchor "tl"
10390 borderDistance 6
10391 ]
10392 ]
10393
10394 node
10395 [
10396 id 9
10397 graphics
10398 [
10399 w 103.4
10400 h 26
10401 type "rectangle"
10402 fill "#FFFFFF"
10403 fill2 "#FFFFFF"
10404 outline "#000000"
10405 ]
10406 LabelGraphics
10407 [
10408 text "New Strings"
10409 outline "#000000"
10410 fill "#FFFFFF"
10411 fontSize 16
10412 fontName "Monospace"
10413 autoSizePolicy "node_width"
10414 anchor "t"
10415 borderDistance 0.0
10416 ]
10417 LabelGraphics
10418 [
10419 text "
10420 "
10421 fontSize 14
10422 fontName "Consolas"
10423 alignment "left"
10424 anchor "tl"
10425 borderDistance 6
10426 ]
10427 ]
10428
10429 node
10430 [
10431 id 10
10432 graphics
10433 [
10434 w 103.4
10435 h 26
10436 type "rectangle"
10437 fill "#FFFFFF"
10438 fill2 "#FFFFFF"
10439 outline "#000000"
10440 ]
10441 LabelGraphics
10442 [
10443 text "New Objects"
10444 outline "#000000"
10445 fill "#FFFFFF"
10446 fontSize 16
10447 fontName "Monospace"
10448 autoSizePolicy "node_width"
10449 anchor "t"
10450 borderDistance 0.0
10451 ]
10452 LabelGraphics
10453 [
10454 text "
10455 "
10456 fontSize 14
10457 fontName "Consolas"
10458 alignment "left"
10459 anchor "tl"
10460 borderDistance 6
10461 ]
10462 ]
10463 edge
10464 [
10465 source 6
10466 target 3
10467 graphics
10468 [
10469 fill "#000000"
10470 targetArrow "standard"
10471 ]
10472 LabelGraphics
10473 [
10474 text "model reference FunctionalElement"
10475 fontSize 14
10476 fontName "Consolas"
10477 configuration "AutoFlippingLabel"
10478 model "six_pos"
10479 position "thead"
10480 ]
10481 ]
10482 edge
10483 [
10484 source 3
10485 target 6
10486 graphics
10487 [
10488 fill "#000000"
10489 width 3
10490 targetArrow "standard"
10491 ]
10492 LabelGraphics
10493 [
10494 text "rootElements reference FunctionalArchitectureModel"
10495 fontSize 14
10496 fontName "Consolas"
10497 configuration "AutoFlippingLabel"
10498 model "six_pos"
10499 position "thead"
10500 ]
10501 ]
10502 edge
10503 [
10504 source 6
10505 target 1
10506 graphics
10507 [
10508 fill "#000000"
10509 targetArrow "standard"
10510 ]
10511 LabelGraphics
10512 [
10513 text "type attribute Function"
10514 fontSize 14
10515 fontName "Consolas"
10516 configuration "AutoFlippingLabel"
10517 model "six_pos"
10518 position "thead"
10519 ]
10520 ]
10521]
10522graph
10523[
10524 node
10525 [
10526 id 0
10527 graphics
10528 [
10529 w 254.10000000000002
10530 h 110
10531 type "rectangle"
10532 fill "#FFFFFF"
10533 fill2 "#FFFFFF"
10534 outline "#000000"
10535 ]
10536 LabelGraphics
10537 [
10538 text "o 1"
10539 outline "#000000"
10540 fill "#FFFFFF"
10541 fontSize 16
10542 fontName "Monospace"
10543 autoSizePolicy "node_width"
10544 anchor "t"
10545 borderDistance 0.0
10546 ]
10547 LabelGraphics
10548 [
10549 text "
10550 EModelElement class DefinedPart
10551 ENamedElement class DefinedPart
10552 EPackage class DefinedPart
10553 EModelElement class
10554 ENamedElement class
10555 EPackage class
10556 "
10557 fontSize 14
10558 fontName "Consolas"
10559 alignment "left"
10560 anchor "tl"
10561 borderDistance 6
10562 ]
10563 ]
10564
10565 node
10566 [
10567 id 1
10568 graphics
10569 [
10570 w 41.800000000000004
10571 h 26
10572 type "rectangle"
10573 fill "#FFFFFF"
10574 fill2 "#FFFFFF"
10575 outline "#000000"
10576 ]
10577 LabelGraphics
10578 [
10579 text "true"
10580 outline "#000000"
10581 fill "#FFFFFF"
10582 fontSize 16
10583 fontName "Monospace"
10584 autoSizePolicy "node_width"
10585 anchor "t"
10586 borderDistance 0.0
10587 ]
10588 LabelGraphics
10589 [
10590 text "
10591 "
10592 fontSize 14
10593 fontName "Consolas"
10594 alignment "left"
10595 anchor "tl"
10596 borderDistance 6
10597 ]
10598 ]
10599
10600 node
10601 [
10602 id 2
10603 graphics
10604 [
10605 w 50.6
10606 h 26
10607 type "rectangle"
10608 fill "#FFFFFF"
10609 fill2 "#FFFFFF"
10610 outline "#000000"
10611 ]
10612 LabelGraphics
10613 [
10614 text "false"
10615 outline "#000000"
10616 fill "#FFFFFF"
10617 fontSize 16
10618 fontName "Monospace"
10619 autoSizePolicy "node_width"
10620 anchor "t"
10621 borderDistance 0.0
10622 ]
10623 LabelGraphics
10624 [
10625 text "
10626 "
10627 fontSize 14
10628 fontName "Consolas"
10629 alignment "left"
10630 anchor "tl"
10631 borderDistance 6
10632 ]
10633 ]
10634
10635 node
10636 [
10637 id 3
10638 graphics
10639 [
10640 w 24.200000000000003
10641 h 26
10642 type "rectangle"
10643 fill "#FFFFFF"
10644 fill2 "#FFFFFF"
10645 outline "#000000"
10646 ]
10647 LabelGraphics
10648 [
10649 text "-1"
10650 outline "#000000"
10651 fill "#FFFFFF"
10652 fontSize 16
10653 fontName "Monospace"
10654 autoSizePolicy "node_width"
10655 anchor "t"
10656 borderDistance 0.0
10657 ]
10658 LabelGraphics
10659 [
10660 text "
10661 "
10662 fontSize 14
10663 fontName "Consolas"
10664 alignment "left"
10665 anchor "tl"
10666 borderDistance 6
10667 ]
10668 ]
10669
10670 node
10671 [
10672 id 4
10673 graphics
10674 [
10675 w 15.400000000000002
10676 h 26
10677 type "rectangle"
10678 fill "#FFFFFF"
10679 fill2 "#FFFFFF"
10680 outline "#000000"
10681 ]
10682 LabelGraphics
10683 [
10684 text "0"
10685 outline "#000000"
10686 fill "#FFFFFF"
10687 fontSize 16
10688 fontName "Monospace"
10689 autoSizePolicy "node_width"
10690 anchor "t"
10691 borderDistance 0.0
10692 ]
10693 LabelGraphics
10694 [
10695 text "
10696 "
10697 fontSize 14
10698 fontName "Consolas"
10699 alignment "left"
10700 anchor "tl"
10701 borderDistance 6
10702 ]
10703 ]
10704
10705 node
10706 [
10707 id 5
10708 graphics
10709 [
10710 w 15.400000000000002
10711 h 26
10712 type "rectangle"
10713 fill "#FFFFFF"
10714 fill2 "#FFFFFF"
10715 outline "#000000"
10716 ]
10717 LabelGraphics
10718 [
10719 text "1"
10720 outline "#000000"
10721 fill "#FFFFFF"
10722 fontSize 16
10723 fontName "Monospace"
10724 autoSizePolicy "node_width"
10725 anchor "t"
10726 borderDistance 0.0
10727 ]
10728 LabelGraphics
10729 [
10730 text "
10731 "
10732 fontSize 14
10733 fontName "Consolas"
10734 alignment "left"
10735 anchor "tl"
10736 borderDistance 6
10737 ]
10738 ]
10739
10740 node
10741 [
10742 id 6
10743 graphics
10744 [
10745 w 33.0
10746 h 26
10747 type "rectangle"
10748 fill "#FFFFFF"
10749 fill2 "#FFFFFF"
10750 outline "#000000"
10751 ]
10752 LabelGraphics
10753 [
10754 text ""A""
10755 outline "#000000"
10756 fill "#FFFFFF"
10757 fontSize 16
10758 fontName "Monospace"
10759 autoSizePolicy "node_width"
10760 anchor "t"
10761 borderDistance 0.0
10762 ]
10763 LabelGraphics
10764 [
10765 text "
10766 "
10767 fontSize 14
10768 fontName "Consolas"
10769 alignment "left"
10770 anchor "tl"
10771 borderDistance 6
10772 ]
10773 ]
10774
10775 node
10776 [
10777 id 7
10778 graphics
10779 [
10780 w 33.0
10781 h 26
10782 type "rectangle"
10783 fill "#FFFFFF"
10784 fill2 "#FFFFFF"
10785 outline "#000000"
10786 ]
10787 LabelGraphics
10788 [
10789 text ""B""
10790 outline "#000000"
10791 fill "#FFFFFF"
10792 fontSize 16
10793 fontName "Monospace"
10794 autoSizePolicy "node_width"
10795 anchor "t"
10796 borderDistance 0.0
10797 ]
10798 LabelGraphics
10799 [
10800 text "
10801 "
10802 fontSize 14
10803 fontName "Consolas"
10804 alignment "left"
10805 anchor "tl"
10806 borderDistance 6
10807 ]
10808 ]
10809
10810 node
10811 [
10812 id 8
10813 graphics
10814 [
10815 w 94.60000000000001
10816 h 26
10817 type "rectangle"
10818 fill "#FFFFFF"
10819 fill2 "#FFFFFF"
10820 outline "#000000"
10821 ]
10822 LabelGraphics
10823 [
10824 text ""nsPrefix""
10825 outline "#000000"
10826 fill "#FFFFFF"
10827 fontSize 16
10828 fontName "Monospace"
10829 autoSizePolicy "node_width"
10830 anchor "t"
10831 borderDistance 0.0
10832 ]
10833 LabelGraphics
10834 [
10835 text "
10836 "
10837 fontSize 14
10838 fontName "Consolas"
10839 alignment "left"
10840 anchor "tl"
10841 borderDistance 6
10842 ]
10843 ]
10844
10845 node
10846 [
10847 id 9
10848 graphics
10849 [
10850 w 68.2
10851 h 26
10852 type "rectangle"
10853 fill "#FFFFFF"
10854 fill2 "#FFFFFF"
10855 outline "#000000"
10856 ]
10857 LabelGraphics
10858 [
10859 text ""nsUri""
10860 outline "#000000"
10861 fill "#FFFFFF"
10862 fontSize 16
10863 fontName "Monospace"
10864 autoSizePolicy "node_width"
10865 anchor "t"
10866 borderDistance 0.0
10867 ]
10868 LabelGraphics
10869 [
10870 text "
10871 "
10872 fontSize 14
10873 fontName "Consolas"
10874 alignment "left"
10875 anchor "tl"
10876 borderDistance 6
10877 ]
10878 ]
10879
10880 node
10881 [
10882 id 10
10883 graphics
10884 [
10885 w 121.00000000000001
10886 h 26
10887 type "rectangle"
10888 fill "#FFFFFF"
10889 fill2 "#FFFFFF"
10890 outline "#000000"
10891 ]
10892 LabelGraphics
10893 [
10894 text ""packageName""
10895 outline "#000000"
10896 fill "#FFFFFF"
10897 fontSize 16
10898 fontName "Monospace"
10899 autoSizePolicy "node_width"
10900 anchor "t"
10901 borderDistance 0.0
10902 ]
10903 LabelGraphics
10904 [
10905 text "
10906 "
10907 fontSize 14
10908 fontName "Consolas"
10909 alignment "left"
10910 anchor "tl"
10911 borderDistance 6
10912 ]
10913 ]
10914
10915 node
10916 [
10917 id 11
10918 graphics
10919 [
10920 w 269.5
10921 h 110
10922 type "rectangle"
10923 fill "#FFFFFF"
10924 fill2 "#FFFFFF"
10925 outline "#000000"
10926 ]
10927 LabelGraphics
10928 [
10929 text "null"
10930 outline "#000000"
10931 fill "#FFFFFF"
10932 fontSize 16
10933 fontName "Monospace"
10934 autoSizePolicy "node_width"
10935 anchor "t"
10936 borderDistance 0.0
10937 ]
10938 LabelGraphics
10939 [
10940 text "
10941 EClass class
10942 EClassifier class
10943 EModelElement class
10944 ENamedElement class
10945 EModelElement class UndefinedPart
10946 ENamedElement class UndefinedPart
10947 "
10948 fontSize 14
10949 fontName "Consolas"
10950 alignment "left"
10951 anchor "tl"
10952 borderDistance 6
10953 ]
10954 ]
10955
10956 node
10957 [
10958 id 12
10959 graphics
10960 [
10961 w 269.5
10962 h 110
10963 type "rectangle"
10964 fill "#FFFFFF"
10965 fill2 "#FFFFFF"
10966 outline "#000000"
10967 ]
10968 LabelGraphics
10969 [
10970 text "null"
10971 outline "#000000"
10972 fill "#FFFFFF"
10973 fontSize 16
10974 fontName "Monospace"
10975 autoSizePolicy "node_width"
10976 anchor "t"
10977 borderDistance 0.0
10978 ]
10979 LabelGraphics
10980 [
10981 text "
10982 EModelElement class
10983 ENamedElement class
10984 EPackage class
10985 EModelElement class UndefinedPart
10986 ENamedElement class UndefinedPart
10987 EPackage class UndefinedPart
10988 "
10989 fontSize 14
10990 fontName "Consolas"
10991 alignment "left"
10992 anchor "tl"
10993 borderDistance 6
10994 ]
10995 ]
10996
10997 node
10998 [
10999 id 13
11000 graphics
11001 [
11002 w 269.5
11003 h 110
11004 type "rectangle"
11005 fill "#FFFFFF"
11006 fill2 "#FFFFFF"
11007 outline "#000000"
11008 ]
11009 LabelGraphics
11010 [
11011 text "null"
11012 outline "#000000"
11013 fill "#FFFFFF"
11014 fontSize 16
11015 fontName "Monospace"
11016 autoSizePolicy "node_width"
11017 anchor "t"
11018 borderDistance 0.0
11019 ]
11020 LabelGraphics
11021 [
11022 text "
11023 EModelElement class
11024 ENamedElement class
11025 EOperation class
11026 ETypedElement class
11027 EModelElement class UndefinedPart
11028 ENamedElement class UndefinedPart
11029 "
11030 fontSize 14
11031 fontName "Consolas"
11032 alignment "left"
11033 anchor "tl"
11034 borderDistance 6
11035 ]
11036 ]
11037
11038 node
11039 [
11040 id 14
11041 graphics
11042 [
11043 w 269.5
11044 h 68
11045 type "rectangle"
11046 fill "#FFFFFF"
11047 fill2 "#FFFFFF"
11048 outline "#000000"
11049 ]
11050 LabelGraphics
11051 [
11052 text "null"
11053 outline "#000000"
11054 fill "#FFFFFF"
11055 fontSize 16
11056 fontName "Monospace"
11057 autoSizePolicy "node_width"
11058 anchor "t"
11059 borderDistance 0.0
11060 ]
11061 LabelGraphics
11062 [
11063 text "
11064 EAnnotation class
11065 EModelElement class
11066 EModelElement class UndefinedPart
11067 "
11068 fontSize 14
11069 fontName "Consolas"
11070 alignment "left"
11071 anchor "tl"
11072 borderDistance 6
11073 ]
11074 ]
11075
11076 node
11077 [
11078 id 15
11079 graphics
11080 [
11081 w 238.70000000000002
11082 h 40
11083 type "rectangle"
11084 fill "#FFFFFF"
11085 fill2 "#FFFFFF"
11086 outline "#000000"
11087 ]
11088 LabelGraphics
11089 [
11090 text "null"
11091 outline "#000000"
11092 fill "#FFFFFF"
11093 fontSize 16
11094 fontName "Monospace"
11095 autoSizePolicy "node_width"
11096 anchor "t"
11097 borderDistance 0.0
11098 ]
11099 LabelGraphics
11100 [
11101 text "
11102 EStringToStringMapEntry class
11103 "
11104 fontSize 14
11105 fontName "Consolas"
11106 alignment "left"
11107 anchor "tl"
11108 borderDistance 6
11109 ]
11110 ]
11111
11112 node
11113 [
11114 id 16
11115 graphics
11116 [
11117 w 112.2
11118 h 26
11119 type "rectangle"
11120 fill "#FFFFFF"
11121 fill2 "#FFFFFF"
11122 outline "#000000"
11123 ]
11124 LabelGraphics
11125 [
11126 text "New Integers"
11127 outline "#000000"
11128 fill "#FFFFFF"
11129 fontSize 16
11130 fontName "Monospace"
11131 autoSizePolicy "node_width"
11132 anchor "t"
11133 borderDistance 0.0
11134 ]
11135 LabelGraphics
11136 [
11137 text "
11138 "
11139 fontSize 14
11140 fontName "Consolas"
11141 alignment "left"
11142 anchor "tl"
11143 borderDistance 6
11144 ]
11145 ]
11146
11147 node
11148 [
11149 id 17
11150 graphics
11151 [
11152 w 85.80000000000001
11153 h 26
11154 type "rectangle"
11155 fill "#FFFFFF"
11156 fill2 "#FFFFFF"
11157 outline "#000000"
11158 ]
11159 LabelGraphics
11160 [
11161 text "New Reals"
11162 outline "#000000"
11163 fill "#FFFFFF"
11164 fontSize 16
11165 fontName "Monospace"
11166 autoSizePolicy "node_width"
11167 anchor "t"
11168 borderDistance 0.0
11169 ]
11170 LabelGraphics
11171 [
11172 text "
11173 "
11174 fontSize 14
11175 fontName "Consolas"
11176 alignment "left"
11177 anchor "tl"
11178 borderDistance 6
11179 ]
11180 ]
11181
11182 node
11183 [
11184 id 18
11185 graphics
11186 [
11187 w 103.4
11188 h 26
11189 type "rectangle"
11190 fill "#FFFFFF"
11191 fill2 "#FFFFFF"
11192 outline "#000000"
11193 ]
11194 LabelGraphics
11195 [
11196 text "New Strings"
11197 outline "#000000"
11198 fill "#FFFFFF"
11199 fontSize 16
11200 fontName "Monospace"
11201 autoSizePolicy "node_width"
11202 anchor "t"
11203 borderDistance 0.0
11204 ]
11205 LabelGraphics
11206 [
11207 text "
11208 "
11209 fontSize 14
11210 fontName "Consolas"
11211 alignment "left"
11212 anchor "tl"
11213 borderDistance 6
11214 ]
11215 ]
11216
11217 node
11218 [
11219 id 19
11220 graphics
11221 [
11222 w 103.4
11223 h 26
11224 type "rectangle"
11225 fill "#FFFFFF"
11226 fill2 "#FFFFFF"
11227 outline "#000000"
11228 ]
11229 LabelGraphics
11230 [
11231 text "New Objects"
11232 outline "#000000"
11233 fill "#FFFFFF"
11234 fontSize 16
11235 fontName "Monospace"
11236 autoSizePolicy "node_width"
11237 anchor "t"
11238 borderDistance 0.0
11239 ]
11240 LabelGraphics
11241 [
11242 text "
11243 "
11244 fontSize 14
11245 fontName "Consolas"
11246 alignment "left"
11247 anchor "tl"
11248 borderDistance 6
11249 ]
11250 ]
11251 edge
11252 [
11253 source 14
11254 target 15
11255 graphics
11256 [
11257 fill "#000000"
11258 width 3
11259 targetArrow "standard"
11260 ]
11261 LabelGraphics
11262 [
11263 text "details reference EAnnotation"
11264 fontSize 14
11265 fontName "Consolas"
11266 configuration "AutoFlippingLabel"
11267 model "six_pos"
11268 position "thead"
11269 ]
11270 ]
11271 edge
11272 [
11273 source 14
11274 target 0
11275 graphics
11276 [
11277 fill "#000000"
11278 targetArrow "standard"
11279 ]
11280 LabelGraphics
11281 [
11282 text "eModelElement reference EAnnotation"
11283 fontSize 14
11284 fontName "Consolas"
11285 configuration "AutoFlippingLabel"
11286 model "six_pos"
11287 position "thead"
11288 ]
11289 ]
11290 edge
11291 [
11292 source 11
11293 target 11
11294 graphics
11295 [
11296 fill "#000000"
11297 targetArrow "standard"
11298 ]
11299 LabelGraphics
11300 [
11301 text "eSuperTypes reference EClass"
11302 fontSize 14
11303 fontName "Consolas"
11304 configuration "AutoFlippingLabel"
11305 model "six_pos"
11306 position "thead"
11307 ]
11308 ]
11309 edge
11310 [
11311 source 11
11312 target 13
11313 graphics
11314 [
11315 fill "#000000"
11316 width 3
11317 targetArrow "standard"
11318 ]
11319 LabelGraphics
11320 [
11321 text "eOperations reference EClass"
11322 fontSize 14
11323 fontName "Consolas"
11324 configuration "AutoFlippingLabel"
11325 model "six_pos"
11326 position "thead"
11327 ]
11328 ]
11329 edge
11330 [
11331 source 11
11332 target 11
11333 graphics
11334 [
11335 fill "#000000"
11336 targetArrow "standard"
11337 ]
11338 LabelGraphics
11339 [
11340 text "eAllSuperTypes reference EClass"
11341 fontSize 14
11342 fontName "Consolas"
11343 configuration "AutoFlippingLabel"
11344 model "six_pos"
11345 position "thead"
11346 ]
11347 ]
11348 edge
11349 [
11350 source 11
11351 target 0
11352 graphics
11353 [
11354 fill "#000000"
11355 targetArrow "standard"
11356 ]
11357 LabelGraphics
11358 [
11359 text "ePackage reference EClassifier"
11360 fontSize 14
11361 fontName "Consolas"
11362 configuration "AutoFlippingLabel"
11363 model "six_pos"
11364 position "thead"
11365 ]
11366 ]
11367 edge
11368 [
11369 source 0
11370 target 14
11371 graphics
11372 [
11373 fill "#000000"
11374 width 3
11375 targetArrow "standard"
11376 ]
11377 LabelGraphics
11378 [
11379 text "eAnnotations reference EModelElement"
11380 fontSize 14
11381 fontName "Consolas"
11382 configuration "AutoFlippingLabel"
11383 model "six_pos"
11384 position "thead"
11385 ]
11386 ]
11387 edge
11388 [
11389 source 13
11390 target 11
11391 graphics
11392 [
11393 fill "#000000"
11394 targetArrow "standard"
11395 ]
11396 LabelGraphics
11397 [
11398 text "eContainingClass reference EOperation"
11399 fontSize 14
11400 fontName "Consolas"
11401 configuration "AutoFlippingLabel"
11402 model "six_pos"
11403 position "thead"
11404 ]
11405 ]
11406 edge
11407 [
11408 source 0
11409 target 11
11410 graphics
11411 [
11412 fill "#000000"
11413 width 3
11414 targetArrow "standard"
11415 ]
11416 LabelGraphics
11417 [
11418 text "eClassifiers reference EPackage"
11419 fontSize 14
11420 fontName "Consolas"
11421 configuration "AutoFlippingLabel"
11422 model "six_pos"
11423 position "thead"
11424 ]
11425 ]
11426 edge
11427 [
11428 source 0
11429 target 12
11430 graphics
11431 [
11432 fill "#000000"
11433 width 3
11434 targetArrow "standard"
11435 ]
11436 LabelGraphics
11437 [
11438 text "eSubpackages reference EPackage"
11439 fontSize 14
11440 fontName "Consolas"
11441 configuration "AutoFlippingLabel"
11442 model "six_pos"
11443 position "thead"
11444 ]
11445 ]
11446 edge
11447 [
11448 source 12
11449 target 0
11450 graphics
11451 [
11452 fill "#000000"
11453 targetArrow "standard"
11454 ]
11455 LabelGraphics
11456 [
11457 text "eSuperPackage reference EPackage"
11458 fontSize 14
11459 fontName "Consolas"
11460 configuration "AutoFlippingLabel"
11461 model "six_pos"
11462 position "thead"
11463 ]
11464 ]
11465 edge
11466 [
11467 source 11
11468 target 8
11469 graphics
11470 [
11471 fill "#000000"
11472 targetArrow "standard"
11473 ]
11474 LabelGraphics
11475 [
11476 text "instanceClassName attribute EClassifier"
11477 fontSize 14
11478 fontName "Consolas"
11479 configuration "AutoFlippingLabel"
11480 model "six_pos"
11481 position "thead"
11482 ]
11483 ]
11484 edge
11485 [
11486 source 11
11487 target 9
11488 graphics
11489 [
11490 fill "#000000"
11491 targetArrow "standard"
11492 ]
11493 LabelGraphics
11494 [
11495 text "instanceTypeName attribute EClassifier"
11496 fontSize 14
11497 fontName "Consolas"
11498 configuration "AutoFlippingLabel"
11499 model "six_pos"
11500 position "thead"
11501 ]
11502 ]
11503 edge
11504 [
11505 source 0
11506 target 10
11507 graphics
11508 [
11509 fill "#000000"
11510 targetArrow "standard"
11511 ]
11512 LabelGraphics
11513 [
11514 text "name attribute ENamedElement"
11515 fontSize 14
11516 fontName "Consolas"
11517 configuration "AutoFlippingLabel"
11518 model "six_pos"
11519 position "thead"
11520 ]
11521 ]
11522 edge
11523 [
11524 source 12
11525 target 7
11526 graphics
11527 [
11528 fill "#000000"
11529 targetArrow "standard"
11530 ]
11531 LabelGraphics
11532 [
11533 text "name attribute ENamedElement"
11534 fontSize 14
11535 fontName "Consolas"
11536 configuration "AutoFlippingLabel"
11537 model "six_pos"
11538 position "thead"
11539 ]
11540 ]
11541 edge
11542 [
11543 source 0
11544 target 9
11545 graphics
11546 [
11547 fill "#000000"
11548 targetArrow "standard"
11549 ]
11550 LabelGraphics
11551 [
11552 text "nsURI attribute EPackage"
11553 fontSize 14
11554 fontName "Consolas"
11555 configuration "AutoFlippingLabel"
11556 model "six_pos"
11557 position "thead"
11558 ]
11559 ]
11560 edge
11561 [
11562 source 12
11563 target 8
11564 graphics
11565 [
11566 fill "#000000"
11567 targetArrow "standard"
11568 ]
11569 LabelGraphics
11570 [
11571 text "nsURI attribute EPackage"
11572 fontSize 14
11573 fontName "Consolas"
11574 configuration "AutoFlippingLabel"
11575 model "six_pos"
11576 position "thead"
11577 ]
11578 ]
11579 edge
11580 [
11581 source 0
11582 target 8
11583 graphics
11584 [
11585 fill "#000000"
11586 targetArrow "standard"
11587 ]
11588 LabelGraphics
11589 [
11590 text "nsPrefix attribute EPackage"
11591 fontSize 14
11592 fontName "Consolas"
11593 configuration "AutoFlippingLabel"
11594 model "six_pos"
11595 position "thead"
11596 ]
11597 ]
11598 edge
11599 [
11600 source 13
11601 target 1
11602 graphics
11603 [
11604 fill "#000000"
11605 targetArrow "standard"
11606 ]
11607 LabelGraphics
11608 [
11609 text "unique attribute ETypedElement"
11610 fontSize 14
11611 fontName "Consolas"
11612 configuration "AutoFlippingLabel"
11613 model "six_pos"
11614 position "thead"
11615 ]
11616 ]
11617 edge
11618 [
11619 source 13
11620 target 4
11621 graphics
11622 [
11623 fill "#000000"
11624 targetArrow "standard"
11625 ]
11626 LabelGraphics
11627 [
11628 text "upperBound attribute ETypedElement"
11629 fontSize 14
11630 fontName "Consolas"
11631 configuration "AutoFlippingLabel"
11632 model "six_pos"
11633 position "thead"
11634 ]
11635 ]
11636]
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
index e01ca46b..b5fea093 100644
--- 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
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
index c6287127..4a9086fe 100644
--- 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
@@ -1,9 +1,10 @@
1<?xml version="1.0" encoding="ASCII"?> 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"> 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"/> 3 <eAnnotations>
4 <eClassifiers xsi:type="ecore:EEnum"/> 4 <details/>
5 <eClassifiers xsi:type="ecore:EEnum" name="packageName" instanceClassName="nsPrefix"/> 5 </eAnnotations>
6 <eSubpackages name="A" nsURI="nsPrefix"> 6 <eClassifiers xsi:type="ecore:EClass" instanceTypeName="nsUri" eSuperTypes="//%">
7 <eClassifiers xsi:type="ecore:EEnum"/> 7 <eOperations upperBound="0"/>
8 </eSubpackages> 8 </eClassifiers>
9 <eSubpackages name="B" nsURI="nsPrefix"/>
9</ecore:EPackage> 10</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
index 05f41ccb..55dc70ba 100644
--- 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
@@ -2067,3 +2067,5616 @@ graph
2067 ] 2067 ]
2068 ] 2068 ]
2069] 2069]
2070graph
2071[
2072 node
2073 [
2074 id 0
2075 graphics
2076 [
2077 w 254.10000000000002
2078 h 110
2079 type "rectangle"
2080 fill "#FFFFFF"
2081 fill2 "#FFFFFF"
2082 outline "#000000"
2083 ]
2084 LabelGraphics
2085 [
2086 text "o 1"
2087 outline "#000000"
2088 fill "#FFFFFF"
2089 fontSize 16
2090 fontName "Monospace"
2091 autoSizePolicy "node_width"
2092 anchor "t"
2093 borderDistance 0.0
2094 ]
2095 LabelGraphics
2096 [
2097 text "
2098 EModelElement class DefinedPart
2099 ENamedElement class DefinedPart
2100 EPackage class DefinedPart
2101 EModelElement class
2102 ENamedElement class
2103 EPackage class
2104 "
2105 fontSize 14
2106 fontName "Consolas"
2107 alignment "left"
2108 anchor "tl"
2109 borderDistance 6
2110 ]
2111 ]
2112
2113 node
2114 [
2115 id 1
2116 graphics
2117 [
2118 w 41.800000000000004
2119 h 26
2120 type "rectangle"
2121 fill "#FFFFFF"
2122 fill2 "#FFFFFF"
2123 outline "#000000"
2124 ]
2125 LabelGraphics
2126 [
2127 text "true"
2128 outline "#000000"
2129 fill "#FFFFFF"
2130 fontSize 16
2131 fontName "Monospace"
2132 autoSizePolicy "node_width"
2133 anchor "t"
2134 borderDistance 0.0
2135 ]
2136 LabelGraphics
2137 [
2138 text "
2139 "
2140 fontSize 14
2141 fontName "Consolas"
2142 alignment "left"
2143 anchor "tl"
2144 borderDistance 6
2145 ]
2146 ]
2147
2148 node
2149 [
2150 id 2
2151 graphics
2152 [
2153 w 50.6
2154 h 26
2155 type "rectangle"
2156 fill "#FFFFFF"
2157 fill2 "#FFFFFF"
2158 outline "#000000"
2159 ]
2160 LabelGraphics
2161 [
2162 text "false"
2163 outline "#000000"
2164 fill "#FFFFFF"
2165 fontSize 16
2166 fontName "Monospace"
2167 autoSizePolicy "node_width"
2168 anchor "t"
2169 borderDistance 0.0
2170 ]
2171 LabelGraphics
2172 [
2173 text "
2174 "
2175 fontSize 14
2176 fontName "Consolas"
2177 alignment "left"
2178 anchor "tl"
2179 borderDistance 6
2180 ]
2181 ]
2182
2183 node
2184 [
2185 id 3
2186 graphics
2187 [
2188 w 24.200000000000003
2189 h 26
2190 type "rectangle"
2191 fill "#FFFFFF"
2192 fill2 "#FFFFFF"
2193 outline "#000000"
2194 ]
2195 LabelGraphics
2196 [
2197 text "-1"
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 "
2210 fontSize 14
2211 fontName "Consolas"
2212 alignment "left"
2213 anchor "tl"
2214 borderDistance 6
2215 ]
2216 ]
2217
2218 node
2219 [
2220 id 4
2221 graphics
2222 [
2223 w 15.400000000000002
2224 h 26
2225 type "rectangle"
2226 fill "#FFFFFF"
2227 fill2 "#FFFFFF"
2228 outline "#000000"
2229 ]
2230 LabelGraphics
2231 [
2232 text "0"
2233 outline "#000000"
2234 fill "#FFFFFF"
2235 fontSize 16
2236 fontName "Monospace"
2237 autoSizePolicy "node_width"
2238 anchor "t"
2239 borderDistance 0.0
2240 ]
2241 LabelGraphics
2242 [
2243 text "
2244 "
2245 fontSize 14
2246 fontName "Consolas"
2247 alignment "left"
2248 anchor "tl"
2249 borderDistance 6
2250 ]
2251 ]
2252
2253 node
2254 [
2255 id 5
2256 graphics
2257 [
2258 w 15.400000000000002
2259 h 26
2260 type "rectangle"
2261 fill "#FFFFFF"
2262 fill2 "#FFFFFF"
2263 outline "#000000"
2264 ]
2265 LabelGraphics
2266 [
2267 text "1"
2268 outline "#000000"
2269 fill "#FFFFFF"
2270 fontSize 16
2271 fontName "Monospace"
2272 autoSizePolicy "node_width"
2273 anchor "t"
2274 borderDistance 0.0
2275 ]
2276 LabelGraphics
2277 [
2278 text "
2279 "
2280 fontSize 14
2281 fontName "Consolas"
2282 alignment "left"
2283 anchor "tl"
2284 borderDistance 6
2285 ]
2286 ]
2287
2288 node
2289 [
2290 id 6
2291 graphics
2292 [
2293 w 33.0
2294 h 26
2295 type "rectangle"
2296 fill "#FFFFFF"
2297 fill2 "#FFFFFF"
2298 outline "#000000"
2299 ]
2300 LabelGraphics
2301 [
2302 text ""A""
2303 outline "#000000"
2304 fill "#FFFFFF"
2305 fontSize 16
2306 fontName "Monospace"
2307 autoSizePolicy "node_width"
2308 anchor "t"
2309 borderDistance 0.0
2310 ]
2311 LabelGraphics
2312 [
2313 text "
2314 "
2315 fontSize 14
2316 fontName "Consolas"
2317 alignment "left"
2318 anchor "tl"
2319 borderDistance 6
2320 ]
2321 ]
2322
2323 node
2324 [
2325 id 7
2326 graphics
2327 [
2328 w 33.0
2329 h 26
2330 type "rectangle"
2331 fill "#FFFFFF"
2332 fill2 "#FFFFFF"
2333 outline "#000000"
2334 ]
2335 LabelGraphics
2336 [
2337 text ""B""
2338 outline "#000000"
2339 fill "#FFFFFF"
2340 fontSize 16
2341 fontName "Monospace"
2342 autoSizePolicy "node_width"
2343 anchor "t"
2344 borderDistance 0.0
2345 ]
2346 LabelGraphics
2347 [
2348 text "
2349 "
2350 fontSize 14
2351 fontName "Consolas"
2352 alignment "left"
2353 anchor "tl"
2354 borderDistance 6
2355 ]
2356 ]
2357
2358 node
2359 [
2360 id 8
2361 graphics
2362 [
2363 w 94.60000000000001
2364 h 26
2365 type "rectangle"
2366 fill "#FFFFFF"
2367 fill2 "#FFFFFF"
2368 outline "#000000"
2369 ]
2370 LabelGraphics
2371 [
2372 text ""nsPrefix""
2373 outline "#000000"
2374 fill "#FFFFFF"
2375 fontSize 16
2376 fontName "Monospace"
2377 autoSizePolicy "node_width"
2378 anchor "t"
2379 borderDistance 0.0
2380 ]
2381 LabelGraphics
2382 [
2383 text "
2384 "
2385 fontSize 14
2386 fontName "Consolas"
2387 alignment "left"
2388 anchor "tl"
2389 borderDistance 6
2390 ]
2391 ]
2392
2393 node
2394 [
2395 id 9
2396 graphics
2397 [
2398 w 68.2
2399 h 26
2400 type "rectangle"
2401 fill "#FFFFFF"
2402 fill2 "#FFFFFF"
2403 outline "#000000"
2404 ]
2405 LabelGraphics
2406 [
2407 text ""nsUri""
2408 outline "#000000"
2409 fill "#FFFFFF"
2410 fontSize 16
2411 fontName "Monospace"
2412 autoSizePolicy "node_width"
2413 anchor "t"
2414 borderDistance 0.0
2415 ]
2416 LabelGraphics
2417 [
2418 text "
2419 "
2420 fontSize 14
2421 fontName "Consolas"
2422 alignment "left"
2423 anchor "tl"
2424 borderDistance 6
2425 ]
2426 ]
2427
2428 node
2429 [
2430 id 10
2431 graphics
2432 [
2433 w 121.00000000000001
2434 h 26
2435 type "rectangle"
2436 fill "#FFFFFF"
2437 fill2 "#FFFFFF"
2438 outline "#000000"
2439 ]
2440 LabelGraphics
2441 [
2442 text ""packageName""
2443 outline "#000000"
2444 fill "#FFFFFF"
2445 fontSize 16
2446 fontName "Monospace"
2447 autoSizePolicy "node_width"
2448 anchor "t"
2449 borderDistance 0.0
2450 ]
2451 LabelGraphics
2452 [
2453 text "
2454 "
2455 fontSize 14
2456 fontName "Consolas"
2457 alignment "left"
2458 anchor "tl"
2459 borderDistance 6
2460 ]
2461 ]
2462
2463 node
2464 [
2465 id 11
2466 graphics
2467 [
2468 w 269.5
2469 h 110
2470 type "rectangle"
2471 fill "#FFFFFF"
2472 fill2 "#FFFFFF"
2473 outline "#000000"
2474 ]
2475 LabelGraphics
2476 [
2477 text "null"
2478 outline "#000000"
2479 fill "#FFFFFF"
2480 fontSize 16
2481 fontName "Monospace"
2482 autoSizePolicy "node_width"
2483 anchor "t"
2484 borderDistance 0.0
2485 ]
2486 LabelGraphics
2487 [
2488 text "
2489 EClassifier class
2490 EDataType class
2491 EModelElement class
2492 ENamedElement class
2493 EModelElement class UndefinedPart
2494 ENamedElement class UndefinedPart
2495 "
2496 fontSize 14
2497 fontName "Consolas"
2498 alignment "left"
2499 anchor "tl"
2500 borderDistance 6
2501 ]
2502 ]
2503
2504 node
2505 [
2506 id 12
2507 graphics
2508 [
2509 w 269.5
2510 h 68
2511 type "rectangle"
2512 fill "#FFFFFF"
2513 fill2 "#FFFFFF"
2514 outline "#000000"
2515 ]
2516 LabelGraphics
2517 [
2518 text "null"
2519 outline "#000000"
2520 fill "#FFFFFF"
2521 fontSize 16
2522 fontName "Monospace"
2523 autoSizePolicy "node_width"
2524 anchor "t"
2525 borderDistance 0.0
2526 ]
2527 LabelGraphics
2528 [
2529 text "
2530 EAnnotation class
2531 EModelElement class
2532 EModelElement class UndefinedPart
2533 "
2534 fontSize 14
2535 fontName "Consolas"
2536 alignment "left"
2537 anchor "tl"
2538 borderDistance 6
2539 ]
2540 ]
2541
2542 node
2543 [
2544 id 13
2545 graphics
2546 [
2547 w 269.5
2548 h 110
2549 type "rectangle"
2550 fill "#FFFFFF"
2551 fill2 "#FFFFFF"
2552 outline "#000000"
2553 ]
2554 LabelGraphics
2555 [
2556 text "null"
2557 outline "#000000"
2558 fill "#FFFFFF"
2559 fontSize 16
2560 fontName "Monospace"
2561 autoSizePolicy "node_width"
2562 anchor "t"
2563 borderDistance 0.0
2564 ]
2565 LabelGraphics
2566 [
2567 text "
2568 EClass class
2569 EClassifier class
2570 EModelElement class
2571 ENamedElement class
2572 EModelElement class UndefinedPart
2573 ENamedElement class UndefinedPart
2574 "
2575 fontSize 14
2576 fontName "Consolas"
2577 alignment "left"
2578 anchor "tl"
2579 borderDistance 6
2580 ]
2581 ]
2582
2583 node
2584 [
2585 id 14
2586 graphics
2587 [
2588 w 269.5
2589 h 110
2590 type "rectangle"
2591 fill "#FFFFFF"
2592 fill2 "#FFFFFF"
2593 outline "#000000"
2594 ]
2595 LabelGraphics
2596 [
2597 text "null"
2598 outline "#000000"
2599 fill "#FFFFFF"
2600 fontSize 16
2601 fontName "Monospace"
2602 autoSizePolicy "node_width"
2603 anchor "t"
2604 borderDistance 0.0
2605 ]
2606 LabelGraphics
2607 [
2608 text "
2609 EClassifier class
2610 EDataType class
2611 EModelElement class
2612 ENamedElement class
2613 EModelElement class UndefinedPart
2614 ENamedElement class UndefinedPart
2615 "
2616 fontSize 14
2617 fontName "Consolas"
2618 alignment "left"
2619 anchor "tl"
2620 borderDistance 6
2621 ]
2622 ]
2623
2624 node
2625 [
2626 id 15
2627 graphics
2628 [
2629 w 269.5
2630 h 68
2631 type "rectangle"
2632 fill "#FFFFFF"
2633 fill2 "#FFFFFF"
2634 outline "#000000"
2635 ]
2636 LabelGraphics
2637 [
2638 text "null"
2639 outline "#000000"
2640 fill "#FFFFFF"
2641 fontSize 16
2642 fontName "Monospace"
2643 autoSizePolicy "node_width"
2644 anchor "t"
2645 borderDistance 0.0
2646 ]
2647 LabelGraphics
2648 [
2649 text "
2650 EAnnotation class
2651 EModelElement class
2652 EModelElement class UndefinedPart
2653 "
2654 fontSize 14
2655 fontName "Consolas"
2656 alignment "left"
2657 anchor "tl"
2658 borderDistance 6
2659 ]
2660 ]
2661
2662 node
2663 [
2664 id 16
2665 graphics
2666 [
2667 w 112.2
2668 h 26
2669 type "rectangle"
2670 fill "#FFFFFF"
2671 fill2 "#FFFFFF"
2672 outline "#000000"
2673 ]
2674 LabelGraphics
2675 [
2676 text "New Integers"
2677 outline "#000000"
2678 fill "#FFFFFF"
2679 fontSize 16
2680 fontName "Monospace"
2681 autoSizePolicy "node_width"
2682 anchor "t"
2683 borderDistance 0.0
2684 ]
2685 LabelGraphics
2686 [
2687 text "
2688 "
2689 fontSize 14
2690 fontName "Consolas"
2691 alignment "left"
2692 anchor "tl"
2693 borderDistance 6
2694 ]
2695 ]
2696
2697 node
2698 [
2699 id 17
2700 graphics
2701 [
2702 w 85.80000000000001
2703 h 26
2704 type "rectangle"
2705 fill "#FFFFFF"
2706 fill2 "#FFFFFF"
2707 outline "#000000"
2708 ]
2709 LabelGraphics
2710 [
2711 text "New Reals"
2712 outline "#000000"
2713 fill "#FFFFFF"
2714 fontSize 16
2715 fontName "Monospace"
2716 autoSizePolicy "node_width"
2717 anchor "t"
2718 borderDistance 0.0
2719 ]
2720 LabelGraphics
2721 [
2722 text "
2723 "
2724 fontSize 14
2725 fontName "Consolas"
2726 alignment "left"
2727 anchor "tl"
2728 borderDistance 6
2729 ]
2730 ]
2731
2732 node
2733 [
2734 id 18
2735 graphics
2736 [
2737 w 103.4
2738 h 26
2739 type "rectangle"
2740 fill "#FFFFFF"
2741 fill2 "#FFFFFF"
2742 outline "#000000"
2743 ]
2744 LabelGraphics
2745 [
2746 text "New Strings"
2747 outline "#000000"
2748 fill "#FFFFFF"
2749 fontSize 16
2750 fontName "Monospace"
2751 autoSizePolicy "node_width"
2752 anchor "t"
2753 borderDistance 0.0
2754 ]
2755 LabelGraphics
2756 [
2757 text "
2758 "
2759 fontSize 14
2760 fontName "Consolas"
2761 alignment "left"
2762 anchor "tl"
2763 borderDistance 6
2764 ]
2765 ]
2766
2767 node
2768 [
2769 id 19
2770 graphics
2771 [
2772 w 103.4
2773 h 26
2774 type "rectangle"
2775 fill "#FFFFFF"
2776 fill2 "#FFFFFF"
2777 outline "#000000"
2778 ]
2779 LabelGraphics
2780 [
2781 text "New Objects"
2782 outline "#000000"
2783 fill "#FFFFFF"
2784 fontSize 16
2785 fontName "Monospace"
2786 autoSizePolicy "node_width"
2787 anchor "t"
2788 borderDistance 0.0
2789 ]
2790 LabelGraphics
2791 [
2792 text "
2793 "
2794 fontSize 14
2795 fontName "Consolas"
2796 alignment "left"
2797 anchor "tl"
2798 borderDistance 6
2799 ]
2800 ]
2801 edge
2802 [
2803 source 12
2804 target 0
2805 graphics
2806 [
2807 fill "#000000"
2808 targetArrow "standard"
2809 ]
2810 LabelGraphics
2811 [
2812 text "eModelElement reference EAnnotation"
2813 fontSize 14
2814 fontName "Consolas"
2815 configuration "AutoFlippingLabel"
2816 model "six_pos"
2817 position "thead"
2818 ]
2819 ]
2820 edge
2821 [
2822 source 15
2823 target 0
2824 graphics
2825 [
2826 fill "#000000"
2827 targetArrow "standard"
2828 ]
2829 LabelGraphics
2830 [
2831 text "eModelElement reference EAnnotation"
2832 fontSize 14
2833 fontName "Consolas"
2834 configuration "AutoFlippingLabel"
2835 model "six_pos"
2836 position "thead"
2837 ]
2838 ]
2839 edge
2840 [
2841 source 11
2842 target 0
2843 graphics
2844 [
2845 fill "#000000"
2846 targetArrow "standard"
2847 ]
2848 LabelGraphics
2849 [
2850 text "ePackage reference EClassifier"
2851 fontSize 14
2852 fontName "Consolas"
2853 configuration "AutoFlippingLabel"
2854 model "six_pos"
2855 position "thead"
2856 ]
2857 ]
2858 edge
2859 [
2860 source 13
2861 target 0
2862 graphics
2863 [
2864 fill "#000000"
2865 targetArrow "standard"
2866 ]
2867 LabelGraphics
2868 [
2869 text "ePackage reference EClassifier"
2870 fontSize 14
2871 fontName "Consolas"
2872 configuration "AutoFlippingLabel"
2873 model "six_pos"
2874 position "thead"
2875 ]
2876 ]
2877 edge
2878 [
2879 source 14
2880 target 0
2881 graphics
2882 [
2883 fill "#000000"
2884 targetArrow "standard"
2885 ]
2886 LabelGraphics
2887 [
2888 text "ePackage reference EClassifier"
2889 fontSize 14
2890 fontName "Consolas"
2891 configuration "AutoFlippingLabel"
2892 model "six_pos"
2893 position "thead"
2894 ]
2895 ]
2896 edge
2897 [
2898 source 0
2899 target 12
2900 graphics
2901 [
2902 fill "#000000"
2903 width 3
2904 targetArrow "standard"
2905 ]
2906 LabelGraphics
2907 [
2908 text "eAnnotations reference EModelElement"
2909 fontSize 14
2910 fontName "Consolas"
2911 configuration "AutoFlippingLabel"
2912 model "six_pos"
2913 position "thead"
2914 ]
2915 ]
2916 edge
2917 [
2918 source 0
2919 target 15
2920 graphics
2921 [
2922 fill "#000000"
2923 width 3
2924 targetArrow "standard"
2925 ]
2926 LabelGraphics
2927 [
2928 text "eAnnotations reference EModelElement"
2929 fontSize 14
2930 fontName "Consolas"
2931 configuration "AutoFlippingLabel"
2932 model "six_pos"
2933 position "thead"
2934 ]
2935 ]
2936 edge
2937 [
2938 source 0
2939 target 11
2940 graphics
2941 [
2942 fill "#000000"
2943 width 3
2944 targetArrow "standard"
2945 ]
2946 LabelGraphics
2947 [
2948 text "eClassifiers reference EPackage"
2949 fontSize 14
2950 fontName "Consolas"
2951 configuration "AutoFlippingLabel"
2952 model "six_pos"
2953 position "thead"
2954 ]
2955 ]
2956 edge
2957 [
2958 source 0
2959 target 13
2960 graphics
2961 [
2962 fill "#000000"
2963 width 3
2964 targetArrow "standard"
2965 ]
2966 LabelGraphics
2967 [
2968 text "eClassifiers reference EPackage"
2969 fontSize 14
2970 fontName "Consolas"
2971 configuration "AutoFlippingLabel"
2972 model "six_pos"
2973 position "thead"
2974 ]
2975 ]
2976 edge
2977 [
2978 source 0
2979 target 14
2980 graphics
2981 [
2982 fill "#000000"
2983 width 3
2984 targetArrow "standard"
2985 ]
2986 LabelGraphics
2987 [
2988 text "eClassifiers reference EPackage"
2989 fontSize 14
2990 fontName "Consolas"
2991 configuration "AutoFlippingLabel"
2992 model "six_pos"
2993 position "thead"
2994 ]
2995 ]
2996 edge
2997 [
2998 source 12
2999 target 7
3000 graphics
3001 [
3002 fill "#000000"
3003 targetArrow "standard"
3004 ]
3005 LabelGraphics
3006 [
3007 text "source attribute EAnnotation"
3008 fontSize 14
3009 fontName "Consolas"
3010 configuration "AutoFlippingLabel"
3011 model "six_pos"
3012 position "thead"
3013 ]
3014 ]
3015 edge
3016 [
3017 source 11
3018 target 8
3019 graphics
3020 [
3021 fill "#000000"
3022 targetArrow "standard"
3023 ]
3024 LabelGraphics
3025 [
3026 text "instanceClassName attribute EClassifier"
3027 fontSize 14
3028 fontName "Consolas"
3029 configuration "AutoFlippingLabel"
3030 model "six_pos"
3031 position "thead"
3032 ]
3033 ]
3034 edge
3035 [
3036 source 14
3037 target 10
3038 graphics
3039 [
3040 fill "#000000"
3041 targetArrow "standard"
3042 ]
3043 LabelGraphics
3044 [
3045 text "instanceClassName attribute EClassifier"
3046 fontSize 14
3047 fontName "Consolas"
3048 configuration "AutoFlippingLabel"
3049 model "six_pos"
3050 position "thead"
3051 ]
3052 ]
3053 edge
3054 [
3055 source 11
3056 target 9
3057 graphics
3058 [
3059 fill "#000000"
3060 targetArrow "standard"
3061 ]
3062 LabelGraphics
3063 [
3064 text "instanceTypeName attribute EClassifier"
3065 fontSize 14
3066 fontName "Consolas"
3067 configuration "AutoFlippingLabel"
3068 model "six_pos"
3069 position "thead"
3070 ]
3071 ]
3072 edge
3073 [
3074 source 0
3075 target 10
3076 graphics
3077 [
3078 fill "#000000"
3079 targetArrow "standard"
3080 ]
3081 LabelGraphics
3082 [
3083 text "name attribute ENamedElement"
3084 fontSize 14
3085 fontName "Consolas"
3086 configuration "AutoFlippingLabel"
3087 model "six_pos"
3088 position "thead"
3089 ]
3090 ]
3091 edge
3092 [
3093 source 11
3094 target 8
3095 graphics
3096 [
3097 fill "#000000"
3098 targetArrow "standard"
3099 ]
3100 LabelGraphics
3101 [
3102 text "name attribute ENamedElement"
3103 fontSize 14
3104 fontName "Consolas"
3105 configuration "AutoFlippingLabel"
3106 model "six_pos"
3107 position "thead"
3108 ]
3109 ]
3110 edge
3111 [
3112 source 13
3113 target 9
3114 graphics
3115 [
3116 fill "#000000"
3117 targetArrow "standard"
3118 ]
3119 LabelGraphics
3120 [
3121 text "name attribute ENamedElement"
3122 fontSize 14
3123 fontName "Consolas"
3124 configuration "AutoFlippingLabel"
3125 model "six_pos"
3126 position "thead"
3127 ]
3128 ]
3129 edge
3130 [
3131 source 14
3132 target 8
3133 graphics
3134 [
3135 fill "#000000"
3136 targetArrow "standard"
3137 ]
3138 LabelGraphics
3139 [
3140 text "name attribute ENamedElement"
3141 fontSize 14
3142 fontName "Consolas"
3143 configuration "AutoFlippingLabel"
3144 model "six_pos"
3145 position "thead"
3146 ]
3147 ]
3148 edge
3149 [
3150 source 0
3151 target 9
3152 graphics
3153 [
3154 fill "#000000"
3155 targetArrow "standard"
3156 ]
3157 LabelGraphics
3158 [
3159 text "nsURI attribute EPackage"
3160 fontSize 14
3161 fontName "Consolas"
3162 configuration "AutoFlippingLabel"
3163 model "six_pos"
3164 position "thead"
3165 ]
3166 ]
3167 edge
3168 [
3169 source 0
3170 target 8
3171 graphics
3172 [
3173 fill "#000000"
3174 targetArrow "standard"
3175 ]
3176 LabelGraphics
3177 [
3178 text "nsPrefix attribute EPackage"
3179 fontSize 14
3180 fontName "Consolas"
3181 configuration "AutoFlippingLabel"
3182 model "six_pos"
3183 position "thead"
3184 ]
3185 ]
3186]
3187graph
3188[
3189 node
3190 [
3191 id 0
3192 graphics
3193 [
3194 w 254.10000000000002
3195 h 110
3196 type "rectangle"
3197 fill "#FFFFFF"
3198 fill2 "#FFFFFF"
3199 outline "#000000"
3200 ]
3201 LabelGraphics
3202 [
3203 text "o 1"
3204 outline "#000000"
3205 fill "#FFFFFF"
3206 fontSize 16
3207 fontName "Monospace"
3208 autoSizePolicy "node_width"
3209 anchor "t"
3210 borderDistance 0.0
3211 ]
3212 LabelGraphics
3213 [
3214 text "
3215 EModelElement class DefinedPart
3216 ENamedElement class DefinedPart
3217 EPackage class DefinedPart
3218 EModelElement class
3219 ENamedElement class
3220 EPackage class
3221 "
3222 fontSize 14
3223 fontName "Consolas"
3224 alignment "left"
3225 anchor "tl"
3226 borderDistance 6
3227 ]
3228 ]
3229
3230 node
3231 [
3232 id 1
3233 graphics
3234 [
3235 w 41.800000000000004
3236 h 26
3237 type "rectangle"
3238 fill "#FFFFFF"
3239 fill2 "#FFFFFF"
3240 outline "#000000"
3241 ]
3242 LabelGraphics
3243 [
3244 text "true"
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 "
3257 fontSize 14
3258 fontName "Consolas"
3259 alignment "left"
3260 anchor "tl"
3261 borderDistance 6
3262 ]
3263 ]
3264
3265 node
3266 [
3267 id 2
3268 graphics
3269 [
3270 w 50.6
3271 h 26
3272 type "rectangle"
3273 fill "#FFFFFF"
3274 fill2 "#FFFFFF"
3275 outline "#000000"
3276 ]
3277 LabelGraphics
3278 [
3279 text "false"
3280 outline "#000000"
3281 fill "#FFFFFF"
3282 fontSize 16
3283 fontName "Monospace"
3284 autoSizePolicy "node_width"
3285 anchor "t"
3286 borderDistance 0.0
3287 ]
3288 LabelGraphics
3289 [
3290 text "
3291 "
3292 fontSize 14
3293 fontName "Consolas"
3294 alignment "left"
3295 anchor "tl"
3296 borderDistance 6
3297 ]
3298 ]
3299
3300 node
3301 [
3302 id 3
3303 graphics
3304 [
3305 w 24.200000000000003
3306 h 26
3307 type "rectangle"
3308 fill "#FFFFFF"
3309 fill2 "#FFFFFF"
3310 outline "#000000"
3311 ]
3312 LabelGraphics
3313 [
3314 text "-1"
3315 outline "#000000"
3316 fill "#FFFFFF"
3317 fontSize 16
3318 fontName "Monospace"
3319 autoSizePolicy "node_width"
3320 anchor "t"
3321 borderDistance 0.0
3322 ]
3323 LabelGraphics
3324 [
3325 text "
3326 "
3327 fontSize 14
3328 fontName "Consolas"
3329 alignment "left"
3330 anchor "tl"
3331 borderDistance 6
3332 ]
3333 ]
3334
3335 node
3336 [
3337 id 4
3338 graphics
3339 [
3340 w 15.400000000000002
3341 h 26
3342 type "rectangle"
3343 fill "#FFFFFF"
3344 fill2 "#FFFFFF"
3345 outline "#000000"
3346 ]
3347 LabelGraphics
3348 [
3349 text "0"
3350 outline "#000000"
3351 fill "#FFFFFF"
3352 fontSize 16
3353 fontName "Monospace"
3354 autoSizePolicy "node_width"
3355 anchor "t"
3356 borderDistance 0.0
3357 ]
3358 LabelGraphics
3359 [
3360 text "
3361 "
3362 fontSize 14
3363 fontName "Consolas"
3364 alignment "left"
3365 anchor "tl"
3366 borderDistance 6
3367 ]
3368 ]
3369
3370 node
3371 [
3372 id 5
3373 graphics
3374 [
3375 w 15.400000000000002
3376 h 26
3377 type "rectangle"
3378 fill "#FFFFFF"
3379 fill2 "#FFFFFF"
3380 outline "#000000"
3381 ]
3382 LabelGraphics
3383 [
3384 text "1"
3385 outline "#000000"
3386 fill "#FFFFFF"
3387 fontSize 16
3388 fontName "Monospace"
3389 autoSizePolicy "node_width"
3390 anchor "t"
3391 borderDistance 0.0
3392 ]
3393 LabelGraphics
3394 [
3395 text "
3396 "
3397 fontSize 14
3398 fontName "Consolas"
3399 alignment "left"
3400 anchor "tl"
3401 borderDistance 6
3402 ]
3403 ]
3404
3405 node
3406 [
3407 id 6
3408 graphics
3409 [
3410 w 33.0
3411 h 26
3412 type "rectangle"
3413 fill "#FFFFFF"
3414 fill2 "#FFFFFF"
3415 outline "#000000"
3416 ]
3417 LabelGraphics
3418 [
3419 text ""A""
3420 outline "#000000"
3421 fill "#FFFFFF"
3422 fontSize 16
3423 fontName "Monospace"
3424 autoSizePolicy "node_width"
3425 anchor "t"
3426 borderDistance 0.0
3427 ]
3428 LabelGraphics
3429 [
3430 text "
3431 "
3432 fontSize 14
3433 fontName "Consolas"
3434 alignment "left"
3435 anchor "tl"
3436 borderDistance 6
3437 ]
3438 ]
3439
3440 node
3441 [
3442 id 7
3443 graphics
3444 [
3445 w 33.0
3446 h 26
3447 type "rectangle"
3448 fill "#FFFFFF"
3449 fill2 "#FFFFFF"
3450 outline "#000000"
3451 ]
3452 LabelGraphics
3453 [
3454 text ""B""
3455 outline "#000000"
3456 fill "#FFFFFF"
3457 fontSize 16
3458 fontName "Monospace"
3459 autoSizePolicy "node_width"
3460 anchor "t"
3461 borderDistance 0.0
3462 ]
3463 LabelGraphics
3464 [
3465 text "
3466 "
3467 fontSize 14
3468 fontName "Consolas"
3469 alignment "left"
3470 anchor "tl"
3471 borderDistance 6
3472 ]
3473 ]
3474
3475 node
3476 [
3477 id 8
3478 graphics
3479 [
3480 w 94.60000000000001
3481 h 26
3482 type "rectangle"
3483 fill "#FFFFFF"
3484 fill2 "#FFFFFF"
3485 outline "#000000"
3486 ]
3487 LabelGraphics
3488 [
3489 text ""nsPrefix""
3490 outline "#000000"
3491 fill "#FFFFFF"
3492 fontSize 16
3493 fontName "Monospace"
3494 autoSizePolicy "node_width"
3495 anchor "t"
3496 borderDistance 0.0
3497 ]
3498 LabelGraphics
3499 [
3500 text "
3501 "
3502 fontSize 14
3503 fontName "Consolas"
3504 alignment "left"
3505 anchor "tl"
3506 borderDistance 6
3507 ]
3508 ]
3509
3510 node
3511 [
3512 id 9
3513 graphics
3514 [
3515 w 68.2
3516 h 26
3517 type "rectangle"
3518 fill "#FFFFFF"
3519 fill2 "#FFFFFF"
3520 outline "#000000"
3521 ]
3522 LabelGraphics
3523 [
3524 text ""nsUri""
3525 outline "#000000"
3526 fill "#FFFFFF"
3527 fontSize 16
3528 fontName "Monospace"
3529 autoSizePolicy "node_width"
3530 anchor "t"
3531 borderDistance 0.0
3532 ]
3533 LabelGraphics
3534 [
3535 text "
3536 "
3537 fontSize 14
3538 fontName "Consolas"
3539 alignment "left"
3540 anchor "tl"
3541 borderDistance 6
3542 ]
3543 ]
3544
3545 node
3546 [
3547 id 10
3548 graphics
3549 [
3550 w 121.00000000000001
3551 h 26
3552 type "rectangle"
3553 fill "#FFFFFF"
3554 fill2 "#FFFFFF"
3555 outline "#000000"
3556 ]
3557 LabelGraphics
3558 [
3559 text ""packageName""
3560 outline "#000000"
3561 fill "#FFFFFF"
3562 fontSize 16
3563 fontName "Monospace"
3564 autoSizePolicy "node_width"
3565 anchor "t"
3566 borderDistance 0.0
3567 ]
3568 LabelGraphics
3569 [
3570 text "
3571 "
3572 fontSize 14
3573 fontName "Consolas"
3574 alignment "left"
3575 anchor "tl"
3576 borderDistance 6
3577 ]
3578 ]
3579
3580 node
3581 [
3582 id 11
3583 graphics
3584 [
3585 w 269.5
3586 h 124
3587 type "rectangle"
3588 fill "#FFFFFF"
3589 fill2 "#FFFFFF"
3590 outline "#000000"
3591 ]
3592 LabelGraphics
3593 [
3594 text "null"
3595 outline "#000000"
3596 fill "#FFFFFF"
3597 fontSize 16
3598 fontName "Monospace"
3599 autoSizePolicy "node_width"
3600 anchor "t"
3601 borderDistance 0.0
3602 ]
3603 LabelGraphics
3604 [
3605 text "
3606 EClassifier class
3607 EDataType class
3608 EEnum class
3609 EModelElement class
3610 ENamedElement class
3611 EModelElement class UndefinedPart
3612 ENamedElement class UndefinedPart
3613 "
3614 fontSize 14
3615 fontName "Consolas"
3616 alignment "left"
3617 anchor "tl"
3618 borderDistance 6
3619 ]
3620 ]
3621
3622 node
3623 [
3624 id 12
3625 graphics
3626 [
3627 w 269.5
3628 h 124
3629 type "rectangle"
3630 fill "#FFFFFF"
3631 fill2 "#FFFFFF"
3632 outline "#000000"
3633 ]
3634 LabelGraphics
3635 [
3636 text "null"
3637 outline "#000000"
3638 fill "#FFFFFF"
3639 fontSize 16
3640 fontName "Monospace"
3641 autoSizePolicy "node_width"
3642 anchor "t"
3643 borderDistance 0.0
3644 ]
3645 LabelGraphics
3646 [
3647 text "
3648 EClassifier class
3649 EDataType class
3650 EEnum class
3651 EModelElement class
3652 ENamedElement class
3653 EModelElement class UndefinedPart
3654 ENamedElement class UndefinedPart
3655 "
3656 fontSize 14
3657 fontName "Consolas"
3658 alignment "left"
3659 anchor "tl"
3660 borderDistance 6
3661 ]
3662 ]
3663
3664 node
3665 [
3666 id 13
3667 graphics
3668 [
3669 w 269.5
3670 h 96
3671 type "rectangle"
3672 fill "#FFFFFF"
3673 fill2 "#FFFFFF"
3674 outline "#000000"
3675 ]
3676 LabelGraphics
3677 [
3678 text "null"
3679 outline "#000000"
3680 fill "#FFFFFF"
3681 fontSize 16
3682 fontName "Monospace"
3683 autoSizePolicy "node_width"
3684 anchor "t"
3685 borderDistance 0.0
3686 ]
3687 LabelGraphics
3688 [
3689 text "
3690 EEnumLiteral class
3691 EModelElement class
3692 ENamedElement class
3693 EModelElement class UndefinedPart
3694 ENamedElement class UndefinedPart
3695 "
3696 fontSize 14
3697 fontName "Consolas"
3698 alignment "left"
3699 anchor "tl"
3700 borderDistance 6
3701 ]
3702 ]
3703
3704 node
3705 [
3706 id 14
3707 graphics
3708 [
3709 w 269.5
3710 h 68
3711 type "rectangle"
3712 fill "#FFFFFF"
3713 fill2 "#FFFFFF"
3714 outline "#000000"
3715 ]
3716 LabelGraphics
3717 [
3718 text "null"
3719 outline "#000000"
3720 fill "#FFFFFF"
3721 fontSize 16
3722 fontName "Monospace"
3723 autoSizePolicy "node_width"
3724 anchor "t"
3725 borderDistance 0.0
3726 ]
3727 LabelGraphics
3728 [
3729 text "
3730 EAnnotation class
3731 EModelElement class
3732 EModelElement class UndefinedPart
3733 "
3734 fontSize 14
3735 fontName "Consolas"
3736 alignment "left"
3737 anchor "tl"
3738 borderDistance 6
3739 ]
3740 ]
3741
3742 node
3743 [
3744 id 15
3745 graphics
3746 [
3747 w 269.5
3748 h 96
3749 type "rectangle"
3750 fill "#FFFFFF"
3751 fill2 "#FFFFFF"
3752 outline "#000000"
3753 ]
3754 LabelGraphics
3755 [
3756 text "null"
3757 outline "#000000"
3758 fill "#FFFFFF"
3759 fontSize 16
3760 fontName "Monospace"
3761 autoSizePolicy "node_width"
3762 anchor "t"
3763 borderDistance 0.0
3764 ]
3765 LabelGraphics
3766 [
3767 text "
3768 EModelElement class
3769 ENamedElement class
3770 ETypeParameter class
3771 EModelElement class UndefinedPart
3772 ENamedElement class UndefinedPart
3773 "
3774 fontSize 14
3775 fontName "Consolas"
3776 alignment "left"
3777 anchor "tl"
3778 borderDistance 6
3779 ]
3780 ]
3781
3782 node
3783 [
3784 id 16
3785 graphics
3786 [
3787 w 112.2
3788 h 26
3789 type "rectangle"
3790 fill "#FFFFFF"
3791 fill2 "#FFFFFF"
3792 outline "#000000"
3793 ]
3794 LabelGraphics
3795 [
3796 text "New Integers"
3797 outline "#000000"
3798 fill "#FFFFFF"
3799 fontSize 16
3800 fontName "Monospace"
3801 autoSizePolicy "node_width"
3802 anchor "t"
3803 borderDistance 0.0
3804 ]
3805 LabelGraphics
3806 [
3807 text "
3808 "
3809 fontSize 14
3810 fontName "Consolas"
3811 alignment "left"
3812 anchor "tl"
3813 borderDistance 6
3814 ]
3815 ]
3816
3817 node
3818 [
3819 id 17
3820 graphics
3821 [
3822 w 85.80000000000001
3823 h 26
3824 type "rectangle"
3825 fill "#FFFFFF"
3826 fill2 "#FFFFFF"
3827 outline "#000000"
3828 ]
3829 LabelGraphics
3830 [
3831 text "New Reals"
3832 outline "#000000"
3833 fill "#FFFFFF"
3834 fontSize 16
3835 fontName "Monospace"
3836 autoSizePolicy "node_width"
3837 anchor "t"
3838 borderDistance 0.0
3839 ]
3840 LabelGraphics
3841 [
3842 text "
3843 "
3844 fontSize 14
3845 fontName "Consolas"
3846 alignment "left"
3847 anchor "tl"
3848 borderDistance 6
3849 ]
3850 ]
3851
3852 node
3853 [
3854 id 18
3855 graphics
3856 [
3857 w 103.4
3858 h 26
3859 type "rectangle"
3860 fill "#FFFFFF"
3861 fill2 "#FFFFFF"
3862 outline "#000000"
3863 ]
3864 LabelGraphics
3865 [
3866 text "New Strings"
3867 outline "#000000"
3868 fill "#FFFFFF"
3869 fontSize 16
3870 fontName "Monospace"
3871 autoSizePolicy "node_width"
3872 anchor "t"
3873 borderDistance 0.0
3874 ]
3875 LabelGraphics
3876 [
3877 text "
3878 "
3879 fontSize 14
3880 fontName "Consolas"
3881 alignment "left"
3882 anchor "tl"
3883 borderDistance 6
3884 ]
3885 ]
3886
3887 node
3888 [
3889 id 19
3890 graphics
3891 [
3892 w 103.4
3893 h 26
3894 type "rectangle"
3895 fill "#FFFFFF"
3896 fill2 "#FFFFFF"
3897 outline "#000000"
3898 ]
3899 LabelGraphics
3900 [
3901 text "New Objects"
3902 outline "#000000"
3903 fill "#FFFFFF"
3904 fontSize 16
3905 fontName "Monospace"
3906 autoSizePolicy "node_width"
3907 anchor "t"
3908 borderDistance 0.0
3909 ]
3910 LabelGraphics
3911 [
3912 text "
3913 "
3914 fontSize 14
3915 fontName "Consolas"
3916 alignment "left"
3917 anchor "tl"
3918 borderDistance 6
3919 ]
3920 ]
3921 edge
3922 [
3923 source 14
3924 target 0
3925 graphics
3926 [
3927 fill "#000000"
3928 targetArrow "standard"
3929 ]
3930 LabelGraphics
3931 [
3932 text "eModelElement reference EAnnotation"
3933 fontSize 14
3934 fontName "Consolas"
3935 configuration "AutoFlippingLabel"
3936 model "six_pos"
3937 position "thead"
3938 ]
3939 ]
3940 edge
3941 [
3942 source 11
3943 target 0
3944 graphics
3945 [
3946 fill "#000000"
3947 targetArrow "standard"
3948 ]
3949 LabelGraphics
3950 [
3951 text "ePackage reference EClassifier"
3952 fontSize 14
3953 fontName "Consolas"
3954 configuration "AutoFlippingLabel"
3955 model "six_pos"
3956 position "thead"
3957 ]
3958 ]
3959 edge
3960 [
3961 source 12
3962 target 0
3963 graphics
3964 [
3965 fill "#000000"
3966 targetArrow "standard"
3967 ]
3968 LabelGraphics
3969 [
3970 text "ePackage reference EClassifier"
3971 fontSize 14
3972 fontName "Consolas"
3973 configuration "AutoFlippingLabel"
3974 model "six_pos"
3975 position "thead"
3976 ]
3977 ]
3978 edge
3979 [
3980 source 12
3981 target 15
3982 graphics
3983 [
3984 fill "#000000"
3985 width 3
3986 targetArrow "standard"
3987 ]
3988 LabelGraphics
3989 [
3990 text "eTypeParameters reference EClassifier"
3991 fontSize 14
3992 fontName "Consolas"
3993 configuration "AutoFlippingLabel"
3994 model "six_pos"
3995 position "thead"
3996 ]
3997 ]
3998 edge
3999 [
4000 source 11
4001 target 13
4002 graphics
4003 [
4004 fill "#000000"
4005 width 3
4006 targetArrow "standard"
4007 ]
4008 LabelGraphics
4009 [
4010 text "eLiterals reference EEnum"
4011 fontSize 14
4012 fontName "Consolas"
4013 configuration "AutoFlippingLabel"
4014 model "six_pos"
4015 position "thead"
4016 ]
4017 ]
4018 edge
4019 [
4020 source 13
4021 target 11
4022 graphics
4023 [
4024 fill "#000000"
4025 targetArrow "standard"
4026 ]
4027 LabelGraphics
4028 [
4029 text "eEnum reference EEnumLiteral"
4030 fontSize 14
4031 fontName "Consolas"
4032 configuration "AutoFlippingLabel"
4033 model "six_pos"
4034 position "thead"
4035 ]
4036 ]
4037 edge
4038 [
4039 source 0
4040 target 14
4041 graphics
4042 [
4043 fill "#000000"
4044 width 3
4045 targetArrow "standard"
4046 ]
4047 LabelGraphics
4048 [
4049 text "eAnnotations reference EModelElement"
4050 fontSize 14
4051 fontName "Consolas"
4052 configuration "AutoFlippingLabel"
4053 model "six_pos"
4054 position "thead"
4055 ]
4056 ]
4057 edge
4058 [
4059 source 0
4060 target 11
4061 graphics
4062 [
4063 fill "#000000"
4064 width 3
4065 targetArrow "standard"
4066 ]
4067 LabelGraphics
4068 [
4069 text "eClassifiers reference EPackage"
4070 fontSize 14
4071 fontName "Consolas"
4072 configuration "AutoFlippingLabel"
4073 model "six_pos"
4074 position "thead"
4075 ]
4076 ]
4077 edge
4078 [
4079 source 0
4080 target 12
4081 graphics
4082 [
4083 fill "#000000"
4084 width 3
4085 targetArrow "standard"
4086 ]
4087 LabelGraphics
4088 [
4089 text "eClassifiers reference EPackage"
4090 fontSize 14
4091 fontName "Consolas"
4092 configuration "AutoFlippingLabel"
4093 model "six_pos"
4094 position "thead"
4095 ]
4096 ]
4097 edge
4098 [
4099 source 14
4100 target 10
4101 graphics
4102 [
4103 fill "#000000"
4104 targetArrow "standard"
4105 ]
4106 LabelGraphics
4107 [
4108 text "source attribute EAnnotation"
4109 fontSize 14
4110 fontName "Consolas"
4111 configuration "AutoFlippingLabel"
4112 model "six_pos"
4113 position "thead"
4114 ]
4115 ]
4116 edge
4117 [
4118 source 11
4119 target 8
4120 graphics
4121 [
4122 fill "#000000"
4123 targetArrow "standard"
4124 ]
4125 LabelGraphics
4126 [
4127 text "instanceClassName attribute EClassifier"
4128 fontSize 14
4129 fontName "Consolas"
4130 configuration "AutoFlippingLabel"
4131 model "six_pos"
4132 position "thead"
4133 ]
4134 ]
4135 edge
4136 [
4137 source 12
4138 target 9
4139 graphics
4140 [
4141 fill "#000000"
4142 targetArrow "standard"
4143 ]
4144 LabelGraphics
4145 [
4146 text "instanceClassName attribute EClassifier"
4147 fontSize 14
4148 fontName "Consolas"
4149 configuration "AutoFlippingLabel"
4150 model "six_pos"
4151 position "thead"
4152 ]
4153 ]
4154 edge
4155 [
4156 source 11
4157 target 9
4158 graphics
4159 [
4160 fill "#000000"
4161 targetArrow "standard"
4162 ]
4163 LabelGraphics
4164 [
4165 text "instanceTypeName attribute EClassifier"
4166 fontSize 14
4167 fontName "Consolas"
4168 configuration "AutoFlippingLabel"
4169 model "six_pos"
4170 position "thead"
4171 ]
4172 ]
4173 edge
4174 [
4175 source 12
4176 target 9
4177 graphics
4178 [
4179 fill "#000000"
4180 targetArrow "standard"
4181 ]
4182 LabelGraphics
4183 [
4184 text "instanceTypeName attribute EClassifier"
4185 fontSize 14
4186 fontName "Consolas"
4187 configuration "AutoFlippingLabel"
4188 model "six_pos"
4189 position "thead"
4190 ]
4191 ]
4192 edge
4193 [
4194 source 11
4195 target 2
4196 graphics
4197 [
4198 fill "#000000"
4199 targetArrow "standard"
4200 ]
4201 LabelGraphics
4202 [
4203 text "serializable attribute EDataType"
4204 fontSize 14
4205 fontName "Consolas"
4206 configuration "AutoFlippingLabel"
4207 model "six_pos"
4208 position "thead"
4209 ]
4210 ]
4211 edge
4212 [
4213 source 12
4214 target 2
4215 graphics
4216 [
4217 fill "#000000"
4218 targetArrow "standard"
4219 ]
4220 LabelGraphics
4221 [
4222 text "serializable attribute EDataType"
4223 fontSize 14
4224 fontName "Consolas"
4225 configuration "AutoFlippingLabel"
4226 model "six_pos"
4227 position "thead"
4228 ]
4229 ]
4230 edge
4231 [
4232 source 13
4233 target 9
4234 graphics
4235 [
4236 fill "#000000"
4237 targetArrow "standard"
4238 ]
4239 LabelGraphics
4240 [
4241 text "literal attribute EEnumLiteral"
4242 fontSize 14
4243 fontName "Consolas"
4244 configuration "AutoFlippingLabel"
4245 model "six_pos"
4246 position "thead"
4247 ]
4248 ]
4249 edge
4250 [
4251 source 0
4252 target 10
4253 graphics
4254 [
4255 fill "#000000"
4256 targetArrow "standard"
4257 ]
4258 LabelGraphics
4259 [
4260 text "name attribute ENamedElement"
4261 fontSize 14
4262 fontName "Consolas"
4263 configuration "AutoFlippingLabel"
4264 model "six_pos"
4265 position "thead"
4266 ]
4267 ]
4268 edge
4269 [
4270 source 12
4271 target 10
4272 graphics
4273 [
4274 fill "#000000"
4275 targetArrow "standard"
4276 ]
4277 LabelGraphics
4278 [
4279 text "name attribute ENamedElement"
4280 fontSize 14
4281 fontName "Consolas"
4282 configuration "AutoFlippingLabel"
4283 model "six_pos"
4284 position "thead"
4285 ]
4286 ]
4287 edge
4288 [
4289 source 0
4290 target 9
4291 graphics
4292 [
4293 fill "#000000"
4294 targetArrow "standard"
4295 ]
4296 LabelGraphics
4297 [
4298 text "nsURI attribute EPackage"
4299 fontSize 14
4300 fontName "Consolas"
4301 configuration "AutoFlippingLabel"
4302 model "six_pos"
4303 position "thead"
4304 ]
4305 ]
4306 edge
4307 [
4308 source 0
4309 target 8
4310 graphics
4311 [
4312 fill "#000000"
4313 targetArrow "standard"
4314 ]
4315 LabelGraphics
4316 [
4317 text "nsPrefix attribute EPackage"
4318 fontSize 14
4319 fontName "Consolas"
4320 configuration "AutoFlippingLabel"
4321 model "six_pos"
4322 position "thead"
4323 ]
4324 ]
4325]
4326graph
4327[
4328 node
4329 [
4330 id 0
4331 graphics
4332 [
4333 w 254.10000000000002
4334 h 110
4335 type "rectangle"
4336 fill "#FFFFFF"
4337 fill2 "#FFFFFF"
4338 outline "#000000"
4339 ]
4340 LabelGraphics
4341 [
4342 text "o 1"
4343 outline "#000000"
4344 fill "#FFFFFF"
4345 fontSize 16
4346 fontName "Monospace"
4347 autoSizePolicy "node_width"
4348 anchor "t"
4349 borderDistance 0.0
4350 ]
4351 LabelGraphics
4352 [
4353 text "
4354 EModelElement class DefinedPart
4355 ENamedElement class DefinedPart
4356 EPackage class DefinedPart
4357 EModelElement class
4358 ENamedElement class
4359 EPackage class
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 41.800000000000004
4375 h 26
4376 type "rectangle"
4377 fill "#FFFFFF"
4378 fill2 "#FFFFFF"
4379 outline "#000000"
4380 ]
4381 LabelGraphics
4382 [
4383 text "true"
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 "
4396 fontSize 14
4397 fontName "Consolas"
4398 alignment "left"
4399 anchor "tl"
4400 borderDistance 6
4401 ]
4402 ]
4403
4404 node
4405 [
4406 id 2
4407 graphics
4408 [
4409 w 50.6
4410 h 26
4411 type "rectangle"
4412 fill "#FFFFFF"
4413 fill2 "#FFFFFF"
4414 outline "#000000"
4415 ]
4416 LabelGraphics
4417 [
4418 text "false"
4419 outline "#000000"
4420 fill "#FFFFFF"
4421 fontSize 16
4422 fontName "Monospace"
4423 autoSizePolicy "node_width"
4424 anchor "t"
4425 borderDistance 0.0
4426 ]
4427 LabelGraphics
4428 [
4429 text "
4430 "
4431 fontSize 14
4432 fontName "Consolas"
4433 alignment "left"
4434 anchor "tl"
4435 borderDistance 6
4436 ]
4437 ]
4438
4439 node
4440 [
4441 id 3
4442 graphics
4443 [
4444 w 24.200000000000003
4445 h 26
4446 type "rectangle"
4447 fill "#FFFFFF"
4448 fill2 "#FFFFFF"
4449 outline "#000000"
4450 ]
4451 LabelGraphics
4452 [
4453 text "-1"
4454 outline "#000000"
4455 fill "#FFFFFF"
4456 fontSize 16
4457 fontName "Monospace"
4458 autoSizePolicy "node_width"
4459 anchor "t"
4460 borderDistance 0.0
4461 ]
4462 LabelGraphics
4463 [
4464 text "
4465 "
4466 fontSize 14
4467 fontName "Consolas"
4468 alignment "left"
4469 anchor "tl"
4470 borderDistance 6
4471 ]
4472 ]
4473
4474 node
4475 [
4476 id 4
4477 graphics
4478 [
4479 w 15.400000000000002
4480 h 26
4481 type "rectangle"
4482 fill "#FFFFFF"
4483 fill2 "#FFFFFF"
4484 outline "#000000"
4485 ]
4486 LabelGraphics
4487 [
4488 text "0"
4489 outline "#000000"
4490 fill "#FFFFFF"
4491 fontSize 16
4492 fontName "Monospace"
4493 autoSizePolicy "node_width"
4494 anchor "t"
4495 borderDistance 0.0
4496 ]
4497 LabelGraphics
4498 [
4499 text "
4500 "
4501 fontSize 14
4502 fontName "Consolas"
4503 alignment "left"
4504 anchor "tl"
4505 borderDistance 6
4506 ]
4507 ]
4508
4509 node
4510 [
4511 id 5
4512 graphics
4513 [
4514 w 15.400000000000002
4515 h 26
4516 type "rectangle"
4517 fill "#FFFFFF"
4518 fill2 "#FFFFFF"
4519 outline "#000000"
4520 ]
4521 LabelGraphics
4522 [
4523 text "1"
4524 outline "#000000"
4525 fill "#FFFFFF"
4526 fontSize 16
4527 fontName "Monospace"
4528 autoSizePolicy "node_width"
4529 anchor "t"
4530 borderDistance 0.0
4531 ]
4532 LabelGraphics
4533 [
4534 text "
4535 "
4536 fontSize 14
4537 fontName "Consolas"
4538 alignment "left"
4539 anchor "tl"
4540 borderDistance 6
4541 ]
4542 ]
4543
4544 node
4545 [
4546 id 6
4547 graphics
4548 [
4549 w 33.0
4550 h 26
4551 type "rectangle"
4552 fill "#FFFFFF"
4553 fill2 "#FFFFFF"
4554 outline "#000000"
4555 ]
4556 LabelGraphics
4557 [
4558 text ""A""
4559 outline "#000000"
4560 fill "#FFFFFF"
4561 fontSize 16
4562 fontName "Monospace"
4563 autoSizePolicy "node_width"
4564 anchor "t"
4565 borderDistance 0.0
4566 ]
4567 LabelGraphics
4568 [
4569 text "
4570 "
4571 fontSize 14
4572 fontName "Consolas"
4573 alignment "left"
4574 anchor "tl"
4575 borderDistance 6
4576 ]
4577 ]
4578
4579 node
4580 [
4581 id 7
4582 graphics
4583 [
4584 w 33.0
4585 h 26
4586 type "rectangle"
4587 fill "#FFFFFF"
4588 fill2 "#FFFFFF"
4589 outline "#000000"
4590 ]
4591 LabelGraphics
4592 [
4593 text ""B""
4594 outline "#000000"
4595 fill "#FFFFFF"
4596 fontSize 16
4597 fontName "Monospace"
4598 autoSizePolicy "node_width"
4599 anchor "t"
4600 borderDistance 0.0
4601 ]
4602 LabelGraphics
4603 [
4604 text "
4605 "
4606 fontSize 14
4607 fontName "Consolas"
4608 alignment "left"
4609 anchor "tl"
4610 borderDistance 6
4611 ]
4612 ]
4613
4614 node
4615 [
4616 id 8
4617 graphics
4618 [
4619 w 94.60000000000001
4620 h 26
4621 type "rectangle"
4622 fill "#FFFFFF"
4623 fill2 "#FFFFFF"
4624 outline "#000000"
4625 ]
4626 LabelGraphics
4627 [
4628 text ""nsPrefix""
4629 outline "#000000"
4630 fill "#FFFFFF"
4631 fontSize 16
4632 fontName "Monospace"
4633 autoSizePolicy "node_width"
4634 anchor "t"
4635 borderDistance 0.0
4636 ]
4637 LabelGraphics
4638 [
4639 text "
4640 "
4641 fontSize 14
4642 fontName "Consolas"
4643 alignment "left"
4644 anchor "tl"
4645 borderDistance 6
4646 ]
4647 ]
4648
4649 node
4650 [
4651 id 9
4652 graphics
4653 [
4654 w 68.2
4655 h 26
4656 type "rectangle"
4657 fill "#FFFFFF"
4658 fill2 "#FFFFFF"
4659 outline "#000000"
4660 ]
4661 LabelGraphics
4662 [
4663 text ""nsUri""
4664 outline "#000000"
4665 fill "#FFFFFF"
4666 fontSize 16
4667 fontName "Monospace"
4668 autoSizePolicy "node_width"
4669 anchor "t"
4670 borderDistance 0.0
4671 ]
4672 LabelGraphics
4673 [
4674 text "
4675 "
4676 fontSize 14
4677 fontName "Consolas"
4678 alignment "left"
4679 anchor "tl"
4680 borderDistance 6
4681 ]
4682 ]
4683
4684 node
4685 [
4686 id 10
4687 graphics
4688 [
4689 w 121.00000000000001
4690 h 26
4691 type "rectangle"
4692 fill "#FFFFFF"
4693 fill2 "#FFFFFF"
4694 outline "#000000"
4695 ]
4696 LabelGraphics
4697 [
4698 text ""packageName""
4699 outline "#000000"
4700 fill "#FFFFFF"
4701 fontSize 16
4702 fontName "Monospace"
4703 autoSizePolicy "node_width"
4704 anchor "t"
4705 borderDistance 0.0
4706 ]
4707 LabelGraphics
4708 [
4709 text "
4710 "
4711 fontSize 14
4712 fontName "Consolas"
4713 alignment "left"
4714 anchor "tl"
4715 borderDistance 6
4716 ]
4717 ]
4718
4719 node
4720 [
4721 id 11
4722 graphics
4723 [
4724 w 269.5
4725 h 110
4726 type "rectangle"
4727 fill "#FFFFFF"
4728 fill2 "#FFFFFF"
4729 outline "#000000"
4730 ]
4731 LabelGraphics
4732 [
4733 text "null"
4734 outline "#000000"
4735 fill "#FFFFFF"
4736 fontSize 16
4737 fontName "Monospace"
4738 autoSizePolicy "node_width"
4739 anchor "t"
4740 borderDistance 0.0
4741 ]
4742 LabelGraphics
4743 [
4744 text "
4745 EClassifier class
4746 EDataType class
4747 EModelElement class
4748 ENamedElement class
4749 EModelElement class UndefinedPart
4750 ENamedElement class UndefinedPart
4751 "
4752 fontSize 14
4753 fontName "Consolas"
4754 alignment "left"
4755 anchor "tl"
4756 borderDistance 6
4757 ]
4758 ]
4759
4760 node
4761 [
4762 id 12
4763 graphics
4764 [
4765 w 269.5
4766 h 110
4767 type "rectangle"
4768 fill "#FFFFFF"
4769 fill2 "#FFFFFF"
4770 outline "#000000"
4771 ]
4772 LabelGraphics
4773 [
4774 text "null"
4775 outline "#000000"
4776 fill "#FFFFFF"
4777 fontSize 16
4778 fontName "Monospace"
4779 autoSizePolicy "node_width"
4780 anchor "t"
4781 borderDistance 0.0
4782 ]
4783 LabelGraphics
4784 [
4785 text "
4786 EModelElement class
4787 ENamedElement class
4788 EPackage class
4789 EModelElement class UndefinedPart
4790 ENamedElement class UndefinedPart
4791 EPackage class UndefinedPart
4792 "
4793 fontSize 14
4794 fontName "Consolas"
4795 alignment "left"
4796 anchor "tl"
4797 borderDistance 6
4798 ]
4799 ]
4800
4801 node
4802 [
4803 id 13
4804 graphics
4805 [
4806 w 269.5
4807 h 124
4808 type "rectangle"
4809 fill "#FFFFFF"
4810 fill2 "#FFFFFF"
4811 outline "#000000"
4812 ]
4813 LabelGraphics
4814 [
4815 text "null"
4816 outline "#000000"
4817 fill "#FFFFFF"
4818 fontSize 16
4819 fontName "Monospace"
4820 autoSizePolicy "node_width"
4821 anchor "t"
4822 borderDistance 0.0
4823 ]
4824 LabelGraphics
4825 [
4826 text "
4827 EClassifier class
4828 EDataType class
4829 EEnum class
4830 EModelElement class
4831 ENamedElement class
4832 EModelElement class UndefinedPart
4833 ENamedElement class UndefinedPart
4834 "
4835 fontSize 14
4836 fontName "Consolas"
4837 alignment "left"
4838 anchor "tl"
4839 borderDistance 6
4840 ]
4841 ]
4842
4843 node
4844 [
4845 id 14
4846 graphics
4847 [
4848 w 269.5
4849 h 96
4850 type "rectangle"
4851 fill "#FFFFFF"
4852 fill2 "#FFFFFF"
4853 outline "#000000"
4854 ]
4855 LabelGraphics
4856 [
4857 text "null"
4858 outline "#000000"
4859 fill "#FFFFFF"
4860 fontSize 16
4861 fontName "Monospace"
4862 autoSizePolicy "node_width"
4863 anchor "t"
4864 borderDistance 0.0
4865 ]
4866 LabelGraphics
4867 [
4868 text "
4869 EModelElement class
4870 ENamedElement class
4871 ETypeParameter class
4872 EModelElement class UndefinedPart
4873 ENamedElement class UndefinedPart
4874 "
4875 fontSize 14
4876 fontName "Consolas"
4877 alignment "left"
4878 anchor "tl"
4879 borderDistance 6
4880 ]
4881 ]
4882
4883 node
4884 [
4885 id 15
4886 graphics
4887 [
4888 w 269.5
4889 h 68
4890 type "rectangle"
4891 fill "#FFFFFF"
4892 fill2 "#FFFFFF"
4893 outline "#000000"
4894 ]
4895 LabelGraphics
4896 [
4897 text "null"
4898 outline "#000000"
4899 fill "#FFFFFF"
4900 fontSize 16
4901 fontName "Monospace"
4902 autoSizePolicy "node_width"
4903 anchor "t"
4904 borderDistance 0.0
4905 ]
4906 LabelGraphics
4907 [
4908 text "
4909 EAnnotation class
4910 EModelElement class
4911 EModelElement class UndefinedPart
4912 "
4913 fontSize 14
4914 fontName "Consolas"
4915 alignment "left"
4916 anchor "tl"
4917 borderDistance 6
4918 ]
4919 ]
4920
4921 node
4922 [
4923 id 16
4924 graphics
4925 [
4926 w 112.2
4927 h 26
4928 type "rectangle"
4929 fill "#FFFFFF"
4930 fill2 "#FFFFFF"
4931 outline "#000000"
4932 ]
4933 LabelGraphics
4934 [
4935 text "New Integers"
4936 outline "#000000"
4937 fill "#FFFFFF"
4938 fontSize 16
4939 fontName "Monospace"
4940 autoSizePolicy "node_width"
4941 anchor "t"
4942 borderDistance 0.0
4943 ]
4944 LabelGraphics
4945 [
4946 text "
4947 "
4948 fontSize 14
4949 fontName "Consolas"
4950 alignment "left"
4951 anchor "tl"
4952 borderDistance 6
4953 ]
4954 ]
4955
4956 node
4957 [
4958 id 17
4959 graphics
4960 [
4961 w 85.80000000000001
4962 h 26
4963 type "rectangle"
4964 fill "#FFFFFF"
4965 fill2 "#FFFFFF"
4966 outline "#000000"
4967 ]
4968 LabelGraphics
4969 [
4970 text "New Reals"
4971 outline "#000000"
4972 fill "#FFFFFF"
4973 fontSize 16
4974 fontName "Monospace"
4975 autoSizePolicy "node_width"
4976 anchor "t"
4977 borderDistance 0.0
4978 ]
4979 LabelGraphics
4980 [
4981 text "
4982 "
4983 fontSize 14
4984 fontName "Consolas"
4985 alignment "left"
4986 anchor "tl"
4987 borderDistance 6
4988 ]
4989 ]
4990
4991 node
4992 [
4993 id 18
4994 graphics
4995 [
4996 w 103.4
4997 h 26
4998 type "rectangle"
4999 fill "#FFFFFF"
5000 fill2 "#FFFFFF"
5001 outline "#000000"
5002 ]
5003 LabelGraphics
5004 [
5005 text "New Strings"
5006 outline "#000000"
5007 fill "#FFFFFF"
5008 fontSize 16
5009 fontName "Monospace"
5010 autoSizePolicy "node_width"
5011 anchor "t"
5012 borderDistance 0.0
5013 ]
5014 LabelGraphics
5015 [
5016 text "
5017 "
5018 fontSize 14
5019 fontName "Consolas"
5020 alignment "left"
5021 anchor "tl"
5022 borderDistance 6
5023 ]
5024 ]
5025
5026 node
5027 [
5028 id 19
5029 graphics
5030 [
5031 w 103.4
5032 h 26
5033 type "rectangle"
5034 fill "#FFFFFF"
5035 fill2 "#FFFFFF"
5036 outline "#000000"
5037 ]
5038 LabelGraphics
5039 [
5040 text "New Objects"
5041 outline "#000000"
5042 fill "#FFFFFF"
5043 fontSize 16
5044 fontName "Monospace"
5045 autoSizePolicy "node_width"
5046 anchor "t"
5047 borderDistance 0.0
5048 ]
5049 LabelGraphics
5050 [
5051 text "
5052 "
5053 fontSize 14
5054 fontName "Consolas"
5055 alignment "left"
5056 anchor "tl"
5057 borderDistance 6
5058 ]
5059 ]
5060 edge
5061 [
5062 source 15
5063 target 0
5064 graphics
5065 [
5066 fill "#000000"
5067 targetArrow "standard"
5068 ]
5069 LabelGraphics
5070 [
5071 text "eModelElement reference EAnnotation"
5072 fontSize 14
5073 fontName "Consolas"
5074 configuration "AutoFlippingLabel"
5075 model "six_pos"
5076 position "thead"
5077 ]
5078 ]
5079 edge
5080 [
5081 source 11
5082 target 0
5083 graphics
5084 [
5085 fill "#000000"
5086 targetArrow "standard"
5087 ]
5088 LabelGraphics
5089 [
5090 text "ePackage reference EClassifier"
5091 fontSize 14
5092 fontName "Consolas"
5093 configuration "AutoFlippingLabel"
5094 model "six_pos"
5095 position "thead"
5096 ]
5097 ]
5098 edge
5099 [
5100 source 13
5101 target 0
5102 graphics
5103 [
5104 fill "#000000"
5105 targetArrow "standard"
5106 ]
5107 LabelGraphics
5108 [
5109 text "ePackage reference EClassifier"
5110 fontSize 14
5111 fontName "Consolas"
5112 configuration "AutoFlippingLabel"
5113 model "six_pos"
5114 position "thead"
5115 ]
5116 ]
5117 edge
5118 [
5119 source 13
5120 target 14
5121 graphics
5122 [
5123 fill "#000000"
5124 width 3
5125 targetArrow "standard"
5126 ]
5127 LabelGraphics
5128 [
5129 text "eTypeParameters reference EClassifier"
5130 fontSize 14
5131 fontName "Consolas"
5132 configuration "AutoFlippingLabel"
5133 model "six_pos"
5134 position "thead"
5135 ]
5136 ]
5137 edge
5138 [
5139 source 0
5140 target 15
5141 graphics
5142 [
5143 fill "#000000"
5144 width 3
5145 targetArrow "standard"
5146 ]
5147 LabelGraphics
5148 [
5149 text "eAnnotations reference EModelElement"
5150 fontSize 14
5151 fontName "Consolas"
5152 configuration "AutoFlippingLabel"
5153 model "six_pos"
5154 position "thead"
5155 ]
5156 ]
5157 edge
5158 [
5159 source 0
5160 target 11
5161 graphics
5162 [
5163 fill "#000000"
5164 width 3
5165 targetArrow "standard"
5166 ]
5167 LabelGraphics
5168 [
5169 text "eClassifiers reference EPackage"
5170 fontSize 14
5171 fontName "Consolas"
5172 configuration "AutoFlippingLabel"
5173 model "six_pos"
5174 position "thead"
5175 ]
5176 ]
5177 edge
5178 [
5179 source 0
5180 target 13
5181 graphics
5182 [
5183 fill "#000000"
5184 width 3
5185 targetArrow "standard"
5186 ]
5187 LabelGraphics
5188 [
5189 text "eClassifiers reference EPackage"
5190 fontSize 14
5191 fontName "Consolas"
5192 configuration "AutoFlippingLabel"
5193 model "six_pos"
5194 position "thead"
5195 ]
5196 ]
5197 edge
5198 [
5199 source 0
5200 target 12
5201 graphics
5202 [
5203 fill "#000000"
5204 width 3
5205 targetArrow "standard"
5206 ]
5207 LabelGraphics
5208 [
5209 text "eSubpackages reference EPackage"
5210 fontSize 14
5211 fontName "Consolas"
5212 configuration "AutoFlippingLabel"
5213 model "six_pos"
5214 position "thead"
5215 ]
5216 ]
5217 edge
5218 [
5219 source 12
5220 target 0
5221 graphics
5222 [
5223 fill "#000000"
5224 targetArrow "standard"
5225 ]
5226 LabelGraphics
5227 [
5228 text "eSuperPackage reference EPackage"
5229 fontSize 14
5230 fontName "Consolas"
5231 configuration "AutoFlippingLabel"
5232 model "six_pos"
5233 position "thead"
5234 ]
5235 ]
5236 edge
5237 [
5238 source 15
5239 target 6
5240 graphics
5241 [
5242 fill "#000000"
5243 targetArrow "standard"
5244 ]
5245 LabelGraphics
5246 [
5247 text "source attribute EAnnotation"
5248 fontSize 14
5249 fontName "Consolas"
5250 configuration "AutoFlippingLabel"
5251 model "six_pos"
5252 position "thead"
5253 ]
5254 ]
5255 edge
5256 [
5257 source 11
5258 target 6
5259 graphics
5260 [
5261 fill "#000000"
5262 targetArrow "standard"
5263 ]
5264 LabelGraphics
5265 [
5266 text "instanceClassName attribute EClassifier"
5267 fontSize 14
5268 fontName "Consolas"
5269 configuration "AutoFlippingLabel"
5270 model "six_pos"
5271 position "thead"
5272 ]
5273 ]
5274 edge
5275 [
5276 source 13
5277 target 7
5278 graphics
5279 [
5280 fill "#000000"
5281 targetArrow "standard"
5282 ]
5283 LabelGraphics
5284 [
5285 text "instanceClassName attribute EClassifier"
5286 fontSize 14
5287 fontName "Consolas"
5288 configuration "AutoFlippingLabel"
5289 model "six_pos"
5290 position "thead"
5291 ]
5292 ]
5293 edge
5294 [
5295 source 11
5296 target 1
5297 graphics
5298 [
5299 fill "#000000"
5300 targetArrow "standard"
5301 ]
5302 LabelGraphics
5303 [
5304 text "serializable attribute EDataType"
5305 fontSize 14
5306 fontName "Consolas"
5307 configuration "AutoFlippingLabel"
5308 model "six_pos"
5309 position "thead"
5310 ]
5311 ]
5312 edge
5313 [
5314 source 0
5315 target 10
5316 graphics
5317 [
5318 fill "#000000"
5319 targetArrow "standard"
5320 ]
5321 LabelGraphics
5322 [
5323 text "name attribute ENamedElement"
5324 fontSize 14
5325 fontName "Consolas"
5326 configuration "AutoFlippingLabel"
5327 model "six_pos"
5328 position "thead"
5329 ]
5330 ]
5331 edge
5332 [
5333 source 12
5334 target 6
5335 graphics
5336 [
5337 fill "#000000"
5338 targetArrow "standard"
5339 ]
5340 LabelGraphics
5341 [
5342 text "name attribute ENamedElement"
5343 fontSize 14
5344 fontName "Consolas"
5345 configuration "AutoFlippingLabel"
5346 model "six_pos"
5347 position "thead"
5348 ]
5349 ]
5350 edge
5351 [
5352 source 0
5353 target 9
5354 graphics
5355 [
5356 fill "#000000"
5357 targetArrow "standard"
5358 ]
5359 LabelGraphics
5360 [
5361 text "nsURI attribute EPackage"
5362 fontSize 14
5363 fontName "Consolas"
5364 configuration "AutoFlippingLabel"
5365 model "six_pos"
5366 position "thead"
5367 ]
5368 ]
5369 edge
5370 [
5371 source 12
5372 target 10
5373 graphics
5374 [
5375 fill "#000000"
5376 targetArrow "standard"
5377 ]
5378 LabelGraphics
5379 [
5380 text "nsURI attribute EPackage"
5381 fontSize 14
5382 fontName "Consolas"
5383 configuration "AutoFlippingLabel"
5384 model "six_pos"
5385 position "thead"
5386 ]
5387 ]
5388 edge
5389 [
5390 source 0
5391 target 8
5392 graphics
5393 [
5394 fill "#000000"
5395 targetArrow "standard"
5396 ]
5397 LabelGraphics
5398 [
5399 text "nsPrefix attribute EPackage"
5400 fontSize 14
5401 fontName "Consolas"
5402 configuration "AutoFlippingLabel"
5403 model "six_pos"
5404 position "thead"
5405 ]
5406 ]
5407 edge
5408 [
5409 source 12
5410 target 8
5411 graphics
5412 [
5413 fill "#000000"
5414 targetArrow "standard"
5415 ]
5416 LabelGraphics
5417 [
5418 text "nsPrefix attribute EPackage"
5419 fontSize 14
5420 fontName "Consolas"
5421 configuration "AutoFlippingLabel"
5422 model "six_pos"
5423 position "thead"
5424 ]
5425 ]
5426]
5427graph
5428[
5429 node
5430 [
5431 id 0
5432 graphics
5433 [
5434 w 254.10000000000002
5435 h 110
5436 type "rectangle"
5437 fill "#FFFFFF"
5438 fill2 "#FFFFFF"
5439 outline "#000000"
5440 ]
5441 LabelGraphics
5442 [
5443 text "o 1"
5444 outline "#000000"
5445 fill "#FFFFFF"
5446 fontSize 16
5447 fontName "Monospace"
5448 autoSizePolicy "node_width"
5449 anchor "t"
5450 borderDistance 0.0
5451 ]
5452 LabelGraphics
5453 [
5454 text "
5455 EModelElement class DefinedPart
5456 ENamedElement class DefinedPart
5457 EPackage class DefinedPart
5458 EModelElement class
5459 ENamedElement class
5460 EPackage class
5461 "
5462 fontSize 14
5463 fontName "Consolas"
5464 alignment "left"
5465 anchor "tl"
5466 borderDistance 6
5467 ]
5468 ]
5469
5470 node
5471 [
5472 id 1
5473 graphics
5474 [
5475 w 41.800000000000004
5476 h 26
5477 type "rectangle"
5478 fill "#FFFFFF"
5479 fill2 "#FFFFFF"
5480 outline "#000000"
5481 ]
5482 LabelGraphics
5483 [
5484 text "true"
5485 outline "#000000"
5486 fill "#FFFFFF"
5487 fontSize 16
5488 fontName "Monospace"
5489 autoSizePolicy "node_width"
5490 anchor "t"
5491 borderDistance 0.0
5492 ]
5493 LabelGraphics
5494 [
5495 text "
5496 "
5497 fontSize 14
5498 fontName "Consolas"
5499 alignment "left"
5500 anchor "tl"
5501 borderDistance 6
5502 ]
5503 ]
5504
5505 node
5506 [
5507 id 2
5508 graphics
5509 [
5510 w 50.6
5511 h 26
5512 type "rectangle"
5513 fill "#FFFFFF"
5514 fill2 "#FFFFFF"
5515 outline "#000000"
5516 ]
5517 LabelGraphics
5518 [
5519 text "false"
5520 outline "#000000"
5521 fill "#FFFFFF"
5522 fontSize 16
5523 fontName "Monospace"
5524 autoSizePolicy "node_width"
5525 anchor "t"
5526 borderDistance 0.0
5527 ]
5528 LabelGraphics
5529 [
5530 text "
5531 "
5532 fontSize 14
5533 fontName "Consolas"
5534 alignment "left"
5535 anchor "tl"
5536 borderDistance 6
5537 ]
5538 ]
5539
5540 node
5541 [
5542 id 3
5543 graphics
5544 [
5545 w 24.200000000000003
5546 h 26
5547 type "rectangle"
5548 fill "#FFFFFF"
5549 fill2 "#FFFFFF"
5550 outline "#000000"
5551 ]
5552 LabelGraphics
5553 [
5554 text "-1"
5555 outline "#000000"
5556 fill "#FFFFFF"
5557 fontSize 16
5558 fontName "Monospace"
5559 autoSizePolicy "node_width"
5560 anchor "t"
5561 borderDistance 0.0
5562 ]
5563 LabelGraphics
5564 [
5565 text "
5566 "
5567 fontSize 14
5568 fontName "Consolas"
5569 alignment "left"
5570 anchor "tl"
5571 borderDistance 6
5572 ]
5573 ]
5574
5575 node
5576 [
5577 id 4
5578 graphics
5579 [
5580 w 15.400000000000002
5581 h 26
5582 type "rectangle"
5583 fill "#FFFFFF"
5584 fill2 "#FFFFFF"
5585 outline "#000000"
5586 ]
5587 LabelGraphics
5588 [
5589 text "0"
5590 outline "#000000"
5591 fill "#FFFFFF"
5592 fontSize 16
5593 fontName "Monospace"
5594 autoSizePolicy "node_width"
5595 anchor "t"
5596 borderDistance 0.0
5597 ]
5598 LabelGraphics
5599 [
5600 text "
5601 "
5602 fontSize 14
5603 fontName "Consolas"
5604 alignment "left"
5605 anchor "tl"
5606 borderDistance 6
5607 ]
5608 ]
5609
5610 node
5611 [
5612 id 5
5613 graphics
5614 [
5615 w 15.400000000000002
5616 h 26
5617 type "rectangle"
5618 fill "#FFFFFF"
5619 fill2 "#FFFFFF"
5620 outline "#000000"
5621 ]
5622 LabelGraphics
5623 [
5624 text "1"
5625 outline "#000000"
5626 fill "#FFFFFF"
5627 fontSize 16
5628 fontName "Monospace"
5629 autoSizePolicy "node_width"
5630 anchor "t"
5631 borderDistance 0.0
5632 ]
5633 LabelGraphics
5634 [
5635 text "
5636 "
5637 fontSize 14
5638 fontName "Consolas"
5639 alignment "left"
5640 anchor "tl"
5641 borderDistance 6
5642 ]
5643 ]
5644
5645 node
5646 [
5647 id 6
5648 graphics
5649 [
5650 w 33.0
5651 h 26
5652 type "rectangle"
5653 fill "#FFFFFF"
5654 fill2 "#FFFFFF"
5655 outline "#000000"
5656 ]
5657 LabelGraphics
5658 [
5659 text ""A""
5660 outline "#000000"
5661 fill "#FFFFFF"
5662 fontSize 16
5663 fontName "Monospace"
5664 autoSizePolicy "node_width"
5665 anchor "t"
5666 borderDistance 0.0
5667 ]
5668 LabelGraphics
5669 [
5670 text "
5671 "
5672 fontSize 14
5673 fontName "Consolas"
5674 alignment "left"
5675 anchor "tl"
5676 borderDistance 6
5677 ]
5678 ]
5679
5680 node
5681 [
5682 id 7
5683 graphics
5684 [
5685 w 33.0
5686 h 26
5687 type "rectangle"
5688 fill "#FFFFFF"
5689 fill2 "#FFFFFF"
5690 outline "#000000"
5691 ]
5692 LabelGraphics
5693 [
5694 text ""B""
5695 outline "#000000"
5696 fill "#FFFFFF"
5697 fontSize 16
5698 fontName "Monospace"
5699 autoSizePolicy "node_width"
5700 anchor "t"
5701 borderDistance 0.0
5702 ]
5703 LabelGraphics
5704 [
5705 text "
5706 "
5707 fontSize 14
5708 fontName "Consolas"
5709 alignment "left"
5710 anchor "tl"
5711 borderDistance 6
5712 ]
5713 ]
5714
5715 node
5716 [
5717 id 8
5718 graphics
5719 [
5720 w 94.60000000000001
5721 h 26
5722 type "rectangle"
5723 fill "#FFFFFF"
5724 fill2 "#FFFFFF"
5725 outline "#000000"
5726 ]
5727 LabelGraphics
5728 [
5729 text ""nsPrefix""
5730 outline "#000000"
5731 fill "#FFFFFF"
5732 fontSize 16
5733 fontName "Monospace"
5734 autoSizePolicy "node_width"
5735 anchor "t"
5736 borderDistance 0.0
5737 ]
5738 LabelGraphics
5739 [
5740 text "
5741 "
5742 fontSize 14
5743 fontName "Consolas"
5744 alignment "left"
5745 anchor "tl"
5746 borderDistance 6
5747 ]
5748 ]
5749
5750 node
5751 [
5752 id 9
5753 graphics
5754 [
5755 w 68.2
5756 h 26
5757 type "rectangle"
5758 fill "#FFFFFF"
5759 fill2 "#FFFFFF"
5760 outline "#000000"
5761 ]
5762 LabelGraphics
5763 [
5764 text ""nsUri""
5765 outline "#000000"
5766 fill "#FFFFFF"
5767 fontSize 16
5768 fontName "Monospace"
5769 autoSizePolicy "node_width"
5770 anchor "t"
5771 borderDistance 0.0
5772 ]
5773 LabelGraphics
5774 [
5775 text "
5776 "
5777 fontSize 14
5778 fontName "Consolas"
5779 alignment "left"
5780 anchor "tl"
5781 borderDistance 6
5782 ]
5783 ]
5784
5785 node
5786 [
5787 id 10
5788 graphics
5789 [
5790 w 121.00000000000001
5791 h 26
5792 type "rectangle"
5793 fill "#FFFFFF"
5794 fill2 "#FFFFFF"
5795 outline "#000000"
5796 ]
5797 LabelGraphics
5798 [
5799 text ""packageName""
5800 outline "#000000"
5801 fill "#FFFFFF"
5802 fontSize 16
5803 fontName "Monospace"
5804 autoSizePolicy "node_width"
5805 anchor "t"
5806 borderDistance 0.0
5807 ]
5808 LabelGraphics
5809 [
5810 text "
5811 "
5812 fontSize 14
5813 fontName "Consolas"
5814 alignment "left"
5815 anchor "tl"
5816 borderDistance 6
5817 ]
5818 ]
5819
5820 node
5821 [
5822 id 11
5823 graphics
5824 [
5825 w 269.5
5826 h 110
5827 type "rectangle"
5828 fill "#FFFFFF"
5829 fill2 "#FFFFFF"
5830 outline "#000000"
5831 ]
5832 LabelGraphics
5833 [
5834 text "null"
5835 outline "#000000"
5836 fill "#FFFFFF"
5837 fontSize 16
5838 fontName "Monospace"
5839 autoSizePolicy "node_width"
5840 anchor "t"
5841 borderDistance 0.0
5842 ]
5843 LabelGraphics
5844 [
5845 text "
5846 EClass class
5847 EClassifier class
5848 EModelElement class
5849 ENamedElement class
5850 EModelElement class UndefinedPart
5851 ENamedElement class UndefinedPart
5852 "
5853 fontSize 14
5854 fontName "Consolas"
5855 alignment "left"
5856 anchor "tl"
5857 borderDistance 6
5858 ]
5859 ]
5860
5861 node
5862 [
5863 id 12
5864 graphics
5865 [
5866 w 269.5
5867 h 110
5868 type "rectangle"
5869 fill "#FFFFFF"
5870 fill2 "#FFFFFF"
5871 outline "#000000"
5872 ]
5873 LabelGraphics
5874 [
5875 text "null"
5876 outline "#000000"
5877 fill "#FFFFFF"
5878 fontSize 16
5879 fontName "Monospace"
5880 autoSizePolicy "node_width"
5881 anchor "t"
5882 borderDistance 0.0
5883 ]
5884 LabelGraphics
5885 [
5886 text "
5887 EModelElement class
5888 ENamedElement class
5889 EPackage class
5890 EModelElement class UndefinedPart
5891 ENamedElement class UndefinedPart
5892 EPackage class UndefinedPart
5893 "
5894 fontSize 14
5895 fontName "Consolas"
5896 alignment "left"
5897 anchor "tl"
5898 borderDistance 6
5899 ]
5900 ]
5901
5902 node
5903 [
5904 id 13
5905 graphics
5906 [
5907 w 269.5
5908 h 110
5909 type "rectangle"
5910 fill "#FFFFFF"
5911 fill2 "#FFFFFF"
5912 outline "#000000"
5913 ]
5914 LabelGraphics
5915 [
5916 text "null"
5917 outline "#000000"
5918 fill "#FFFFFF"
5919 fontSize 16
5920 fontName "Monospace"
5921 autoSizePolicy "node_width"
5922 anchor "t"
5923 borderDistance 0.0
5924 ]
5925 LabelGraphics
5926 [
5927 text "
5928 EModelElement class
5929 ENamedElement class
5930 EPackage class
5931 EModelElement class UndefinedPart
5932 ENamedElement class UndefinedPart
5933 EPackage class UndefinedPart
5934 "
5935 fontSize 14
5936 fontName "Consolas"
5937 alignment "left"
5938 anchor "tl"
5939 borderDistance 6
5940 ]
5941 ]
5942
5943 node
5944 [
5945 id 14
5946 graphics
5947 [
5948 w 269.5
5949 h 96
5950 type "rectangle"
5951 fill "#FFFFFF"
5952 fill2 "#FFFFFF"
5953 outline "#000000"
5954 ]
5955 LabelGraphics
5956 [
5957 text "null"
5958 outline "#000000"
5959 fill "#FFFFFF"
5960 fontSize 16
5961 fontName "Monospace"
5962 autoSizePolicy "node_width"
5963 anchor "t"
5964 borderDistance 0.0
5965 ]
5966 LabelGraphics
5967 [
5968 text "
5969 EModelElement class
5970 ENamedElement class
5971 ETypeParameter class
5972 EModelElement class UndefinedPart
5973 ENamedElement class UndefinedPart
5974 "
5975 fontSize 14
5976 fontName "Consolas"
5977 alignment "left"
5978 anchor "tl"
5979 borderDistance 6
5980 ]
5981 ]
5982
5983 node
5984 [
5985 id 15
5986 graphics
5987 [
5988 w 269.5
5989 h 110
5990 type "rectangle"
5991 fill "#FFFFFF"
5992 fill2 "#FFFFFF"
5993 outline "#000000"
5994 ]
5995 LabelGraphics
5996 [
5997 text "null"
5998 outline "#000000"
5999 fill "#FFFFFF"
6000 fontSize 16
6001 fontName "Monospace"
6002 autoSizePolicy "node_width"
6003 anchor "t"
6004 borderDistance 0.0
6005 ]
6006 LabelGraphics
6007 [
6008 text "
6009 EClass class
6010 EClassifier class
6011 EModelElement class
6012 ENamedElement class
6013 EModelElement class UndefinedPart
6014 ENamedElement class UndefinedPart
6015 "
6016 fontSize 14
6017 fontName "Consolas"
6018 alignment "left"
6019 anchor "tl"
6020 borderDistance 6
6021 ]
6022 ]
6023
6024 node
6025 [
6026 id 16
6027 graphics
6028 [
6029 w 112.2
6030 h 26
6031 type "rectangle"
6032 fill "#FFFFFF"
6033 fill2 "#FFFFFF"
6034 outline "#000000"
6035 ]
6036 LabelGraphics
6037 [
6038 text "New Integers"
6039 outline "#000000"
6040 fill "#FFFFFF"
6041 fontSize 16
6042 fontName "Monospace"
6043 autoSizePolicy "node_width"
6044 anchor "t"
6045 borderDistance 0.0
6046 ]
6047 LabelGraphics
6048 [
6049 text "
6050 "
6051 fontSize 14
6052 fontName "Consolas"
6053 alignment "left"
6054 anchor "tl"
6055 borderDistance 6
6056 ]
6057 ]
6058
6059 node
6060 [
6061 id 17
6062 graphics
6063 [
6064 w 85.80000000000001
6065 h 26
6066 type "rectangle"
6067 fill "#FFFFFF"
6068 fill2 "#FFFFFF"
6069 outline "#000000"
6070 ]
6071 LabelGraphics
6072 [
6073 text "New Reals"
6074 outline "#000000"
6075 fill "#FFFFFF"
6076 fontSize 16
6077 fontName "Monospace"
6078 autoSizePolicy "node_width"
6079 anchor "t"
6080 borderDistance 0.0
6081 ]
6082 LabelGraphics
6083 [
6084 text "
6085 "
6086 fontSize 14
6087 fontName "Consolas"
6088 alignment "left"
6089 anchor "tl"
6090 borderDistance 6
6091 ]
6092 ]
6093
6094 node
6095 [
6096 id 18
6097 graphics
6098 [
6099 w 103.4
6100 h 26
6101 type "rectangle"
6102 fill "#FFFFFF"
6103 fill2 "#FFFFFF"
6104 outline "#000000"
6105 ]
6106 LabelGraphics
6107 [
6108 text "New Strings"
6109 outline "#000000"
6110 fill "#FFFFFF"
6111 fontSize 16
6112 fontName "Monospace"
6113 autoSizePolicy "node_width"
6114 anchor "t"
6115 borderDistance 0.0
6116 ]
6117 LabelGraphics
6118 [
6119 text "
6120 "
6121 fontSize 14
6122 fontName "Consolas"
6123 alignment "left"
6124 anchor "tl"
6125 borderDistance 6
6126 ]
6127 ]
6128
6129 node
6130 [
6131 id 19
6132 graphics
6133 [
6134 w 103.4
6135 h 26
6136 type "rectangle"
6137 fill "#FFFFFF"
6138 fill2 "#FFFFFF"
6139 outline "#000000"
6140 ]
6141 LabelGraphics
6142 [
6143 text "New Objects"
6144 outline "#000000"
6145 fill "#FFFFFF"
6146 fontSize 16
6147 fontName "Monospace"
6148 autoSizePolicy "node_width"
6149 anchor "t"
6150 borderDistance 0.0
6151 ]
6152 LabelGraphics
6153 [
6154 text "
6155 "
6156 fontSize 14
6157 fontName "Consolas"
6158 alignment "left"
6159 anchor "tl"
6160 borderDistance 6
6161 ]
6162 ]
6163 edge
6164 [
6165 source 11
6166 target 0
6167 graphics
6168 [
6169 fill "#000000"
6170 targetArrow "standard"
6171 ]
6172 LabelGraphics
6173 [
6174 text "ePackage reference EClassifier"
6175 fontSize 14
6176 fontName "Consolas"
6177 configuration "AutoFlippingLabel"
6178 model "six_pos"
6179 position "thead"
6180 ]
6181 ]
6182 edge
6183 [
6184 source 15
6185 target 13
6186 graphics
6187 [
6188 fill "#000000"
6189 targetArrow "standard"
6190 ]
6191 LabelGraphics
6192 [
6193 text "ePackage reference EClassifier"
6194 fontSize 14
6195 fontName "Consolas"
6196 configuration "AutoFlippingLabel"
6197 model "six_pos"
6198 position "thead"
6199 ]
6200 ]
6201 edge
6202 [
6203 source 11
6204 target 14
6205 graphics
6206 [
6207 fill "#000000"
6208 width 3
6209 targetArrow "standard"
6210 ]
6211 LabelGraphics
6212 [
6213 text "eTypeParameters reference EClassifier"
6214 fontSize 14
6215 fontName "Consolas"
6216 configuration "AutoFlippingLabel"
6217 model "six_pos"
6218 position "thead"
6219 ]
6220 ]
6221 edge
6222 [
6223 source 0
6224 target 11
6225 graphics
6226 [
6227 fill "#000000"
6228 width 3
6229 targetArrow "standard"
6230 ]
6231 LabelGraphics
6232 [
6233 text "eClassifiers reference EPackage"
6234 fontSize 14
6235 fontName "Consolas"
6236 configuration "AutoFlippingLabel"
6237 model "six_pos"
6238 position "thead"
6239 ]
6240 ]
6241 edge
6242 [
6243 source 13
6244 target 15
6245 graphics
6246 [
6247 fill "#000000"
6248 width 3
6249 targetArrow "standard"
6250 ]
6251 LabelGraphics
6252 [
6253 text "eClassifiers reference EPackage"
6254 fontSize 14
6255 fontName "Consolas"
6256 configuration "AutoFlippingLabel"
6257 model "six_pos"
6258 position "thead"
6259 ]
6260 ]
6261 edge
6262 [
6263 source 0
6264 target 12
6265 graphics
6266 [
6267 fill "#000000"
6268 width 3
6269 targetArrow "standard"
6270 ]
6271 LabelGraphics
6272 [
6273 text "eSubpackages reference EPackage"
6274 fontSize 14
6275 fontName "Consolas"
6276 configuration "AutoFlippingLabel"
6277 model "six_pos"
6278 position "thead"
6279 ]
6280 ]
6281 edge
6282 [
6283 source 12
6284 target 13
6285 graphics
6286 [
6287 fill "#000000"
6288 width 3
6289 targetArrow "standard"
6290 ]
6291 LabelGraphics
6292 [
6293 text "eSubpackages reference EPackage"
6294 fontSize 14
6295 fontName "Consolas"
6296 configuration "AutoFlippingLabel"
6297 model "six_pos"
6298 position "thead"
6299 ]
6300 ]
6301 edge
6302 [
6303 source 12
6304 target 0
6305 graphics
6306 [
6307 fill "#000000"
6308 targetArrow "standard"
6309 ]
6310 LabelGraphics
6311 [
6312 text "eSuperPackage reference EPackage"
6313 fontSize 14
6314 fontName "Consolas"
6315 configuration "AutoFlippingLabel"
6316 model "six_pos"
6317 position "thead"
6318 ]
6319 ]
6320 edge
6321 [
6322 source 13
6323 target 12
6324 graphics
6325 [
6326 fill "#000000"
6327 targetArrow "standard"
6328 ]
6329 LabelGraphics
6330 [
6331 text "eSuperPackage reference EPackage"
6332 fontSize 14
6333 fontName "Consolas"
6334 configuration "AutoFlippingLabel"
6335 model "six_pos"
6336 position "thead"
6337 ]
6338 ]
6339 edge
6340 [
6341 source 11
6342 target 1
6343 graphics
6344 [
6345 fill "#000000"
6346 targetArrow "standard"
6347 ]
6348 LabelGraphics
6349 [
6350 text "abstract attribute EClass"
6351 fontSize 14
6352 fontName "Consolas"
6353 configuration "AutoFlippingLabel"
6354 model "six_pos"
6355 position "thead"
6356 ]
6357 ]
6358 edge
6359 [
6360 source 11
6361 target 2
6362 graphics
6363 [
6364 fill "#000000"
6365 targetArrow "standard"
6366 ]
6367 LabelGraphics
6368 [
6369 text "interface attribute EClass"
6370 fontSize 14
6371 fontName "Consolas"
6372 configuration "AutoFlippingLabel"
6373 model "six_pos"
6374 position "thead"
6375 ]
6376 ]
6377 edge
6378 [
6379 source 11
6380 target 8
6381 graphics
6382 [
6383 fill "#000000"
6384 targetArrow "standard"
6385 ]
6386 LabelGraphics
6387 [
6388 text "instanceTypeName attribute EClassifier"
6389 fontSize 14
6390 fontName "Consolas"
6391 configuration "AutoFlippingLabel"
6392 model "six_pos"
6393 position "thead"
6394 ]
6395 ]
6396 edge
6397 [
6398 source 15
6399 target 6
6400 graphics
6401 [
6402 fill "#000000"
6403 targetArrow "standard"
6404 ]
6405 LabelGraphics
6406 [
6407 text "instanceTypeName attribute EClassifier"
6408 fontSize 14
6409 fontName "Consolas"
6410 configuration "AutoFlippingLabel"
6411 model "six_pos"
6412 position "thead"
6413 ]
6414 ]
6415 edge
6416 [
6417 source 0
6418 target 10
6419 graphics
6420 [
6421 fill "#000000"
6422 targetArrow "standard"
6423 ]
6424 LabelGraphics
6425 [
6426 text "name attribute ENamedElement"
6427 fontSize 14
6428 fontName "Consolas"
6429 configuration "AutoFlippingLabel"
6430 model "six_pos"
6431 position "thead"
6432 ]
6433 ]
6434 edge
6435 [
6436 source 13
6437 target 8
6438 graphics
6439 [
6440 fill "#000000"
6441 targetArrow "standard"
6442 ]
6443 LabelGraphics
6444 [
6445 text "name attribute ENamedElement"
6446 fontSize 14
6447 fontName "Consolas"
6448 configuration "AutoFlippingLabel"
6449 model "six_pos"
6450 position "thead"
6451 ]
6452 ]
6453 edge
6454 [
6455 source 11
6456 target 6
6457 graphics
6458 [
6459 fill "#000000"
6460 targetArrow "standard"
6461 ]
6462 LabelGraphics
6463 [
6464 text "name attribute ENamedElement"
6465 fontSize 14
6466 fontName "Consolas"
6467 configuration "AutoFlippingLabel"
6468 model "six_pos"
6469 position "thead"
6470 ]
6471 ]
6472 edge
6473 [
6474 source 0
6475 target 9
6476 graphics
6477 [
6478 fill "#000000"
6479 targetArrow "standard"
6480 ]
6481 LabelGraphics
6482 [
6483 text "nsURI attribute EPackage"
6484 fontSize 14
6485 fontName "Consolas"
6486 configuration "AutoFlippingLabel"
6487 model "six_pos"
6488 position "thead"
6489 ]
6490 ]
6491 edge
6492 [
6493 source 13
6494 target 7
6495 graphics
6496 [
6497 fill "#000000"
6498 targetArrow "standard"
6499 ]
6500 LabelGraphics
6501 [
6502 text "nsURI attribute EPackage"
6503 fontSize 14
6504 fontName "Consolas"
6505 configuration "AutoFlippingLabel"
6506 model "six_pos"
6507 position "thead"
6508 ]
6509 ]
6510 edge
6511 [
6512 source 12
6513 target 7
6514 graphics
6515 [
6516 fill "#000000"
6517 targetArrow "standard"
6518 ]
6519 LabelGraphics
6520 [
6521 text "nsURI attribute EPackage"
6522 fontSize 14
6523 fontName "Consolas"
6524 configuration "AutoFlippingLabel"
6525 model "six_pos"
6526 position "thead"
6527 ]
6528 ]
6529 edge
6530 [
6531 source 0
6532 target 8
6533 graphics
6534 [
6535 fill "#000000"
6536 targetArrow "standard"
6537 ]
6538 LabelGraphics
6539 [
6540 text "nsPrefix attribute EPackage"
6541 fontSize 14
6542 fontName "Consolas"
6543 configuration "AutoFlippingLabel"
6544 model "six_pos"
6545 position "thead"
6546 ]
6547 ]
6548]
6549graph
6550[
6551 node
6552 [
6553 id 0
6554 graphics
6555 [
6556 w 254.10000000000002
6557 h 110
6558 type "rectangle"
6559 fill "#FFFFFF"
6560 fill2 "#FFFFFF"
6561 outline "#000000"
6562 ]
6563 LabelGraphics
6564 [
6565 text "o 1"
6566 outline "#000000"
6567 fill "#FFFFFF"
6568 fontSize 16
6569 fontName "Monospace"
6570 autoSizePolicy "node_width"
6571 anchor "t"
6572 borderDistance 0.0
6573 ]
6574 LabelGraphics
6575 [
6576 text "
6577 EModelElement class DefinedPart
6578 ENamedElement class DefinedPart
6579 EPackage class DefinedPart
6580 EModelElement class
6581 ENamedElement class
6582 EPackage class
6583 "
6584 fontSize 14
6585 fontName "Consolas"
6586 alignment "left"
6587 anchor "tl"
6588 borderDistance 6
6589 ]
6590 ]
6591
6592 node
6593 [
6594 id 1
6595 graphics
6596 [
6597 w 41.800000000000004
6598 h 26
6599 type "rectangle"
6600 fill "#FFFFFF"
6601 fill2 "#FFFFFF"
6602 outline "#000000"
6603 ]
6604 LabelGraphics
6605 [
6606 text "true"
6607 outline "#000000"
6608 fill "#FFFFFF"
6609 fontSize 16
6610 fontName "Monospace"
6611 autoSizePolicy "node_width"
6612 anchor "t"
6613 borderDistance 0.0
6614 ]
6615 LabelGraphics
6616 [
6617 text "
6618 "
6619 fontSize 14
6620 fontName "Consolas"
6621 alignment "left"
6622 anchor "tl"
6623 borderDistance 6
6624 ]
6625 ]
6626
6627 node
6628 [
6629 id 2
6630 graphics
6631 [
6632 w 50.6
6633 h 26
6634 type "rectangle"
6635 fill "#FFFFFF"
6636 fill2 "#FFFFFF"
6637 outline "#000000"
6638 ]
6639 LabelGraphics
6640 [
6641 text "false"
6642 outline "#000000"
6643 fill "#FFFFFF"
6644 fontSize 16
6645 fontName "Monospace"
6646 autoSizePolicy "node_width"
6647 anchor "t"
6648 borderDistance 0.0
6649 ]
6650 LabelGraphics
6651 [
6652 text "
6653 "
6654 fontSize 14
6655 fontName "Consolas"
6656 alignment "left"
6657 anchor "tl"
6658 borderDistance 6
6659 ]
6660 ]
6661
6662 node
6663 [
6664 id 3
6665 graphics
6666 [
6667 w 24.200000000000003
6668 h 26
6669 type "rectangle"
6670 fill "#FFFFFF"
6671 fill2 "#FFFFFF"
6672 outline "#000000"
6673 ]
6674 LabelGraphics
6675 [
6676 text "-1"
6677 outline "#000000"
6678 fill "#FFFFFF"
6679 fontSize 16
6680 fontName "Monospace"
6681 autoSizePolicy "node_width"
6682 anchor "t"
6683 borderDistance 0.0
6684 ]
6685 LabelGraphics
6686 [
6687 text "
6688 "
6689 fontSize 14
6690 fontName "Consolas"
6691 alignment "left"
6692 anchor "tl"
6693 borderDistance 6
6694 ]
6695 ]
6696
6697 node
6698 [
6699 id 4
6700 graphics
6701 [
6702 w 15.400000000000002
6703 h 26
6704 type "rectangle"
6705 fill "#FFFFFF"
6706 fill2 "#FFFFFF"
6707 outline "#000000"
6708 ]
6709 LabelGraphics
6710 [
6711 text "0"
6712 outline "#000000"
6713 fill "#FFFFFF"
6714 fontSize 16
6715 fontName "Monospace"
6716 autoSizePolicy "node_width"
6717 anchor "t"
6718 borderDistance 0.0
6719 ]
6720 LabelGraphics
6721 [
6722 text "
6723 "
6724 fontSize 14
6725 fontName "Consolas"
6726 alignment "left"
6727 anchor "tl"
6728 borderDistance 6
6729 ]
6730 ]
6731
6732 node
6733 [
6734 id 5
6735 graphics
6736 [
6737 w 15.400000000000002
6738 h 26
6739 type "rectangle"
6740 fill "#FFFFFF"
6741 fill2 "#FFFFFF"
6742 outline "#000000"
6743 ]
6744 LabelGraphics
6745 [
6746 text "1"
6747 outline "#000000"
6748 fill "#FFFFFF"
6749 fontSize 16
6750 fontName "Monospace"
6751 autoSizePolicy "node_width"
6752 anchor "t"
6753 borderDistance 0.0
6754 ]
6755 LabelGraphics
6756 [
6757 text "
6758 "
6759 fontSize 14
6760 fontName "Consolas"
6761 alignment "left"
6762 anchor "tl"
6763 borderDistance 6
6764 ]
6765 ]
6766
6767 node
6768 [
6769 id 6
6770 graphics
6771 [
6772 w 33.0
6773 h 26
6774 type "rectangle"
6775 fill "#FFFFFF"
6776 fill2 "#FFFFFF"
6777 outline "#000000"
6778 ]
6779 LabelGraphics
6780 [
6781 text ""A""
6782 outline "#000000"
6783 fill "#FFFFFF"
6784 fontSize 16
6785 fontName "Monospace"
6786 autoSizePolicy "node_width"
6787 anchor "t"
6788 borderDistance 0.0
6789 ]
6790 LabelGraphics
6791 [
6792 text "
6793 "
6794 fontSize 14
6795 fontName "Consolas"
6796 alignment "left"
6797 anchor "tl"
6798 borderDistance 6
6799 ]
6800 ]
6801
6802 node
6803 [
6804 id 7
6805 graphics
6806 [
6807 w 33.0
6808 h 26
6809 type "rectangle"
6810 fill "#FFFFFF"
6811 fill2 "#FFFFFF"
6812 outline "#000000"
6813 ]
6814 LabelGraphics
6815 [
6816 text ""B""
6817 outline "#000000"
6818 fill "#FFFFFF"
6819 fontSize 16
6820 fontName "Monospace"
6821 autoSizePolicy "node_width"
6822 anchor "t"
6823 borderDistance 0.0
6824 ]
6825 LabelGraphics
6826 [
6827 text "
6828 "
6829 fontSize 14
6830 fontName "Consolas"
6831 alignment "left"
6832 anchor "tl"
6833 borderDistance 6
6834 ]
6835 ]
6836
6837 node
6838 [
6839 id 8
6840 graphics
6841 [
6842 w 94.60000000000001
6843 h 26
6844 type "rectangle"
6845 fill "#FFFFFF"
6846 fill2 "#FFFFFF"
6847 outline "#000000"
6848 ]
6849 LabelGraphics
6850 [
6851 text ""nsPrefix""
6852 outline "#000000"
6853 fill "#FFFFFF"
6854 fontSize 16
6855 fontName "Monospace"
6856 autoSizePolicy "node_width"
6857 anchor "t"
6858 borderDistance 0.0
6859 ]
6860 LabelGraphics
6861 [
6862 text "
6863 "
6864 fontSize 14
6865 fontName "Consolas"
6866 alignment "left"
6867 anchor "tl"
6868 borderDistance 6
6869 ]
6870 ]
6871
6872 node
6873 [
6874 id 9
6875 graphics
6876 [
6877 w 68.2
6878 h 26
6879 type "rectangle"
6880 fill "#FFFFFF"
6881 fill2 "#FFFFFF"
6882 outline "#000000"
6883 ]
6884 LabelGraphics
6885 [
6886 text ""nsUri""
6887 outline "#000000"
6888 fill "#FFFFFF"
6889 fontSize 16
6890 fontName "Monospace"
6891 autoSizePolicy "node_width"
6892 anchor "t"
6893 borderDistance 0.0
6894 ]
6895 LabelGraphics
6896 [
6897 text "
6898 "
6899 fontSize 14
6900 fontName "Consolas"
6901 alignment "left"
6902 anchor "tl"
6903 borderDistance 6
6904 ]
6905 ]
6906
6907 node
6908 [
6909 id 10
6910 graphics
6911 [
6912 w 121.00000000000001
6913 h 26
6914 type "rectangle"
6915 fill "#FFFFFF"
6916 fill2 "#FFFFFF"
6917 outline "#000000"
6918 ]
6919 LabelGraphics
6920 [
6921 text ""packageName""
6922 outline "#000000"
6923 fill "#FFFFFF"
6924 fontSize 16
6925 fontName "Monospace"
6926 autoSizePolicy "node_width"
6927 anchor "t"
6928 borderDistance 0.0
6929 ]
6930 LabelGraphics
6931 [
6932 text "
6933 "
6934 fontSize 14
6935 fontName "Consolas"
6936 alignment "left"
6937 anchor "tl"
6938 borderDistance 6
6939 ]
6940 ]
6941
6942 node
6943 [
6944 id 11
6945 graphics
6946 [
6947 w 269.5
6948 h 110
6949 type "rectangle"
6950 fill "#FFFFFF"
6951 fill2 "#FFFFFF"
6952 outline "#000000"
6953 ]
6954 LabelGraphics
6955 [
6956 text "null"
6957 outline "#000000"
6958 fill "#FFFFFF"
6959 fontSize 16
6960 fontName "Monospace"
6961 autoSizePolicy "node_width"
6962 anchor "t"
6963 borderDistance 0.0
6964 ]
6965 LabelGraphics
6966 [
6967 text "
6968 EClass class
6969 EClassifier class
6970 EModelElement class
6971 ENamedElement class
6972 EModelElement class UndefinedPart
6973 ENamedElement class UndefinedPart
6974 "
6975 fontSize 14
6976 fontName "Consolas"
6977 alignment "left"
6978 anchor "tl"
6979 borderDistance 6
6980 ]
6981 ]
6982
6983 node
6984 [
6985 id 12
6986 graphics
6987 [
6988 w 269.5
6989 h 110
6990 type "rectangle"
6991 fill "#FFFFFF"
6992 fill2 "#FFFFFF"
6993 outline "#000000"
6994 ]
6995 LabelGraphics
6996 [
6997 text "null"
6998 outline "#000000"
6999 fill "#FFFFFF"
7000 fontSize 16
7001 fontName "Monospace"
7002 autoSizePolicy "node_width"
7003 anchor "t"
7004 borderDistance 0.0
7005 ]
7006 LabelGraphics
7007 [
7008 text "
7009 EModelElement class
7010 ENamedElement class
7011 EPackage class
7012 EModelElement class UndefinedPart
7013 ENamedElement class UndefinedPart
7014 EPackage class UndefinedPart
7015 "
7016 fontSize 14
7017 fontName "Consolas"
7018 alignment "left"
7019 anchor "tl"
7020 borderDistance 6
7021 ]
7022 ]
7023
7024 node
7025 [
7026 id 13
7027 graphics
7028 [
7029 w 269.5
7030 h 110
7031 type "rectangle"
7032 fill "#FFFFFF"
7033 fill2 "#FFFFFF"
7034 outline "#000000"
7035 ]
7036 LabelGraphics
7037 [
7038 text "null"
7039 outline "#000000"
7040 fill "#FFFFFF"
7041 fontSize 16
7042 fontName "Monospace"
7043 autoSizePolicy "node_width"
7044 anchor "t"
7045 borderDistance 0.0
7046 ]
7047 LabelGraphics
7048 [
7049 text "
7050 EModelElement class
7051 ENamedElement class
7052 EOperation class
7053 ETypedElement class
7054 EModelElement class UndefinedPart
7055 ENamedElement class UndefinedPart
7056 "
7057 fontSize 14
7058 fontName "Consolas"
7059 alignment "left"
7060 anchor "tl"
7061 borderDistance 6
7062 ]
7063 ]
7064
7065 node
7066 [
7067 id 14
7068 graphics
7069 [
7070 w 269.5
7071 h 68
7072 type "rectangle"
7073 fill "#FFFFFF"
7074 fill2 "#FFFFFF"
7075 outline "#000000"
7076 ]
7077 LabelGraphics
7078 [
7079 text "null"
7080 outline "#000000"
7081 fill "#FFFFFF"
7082 fontSize 16
7083 fontName "Monospace"
7084 autoSizePolicy "node_width"
7085 anchor "t"
7086 borderDistance 0.0
7087 ]
7088 LabelGraphics
7089 [
7090 text "
7091 EAnnotation class
7092 EModelElement class
7093 EModelElement class UndefinedPart
7094 "
7095 fontSize 14
7096 fontName "Consolas"
7097 alignment "left"
7098 anchor "tl"
7099 borderDistance 6
7100 ]
7101 ]
7102
7103 node
7104 [
7105 id 15
7106 graphics
7107 [
7108 w 238.70000000000002
7109 h 40
7110 type "rectangle"
7111 fill "#FFFFFF"
7112 fill2 "#FFFFFF"
7113 outline "#000000"
7114 ]
7115 LabelGraphics
7116 [
7117 text "null"
7118 outline "#000000"
7119 fill "#FFFFFF"
7120 fontSize 16
7121 fontName "Monospace"
7122 autoSizePolicy "node_width"
7123 anchor "t"
7124 borderDistance 0.0
7125 ]
7126 LabelGraphics
7127 [
7128 text "
7129 EStringToStringMapEntry class
7130 "
7131 fontSize 14
7132 fontName "Consolas"
7133 alignment "left"
7134 anchor "tl"
7135 borderDistance 6
7136 ]
7137 ]
7138
7139 node
7140 [
7141 id 16
7142 graphics
7143 [
7144 w 112.2
7145 h 26
7146 type "rectangle"
7147 fill "#FFFFFF"
7148 fill2 "#FFFFFF"
7149 outline "#000000"
7150 ]
7151 LabelGraphics
7152 [
7153 text "New Integers"
7154 outline "#000000"
7155 fill "#FFFFFF"
7156 fontSize 16
7157 fontName "Monospace"
7158 autoSizePolicy "node_width"
7159 anchor "t"
7160 borderDistance 0.0
7161 ]
7162 LabelGraphics
7163 [
7164 text "
7165 "
7166 fontSize 14
7167 fontName "Consolas"
7168 alignment "left"
7169 anchor "tl"
7170 borderDistance 6
7171 ]
7172 ]
7173
7174 node
7175 [
7176 id 17
7177 graphics
7178 [
7179 w 85.80000000000001
7180 h 26
7181 type "rectangle"
7182 fill "#FFFFFF"
7183 fill2 "#FFFFFF"
7184 outline "#000000"
7185 ]
7186 LabelGraphics
7187 [
7188 text "New Reals"
7189 outline "#000000"
7190 fill "#FFFFFF"
7191 fontSize 16
7192 fontName "Monospace"
7193 autoSizePolicy "node_width"
7194 anchor "t"
7195 borderDistance 0.0
7196 ]
7197 LabelGraphics
7198 [
7199 text "
7200 "
7201 fontSize 14
7202 fontName "Consolas"
7203 alignment "left"
7204 anchor "tl"
7205 borderDistance 6
7206 ]
7207 ]
7208
7209 node
7210 [
7211 id 18
7212 graphics
7213 [
7214 w 103.4
7215 h 26
7216 type "rectangle"
7217 fill "#FFFFFF"
7218 fill2 "#FFFFFF"
7219 outline "#000000"
7220 ]
7221 LabelGraphics
7222 [
7223 text "New Strings"
7224 outline "#000000"
7225 fill "#FFFFFF"
7226 fontSize 16
7227 fontName "Monospace"
7228 autoSizePolicy "node_width"
7229 anchor "t"
7230 borderDistance 0.0
7231 ]
7232 LabelGraphics
7233 [
7234 text "
7235 "
7236 fontSize 14
7237 fontName "Consolas"
7238 alignment "left"
7239 anchor "tl"
7240 borderDistance 6
7241 ]
7242 ]
7243
7244 node
7245 [
7246 id 19
7247 graphics
7248 [
7249 w 103.4
7250 h 26
7251 type "rectangle"
7252 fill "#FFFFFF"
7253 fill2 "#FFFFFF"
7254 outline "#000000"
7255 ]
7256 LabelGraphics
7257 [
7258 text "New Objects"
7259 outline "#000000"
7260 fill "#FFFFFF"
7261 fontSize 16
7262 fontName "Monospace"
7263 autoSizePolicy "node_width"
7264 anchor "t"
7265 borderDistance 0.0
7266 ]
7267 LabelGraphics
7268 [
7269 text "
7270 "
7271 fontSize 14
7272 fontName "Consolas"
7273 alignment "left"
7274 anchor "tl"
7275 borderDistance 6
7276 ]
7277 ]
7278 edge
7279 [
7280 source 14
7281 target 15
7282 graphics
7283 [
7284 fill "#000000"
7285 width 3
7286 targetArrow "standard"
7287 ]
7288 LabelGraphics
7289 [
7290 text "details reference EAnnotation"
7291 fontSize 14
7292 fontName "Consolas"
7293 configuration "AutoFlippingLabel"
7294 model "six_pos"
7295 position "thead"
7296 ]
7297 ]
7298 edge
7299 [
7300 source 14
7301 target 0
7302 graphics
7303 [
7304 fill "#000000"
7305 targetArrow "standard"
7306 ]
7307 LabelGraphics
7308 [
7309 text "eModelElement reference EAnnotation"
7310 fontSize 14
7311 fontName "Consolas"
7312 configuration "AutoFlippingLabel"
7313 model "six_pos"
7314 position "thead"
7315 ]
7316 ]
7317 edge
7318 [
7319 source 11
7320 target 11
7321 graphics
7322 [
7323 fill "#000000"
7324 targetArrow "standard"
7325 ]
7326 LabelGraphics
7327 [
7328 text "eSuperTypes reference EClass"
7329 fontSize 14
7330 fontName "Consolas"
7331 configuration "AutoFlippingLabel"
7332 model "six_pos"
7333 position "thead"
7334 ]
7335 ]
7336 edge
7337 [
7338 source 11
7339 target 13
7340 graphics
7341 [
7342 fill "#000000"
7343 width 3
7344 targetArrow "standard"
7345 ]
7346 LabelGraphics
7347 [
7348 text "eOperations reference EClass"
7349 fontSize 14
7350 fontName "Consolas"
7351 configuration "AutoFlippingLabel"
7352 model "six_pos"
7353 position "thead"
7354 ]
7355 ]
7356 edge
7357 [
7358 source 11
7359 target 11
7360 graphics
7361 [
7362 fill "#000000"
7363 targetArrow "standard"
7364 ]
7365 LabelGraphics
7366 [
7367 text "eAllSuperTypes reference EClass"
7368 fontSize 14
7369 fontName "Consolas"
7370 configuration "AutoFlippingLabel"
7371 model "six_pos"
7372 position "thead"
7373 ]
7374 ]
7375 edge
7376 [
7377 source 11
7378 target 0
7379 graphics
7380 [
7381 fill "#000000"
7382 targetArrow "standard"
7383 ]
7384 LabelGraphics
7385 [
7386 text "ePackage reference EClassifier"
7387 fontSize 14
7388 fontName "Consolas"
7389 configuration "AutoFlippingLabel"
7390 model "six_pos"
7391 position "thead"
7392 ]
7393 ]
7394 edge
7395 [
7396 source 0
7397 target 14
7398 graphics
7399 [
7400 fill "#000000"
7401 width 3
7402 targetArrow "standard"
7403 ]
7404 LabelGraphics
7405 [
7406 text "eAnnotations reference EModelElement"
7407 fontSize 14
7408 fontName "Consolas"
7409 configuration "AutoFlippingLabel"
7410 model "six_pos"
7411 position "thead"
7412 ]
7413 ]
7414 edge
7415 [
7416 source 13
7417 target 11
7418 graphics
7419 [
7420 fill "#000000"
7421 targetArrow "standard"
7422 ]
7423 LabelGraphics
7424 [
7425 text "eContainingClass reference EOperation"
7426 fontSize 14
7427 fontName "Consolas"
7428 configuration "AutoFlippingLabel"
7429 model "six_pos"
7430 position "thead"
7431 ]
7432 ]
7433 edge
7434 [
7435 source 0
7436 target 11
7437 graphics
7438 [
7439 fill "#000000"
7440 width 3
7441 targetArrow "standard"
7442 ]
7443 LabelGraphics
7444 [
7445 text "eClassifiers reference EPackage"
7446 fontSize 14
7447 fontName "Consolas"
7448 configuration "AutoFlippingLabel"
7449 model "six_pos"
7450 position "thead"
7451 ]
7452 ]
7453 edge
7454 [
7455 source 0
7456 target 12
7457 graphics
7458 [
7459 fill "#000000"
7460 width 3
7461 targetArrow "standard"
7462 ]
7463 LabelGraphics
7464 [
7465 text "eSubpackages reference EPackage"
7466 fontSize 14
7467 fontName "Consolas"
7468 configuration "AutoFlippingLabel"
7469 model "six_pos"
7470 position "thead"
7471 ]
7472 ]
7473 edge
7474 [
7475 source 12
7476 target 0
7477 graphics
7478 [
7479 fill "#000000"
7480 targetArrow "standard"
7481 ]
7482 LabelGraphics
7483 [
7484 text "eSuperPackage reference EPackage"
7485 fontSize 14
7486 fontName "Consolas"
7487 configuration "AutoFlippingLabel"
7488 model "six_pos"
7489 position "thead"
7490 ]
7491 ]
7492 edge
7493 [
7494 source 11
7495 target 8
7496 graphics
7497 [
7498 fill "#000000"
7499 targetArrow "standard"
7500 ]
7501 LabelGraphics
7502 [
7503 text "instanceClassName attribute EClassifier"
7504 fontSize 14
7505 fontName "Consolas"
7506 configuration "AutoFlippingLabel"
7507 model "six_pos"
7508 position "thead"
7509 ]
7510 ]
7511 edge
7512 [
7513 source 11
7514 target 9
7515 graphics
7516 [
7517 fill "#000000"
7518 targetArrow "standard"
7519 ]
7520 LabelGraphics
7521 [
7522 text "instanceTypeName attribute EClassifier"
7523 fontSize 14
7524 fontName "Consolas"
7525 configuration "AutoFlippingLabel"
7526 model "six_pos"
7527 position "thead"
7528 ]
7529 ]
7530 edge
7531 [
7532 source 0
7533 target 10
7534 graphics
7535 [
7536 fill "#000000"
7537 targetArrow "standard"
7538 ]
7539 LabelGraphics
7540 [
7541 text "name attribute ENamedElement"
7542 fontSize 14
7543 fontName "Consolas"
7544 configuration "AutoFlippingLabel"
7545 model "six_pos"
7546 position "thead"
7547 ]
7548 ]
7549 edge
7550 [
7551 source 12
7552 target 7
7553 graphics
7554 [
7555 fill "#000000"
7556 targetArrow "standard"
7557 ]
7558 LabelGraphics
7559 [
7560 text "name attribute ENamedElement"
7561 fontSize 14
7562 fontName "Consolas"
7563 configuration "AutoFlippingLabel"
7564 model "six_pos"
7565 position "thead"
7566 ]
7567 ]
7568 edge
7569 [
7570 source 13
7571 target 9
7572 graphics
7573 [
7574 fill "#000000"
7575 targetArrow "standard"
7576 ]
7577 LabelGraphics
7578 [
7579 text "name attribute ENamedElement"
7580 fontSize 14
7581 fontName "Consolas"
7582 configuration "AutoFlippingLabel"
7583 model "six_pos"
7584 position "thead"
7585 ]
7586 ]
7587 edge
7588 [
7589 source 0
7590 target 9
7591 graphics
7592 [
7593 fill "#000000"
7594 targetArrow "standard"
7595 ]
7596 LabelGraphics
7597 [
7598 text "nsURI attribute EPackage"
7599 fontSize 14
7600 fontName "Consolas"
7601 configuration "AutoFlippingLabel"
7602 model "six_pos"
7603 position "thead"
7604 ]
7605 ]
7606 edge
7607 [
7608 source 12
7609 target 8
7610 graphics
7611 [
7612 fill "#000000"
7613 targetArrow "standard"
7614 ]
7615 LabelGraphics
7616 [
7617 text "nsURI attribute EPackage"
7618 fontSize 14
7619 fontName "Consolas"
7620 configuration "AutoFlippingLabel"
7621 model "six_pos"
7622 position "thead"
7623 ]
7624 ]
7625 edge
7626 [
7627 source 0
7628 target 8
7629 graphics
7630 [
7631 fill "#000000"
7632 targetArrow "standard"
7633 ]
7634 LabelGraphics
7635 [
7636 text "nsPrefix attribute EPackage"
7637 fontSize 14
7638 fontName "Consolas"
7639 configuration "AutoFlippingLabel"
7640 model "six_pos"
7641 position "thead"
7642 ]
7643 ]
7644 edge
7645 [
7646 source 13
7647 target 1
7648 graphics
7649 [
7650 fill "#000000"
7651 targetArrow "standard"
7652 ]
7653 LabelGraphics
7654 [
7655 text "unique attribute ETypedElement"
7656 fontSize 14
7657 fontName "Consolas"
7658 configuration "AutoFlippingLabel"
7659 model "six_pos"
7660 position "thead"
7661 ]
7662 ]
7663 edge
7664 [
7665 source 13
7666 target 4
7667 graphics
7668 [
7669 fill "#000000"
7670 targetArrow "standard"
7671 ]
7672 LabelGraphics
7673 [
7674 text "upperBound attribute ETypedElement"
7675 fontSize 14
7676 fontName "Consolas"
7677 configuration "AutoFlippingLabel"
7678 model "six_pos"
7679 position "thead"
7680 ]
7681 ]
7682]
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
index afaa28c2..bfe18c4e 100644
--- 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
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
index ef8e8e65..45634c72 100644
--- 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
@@ -1,9 +1,10 @@
1<?xml version="1.0" encoding="ASCII"?> 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"> 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"/> 3 <eAnnotations>
4 <eClassifiers xsi:type="ecore:EEnum"/> 4 <details/>
5 <eClassifiers xsi:type="ecore:EEnum" name="packageName" instanceClassName="nsPrefix"/> 5 </eAnnotations>
6 <eSubpackages name="A" nsURI="nsPrefix" nsPrefix="A"> 6 <eClassifiers xsi:type="ecore:EClass" instanceTypeName="nsUri" eSuperTypes="//%">
7 <eClassifiers xsi:type="ecore:EEnum"/> 7 <eOperations name="nsUri" upperBound="0"/>
8 </eSubpackages> 8 </eClassifiers>
9 <eSubpackages name="B" nsURI="nsPrefix"/>
9</ecore:EPackage> 10</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
index d61b14d0..a44b2785 100644
--- 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
@@ -1182,3 +1182,1139 @@ graph
1182 ] 1182 ]
1183 ] 1183 ]
1184] 1184]
1185graph
1186[
1187 node
1188 [
1189 id 0
1190 graphics
1191 [
1192 w 254.10000000000002
1193 h 110
1194 type "rectangle"
1195 fill "#FFFFFF"
1196 fill2 "#FFFFFF"
1197 outline "#000000"
1198 ]
1199 LabelGraphics
1200 [
1201 text "o 1"
1202 outline "#000000"
1203 fill "#FFFFFF"
1204 fontSize 16
1205 fontName "Monospace"
1206 autoSizePolicy "node_width"
1207 anchor "t"
1208 borderDistance 0.0
1209 ]
1210 LabelGraphics
1211 [
1212 text "
1213 EModelElement class DefinedPart
1214 ENamedElement class DefinedPart
1215 EPackage class DefinedPart
1216 EModelElement class
1217 ENamedElement class
1218 EPackage class
1219 "
1220 fontSize 14
1221 fontName "Consolas"
1222 alignment "left"
1223 anchor "tl"
1224 borderDistance 6
1225 ]
1226 ]
1227
1228 node
1229 [
1230 id 1
1231 graphics
1232 [
1233 w 41.800000000000004
1234 h 26
1235 type "rectangle"
1236 fill "#FFFFFF"
1237 fill2 "#FFFFFF"
1238 outline "#000000"
1239 ]
1240 LabelGraphics
1241 [
1242 text "true"
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 2
1266 graphics
1267 [
1268 w 50.6
1269 h 26
1270 type "rectangle"
1271 fill "#FFFFFF"
1272 fill2 "#FFFFFF"
1273 outline "#000000"
1274 ]
1275 LabelGraphics
1276 [
1277 text "false"
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 3
1301 graphics
1302 [
1303 w 24.200000000000003
1304 h 26
1305 type "rectangle"
1306 fill "#FFFFFF"
1307 fill2 "#FFFFFF"
1308 outline "#000000"
1309 ]
1310 LabelGraphics
1311 [
1312 text "-1"
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 "
1325 fontSize 14
1326 fontName "Consolas"
1327 alignment "left"
1328 anchor "tl"
1329 borderDistance 6
1330 ]
1331 ]
1332
1333 node
1334 [
1335 id 4
1336 graphics
1337 [
1338 w 15.400000000000002
1339 h 26
1340 type "rectangle"
1341 fill "#FFFFFF"
1342 fill2 "#FFFFFF"
1343 outline "#000000"
1344 ]
1345 LabelGraphics
1346 [
1347 text "0"
1348 outline "#000000"
1349 fill "#FFFFFF"
1350 fontSize 16
1351 fontName "Monospace"
1352 autoSizePolicy "node_width"
1353 anchor "t"
1354 borderDistance 0.0
1355 ]
1356 LabelGraphics
1357 [
1358 text "
1359 "
1360 fontSize 14
1361 fontName "Consolas"
1362 alignment "left"
1363 anchor "tl"
1364 borderDistance 6
1365 ]
1366 ]
1367
1368 node
1369 [
1370 id 5
1371 graphics
1372 [
1373 w 15.400000000000002
1374 h 26
1375 type "rectangle"
1376 fill "#FFFFFF"
1377 fill2 "#FFFFFF"
1378 outline "#000000"
1379 ]
1380 LabelGraphics
1381 [
1382 text "1"
1383 outline "#000000"
1384 fill "#FFFFFF"
1385 fontSize 16
1386 fontName "Monospace"
1387 autoSizePolicy "node_width"
1388 anchor "t"
1389 borderDistance 0.0
1390 ]
1391 LabelGraphics
1392 [
1393 text "
1394 "
1395 fontSize 14
1396 fontName "Consolas"
1397 alignment "left"
1398 anchor "tl"
1399 borderDistance 6
1400 ]
1401 ]
1402
1403 node
1404 [
1405 id 6
1406 graphics
1407 [
1408 w 33.0
1409 h 26
1410 type "rectangle"
1411 fill "#FFFFFF"
1412 fill2 "#FFFFFF"
1413 outline "#000000"
1414 ]
1415 LabelGraphics
1416 [
1417 text ""A""
1418 outline "#000000"
1419 fill "#FFFFFF"
1420 fontSize 16
1421 fontName "Monospace"
1422 autoSizePolicy "node_width"
1423 anchor "t"
1424 borderDistance 0.0
1425 ]
1426 LabelGraphics
1427 [
1428 text "
1429 "
1430 fontSize 14
1431 fontName "Consolas"
1432 alignment "left"
1433 anchor "tl"
1434 borderDistance 6
1435 ]
1436 ]
1437
1438 node
1439 [
1440 id 7
1441 graphics
1442 [
1443 w 33.0
1444 h 26
1445 type "rectangle"
1446 fill "#FFFFFF"
1447 fill2 "#FFFFFF"
1448 outline "#000000"
1449 ]
1450 LabelGraphics
1451 [
1452 text ""B""
1453 outline "#000000"
1454 fill "#FFFFFF"
1455 fontSize 16
1456 fontName "Monospace"
1457 autoSizePolicy "node_width"
1458 anchor "t"
1459 borderDistance 0.0
1460 ]
1461 LabelGraphics
1462 [
1463 text "
1464 "
1465 fontSize 14
1466 fontName "Consolas"
1467 alignment "left"
1468 anchor "tl"
1469 borderDistance 6
1470 ]
1471 ]
1472
1473 node
1474 [
1475 id 8
1476 graphics
1477 [
1478 w 94.60000000000001
1479 h 26
1480 type "rectangle"
1481 fill "#FFFFFF"
1482 fill2 "#FFFFFF"
1483 outline "#000000"
1484 ]
1485 LabelGraphics
1486 [
1487 text ""nsPrefix""
1488 outline "#000000"
1489 fill "#FFFFFF"
1490 fontSize 16
1491 fontName "Monospace"
1492 autoSizePolicy "node_width"
1493 anchor "t"
1494 borderDistance 0.0
1495 ]
1496 LabelGraphics
1497 [
1498 text "
1499 "
1500 fontSize 14
1501 fontName "Consolas"
1502 alignment "left"
1503 anchor "tl"
1504 borderDistance 6
1505 ]
1506 ]
1507
1508 node
1509 [
1510 id 9
1511 graphics
1512 [
1513 w 68.2
1514 h 26
1515 type "rectangle"
1516 fill "#FFFFFF"
1517 fill2 "#FFFFFF"
1518 outline "#000000"
1519 ]
1520 LabelGraphics
1521 [
1522 text ""nsUri""
1523 outline "#000000"
1524 fill "#FFFFFF"
1525 fontSize 16
1526 fontName "Monospace"
1527 autoSizePolicy "node_width"
1528 anchor "t"
1529 borderDistance 0.0
1530 ]
1531 LabelGraphics
1532 [
1533 text "
1534 "
1535 fontSize 14
1536 fontName "Consolas"
1537 alignment "left"
1538 anchor "tl"
1539 borderDistance 6
1540 ]
1541 ]
1542
1543 node
1544 [
1545 id 10
1546 graphics
1547 [
1548 w 121.00000000000001
1549 h 26
1550 type "rectangle"
1551 fill "#FFFFFF"
1552 fill2 "#FFFFFF"
1553 outline "#000000"
1554 ]
1555 LabelGraphics
1556 [
1557 text ""packageName""
1558 outline "#000000"
1559 fill "#FFFFFF"
1560 fontSize 16
1561 fontName "Monospace"
1562 autoSizePolicy "node_width"
1563 anchor "t"
1564 borderDistance 0.0
1565 ]
1566 LabelGraphics
1567 [
1568 text "
1569 "
1570 fontSize 14
1571 fontName "Consolas"
1572 alignment "left"
1573 anchor "tl"
1574 borderDistance 6
1575 ]
1576 ]
1577
1578 node
1579 [
1580 id 11
1581 graphics
1582 [
1583 w 269.5
1584 h 110
1585 type "rectangle"
1586 fill "#FFFFFF"
1587 fill2 "#FFFFFF"
1588 outline "#000000"
1589 ]
1590 LabelGraphics
1591 [
1592 text "null"
1593 outline "#000000"
1594 fill "#FFFFFF"
1595 fontSize 16
1596 fontName "Monospace"
1597 autoSizePolicy "node_width"
1598 anchor "t"
1599 borderDistance 0.0
1600 ]
1601 LabelGraphics
1602 [
1603 text "
1604 EClassifier class
1605 EDataType class
1606 EModelElement class
1607 ENamedElement class
1608 EModelElement class UndefinedPart
1609 ENamedElement class UndefinedPart
1610 "
1611 fontSize 14
1612 fontName "Consolas"
1613 alignment "left"
1614 anchor "tl"
1615 borderDistance 6
1616 ]
1617 ]
1618
1619 node
1620 [
1621 id 12
1622 graphics
1623 [
1624 w 269.5
1625 h 68
1626 type "rectangle"
1627 fill "#FFFFFF"
1628 fill2 "#FFFFFF"
1629 outline "#000000"
1630 ]
1631 LabelGraphics
1632 [
1633 text "null"
1634 outline "#000000"
1635 fill "#FFFFFF"
1636 fontSize 16
1637 fontName "Monospace"
1638 autoSizePolicy "node_width"
1639 anchor "t"
1640 borderDistance 0.0
1641 ]
1642 LabelGraphics
1643 [
1644 text "
1645 EAnnotation class
1646 EModelElement class
1647 EModelElement class UndefinedPart
1648 "
1649 fontSize 14
1650 fontName "Consolas"
1651 alignment "left"
1652 anchor "tl"
1653 borderDistance 6
1654 ]
1655 ]
1656
1657 node
1658 [
1659 id 13
1660 graphics
1661 [
1662 w 269.5
1663 h 110
1664 type "rectangle"
1665 fill "#FFFFFF"
1666 fill2 "#FFFFFF"
1667 outline "#000000"
1668 ]
1669 LabelGraphics
1670 [
1671 text "null"
1672 outline "#000000"
1673 fill "#FFFFFF"
1674 fontSize 16
1675 fontName "Monospace"
1676 autoSizePolicy "node_width"
1677 anchor "t"
1678 borderDistance 0.0
1679 ]
1680 LabelGraphics
1681 [
1682 text "
1683 EClass class
1684 EClassifier class
1685 EModelElement class
1686 ENamedElement class
1687 EModelElement class UndefinedPart
1688 ENamedElement class UndefinedPart
1689 "
1690 fontSize 14
1691 fontName "Consolas"
1692 alignment "left"
1693 anchor "tl"
1694 borderDistance 6
1695 ]
1696 ]
1697
1698 node
1699 [
1700 id 14
1701 graphics
1702 [
1703 w 269.5
1704 h 110
1705 type "rectangle"
1706 fill "#FFFFFF"
1707 fill2 "#FFFFFF"
1708 outline "#000000"
1709 ]
1710 LabelGraphics
1711 [
1712 text "null"
1713 outline "#000000"
1714 fill "#FFFFFF"
1715 fontSize 16
1716 fontName "Monospace"
1717 autoSizePolicy "node_width"
1718 anchor "t"
1719 borderDistance 0.0
1720 ]
1721 LabelGraphics
1722 [
1723 text "
1724 EClassifier class
1725 EDataType class
1726 EModelElement class
1727 ENamedElement class
1728 EModelElement class UndefinedPart
1729 ENamedElement class UndefinedPart
1730 "
1731 fontSize 14
1732 fontName "Consolas"
1733 alignment "left"
1734 anchor "tl"
1735 borderDistance 6
1736 ]
1737 ]
1738
1739 node
1740 [
1741 id 15
1742 graphics
1743 [
1744 w 269.5
1745 h 68
1746 type "rectangle"
1747 fill "#FFFFFF"
1748 fill2 "#FFFFFF"
1749 outline "#000000"
1750 ]
1751 LabelGraphics
1752 [
1753 text "null"
1754 outline "#000000"
1755 fill "#FFFFFF"
1756 fontSize 16
1757 fontName "Monospace"
1758 autoSizePolicy "node_width"
1759 anchor "t"
1760 borderDistance 0.0
1761 ]
1762 LabelGraphics
1763 [
1764 text "
1765 EAnnotation class
1766 EModelElement class
1767 EModelElement class UndefinedPart
1768 "
1769 fontSize 14
1770 fontName "Consolas"
1771 alignment "left"
1772 anchor "tl"
1773 borderDistance 6
1774 ]
1775 ]
1776
1777 node
1778 [
1779 id 16
1780 graphics
1781 [
1782 w 112.2
1783 h 26
1784 type "rectangle"
1785 fill "#FFFFFF"
1786 fill2 "#FFFFFF"
1787 outline "#000000"
1788 ]
1789 LabelGraphics
1790 [
1791 text "New Integers"
1792 outline "#000000"
1793 fill "#FFFFFF"
1794 fontSize 16
1795 fontName "Monospace"
1796 autoSizePolicy "node_width"
1797 anchor "t"
1798 borderDistance 0.0
1799 ]
1800 LabelGraphics
1801 [
1802 text "
1803 "
1804 fontSize 14
1805 fontName "Consolas"
1806 alignment "left"
1807 anchor "tl"
1808 borderDistance 6
1809 ]
1810 ]
1811
1812 node
1813 [
1814 id 17
1815 graphics
1816 [
1817 w 85.80000000000001
1818 h 26
1819 type "rectangle"
1820 fill "#FFFFFF"
1821 fill2 "#FFFFFF"
1822 outline "#000000"
1823 ]
1824 LabelGraphics
1825 [
1826 text "New Reals"
1827 outline "#000000"
1828 fill "#FFFFFF"
1829 fontSize 16
1830 fontName "Monospace"
1831 autoSizePolicy "node_width"
1832 anchor "t"
1833 borderDistance 0.0
1834 ]
1835 LabelGraphics
1836 [
1837 text "
1838 "
1839 fontSize 14
1840 fontName "Consolas"
1841 alignment "left"
1842 anchor "tl"
1843 borderDistance 6
1844 ]
1845 ]
1846
1847 node
1848 [
1849 id 18
1850 graphics
1851 [
1852 w 103.4
1853 h 26
1854 type "rectangle"
1855 fill "#FFFFFF"
1856 fill2 "#FFFFFF"
1857 outline "#000000"
1858 ]
1859 LabelGraphics
1860 [
1861 text "New Strings"
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 "
1874 fontSize 14
1875 fontName "Consolas"
1876 alignment "left"
1877 anchor "tl"
1878 borderDistance 6
1879 ]
1880 ]
1881
1882 node
1883 [
1884 id 19
1885 graphics
1886 [
1887 w 103.4
1888 h 26
1889 type "rectangle"
1890 fill "#FFFFFF"
1891 fill2 "#FFFFFF"
1892 outline "#000000"
1893 ]
1894 LabelGraphics
1895 [
1896 text "New Objects"
1897 outline "#000000"
1898 fill "#FFFFFF"
1899 fontSize 16
1900 fontName "Monospace"
1901 autoSizePolicy "node_width"
1902 anchor "t"
1903 borderDistance 0.0
1904 ]
1905 LabelGraphics
1906 [
1907 text "
1908 "
1909 fontSize 14
1910 fontName "Consolas"
1911 alignment "left"
1912 anchor "tl"
1913 borderDistance 6
1914 ]
1915 ]
1916 edge
1917 [
1918 source 12
1919 target 0
1920 graphics
1921 [
1922 fill "#000000"
1923 targetArrow "standard"
1924 ]
1925 LabelGraphics
1926 [
1927 text "eModelElement reference EAnnotation"
1928 fontSize 14
1929 fontName "Consolas"
1930 configuration "AutoFlippingLabel"
1931 model "six_pos"
1932 position "thead"
1933 ]
1934 ]
1935 edge
1936 [
1937 source 15
1938 target 0
1939 graphics
1940 [
1941 fill "#000000"
1942 targetArrow "standard"
1943 ]
1944 LabelGraphics
1945 [
1946 text "eModelElement reference EAnnotation"
1947 fontSize 14
1948 fontName "Consolas"
1949 configuration "AutoFlippingLabel"
1950 model "six_pos"
1951 position "thead"
1952 ]
1953 ]
1954 edge
1955 [
1956 source 11
1957 target 0
1958 graphics
1959 [
1960 fill "#000000"
1961 targetArrow "standard"
1962 ]
1963 LabelGraphics
1964 [
1965 text "ePackage reference EClassifier"
1966 fontSize 14
1967 fontName "Consolas"
1968 configuration "AutoFlippingLabel"
1969 model "six_pos"
1970 position "thead"
1971 ]
1972 ]
1973 edge
1974 [
1975 source 13
1976 target 0
1977 graphics
1978 [
1979 fill "#000000"
1980 targetArrow "standard"
1981 ]
1982 LabelGraphics
1983 [
1984 text "ePackage reference EClassifier"
1985 fontSize 14
1986 fontName "Consolas"
1987 configuration "AutoFlippingLabel"
1988 model "six_pos"
1989 position "thead"
1990 ]
1991 ]
1992 edge
1993 [
1994 source 14
1995 target 0
1996 graphics
1997 [
1998 fill "#000000"
1999 targetArrow "standard"
2000 ]
2001 LabelGraphics
2002 [
2003 text "ePackage reference EClassifier"
2004 fontSize 14
2005 fontName "Consolas"
2006 configuration "AutoFlippingLabel"
2007 model "six_pos"
2008 position "thead"
2009 ]
2010 ]
2011 edge
2012 [
2013 source 0
2014 target 12
2015 graphics
2016 [
2017 fill "#000000"
2018 width 3
2019 targetArrow "standard"
2020 ]
2021 LabelGraphics
2022 [
2023 text "eAnnotations reference EModelElement"
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 15
2035 graphics
2036 [
2037 fill "#000000"
2038 width 3
2039 targetArrow "standard"
2040 ]
2041 LabelGraphics
2042 [
2043 text "eAnnotations reference EModelElement"
2044 fontSize 14
2045 fontName "Consolas"
2046 configuration "AutoFlippingLabel"
2047 model "six_pos"
2048 position "thead"
2049 ]
2050 ]
2051 edge
2052 [
2053 source 0
2054 target 11
2055 graphics
2056 [
2057 fill "#000000"
2058 width 3
2059 targetArrow "standard"
2060 ]
2061 LabelGraphics
2062 [
2063 text "eClassifiers reference EPackage"
2064 fontSize 14
2065 fontName "Consolas"
2066 configuration "AutoFlippingLabel"
2067 model "six_pos"
2068 position "thead"
2069 ]
2070 ]
2071 edge
2072 [
2073 source 0
2074 target 13
2075 graphics
2076 [
2077 fill "#000000"
2078 width 3
2079 targetArrow "standard"
2080 ]
2081 LabelGraphics
2082 [
2083 text "eClassifiers reference EPackage"
2084 fontSize 14
2085 fontName "Consolas"
2086 configuration "AutoFlippingLabel"
2087 model "six_pos"
2088 position "thead"
2089 ]
2090 ]
2091 edge
2092 [
2093 source 0
2094 target 14
2095 graphics
2096 [
2097 fill "#000000"
2098 width 3
2099 targetArrow "standard"
2100 ]
2101 LabelGraphics
2102 [
2103 text "eClassifiers reference EPackage"
2104 fontSize 14
2105 fontName "Consolas"
2106 configuration "AutoFlippingLabel"
2107 model "six_pos"
2108 position "thead"
2109 ]
2110 ]
2111 edge
2112 [
2113 source 12
2114 target 7
2115 graphics
2116 [
2117 fill "#000000"
2118 targetArrow "standard"
2119 ]
2120 LabelGraphics
2121 [
2122 text "source attribute EAnnotation"
2123 fontSize 14
2124 fontName "Consolas"
2125 configuration "AutoFlippingLabel"
2126 model "six_pos"
2127 position "thead"
2128 ]
2129 ]
2130 edge
2131 [
2132 source 11
2133 target 8
2134 graphics
2135 [
2136 fill "#000000"
2137 targetArrow "standard"
2138 ]
2139 LabelGraphics
2140 [
2141 text "instanceClassName attribute EClassifier"
2142 fontSize 14
2143 fontName "Consolas"
2144 configuration "AutoFlippingLabel"
2145 model "six_pos"
2146 position "thead"
2147 ]
2148 ]
2149 edge
2150 [
2151 source 14
2152 target 10
2153 graphics
2154 [
2155 fill "#000000"
2156 targetArrow "standard"
2157 ]
2158 LabelGraphics
2159 [
2160 text "instanceClassName attribute EClassifier"
2161 fontSize 14
2162 fontName "Consolas"
2163 configuration "AutoFlippingLabel"
2164 model "six_pos"
2165 position "thead"
2166 ]
2167 ]
2168 edge
2169 [
2170 source 11
2171 target 9
2172 graphics
2173 [
2174 fill "#000000"
2175 targetArrow "standard"
2176 ]
2177 LabelGraphics
2178 [
2179 text "instanceTypeName attribute EClassifier"
2180 fontSize 14
2181 fontName "Consolas"
2182 configuration "AutoFlippingLabel"
2183 model "six_pos"
2184 position "thead"
2185 ]
2186 ]
2187 edge
2188 [
2189 source 11
2190 target 2
2191 graphics
2192 [
2193 fill "#000000"
2194 targetArrow "standard"
2195 ]
2196 LabelGraphics
2197 [
2198 text "serializable attribute EDataType"
2199 fontSize 14
2200 fontName "Consolas"
2201 configuration "AutoFlippingLabel"
2202 model "six_pos"
2203 position "thead"
2204 ]
2205 ]
2206 edge
2207 [
2208 source 0
2209 target 10
2210 graphics
2211 [
2212 fill "#000000"
2213 targetArrow "standard"
2214 ]
2215 LabelGraphics
2216 [
2217 text "name attribute ENamedElement"
2218 fontSize 14
2219 fontName "Consolas"
2220 configuration "AutoFlippingLabel"
2221 model "six_pos"
2222 position "thead"
2223 ]
2224 ]
2225 edge
2226 [
2227 source 11
2228 target 8
2229 graphics
2230 [
2231 fill "#000000"
2232 targetArrow "standard"
2233 ]
2234 LabelGraphics
2235 [
2236 text "name attribute ENamedElement"
2237 fontSize 14
2238 fontName "Consolas"
2239 configuration "AutoFlippingLabel"
2240 model "six_pos"
2241 position "thead"
2242 ]
2243 ]
2244 edge
2245 [
2246 source 13
2247 target 9
2248 graphics
2249 [
2250 fill "#000000"
2251 targetArrow "standard"
2252 ]
2253 LabelGraphics
2254 [
2255 text "name attribute ENamedElement"
2256 fontSize 14
2257 fontName "Consolas"
2258 configuration "AutoFlippingLabel"
2259 model "six_pos"
2260 position "thead"
2261 ]
2262 ]
2263 edge
2264 [
2265 source 14
2266 target 8
2267 graphics
2268 [
2269 fill "#000000"
2270 targetArrow "standard"
2271 ]
2272 LabelGraphics
2273 [
2274 text "name attribute ENamedElement"
2275 fontSize 14
2276 fontName "Consolas"
2277 configuration "AutoFlippingLabel"
2278 model "six_pos"
2279 position "thead"
2280 ]
2281 ]
2282 edge
2283 [
2284 source 0
2285 target 9
2286 graphics
2287 [
2288 fill "#000000"
2289 targetArrow "standard"
2290 ]
2291 LabelGraphics
2292 [
2293 text "nsURI attribute EPackage"
2294 fontSize 14
2295 fontName "Consolas"
2296 configuration "AutoFlippingLabel"
2297 model "six_pos"
2298 position "thead"
2299 ]
2300 ]
2301 edge
2302 [
2303 source 0
2304 target 8
2305 graphics
2306 [
2307 fill "#000000"
2308 targetArrow "standard"
2309 ]
2310 LabelGraphics
2311 [
2312 text "nsPrefix attribute EPackage"
2313 fontSize 14
2314 fontName "Consolas"
2315 configuration "AutoFlippingLabel"
2316 model "six_pos"
2317 position "thead"
2318 ]
2319 ]
2320]
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
index 72ccb4b6..a47da297 100644
--- 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
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
index 1a10e5b6..8bff1dc6 100644
--- 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
@@ -1,9 +1,8 @@
1<?xml version="1.0" encoding="ASCII"?> 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"> 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"/> 3 <eAnnotations/>
4 <eClassifiers xsi:type="ecore:EEnum" name="packageName"/> 4 <eAnnotations source="B"/>
5 <eClassifiers xsi:type="ecore:EEnum" name="packageName" instanceClassName="nsPrefix"/> 5 <eClassifiers xsi:type="ecore:EDataType" name="nsPrefix" instanceTypeName="nsUri" serializable="false"/>
6 <eSubpackages name="A" nsURI="nsPrefix" nsPrefix="A"> 6 <eClassifiers xsi:type="ecore:EDataType" name="nsPrefix" instanceClassName="packageName"/>
7 <eClassifiers xsi:type="ecore:EEnum"/> 7 <eClassifiers xsi:type="ecore:EClass" name="nsUri"/>
8 </eSubpackages>
9</ecore:EPackage> 8</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
index f071f63e..e5647b66 100644
--- 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
@@ -1201,3 +1201,1158 @@ graph
1201 ] 1201 ]
1202 ] 1202 ]
1203] 1203]
1204graph
1205[
1206 node
1207 [
1208 id 0
1209 graphics
1210 [
1211 w 254.10000000000002
1212 h 110
1213 type "rectangle"
1214 fill "#FFFFFF"
1215 fill2 "#FFFFFF"
1216 outline "#000000"
1217 ]
1218 LabelGraphics
1219 [
1220 text "o 1"
1221 outline "#000000"
1222 fill "#FFFFFF"
1223 fontSize 16
1224 fontName "Monospace"
1225 autoSizePolicy "node_width"
1226 anchor "t"
1227 borderDistance 0.0
1228 ]
1229 LabelGraphics
1230 [
1231 text "
1232 EModelElement class DefinedPart
1233 ENamedElement class DefinedPart
1234 EPackage class DefinedPart
1235 EModelElement class
1236 ENamedElement class
1237 EPackage class
1238 "
1239 fontSize 14
1240 fontName "Consolas"
1241 alignment "left"
1242 anchor "tl"
1243 borderDistance 6
1244 ]
1245 ]
1246
1247 node
1248 [
1249 id 1
1250 graphics
1251 [
1252 w 41.800000000000004
1253 h 26
1254 type "rectangle"
1255 fill "#FFFFFF"
1256 fill2 "#FFFFFF"
1257 outline "#000000"
1258 ]
1259 LabelGraphics
1260 [
1261 text "true"
1262 outline "#000000"
1263 fill "#FFFFFF"
1264 fontSize 16
1265 fontName "Monospace"
1266 autoSizePolicy "node_width"
1267 anchor "t"
1268 borderDistance 0.0
1269 ]
1270 LabelGraphics
1271 [
1272 text "
1273 "
1274 fontSize 14
1275 fontName "Consolas"
1276 alignment "left"
1277 anchor "tl"
1278 borderDistance 6
1279 ]
1280 ]
1281
1282 node
1283 [
1284 id 2
1285 graphics
1286 [
1287 w 50.6
1288 h 26
1289 type "rectangle"
1290 fill "#FFFFFF"
1291 fill2 "#FFFFFF"
1292 outline "#000000"
1293 ]
1294 LabelGraphics
1295 [
1296 text "false"
1297 outline "#000000"
1298 fill "#FFFFFF"
1299 fontSize 16
1300 fontName "Monospace"
1301 autoSizePolicy "node_width"
1302 anchor "t"
1303 borderDistance 0.0
1304 ]
1305 LabelGraphics
1306 [
1307 text "
1308 "
1309 fontSize 14
1310 fontName "Consolas"
1311 alignment "left"
1312 anchor "tl"
1313 borderDistance 6
1314 ]
1315 ]
1316
1317 node
1318 [
1319 id 3
1320 graphics
1321 [
1322 w 24.200000000000003
1323 h 26
1324 type "rectangle"
1325 fill "#FFFFFF"
1326 fill2 "#FFFFFF"
1327 outline "#000000"
1328 ]
1329 LabelGraphics
1330 [
1331 text "-1"
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 "
1344 fontSize 14
1345 fontName "Consolas"
1346 alignment "left"
1347 anchor "tl"
1348 borderDistance 6
1349 ]
1350 ]
1351
1352 node
1353 [
1354 id 4
1355 graphics
1356 [
1357 w 15.400000000000002
1358 h 26
1359 type "rectangle"
1360 fill "#FFFFFF"
1361 fill2 "#FFFFFF"
1362 outline "#000000"
1363 ]
1364 LabelGraphics
1365 [
1366 text "0"
1367 outline "#000000"
1368 fill "#FFFFFF"
1369 fontSize 16
1370 fontName "Monospace"
1371 autoSizePolicy "node_width"
1372 anchor "t"
1373 borderDistance 0.0
1374 ]
1375 LabelGraphics
1376 [
1377 text "
1378 "
1379 fontSize 14
1380 fontName "Consolas"
1381 alignment "left"
1382 anchor "tl"
1383 borderDistance 6
1384 ]
1385 ]
1386
1387 node
1388 [
1389 id 5
1390 graphics
1391 [
1392 w 15.400000000000002
1393 h 26
1394 type "rectangle"
1395 fill "#FFFFFF"
1396 fill2 "#FFFFFF"
1397 outline "#000000"
1398 ]
1399 LabelGraphics
1400 [
1401 text "1"
1402 outline "#000000"
1403 fill "#FFFFFF"
1404 fontSize 16
1405 fontName "Monospace"
1406 autoSizePolicy "node_width"
1407 anchor "t"
1408 borderDistance 0.0
1409 ]
1410 LabelGraphics
1411 [
1412 text "
1413 "
1414 fontSize 14
1415 fontName "Consolas"
1416 alignment "left"
1417 anchor "tl"
1418 borderDistance 6
1419 ]
1420 ]
1421
1422 node
1423 [
1424 id 6
1425 graphics
1426 [
1427 w 33.0
1428 h 26
1429 type "rectangle"
1430 fill "#FFFFFF"
1431 fill2 "#FFFFFF"
1432 outline "#000000"
1433 ]
1434 LabelGraphics
1435 [
1436 text ""A""
1437 outline "#000000"
1438 fill "#FFFFFF"
1439 fontSize 16
1440 fontName "Monospace"
1441 autoSizePolicy "node_width"
1442 anchor "t"
1443 borderDistance 0.0
1444 ]
1445 LabelGraphics
1446 [
1447 text "
1448 "
1449 fontSize 14
1450 fontName "Consolas"
1451 alignment "left"
1452 anchor "tl"
1453 borderDistance 6
1454 ]
1455 ]
1456
1457 node
1458 [
1459 id 7
1460 graphics
1461 [
1462 w 33.0
1463 h 26
1464 type "rectangle"
1465 fill "#FFFFFF"
1466 fill2 "#FFFFFF"
1467 outline "#000000"
1468 ]
1469 LabelGraphics
1470 [
1471 text ""B""
1472 outline "#000000"
1473 fill "#FFFFFF"
1474 fontSize 16
1475 fontName "Monospace"
1476 autoSizePolicy "node_width"
1477 anchor "t"
1478 borderDistance 0.0
1479 ]
1480 LabelGraphics
1481 [
1482 text "
1483 "
1484 fontSize 14
1485 fontName "Consolas"
1486 alignment "left"
1487 anchor "tl"
1488 borderDistance 6
1489 ]
1490 ]
1491
1492 node
1493 [
1494 id 8
1495 graphics
1496 [
1497 w 94.60000000000001
1498 h 26
1499 type "rectangle"
1500 fill "#FFFFFF"
1501 fill2 "#FFFFFF"
1502 outline "#000000"
1503 ]
1504 LabelGraphics
1505 [
1506 text ""nsPrefix""
1507 outline "#000000"
1508 fill "#FFFFFF"
1509 fontSize 16
1510 fontName "Monospace"
1511 autoSizePolicy "node_width"
1512 anchor "t"
1513 borderDistance 0.0
1514 ]
1515 LabelGraphics
1516 [
1517 text "
1518 "
1519 fontSize 14
1520 fontName "Consolas"
1521 alignment "left"
1522 anchor "tl"
1523 borderDistance 6
1524 ]
1525 ]
1526
1527 node
1528 [
1529 id 9
1530 graphics
1531 [
1532 w 68.2
1533 h 26
1534 type "rectangle"
1535 fill "#FFFFFF"
1536 fill2 "#FFFFFF"
1537 outline "#000000"
1538 ]
1539 LabelGraphics
1540 [
1541 text ""nsUri""
1542 outline "#000000"
1543 fill "#FFFFFF"
1544 fontSize 16
1545 fontName "Monospace"
1546 autoSizePolicy "node_width"
1547 anchor "t"
1548 borderDistance 0.0
1549 ]
1550 LabelGraphics
1551 [
1552 text "
1553 "
1554 fontSize 14
1555 fontName "Consolas"
1556 alignment "left"
1557 anchor "tl"
1558 borderDistance 6
1559 ]
1560 ]
1561
1562 node
1563 [
1564 id 10
1565 graphics
1566 [
1567 w 121.00000000000001
1568 h 26
1569 type "rectangle"
1570 fill "#FFFFFF"
1571 fill2 "#FFFFFF"
1572 outline "#000000"
1573 ]
1574 LabelGraphics
1575 [
1576 text ""packageName""
1577 outline "#000000"
1578 fill "#FFFFFF"
1579 fontSize 16
1580 fontName "Monospace"
1581 autoSizePolicy "node_width"
1582 anchor "t"
1583 borderDistance 0.0
1584 ]
1585 LabelGraphics
1586 [
1587 text "
1588 "
1589 fontSize 14
1590 fontName "Consolas"
1591 alignment "left"
1592 anchor "tl"
1593 borderDistance 6
1594 ]
1595 ]
1596
1597 node
1598 [
1599 id 11
1600 graphics
1601 [
1602 w 269.5
1603 h 110
1604 type "rectangle"
1605 fill "#FFFFFF"
1606 fill2 "#FFFFFF"
1607 outline "#000000"
1608 ]
1609 LabelGraphics
1610 [
1611 text "null"
1612 outline "#000000"
1613 fill "#FFFFFF"
1614 fontSize 16
1615 fontName "Monospace"
1616 autoSizePolicy "node_width"
1617 anchor "t"
1618 borderDistance 0.0
1619 ]
1620 LabelGraphics
1621 [
1622 text "
1623 EClassifier class
1624 EDataType class
1625 EModelElement class
1626 ENamedElement class
1627 EModelElement class UndefinedPart
1628 ENamedElement class UndefinedPart
1629 "
1630 fontSize 14
1631 fontName "Consolas"
1632 alignment "left"
1633 anchor "tl"
1634 borderDistance 6
1635 ]
1636 ]
1637
1638 node
1639 [
1640 id 12
1641 graphics
1642 [
1643 w 269.5
1644 h 68
1645 type "rectangle"
1646 fill "#FFFFFF"
1647 fill2 "#FFFFFF"
1648 outline "#000000"
1649 ]
1650 LabelGraphics
1651 [
1652 text "null"
1653 outline "#000000"
1654 fill "#FFFFFF"
1655 fontSize 16
1656 fontName "Monospace"
1657 autoSizePolicy "node_width"
1658 anchor "t"
1659 borderDistance 0.0
1660 ]
1661 LabelGraphics
1662 [
1663 text "
1664 EAnnotation class
1665 EModelElement class
1666 EModelElement class UndefinedPart
1667 "
1668 fontSize 14
1669 fontName "Consolas"
1670 alignment "left"
1671 anchor "tl"
1672 borderDistance 6
1673 ]
1674 ]
1675
1676 node
1677 [
1678 id 13
1679 graphics
1680 [
1681 w 269.5
1682 h 110
1683 type "rectangle"
1684 fill "#FFFFFF"
1685 fill2 "#FFFFFF"
1686 outline "#000000"
1687 ]
1688 LabelGraphics
1689 [
1690 text "null"
1691 outline "#000000"
1692 fill "#FFFFFF"
1693 fontSize 16
1694 fontName "Monospace"
1695 autoSizePolicy "node_width"
1696 anchor "t"
1697 borderDistance 0.0
1698 ]
1699 LabelGraphics
1700 [
1701 text "
1702 EClass class
1703 EClassifier class
1704 EModelElement class
1705 ENamedElement class
1706 EModelElement class UndefinedPart
1707 ENamedElement class UndefinedPart
1708 "
1709 fontSize 14
1710 fontName "Consolas"
1711 alignment "left"
1712 anchor "tl"
1713 borderDistance 6
1714 ]
1715 ]
1716
1717 node
1718 [
1719 id 14
1720 graphics
1721 [
1722 w 269.5
1723 h 110
1724 type "rectangle"
1725 fill "#FFFFFF"
1726 fill2 "#FFFFFF"
1727 outline "#000000"
1728 ]
1729 LabelGraphics
1730 [
1731 text "null"
1732 outline "#000000"
1733 fill "#FFFFFF"
1734 fontSize 16
1735 fontName "Monospace"
1736 autoSizePolicy "node_width"
1737 anchor "t"
1738 borderDistance 0.0
1739 ]
1740 LabelGraphics
1741 [
1742 text "
1743 EClassifier class
1744 EDataType class
1745 EModelElement class
1746 ENamedElement class
1747 EModelElement class UndefinedPart
1748 ENamedElement class UndefinedPart
1749 "
1750 fontSize 14
1751 fontName "Consolas"
1752 alignment "left"
1753 anchor "tl"
1754 borderDistance 6
1755 ]
1756 ]
1757
1758 node
1759 [
1760 id 15
1761 graphics
1762 [
1763 w 269.5
1764 h 68
1765 type "rectangle"
1766 fill "#FFFFFF"
1767 fill2 "#FFFFFF"
1768 outline "#000000"
1769 ]
1770 LabelGraphics
1771 [
1772 text "null"
1773 outline "#000000"
1774 fill "#FFFFFF"
1775 fontSize 16
1776 fontName "Monospace"
1777 autoSizePolicy "node_width"
1778 anchor "t"
1779 borderDistance 0.0
1780 ]
1781 LabelGraphics
1782 [
1783 text "
1784 EAnnotation class
1785 EModelElement class
1786 EModelElement class UndefinedPart
1787 "
1788 fontSize 14
1789 fontName "Consolas"
1790 alignment "left"
1791 anchor "tl"
1792 borderDistance 6
1793 ]
1794 ]
1795
1796 node
1797 [
1798 id 16
1799 graphics
1800 [
1801 w 112.2
1802 h 26
1803 type "rectangle"
1804 fill "#FFFFFF"
1805 fill2 "#FFFFFF"
1806 outline "#000000"
1807 ]
1808 LabelGraphics
1809 [
1810 text "New Integers"
1811 outline "#000000"
1812 fill "#FFFFFF"
1813 fontSize 16
1814 fontName "Monospace"
1815 autoSizePolicy "node_width"
1816 anchor "t"
1817 borderDistance 0.0
1818 ]
1819 LabelGraphics
1820 [
1821 text "
1822 "
1823 fontSize 14
1824 fontName "Consolas"
1825 alignment "left"
1826 anchor "tl"
1827 borderDistance 6
1828 ]
1829 ]
1830
1831 node
1832 [
1833 id 17
1834 graphics
1835 [
1836 w 85.80000000000001
1837 h 26
1838 type "rectangle"
1839 fill "#FFFFFF"
1840 fill2 "#FFFFFF"
1841 outline "#000000"
1842 ]
1843 LabelGraphics
1844 [
1845 text "New Reals"
1846 outline "#000000"
1847 fill "#FFFFFF"
1848 fontSize 16
1849 fontName "Monospace"
1850 autoSizePolicy "node_width"
1851 anchor "t"
1852 borderDistance 0.0
1853 ]
1854 LabelGraphics
1855 [
1856 text "
1857 "
1858 fontSize 14
1859 fontName "Consolas"
1860 alignment "left"
1861 anchor "tl"
1862 borderDistance 6
1863 ]
1864 ]
1865
1866 node
1867 [
1868 id 18
1869 graphics
1870 [
1871 w 103.4
1872 h 26
1873 type "rectangle"
1874 fill "#FFFFFF"
1875 fill2 "#FFFFFF"
1876 outline "#000000"
1877 ]
1878 LabelGraphics
1879 [
1880 text "New Strings"
1881 outline "#000000"
1882 fill "#FFFFFF"
1883 fontSize 16
1884 fontName "Monospace"
1885 autoSizePolicy "node_width"
1886 anchor "t"
1887 borderDistance 0.0
1888 ]
1889 LabelGraphics
1890 [
1891 text "
1892 "
1893 fontSize 14
1894 fontName "Consolas"
1895 alignment "left"
1896 anchor "tl"
1897 borderDistance 6
1898 ]
1899 ]
1900
1901 node
1902 [
1903 id 19
1904 graphics
1905 [
1906 w 103.4
1907 h 26
1908 type "rectangle"
1909 fill "#FFFFFF"
1910 fill2 "#FFFFFF"
1911 outline "#000000"
1912 ]
1913 LabelGraphics
1914 [
1915 text "New Objects"
1916 outline "#000000"
1917 fill "#FFFFFF"
1918 fontSize 16
1919 fontName "Monospace"
1920 autoSizePolicy "node_width"
1921 anchor "t"
1922 borderDistance 0.0
1923 ]
1924 LabelGraphics
1925 [
1926 text "
1927 "
1928 fontSize 14
1929 fontName "Consolas"
1930 alignment "left"
1931 anchor "tl"
1932 borderDistance 6
1933 ]
1934 ]
1935 edge
1936 [
1937 source 12
1938 target 0
1939 graphics
1940 [
1941 fill "#000000"
1942 targetArrow "standard"
1943 ]
1944 LabelGraphics
1945 [
1946 text "eModelElement reference EAnnotation"
1947 fontSize 14
1948 fontName "Consolas"
1949 configuration "AutoFlippingLabel"
1950 model "six_pos"
1951 position "thead"
1952 ]
1953 ]
1954 edge
1955 [
1956 source 15
1957 target 0
1958 graphics
1959 [
1960 fill "#000000"
1961 targetArrow "standard"
1962 ]
1963 LabelGraphics
1964 [
1965 text "eModelElement reference EAnnotation"
1966 fontSize 14
1967 fontName "Consolas"
1968 configuration "AutoFlippingLabel"
1969 model "six_pos"
1970 position "thead"
1971 ]
1972 ]
1973 edge
1974 [
1975 source 11
1976 target 0
1977 graphics
1978 [
1979 fill "#000000"
1980 targetArrow "standard"
1981 ]
1982 LabelGraphics
1983 [
1984 text "ePackage reference EClassifier"
1985 fontSize 14
1986 fontName "Consolas"
1987 configuration "AutoFlippingLabel"
1988 model "six_pos"
1989 position "thead"
1990 ]
1991 ]
1992 edge
1993 [
1994 source 13
1995 target 0
1996 graphics
1997 [
1998 fill "#000000"
1999 targetArrow "standard"
2000 ]
2001 LabelGraphics
2002 [
2003 text "ePackage reference EClassifier"
2004 fontSize 14
2005 fontName "Consolas"
2006 configuration "AutoFlippingLabel"
2007 model "six_pos"
2008 position "thead"
2009 ]
2010 ]
2011 edge
2012 [
2013 source 14
2014 target 0
2015 graphics
2016 [
2017 fill "#000000"
2018 targetArrow "standard"
2019 ]
2020 LabelGraphics
2021 [
2022 text "ePackage reference EClassifier"
2023 fontSize 14
2024 fontName "Consolas"
2025 configuration "AutoFlippingLabel"
2026 model "six_pos"
2027 position "thead"
2028 ]
2029 ]
2030 edge
2031 [
2032 source 0
2033 target 12
2034 graphics
2035 [
2036 fill "#000000"
2037 width 3
2038 targetArrow "standard"
2039 ]
2040 LabelGraphics
2041 [
2042 text "eAnnotations reference EModelElement"
2043 fontSize 14
2044 fontName "Consolas"
2045 configuration "AutoFlippingLabel"
2046 model "six_pos"
2047 position "thead"
2048 ]
2049 ]
2050 edge
2051 [
2052 source 0
2053 target 15
2054 graphics
2055 [
2056 fill "#000000"
2057 width 3
2058 targetArrow "standard"
2059 ]
2060 LabelGraphics
2061 [
2062 text "eAnnotations reference EModelElement"
2063 fontSize 14
2064 fontName "Consolas"
2065 configuration "AutoFlippingLabel"
2066 model "six_pos"
2067 position "thead"
2068 ]
2069 ]
2070 edge
2071 [
2072 source 0
2073 target 11
2074 graphics
2075 [
2076 fill "#000000"
2077 width 3
2078 targetArrow "standard"
2079 ]
2080 LabelGraphics
2081 [
2082 text "eClassifiers reference EPackage"
2083 fontSize 14
2084 fontName "Consolas"
2085 configuration "AutoFlippingLabel"
2086 model "six_pos"
2087 position "thead"
2088 ]
2089 ]
2090 edge
2091 [
2092 source 0
2093 target 13
2094 graphics
2095 [
2096 fill "#000000"
2097 width 3
2098 targetArrow "standard"
2099 ]
2100 LabelGraphics
2101 [
2102 text "eClassifiers reference EPackage"
2103 fontSize 14
2104 fontName "Consolas"
2105 configuration "AutoFlippingLabel"
2106 model "six_pos"
2107 position "thead"
2108 ]
2109 ]
2110 edge
2111 [
2112 source 0
2113 target 14
2114 graphics
2115 [
2116 fill "#000000"
2117 width 3
2118 targetArrow "standard"
2119 ]
2120 LabelGraphics
2121 [
2122 text "eClassifiers reference EPackage"
2123 fontSize 14
2124 fontName "Consolas"
2125 configuration "AutoFlippingLabel"
2126 model "six_pos"
2127 position "thead"
2128 ]
2129 ]
2130 edge
2131 [
2132 source 12
2133 target 7
2134 graphics
2135 [
2136 fill "#000000"
2137 targetArrow "standard"
2138 ]
2139 LabelGraphics
2140 [
2141 text "source attribute EAnnotation"
2142 fontSize 14
2143 fontName "Consolas"
2144 configuration "AutoFlippingLabel"
2145 model "six_pos"
2146 position "thead"
2147 ]
2148 ]
2149 edge
2150 [
2151 source 13
2152 target 2
2153 graphics
2154 [
2155 fill "#000000"
2156 targetArrow "standard"
2157 ]
2158 LabelGraphics
2159 [
2160 text "abstract attribute EClass"
2161 fontSize 14
2162 fontName "Consolas"
2163 configuration "AutoFlippingLabel"
2164 model "six_pos"
2165 position "thead"
2166 ]
2167 ]
2168 edge
2169 [
2170 source 11
2171 target 8
2172 graphics
2173 [
2174 fill "#000000"
2175 targetArrow "standard"
2176 ]
2177 LabelGraphics
2178 [
2179 text "instanceClassName attribute EClassifier"
2180 fontSize 14
2181 fontName "Consolas"
2182 configuration "AutoFlippingLabel"
2183 model "six_pos"
2184 position "thead"
2185 ]
2186 ]
2187 edge
2188 [
2189 source 14
2190 target 10
2191 graphics
2192 [
2193 fill "#000000"
2194 targetArrow "standard"
2195 ]
2196 LabelGraphics
2197 [
2198 text "instanceClassName attribute EClassifier"
2199 fontSize 14
2200 fontName "Consolas"
2201 configuration "AutoFlippingLabel"
2202 model "six_pos"
2203 position "thead"
2204 ]
2205 ]
2206 edge
2207 [
2208 source 11
2209 target 9
2210 graphics
2211 [
2212 fill "#000000"
2213 targetArrow "standard"
2214 ]
2215 LabelGraphics
2216 [
2217 text "instanceTypeName attribute EClassifier"
2218 fontSize 14
2219 fontName "Consolas"
2220 configuration "AutoFlippingLabel"
2221 model "six_pos"
2222 position "thead"
2223 ]
2224 ]
2225 edge
2226 [
2227 source 11
2228 target 2
2229 graphics
2230 [
2231 fill "#000000"
2232 targetArrow "standard"
2233 ]
2234 LabelGraphics
2235 [
2236 text "serializable attribute EDataType"
2237 fontSize 14
2238 fontName "Consolas"
2239 configuration "AutoFlippingLabel"
2240 model "six_pos"
2241 position "thead"
2242 ]
2243 ]
2244 edge
2245 [
2246 source 0
2247 target 10
2248 graphics
2249 [
2250 fill "#000000"
2251 targetArrow "standard"
2252 ]
2253 LabelGraphics
2254 [
2255 text "name attribute ENamedElement"
2256 fontSize 14
2257 fontName "Consolas"
2258 configuration "AutoFlippingLabel"
2259 model "six_pos"
2260 position "thead"
2261 ]
2262 ]
2263 edge
2264 [
2265 source 11
2266 target 8
2267 graphics
2268 [
2269 fill "#000000"
2270 targetArrow "standard"
2271 ]
2272 LabelGraphics
2273 [
2274 text "name attribute ENamedElement"
2275 fontSize 14
2276 fontName "Consolas"
2277 configuration "AutoFlippingLabel"
2278 model "six_pos"
2279 position "thead"
2280 ]
2281 ]
2282 edge
2283 [
2284 source 13
2285 target 9
2286 graphics
2287 [
2288 fill "#000000"
2289 targetArrow "standard"
2290 ]
2291 LabelGraphics
2292 [
2293 text "name attribute ENamedElement"
2294 fontSize 14
2295 fontName "Consolas"
2296 configuration "AutoFlippingLabel"
2297 model "six_pos"
2298 position "thead"
2299 ]
2300 ]
2301 edge
2302 [
2303 source 14
2304 target 8
2305 graphics
2306 [
2307 fill "#000000"
2308 targetArrow "standard"
2309 ]
2310 LabelGraphics
2311 [
2312 text "name attribute ENamedElement"
2313 fontSize 14
2314 fontName "Consolas"
2315 configuration "AutoFlippingLabel"
2316 model "six_pos"
2317 position "thead"
2318 ]
2319 ]
2320 edge
2321 [
2322 source 0
2323 target 9
2324 graphics
2325 [
2326 fill "#000000"
2327 targetArrow "standard"
2328 ]
2329 LabelGraphics
2330 [
2331 text "nsURI attribute EPackage"
2332 fontSize 14
2333 fontName "Consolas"
2334 configuration "AutoFlippingLabel"
2335 model "six_pos"
2336 position "thead"
2337 ]
2338 ]
2339 edge
2340 [
2341 source 0
2342 target 8
2343 graphics
2344 [
2345 fill "#000000"
2346 targetArrow "standard"
2347 ]
2348 LabelGraphics
2349 [
2350 text "nsPrefix attribute EPackage"
2351 fontSize 14
2352 fontName "Consolas"
2353 configuration "AutoFlippingLabel"
2354 model "six_pos"
2355 position "thead"
2356 ]
2357 ]
2358]
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
index bb835587..7b6e8da5 100644
--- 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
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
index 1a10e5b6..8bff1dc6 100644
--- 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
@@ -1,9 +1,8 @@
1<?xml version="1.0" encoding="ASCII"?> 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"> 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"/> 3 <eAnnotations/>
4 <eClassifiers xsi:type="ecore:EEnum" name="packageName"/> 4 <eAnnotations source="B"/>
5 <eClassifiers xsi:type="ecore:EEnum" name="packageName" instanceClassName="nsPrefix"/> 5 <eClassifiers xsi:type="ecore:EDataType" name="nsPrefix" instanceTypeName="nsUri" serializable="false"/>
6 <eSubpackages name="A" nsURI="nsPrefix" nsPrefix="A"> 6 <eClassifiers xsi:type="ecore:EDataType" name="nsPrefix" instanceClassName="packageName"/>
7 <eClassifiers xsi:type="ecore:EEnum"/> 7 <eClassifiers xsi:type="ecore:EClass" name="nsUri"/>
8 </eSubpackages>
9</ecore:EPackage> 8</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
index 0c19baf2..6422beb9 100644
--- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/statistics.csv
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/fam/statistics.csv
@@ -30,3 +30,19 @@ Task;Run;Result;Domain to logic transformation time;Logic to solver transformati
301;1;ModelResultImpl;443;2849;2573;4906642931;151;171;75;124;7;0;8 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 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 322;1;ModelResultImpl;19;4315;9042;20459725100;239;247;252;257;261;217;19;6;0;11
33Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;_Solution0FoundAt;_Solution1FoundAt;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime
341;1;ModelResultImpl;513;2237;2193;6152392500;162;177;77;150;6;0;5
35Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;_Solution0FoundAt;_Solution1FoundAt;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime
361;1;ModelResultImpl;11;1602;1604;2992330200;66;77;38;16;1;0;3
37Task;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
382;1;ModelResultImpl;128;4855;10109;16068923000;382;391;398;403;409;349;37;8;0;16
39Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;_Solution0FoundAt;_Solution1FoundAt;_Solution2FoundAt;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime
402;1;ModelResultImpl;18;3632;9743;7955260600;299;307;313;261;17;7;0;8
41Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;_Solution0FoundAt;_Solution1FoundAt;_Solution2FoundAt;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime
422;1;ModelResultImpl;471;5606;10554;10190416000;482;497;509;400;189;16;0;21
43Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;_Solution0FoundAt;_Solution1FoundAt;_Solution2FoundAt;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime
442;1;ModelResultImpl;28;4850;10801;9664839300;622;635;651;560;23;18;0;20
45Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;_Solution0FoundAt;_Solution1FoundAt;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime
461;1;ModelResultImpl;6;1884;1462;3186743800;40;48;20;16;1;0;1
47Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;_Solution0FoundAt;_Solution1FoundAt;_Solution2FoundAt;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime
482;1;ModelResultImpl;9;4021;9222;7668037900;233;239;243;201;10;8;0;6
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/debug/errors.txt b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/debug/errors.txt
index 2086fece..5caab94d 100644
--- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/debug/errors.txt
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/debug/errors.txt
@@ -18,4 +18,58 @@ Error occured (IllegalArgumentException): Class FunctionalArchitectureModel is n
18 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:339) 18 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:339)
19 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111) 19 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111)
20 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73) 20 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73)
21 org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)Error occured (IllegalStateException): Error loading group hu.bme.mit.inf.dslreasoner.domains.alloyexamples.FileSystem
22 org.eclipse.viatra.query.runtime.registry.ExtensionBasedQuerySpecificationLoader$QueryGroupProvider.get(ExtensionBasedQuerySpecificationLoader.java:204)
23 org.eclipse.viatra.query.runtime.registry.ExtensionBasedQuerySpecificationLoader$GroupBasedQuerySpecificationProvider.get(ExtensionBasedQuerySpecificationLoader.java:282)
24 org.eclipse.viatra.query.runtime.registry.ExtensionBasedQuerySpecificationLoader$GroupBasedQuerySpecificationProvider.get(ExtensionBasedQuerySpecificationLoader.java:1)
25 org.eclipse.viatra.query.runtime.registry.data.RegistryEntryImpl.get(RegistryEntryImpl.java:66)
26 org.eclipse.viatra.query.runtime.registry.data.RegistryEntryImpl.get(RegistryEntryImpl.java:1)
27 org.eclipse.viatra.addon.querybasedfeatures.runtime.QueryBasedFeatureSettingDelegateFactory.findQuerySpecification(QueryBasedFeatureSettingDelegateFactory.java:152)
28 org.eclipse.viatra.addon.querybasedfeatures.runtime.QueryBasedFeatureSettingDelegateFactory.createSettingDelegate(QueryBasedFeatureSettingDelegateFactory.java:113)
29 org.eclipse.emf.ecore.impl.EStructuralFeatureImpl.getSettingDelegate(EStructuralFeatureImpl.java:854)
30 ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.impl.FileSystemImpl.<init>(FileSystemImpl.java:55)
31 ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.impl.filesystemFactoryImpl.createFileSystem(filesystemFactoryImpl.java:74)
32 ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.impl.filesystemFactoryImpl.create(filesystemFactoryImpl.java:59)
33 hu.bme.mit.inf.dslreasoner.logic2ecore.Logic2Ecore.transformInterpretation(Logic2Ecore.java:75)
34 hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:359)
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): Error loading group hu.bme.mit.inf.dslreasoner.domains.alloyexamples.FileSystem
40 org.eclipse.viatra.query.runtime.registry.ExtensionBasedQuerySpecificationLoader$QueryGroupProvider.get(ExtensionBasedQuerySpecificationLoader.java:204)
41 org.eclipse.viatra.query.runtime.registry.ExtensionBasedQuerySpecificationLoader$GroupBasedQuerySpecificationProvider.get(ExtensionBasedQuerySpecificationLoader.java:282)
42 org.eclipse.viatra.query.runtime.registry.ExtensionBasedQuerySpecificationLoader$GroupBasedQuerySpecificationProvider.get(ExtensionBasedQuerySpecificationLoader.java:1)
43 org.eclipse.viatra.query.runtime.registry.data.RegistryEntryImpl.get(RegistryEntryImpl.java:66)
44 org.eclipse.viatra.query.runtime.registry.data.RegistryEntryImpl.get(RegistryEntryImpl.java:1)
45 org.eclipse.viatra.addon.querybasedfeatures.runtime.QueryBasedFeatureSettingDelegateFactory.findQuerySpecification(QueryBasedFeatureSettingDelegateFactory.java:152)
46 org.eclipse.viatra.addon.querybasedfeatures.runtime.QueryBasedFeatureSettingDelegateFactory.createSettingDelegate(QueryBasedFeatureSettingDelegateFactory.java:113)
47 org.eclipse.emf.ecore.impl.EStructuralFeatureImpl.getSettingDelegate(EStructuralFeatureImpl.java:854)
48 ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.impl.FileSystemImpl.<init>(FileSystemImpl.java:55)
49 ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.impl.filesystemFactoryImpl.createFileSystem(filesystemFactoryImpl.java:74)
50 ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.impl.filesystemFactoryImpl.create(filesystemFactoryImpl.java:59)
51 hu.bme.mit.inf.dslreasoner.logic2ecore.Logic2Ecore.transformInterpretation(Logic2Ecore.java:75)
52 hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:359)
53 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:130)
54 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:339)
55 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111)
56 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73)
57 org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)Error occured (NullPointerException):
58 hu.bme.mit.inf.dslreasoner.application.execution.QueryLoader.lambda$8(QueryLoader.java:108)
59 org.eclipse.xtext.xbase.lib.internal.BooleanFunctionDelegate.apply(BooleanFunctionDelegate.java:41)
60 com.google.common.collect.Iterators$6.computeNext(Iterators.java:617)
61 com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:145)
62 com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:140)
63 com.google.common.collect.Iterators.addAll(Iterators.java:366)
64 com.google.common.collect.Iterables.addAll(Iterables.java:332)
65 com.google.common.collect.Sets.newLinkedHashSet(Sets.java:383)
66 org.eclipse.xtext.xbase.lib.IterableExtensions.toSet(IterableExtensions.java:592)
67 hu.bme.mit.inf.dslreasoner.application.execution.QueryLoader._getPatterns(QueryLoader.java:84)
68 hu.bme.mit.inf.dslreasoner.application.execution.QueryLoader.getPatterns(QueryLoader.java:213)
69 hu.bme.mit.inf.dslreasoner.application.execution.QueryLoader.loadQueries(QueryLoader.java:54)
70 hu.bme.mit.inf.dslreasoner.application.execution.GenerationTaskExecutor.executeGenerationTask(GenerationTaskExecutor.java:167)
71 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor._execute(ScriptExecutor.java:130)
72 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.execute(ScriptExecutor.java:339)
73 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor.executeScript(ScriptExecutor.java:111)
74 hu.bme.mit.inf.dslreasoner.application.execution.ScriptExecutor$1.run(ScriptExecutor.java:73)
21 org.eclipse.core.internal.jobs.Worker.run(Worker.java:56) \ No newline at end of file 75 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/yakindu/debug/generated3valued.vql_deactivated b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/debug/generated3valued.vql_deactivated
index 6d8fc404..f90ed439 100644
--- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/debug/generated3valued.vql_deactivated
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/debug/generated3valued.vql_deactivated
@@ -1470,3 +1470,23535 @@ pattern refineRelation_incomingTransitions_reference_Vertex_and_target_reference
1470 find mayInRelationincomingTransitions_reference_Vertex(problem,interpretation,from,to); 1470 find mayInRelationincomingTransitions_reference_Vertex(problem,interpretation,from,to);
1471 neg find mustInRelationincomingTransitions_reference_Vertex(problem,interpretation,from,to); 1471 neg find mustInRelationincomingTransitions_reference_Vertex(problem,interpretation,from,to);
1472} 1472}
1473import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage"
1474import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem"
1475import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language"
1476
1477//////////
1478// 0. Util
1479//////////
1480private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) {
1481 PartialInterpretation.problem(interpretation,problem);
1482}
1483
1484/////////////////////////
1485// 0.1 Existence
1486/////////////////////////
1487private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
1488 find interpretation(problem,interpretation);
1489 LogicProblem.elements(problem,element);
1490} or {
1491 find interpretation(problem,interpretation);
1492 PartialInterpretation.newElements(interpretation,element);
1493}
1494
1495private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
1496 find mustExist(problem,interpretation,element);
1497} or {
1498 find interpretation(problem,interpretation);
1499 neg find elementCloseWorld(element);
1500 PartialInterpretation.openWorldElements(interpretation,element);
1501}
1502
1503private pattern elementCloseWorld(element:DefinedElement) {
1504 PartialInterpretation.openWorldElements(i,element);
1505 PartialInterpretation.maxNewElements(i,0);
1506} or {
1507 Scope.targetTypeInterpretation(scope,interpretation);
1508 PartialTypeInterpratation.elements(interpretation,element);
1509 Scope.maxNewElements(scope,0);
1510}
1511
1512////////////////////////
1513// 0.2 Equivalence
1514////////////////////////
1515pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) {
1516 find mayExist(problem,interpretation,a);
1517 find mayExist(problem,interpretation,b);
1518 a == b;
1519}
1520
1521////////////////////////
1522// 0.3 Required Patterns by TypeIndexer
1523////////////////////////
1524private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) {
1525 find interpretation(problem,interpretation);
1526 LogicProblem.types(problem,type);
1527 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
1528 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
1529}
1530
1531private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) {
1532 find interpretation(problem,interpretation);
1533 LogicProblem.types(problem,type);
1534 TypeDefinition.elements(type,element);
1535} or {
1536 find interpretation(problem,interpretation);
1537 find typeInterpretation(problem,interpretation,type,typeInterpretation);
1538 PartialComplexTypeInterpretation.elements(typeInterpretation,element);
1539}
1540
1541private pattern isPrimitive(element: PrimitiveElement) {
1542 PrimitiveElement(element);
1543}
1544
1545//////////
1546// 1. Problem-Specific Base Indexers
1547//////////
1548// 1.1 Type Indexers
1549//////////
1550// 1.1.1 primitive Type Indexers
1551//////////
1552
1553//////////
1554// 1.1.2 domain-specific Type Indexers
1555//////////
1556/**
1557 * An element must be an instance of type "FileSystem class".
1558 */
1559private pattern mustInstanceOfFileSystem_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
1560 Type.name(type,"FileSystem class");
1561 find directInstanceOf(problem,interpretation,element,type);
1562}
1563private pattern scopeDisallowsNewFileSystem_class(problem:LogicProblem, interpretation:PartialInterpretation) {
1564 find interpretation(problem,interpretation);
1565 PartialInterpretation.scopes(interpretation,scope);
1566 Scope.targetTypeInterpretation(scope,typeInterpretation);
1567 Scope.maxNewElements(scope,0);
1568 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
1569 Type.name(type,"FileSystem class");
1570}
1571
1572/**
1573 * An element may be an instance of type "FileSystem class".
1574 */
1575private pattern mayInstanceOfFileSystem_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
1576{
1577 find interpretation(problem,interpretation);
1578 PartialInterpretation.newElements(interpretation,element);
1579 neg find mustInstanceOfFSObject_class(problem,interpretation,element);
1580 neg find mustInstanceOfModel_class(problem,interpretation,element);
1581 neg find scopeDisallowsNewFileSystem_class(problem, interpretation);
1582 neg find isPrimitive(element);
1583} or {
1584 find interpretation(problem,interpretation);
1585 PartialInterpretation.openWorldElements(interpretation,element);
1586 neg find mustInstanceOfFSObject_class(problem,interpretation,element);
1587 neg find mustInstanceOfModel_class(problem,interpretation,element);
1588 neg find scopeDisallowsNewFileSystem_class(problem, interpretation);
1589 neg find isPrimitive(element);
1590} or
1591{ find mustInstanceOfFileSystem_class(problem,interpretation,element); }
1592/**
1593 * An element must be an instance of type "FSObject class".
1594 */
1595private pattern mustInstanceOfFSObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
1596 Type.name(type,"FSObject class");
1597 find directInstanceOf(problem,interpretation,element,type);
1598}
1599private pattern scopeDisallowsNewFSObject_class(problem:LogicProblem, interpretation:PartialInterpretation) {
1600 find interpretation(problem,interpretation);
1601 PartialInterpretation.scopes(interpretation,scope);
1602 Scope.targetTypeInterpretation(scope,typeInterpretation);
1603 Scope.maxNewElements(scope,0);
1604 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
1605 Type.name(type,"FSObject class");
1606}
1607
1608/**
1609 * An element may be an instance of type "FSObject class".
1610 */
1611private pattern mayInstanceOfFSObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
1612{
1613 find interpretation(problem,interpretation);
1614 PartialInterpretation.newElements(interpretation,element);
1615 neg find mustInstanceOfModel_class(problem,interpretation,element);
1616 neg find mustInstanceOfFile_class(problem,interpretation,element);
1617 neg find mustInstanceOfDir_class(problem,interpretation,element);
1618 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
1619 neg find scopeDisallowsNewFSObject_class(problem, interpretation);
1620 neg find isPrimitive(element);
1621} or {
1622 find interpretation(problem,interpretation);
1623 PartialInterpretation.openWorldElements(interpretation,element);
1624 neg find mustInstanceOfModel_class(problem,interpretation,element);
1625 neg find mustInstanceOfFile_class(problem,interpretation,element);
1626 neg find mustInstanceOfDir_class(problem,interpretation,element);
1627 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
1628 neg find scopeDisallowsNewFSObject_class(problem, interpretation);
1629 neg find isPrimitive(element);
1630} or
1631{ find mustInstanceOfFSObject_class(problem,interpretation,element); }
1632/**
1633 * An element must be an instance of type "Dir class".
1634 */
1635private pattern mustInstanceOfDir_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
1636 Type.name(type,"Dir class");
1637 find directInstanceOf(problem,interpretation,element,type);
1638}
1639private pattern scopeDisallowsNewDir_class(problem:LogicProblem, interpretation:PartialInterpretation) {
1640 find interpretation(problem,interpretation);
1641 PartialInterpretation.scopes(interpretation,scope);
1642 Scope.targetTypeInterpretation(scope,typeInterpretation);
1643 Scope.maxNewElements(scope,0);
1644 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
1645 Type.name(type,"Dir class");
1646}
1647
1648/**
1649 * An element may be an instance of type "Dir class".
1650 */
1651private pattern mayInstanceOfDir_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
1652{
1653 find interpretation(problem,interpretation);
1654 PartialInterpretation.newElements(interpretation,element);
1655 neg find mustInstanceOfModel_class(problem,interpretation,element);
1656 neg find mustInstanceOfFile_class(problem,interpretation,element);
1657 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
1658 neg find scopeDisallowsNewDir_class(problem, interpretation);
1659 neg find isPrimitive(element);
1660} or {
1661 find interpretation(problem,interpretation);
1662 PartialInterpretation.openWorldElements(interpretation,element);
1663 neg find mustInstanceOfModel_class(problem,interpretation,element);
1664 neg find mustInstanceOfFile_class(problem,interpretation,element);
1665 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
1666 neg find scopeDisallowsNewDir_class(problem, interpretation);
1667 neg find isPrimitive(element);
1668} or
1669{ find mustInstanceOfDir_class(problem,interpretation,element); }
1670/**
1671 * An element must be an instance of type "File class".
1672 */
1673private pattern mustInstanceOfFile_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
1674 Type.name(type,"File class");
1675 find directInstanceOf(problem,interpretation,element,type);
1676}
1677private pattern scopeDisallowsNewFile_class(problem:LogicProblem, interpretation:PartialInterpretation) {
1678 find interpretation(problem,interpretation);
1679 PartialInterpretation.scopes(interpretation,scope);
1680 Scope.targetTypeInterpretation(scope,typeInterpretation);
1681 Scope.maxNewElements(scope,0);
1682 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
1683 Type.name(type,"File class");
1684}
1685
1686/**
1687 * An element may be an instance of type "File class".
1688 */
1689private pattern mayInstanceOfFile_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
1690{
1691 find interpretation(problem,interpretation);
1692 PartialInterpretation.newElements(interpretation,element);
1693 neg find mustInstanceOfDir_class(problem,interpretation,element);
1694 neg find mustInstanceOfModel_class(problem,interpretation,element);
1695 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
1696 neg find scopeDisallowsNewFile_class(problem, interpretation);
1697 neg find isPrimitive(element);
1698} or {
1699 find interpretation(problem,interpretation);
1700 PartialInterpretation.openWorldElements(interpretation,element);
1701 neg find mustInstanceOfDir_class(problem,interpretation,element);
1702 neg find mustInstanceOfModel_class(problem,interpretation,element);
1703 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
1704 neg find scopeDisallowsNewFile_class(problem, interpretation);
1705 neg find isPrimitive(element);
1706} or
1707{ find mustInstanceOfFile_class(problem,interpretation,element); }
1708/**
1709 * An element must be an instance of type "Model class".
1710 */
1711private pattern mustInstanceOfModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
1712 Type.name(type,"Model class");
1713 find directInstanceOf(problem,interpretation,element,type);
1714}
1715private pattern scopeDisallowsNewModel_class(problem:LogicProblem, interpretation:PartialInterpretation) {
1716 find interpretation(problem,interpretation);
1717 PartialInterpretation.scopes(interpretation,scope);
1718 Scope.targetTypeInterpretation(scope,typeInterpretation);
1719 Scope.maxNewElements(scope,0);
1720 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
1721 Type.name(type,"Model class");
1722}
1723
1724/**
1725 * An element may be an instance of type "Model class".
1726 */
1727private pattern mayInstanceOfModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
1728{
1729 find interpretation(problem,interpretation);
1730 PartialInterpretation.newElements(interpretation,element);
1731 neg find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,element);
1732 neg find mustInstanceOfFSObject_class(problem,interpretation,element);
1733 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
1734 neg find scopeDisallowsNewModel_class(problem, interpretation);
1735 neg find isPrimitive(element);
1736} or {
1737 find interpretation(problem,interpretation);
1738 PartialInterpretation.openWorldElements(interpretation,element);
1739 neg find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,element);
1740 neg find mustInstanceOfFSObject_class(problem,interpretation,element);
1741 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
1742 neg find scopeDisallowsNewModel_class(problem, interpretation);
1743 neg find isPrimitive(element);
1744} or
1745{ find mustInstanceOfModel_class(problem,interpretation,element); }
1746/**
1747 * An element must be an instance of type "Model class DefinedPart".
1748 */
1749private pattern mustInstanceOfModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
1750 Type.name(type,"Model class DefinedPart");
1751 find directInstanceOf(problem,interpretation,element,type);
1752}
1753private pattern scopeDisallowsNewModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
1754 find interpretation(problem,interpretation);
1755 PartialInterpretation.scopes(interpretation,scope);
1756 Scope.targetTypeInterpretation(scope,typeInterpretation);
1757 Scope.maxNewElements(scope,0);
1758 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
1759 Type.name(type,"Model class DefinedPart");
1760}
1761
1762/**
1763 * An element may be an instance of type "Model class DefinedPart".
1764 */
1765private pattern mayInstanceOfModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
1766{ find mustInstanceOfModel_class_DefinedPart(problem,interpretation,element); }
1767/**
1768 * An element must be an instance of type "Model class UndefinedPart".
1769 */
1770private pattern mustInstanceOfModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
1771 Type.name(type,"Model class UndefinedPart");
1772 find directInstanceOf(problem,interpretation,element,type);
1773}
1774private pattern scopeDisallowsNewModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
1775 find interpretation(problem,interpretation);
1776 PartialInterpretation.scopes(interpretation,scope);
1777 Scope.targetTypeInterpretation(scope,typeInterpretation);
1778 Scope.maxNewElements(scope,0);
1779 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
1780 Type.name(type,"Model class UndefinedPart");
1781}
1782
1783/**
1784 * An element may be an instance of type "Model class UndefinedPart".
1785 */
1786private pattern mayInstanceOfModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
1787{
1788 find interpretation(problem,interpretation);
1789 PartialInterpretation.newElements(interpretation,element);
1790 neg find mustInstanceOfFSObject_class(problem,interpretation,element);
1791 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
1792 neg find scopeDisallowsNewModel_class_UndefinedPart(problem, interpretation);
1793 neg find isPrimitive(element);
1794} or {
1795 find interpretation(problem,interpretation);
1796 PartialInterpretation.openWorldElements(interpretation,element);
1797 neg find mustInstanceOfFSObject_class(problem,interpretation,element);
1798 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
1799 neg find scopeDisallowsNewModel_class_UndefinedPart(problem, interpretation);
1800 neg find isPrimitive(element);
1801} or
1802{ find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,element); }
1803
1804//////////
1805// 1.2 Relation Declaration Indexers
1806//////////
1807/**
1808 * Matcher for detecting tuples t where []root reference FileSystem(source,target)
1809 */
1810private pattern mustInRelationroot_reference_FileSystem(
1811 problem:LogicProblem, interpretation:PartialInterpretation,
1812 source: DefinedElement, target:DefinedElement)
1813{
1814 find interpretation(problem,interpretation);
1815 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
1816 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"root reference FileSystem");
1817 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
1818 BinaryElementRelationLink.param1(link,source);
1819 BinaryElementRelationLink.param2(link,target);
1820}
1821/**
1822 * Matcher for detecting tuples t where <>root reference FileSystem(source,target)
1823 */
1824private pattern mayInRelationroot_reference_FileSystem(
1825 problem:LogicProblem, interpretation:PartialInterpretation,
1826 source: DefinedElement, target:DefinedElement)
1827{
1828 find interpretation(problem,interpretation);
1829 // The two endpoint of the link have to exist
1830 find mayExist(problem, interpretation, source);
1831 find mayExist(problem, interpretation, target);
1832 // Type consistency
1833 find mayInstanceOfFileSystem_class(problem,interpretation,source);
1834 find mayInstanceOfDir_class(problem,interpretation,target);
1835 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
1836 // the upper bound of the multiplicity should be considered.
1837 numberOfExistingReferences == count find mustInRelationroot_reference_FileSystem(problem,interpretation,source,_);
1838 check(numberOfExistingReferences < 1);
1839 // The reference is containment, then a new reference cannot be create if:
1840 // 1. Multiple parents
1841 neg find mustContains4(problem,interpretation,_,target);
1842 // 2. Circle in the containment hierarchy
1843 neg find mustTransitiveContains(source,target);
1844} or {
1845 find mustInRelationroot_reference_FileSystem(problem,interpretation,source,target);
1846}
1847/**
1848 * Matcher for detecting tuples t where []live reference FileSystem(source,target)
1849 */
1850private pattern mustInRelationlive_reference_FileSystem(
1851 problem:LogicProblem, interpretation:PartialInterpretation,
1852 source: DefinedElement, target:DefinedElement)
1853{
1854 find interpretation(problem,interpretation);
1855 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
1856 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"live reference FileSystem");
1857 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
1858 BinaryElementRelationLink.param1(link,source);
1859 BinaryElementRelationLink.param2(link,target);
1860}
1861/**
1862 * Matcher for detecting tuples t where <>live reference FileSystem(source,target)
1863 */
1864private pattern mayInRelationlive_reference_FileSystem(
1865 problem:LogicProblem, interpretation:PartialInterpretation,
1866 source: DefinedElement, target:DefinedElement)
1867{
1868 find interpretation(problem,interpretation);
1869 // The two endpoint of the link have to exist
1870 find mayExist(problem, interpretation, source);
1871 find mayExist(problem, interpretation, target);
1872 // Type consistency
1873 find mayInstanceOfFileSystem_class(problem,interpretation,source);
1874 find mayInstanceOfFSObject_class(problem,interpretation,target);
1875} or {
1876 find mustInRelationlive_reference_FileSystem(problem,interpretation,source,target);
1877}
1878/**
1879 * Matcher for detecting tuples t where []parent reference FSObject(source,target)
1880 */
1881private pattern mustInRelationparent_reference_FSObject(
1882 problem:LogicProblem, interpretation:PartialInterpretation,
1883 source: DefinedElement, target:DefinedElement)
1884{
1885 find interpretation(problem,interpretation);
1886 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
1887 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"parent reference FSObject");
1888 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
1889 BinaryElementRelationLink.param1(link,source);
1890 BinaryElementRelationLink.param2(link,target);
1891}
1892/**
1893 * Matcher for detecting tuples t where <>parent reference FSObject(source,target)
1894 */
1895private pattern mayInRelationparent_reference_FSObject(
1896 problem:LogicProblem, interpretation:PartialInterpretation,
1897 source: DefinedElement, target:DefinedElement)
1898{
1899 find interpretation(problem,interpretation);
1900 // The two endpoint of the link have to exist
1901 find mayExist(problem, interpretation, source);
1902 find mayExist(problem, interpretation, target);
1903 // Type consistency
1904 find mayInstanceOfFSObject_class(problem,interpretation,source);
1905 find mayInstanceOfDir_class(problem,interpretation,target);
1906 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
1907 // the upper bound of the multiplicity should be considered.
1908 numberOfExistingReferences == count find mustInRelationparent_reference_FSObject(problem,interpretation,source,_);
1909 check(numberOfExistingReferences < 1);
1910 // The eOpposite of the reference is containment, then a referene cannot be created if
1911 // 1. Multiple parents
1912 neg find mustContains4(problem,interpretation,source,_);
1913 // 2. Circle in the containment hierarchy
1914 neg find mustTransitiveContains(source,target);
1915} or {
1916 find mustInRelationparent_reference_FSObject(problem,interpretation,source,target);
1917}
1918/**
1919 * Matcher for detecting tuples t where []contents reference Dir(source,target)
1920 */
1921private pattern mustInRelationcontents_reference_Dir(
1922 problem:LogicProblem, interpretation:PartialInterpretation,
1923 source: DefinedElement, target:DefinedElement)
1924{
1925 find interpretation(problem,interpretation);
1926 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
1927 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"contents reference Dir");
1928 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
1929 BinaryElementRelationLink.param1(link,source);
1930 BinaryElementRelationLink.param2(link,target);
1931}
1932/**
1933 * Matcher for detecting tuples t where <>contents reference Dir(source,target)
1934 */
1935private pattern mayInRelationcontents_reference_Dir(
1936 problem:LogicProblem, interpretation:PartialInterpretation,
1937 source: DefinedElement, target:DefinedElement)
1938{
1939 find interpretation(problem,interpretation);
1940 // The two endpoint of the link have to exist
1941 find mayExist(problem, interpretation, source);
1942 find mayExist(problem, interpretation, target);
1943 // Type consistency
1944 find mayInstanceOfDir_class(problem,interpretation,source);
1945 find mayInstanceOfFSObject_class(problem,interpretation,target);
1946 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
1947 // the upper bound of the opposite reference multiplicity should be considered.
1948 numberOfExistingOppositeReferences == count find mustInRelationparent_reference_FSObject(problem,interpretation,target,_);
1949 check(numberOfExistingOppositeReferences < 1);
1950 // The reference is containment, then a new reference cannot be create if:
1951 // 1. Multiple parents
1952 neg find mustContains4(problem,interpretation,_,target);
1953 // 2. Circle in the containment hierarchy
1954 neg find mustTransitiveContains(source,target);
1955} or {
1956 find mustInRelationcontents_reference_Dir(problem,interpretation,source,target);
1957}
1958/**
1959 * Matcher for detecting tuples t where []filesystems reference Model(source,target)
1960 */
1961private pattern mustInRelationfilesystems_reference_Model(
1962 problem:LogicProblem, interpretation:PartialInterpretation,
1963 source: DefinedElement, target:DefinedElement)
1964{
1965 find interpretation(problem,interpretation);
1966 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
1967 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"filesystems reference Model");
1968 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
1969 BinaryElementRelationLink.param1(link,source);
1970 BinaryElementRelationLink.param2(link,target);
1971}
1972/**
1973 * Matcher for detecting tuples t where <>filesystems reference Model(source,target)
1974 */
1975private pattern mayInRelationfilesystems_reference_Model(
1976 problem:LogicProblem, interpretation:PartialInterpretation,
1977 source: DefinedElement, target:DefinedElement)
1978{
1979 find interpretation(problem,interpretation);
1980 // The two endpoint of the link have to exist
1981 find mayExist(problem, interpretation, source);
1982 find mayExist(problem, interpretation, target);
1983 // Type consistency
1984 find mayInstanceOfModel_class(problem,interpretation,source);
1985 find mayInstanceOfFileSystem_class(problem,interpretation,target);
1986 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
1987 // the upper bound of the multiplicity should be considered.
1988 numberOfExistingReferences == count find mustInRelationfilesystems_reference_Model(problem,interpretation,source,_);
1989 check(numberOfExistingReferences < 1);
1990 // The reference is containment, then a new reference cannot be create if:
1991 // 1. Multiple parents
1992 neg find mustContains4(problem,interpretation,_,target);
1993 // 2. Circle in the containment hierarchy
1994 neg find mustTransitiveContains(source,target);
1995} or {
1996 find mustInRelationfilesystems_reference_Model(problem,interpretation,source,target);
1997}
1998/**
1999 * Matcher for detecting tuples t where []otherFSObjects reference Model(source,target)
2000 */
2001private pattern mustInRelationotherFSObjects_reference_Model(
2002 problem:LogicProblem, interpretation:PartialInterpretation,
2003 source: DefinedElement, target:DefinedElement)
2004{
2005 find interpretation(problem,interpretation);
2006 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
2007 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"otherFSObjects reference Model");
2008 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
2009 BinaryElementRelationLink.param1(link,source);
2010 BinaryElementRelationLink.param2(link,target);
2011}
2012/**
2013 * Matcher for detecting tuples t where <>otherFSObjects reference Model(source,target)
2014 */
2015private pattern mayInRelationotherFSObjects_reference_Model(
2016 problem:LogicProblem, interpretation:PartialInterpretation,
2017 source: DefinedElement, target:DefinedElement)
2018{
2019 find interpretation(problem,interpretation);
2020 // The two endpoint of the link have to exist
2021 find mayExist(problem, interpretation, source);
2022 find mayExist(problem, interpretation, target);
2023 // Type consistency
2024 find mayInstanceOfModel_class(problem,interpretation,source);
2025 find mayInstanceOfFSObject_class(problem,interpretation,target);
2026 // The reference is containment, then a new reference cannot be create if:
2027 // 1. Multiple parents
2028 neg find mustContains4(problem,interpretation,_,target);
2029 // 2. Circle in the containment hierarchy
2030 neg find mustTransitiveContains(source,target);
2031} or {
2032 find mustInRelationotherFSObjects_reference_Model(problem,interpretation,source,target);
2033}
2034
2035//////////
2036// 1.3 Relation Definition Indexers
2037//////////
2038
2039//////////
2040// 1.4 Containment Indexer
2041//////////
2042private pattern mustContains2(source: DefinedElement, target: DefinedElement) {
2043 find mustContains4(_,_,source,target);
2044}
2045
2046private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation,
2047 source: DefinedElement, target: DefinedElement)
2048 { find mustInRelationroot_reference_FileSystem(problem,interpretation,source,target); }or
2049
2050 { find mustInRelationcontents_reference_Dir(problem,interpretation,source,target); }or
2051
2052 { find mustInRelationfilesystems_reference_Model(problem,interpretation,source,target); }or
2053
2054 { find mustInRelationotherFSObjects_reference_Model(problem,interpretation,source,target); }
2055
2056private pattern mustTransitiveContains(source,target) {
2057 find mustContains2+(source,target);
2058}
2059
2060//////////
2061// 2. Invalidation Indexers
2062//////////
2063// 2.1 Invalidated by WF Queries
2064//////////
2065
2066//////////
2067// 3. Unfinishedness Indexers
2068//////////
2069// 3.1 Unfinishedness Measured by Multiplicity
2070//////////
2071pattern unfinishedLowerMultiplicity_root_reference_FileSystem(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) {
2072 find interpretation(problem,interpretation);
2073 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
2074 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"root reference FileSystem");
2075 find mustInstanceOfFileSystem_class(problem,interpretation,object);
2076 numberOfExistingReferences == count find mustInRelationroot_reference_FileSystem(problem,interpretation,object,_);
2077 check(numberOfExistingReferences < 1);
2078 missingMultiplicity == eval(1-numberOfExistingReferences);
2079}
2080pattern unfinishedLowerMultiplicity_filesystems_reference_Model(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) {
2081 find interpretation(problem,interpretation);
2082 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
2083 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"filesystems reference Model");
2084 find mustInstanceOfModel_class(problem,interpretation,object);
2085 numberOfExistingReferences == count find mustInRelationfilesystems_reference_Model(problem,interpretation,object,_);
2086 check(numberOfExistingReferences < 1);
2087 missingMultiplicity == eval(1-numberOfExistingReferences);
2088}
2089
2090//////////
2091// 3.2 Unfinishedness Measured by WF Queries
2092//////////
2093
2094//////////
2095// 4. Refinement Indexers
2096//////////
2097// 4.1 Object constructors
2098//////////
2099private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation)
2100{
2101 find interpretation(problem,interpretation);
2102 find mustInstanceOfFile_class(problem,interpretation,root);
2103 find mustExist(problem, interpretation, root);
2104}or{
2105 find interpretation(problem,interpretation);
2106 find mustInstanceOfDir_class(problem,interpretation,root);
2107 find mustExist(problem, interpretation, root);
2108}or{
2109 find interpretation(problem,interpretation);
2110 find mustInstanceOfFileSystem_class(problem,interpretation,root);
2111 find mustExist(problem, interpretation, root);
2112}or{
2113 find interpretation(problem,interpretation);
2114 find mustInstanceOfModel_class(problem,interpretation,root);
2115 find mustExist(problem, interpretation, root);
2116}or{
2117 find interpretation(problem,interpretation);
2118 find mustInstanceOfFSObject_class(problem,interpretation,root);
2119 find mustExist(problem, interpretation, root);
2120}or{
2121 find interpretation(problem,interpretation);
2122 find mustInstanceOfModel_class_DefinedPart(problem,interpretation,root);
2123 find mustExist(problem, interpretation, root);
2124}or{
2125 find interpretation(problem,interpretation);
2126 find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,root);
2127 find mustExist(problem, interpretation, root);
2128}
2129pattern createObject_Model_class_UndefinedPart(
2130 problem:LogicProblem, interpretation:PartialInterpretation,
2131 typeInterpretation:PartialComplexTypeInterpretation)
2132{
2133 find interpretation(problem,interpretation);
2134 neg find hasElementInContainment(problem,interpretation);
2135 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
2136 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Model class UndefinedPart");
2137 find mayInstanceOfModel_class_UndefinedPart(problem,interpretation,newObject);
2138 find mayExist(problem, interpretation, newObject);
2139 neg find mustExist(problem, interpretation, newObject);
2140}
2141pattern createObject_Dir_class_by_root_reference_FileSystem(
2142 problem:LogicProblem, interpretation:PartialInterpretation,
2143 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
2144 container:DefinedElement)
2145{
2146 find interpretation(problem,interpretation);
2147 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
2148 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Dir class");
2149 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
2150 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"root reference FileSystem");
2151 find mustInstanceOfFileSystem_class(problem,interpretation,container);
2152 find mayInstanceOfDir_class(problem,interpretation,newObject);
2153 find mayInRelationroot_reference_FileSystem(problem,interpretation,container,newObject);
2154 find mustExist(problem, interpretation, container);
2155 neg find mustExist(problem, interpretation, newObject);
2156}
2157pattern createObject_Dir_class_by_contents_reference_Dir_with_parent_reference_FSObject(
2158 problem:LogicProblem, interpretation:PartialInterpretation,
2159 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
2160 container:DefinedElement)
2161{
2162 find interpretation(problem,interpretation);
2163 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
2164 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Dir class");
2165 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
2166 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"contents reference Dir");
2167 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
2168 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FSObject");
2169 find mustInstanceOfDir_class(problem,interpretation,container);
2170 find mayInstanceOfDir_class(problem,interpretation,newObject);
2171 find mayInRelationcontents_reference_Dir(problem,interpretation,container,newObject);
2172 find mustExist(problem, interpretation, container);
2173 neg find mustExist(problem, interpretation, newObject);
2174}
2175pattern createObject_Dir_class_by_otherFSObjects_reference_Model(
2176 problem:LogicProblem, interpretation:PartialInterpretation,
2177 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
2178 container:DefinedElement)
2179{
2180 find interpretation(problem,interpretation);
2181 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
2182 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Dir class");
2183 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
2184 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"otherFSObjects reference Model");
2185 find mustInstanceOfModel_class(problem,interpretation,container);
2186 find mayInstanceOfDir_class(problem,interpretation,newObject);
2187 find mayInRelationotherFSObjects_reference_Model(problem,interpretation,container,newObject);
2188 find mustExist(problem, interpretation, container);
2189 neg find mustExist(problem, interpretation, newObject);
2190}
2191pattern createObject_Dir_class(
2192 problem:LogicProblem, interpretation:PartialInterpretation,
2193 typeInterpretation:PartialComplexTypeInterpretation)
2194{
2195 find interpretation(problem,interpretation);
2196 neg find hasElementInContainment(problem,interpretation);
2197 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
2198 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Dir class");
2199 find mayInstanceOfDir_class(problem,interpretation,newObject);
2200 find mayExist(problem, interpretation, newObject);
2201 neg find mustExist(problem, interpretation, newObject);
2202}
2203pattern createObject_File_class_by_contents_reference_Dir_with_parent_reference_FSObject(
2204 problem:LogicProblem, interpretation:PartialInterpretation,
2205 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
2206 container:DefinedElement)
2207{
2208 find interpretation(problem,interpretation);
2209 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
2210 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"File class");
2211 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
2212 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"contents reference Dir");
2213 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
2214 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FSObject");
2215 find mustInstanceOfDir_class(problem,interpretation,container);
2216 find mayInstanceOfFile_class(problem,interpretation,newObject);
2217 find mayInRelationcontents_reference_Dir(problem,interpretation,container,newObject);
2218 find mustExist(problem, interpretation, container);
2219 neg find mustExist(problem, interpretation, newObject);
2220}
2221pattern createObject_File_class_by_otherFSObjects_reference_Model(
2222 problem:LogicProblem, interpretation:PartialInterpretation,
2223 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
2224 container:DefinedElement)
2225{
2226 find interpretation(problem,interpretation);
2227 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
2228 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"File class");
2229 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
2230 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"otherFSObjects reference Model");
2231 find mustInstanceOfModel_class(problem,interpretation,container);
2232 find mayInstanceOfFile_class(problem,interpretation,newObject);
2233 find mayInRelationotherFSObjects_reference_Model(problem,interpretation,container,newObject);
2234 find mustExist(problem, interpretation, container);
2235 neg find mustExist(problem, interpretation, newObject);
2236}
2237pattern createObject_File_class(
2238 problem:LogicProblem, interpretation:PartialInterpretation,
2239 typeInterpretation:PartialComplexTypeInterpretation)
2240{
2241 find interpretation(problem,interpretation);
2242 neg find hasElementInContainment(problem,interpretation);
2243 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
2244 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"File class");
2245 find mayInstanceOfFile_class(problem,interpretation,newObject);
2246 find mayExist(problem, interpretation, newObject);
2247 neg find mustExist(problem, interpretation, newObject);
2248}
2249pattern createObject_FileSystem_class_by_filesystems_reference_Model(
2250 problem:LogicProblem, interpretation:PartialInterpretation,
2251 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
2252 container:DefinedElement)
2253{
2254 find interpretation(problem,interpretation);
2255 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
2256 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FileSystem class");
2257 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
2258 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"filesystems reference Model");
2259 find mustInstanceOfModel_class(problem,interpretation,container);
2260 find mayInstanceOfFileSystem_class(problem,interpretation,newObject);
2261 find mayInRelationfilesystems_reference_Model(problem,interpretation,container,newObject);
2262 find mustExist(problem, interpretation, container);
2263 neg find mustExist(problem, interpretation, newObject);
2264}
2265pattern createObject_FileSystem_class(
2266 problem:LogicProblem, interpretation:PartialInterpretation,
2267 typeInterpretation:PartialComplexTypeInterpretation)
2268{
2269 find interpretation(problem,interpretation);
2270 neg find hasElementInContainment(problem,interpretation);
2271 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
2272 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FileSystem class");
2273 find mayInstanceOfFileSystem_class(problem,interpretation,newObject);
2274 find mayExist(problem, interpretation, newObject);
2275 neg find mustExist(problem, interpretation, newObject);
2276}
2277
2278//////////
2279// 4.2 Type refinement
2280//////////
2281pattern refineTypeTo_Model_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
2282 find interpretation(problem,interpretation);
2283 PartialInterpretation.newElements(interpretation,element);
2284 find mayInstanceOfModel_class_UndefinedPart(problem,interpretation,element);
2285 neg find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,element);
2286 neg find mustInstanceOfFSObject_class(problem,interpretation,element);
2287 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
2288}
2289pattern refineTypeTo_Dir_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
2290 find interpretation(problem,interpretation);
2291 PartialInterpretation.newElements(interpretation,element);
2292 find mayInstanceOfDir_class(problem,interpretation,element);
2293 neg find mustInstanceOfDir_class(problem,interpretation,element);
2294 neg find mustInstanceOfModel_class(problem,interpretation,element);
2295 neg find mustInstanceOfFile_class(problem,interpretation,element);
2296 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
2297}
2298pattern refineTypeTo_File_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
2299 find interpretation(problem,interpretation);
2300 PartialInterpretation.newElements(interpretation,element);
2301 find mayInstanceOfFile_class(problem,interpretation,element);
2302 neg find mustInstanceOfDir_class(problem,interpretation,element);
2303 neg find mustInstanceOfModel_class(problem,interpretation,element);
2304 neg find mustInstanceOfFile_class(problem,interpretation,element);
2305 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
2306}
2307pattern refineTypeTo_FileSystem_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
2308 find interpretation(problem,interpretation);
2309 PartialInterpretation.newElements(interpretation,element);
2310 find mayInstanceOfFileSystem_class(problem,interpretation,element);
2311 neg find mustInstanceOfFSObject_class(problem,interpretation,element);
2312 neg find mustInstanceOfModel_class(problem,interpretation,element);
2313 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
2314}
2315
2316//////////
2317// 4.3 Relation refinement
2318//////////
2319pattern refineRelation_live_reference_FileSystem(
2320 problem:LogicProblem, interpretation:PartialInterpretation,
2321 relationIterpretation:PartialRelationInterpretation,
2322 from: DefinedElement, to: DefinedElement)
2323{
2324 find interpretation(problem,interpretation);
2325 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
2326 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"live reference FileSystem");
2327 find mustExist(problem, interpretation, from);
2328 find mustExist(problem, interpretation, to);
2329 find mustInstanceOfFileSystem_class(problem,interpretation,from);
2330 find mustInstanceOfFSObject_class(problem,interpretation,to);
2331 find mayInRelationlive_reference_FileSystem(problem,interpretation,from,to);
2332 neg find mustInRelationlive_reference_FileSystem(problem,interpretation,from,to);
2333}
2334import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage"
2335import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem"
2336import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language"
2337
2338//////////
2339// 0. Util
2340//////////
2341private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) {
2342 PartialInterpretation.problem(interpretation,problem);
2343}
2344
2345/////////////////////////
2346// 0.1 Existence
2347/////////////////////////
2348private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
2349 find interpretation(problem,interpretation);
2350 LogicProblem.elements(problem,element);
2351} or {
2352 find interpretation(problem,interpretation);
2353 PartialInterpretation.newElements(interpretation,element);
2354}
2355
2356private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
2357 find mustExist(problem,interpretation,element);
2358} or {
2359 find interpretation(problem,interpretation);
2360 neg find elementCloseWorld(element);
2361 PartialInterpretation.openWorldElements(interpretation,element);
2362}
2363
2364private pattern elementCloseWorld(element:DefinedElement) {
2365 PartialInterpretation.openWorldElements(i,element);
2366 PartialInterpretation.maxNewElements(i,0);
2367} or {
2368 Scope.targetTypeInterpretation(scope,interpretation);
2369 PartialTypeInterpratation.elements(interpretation,element);
2370 Scope.maxNewElements(scope,0);
2371}
2372
2373////////////////////////
2374// 0.2 Equivalence
2375////////////////////////
2376pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) {
2377 find mayExist(problem,interpretation,a);
2378 find mayExist(problem,interpretation,b);
2379 a == b;
2380}
2381
2382////////////////////////
2383// 0.3 Required Patterns by TypeIndexer
2384////////////////////////
2385private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) {
2386 find interpretation(problem,interpretation);
2387 LogicProblem.types(problem,type);
2388 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
2389 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
2390}
2391
2392private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) {
2393 find interpretation(problem,interpretation);
2394 LogicProblem.types(problem,type);
2395 TypeDefinition.elements(type,element);
2396} or {
2397 find interpretation(problem,interpretation);
2398 find typeInterpretation(problem,interpretation,type,typeInterpretation);
2399 PartialComplexTypeInterpretation.elements(typeInterpretation,element);
2400}
2401
2402private pattern isPrimitive(element: PrimitiveElement) {
2403 PrimitiveElement(element);
2404}
2405
2406//////////
2407// 1. Problem-Specific Base Indexers
2408//////////
2409// 1.1 Type Indexers
2410//////////
2411// 1.1.1 primitive Type Indexers
2412//////////
2413
2414//////////
2415// 1.1.2 domain-specific Type Indexers
2416//////////
2417/**
2418 * An element must be an instance of type "FileSystem class".
2419 */
2420private pattern mustInstanceOfFileSystem_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
2421 Type.name(type,"FileSystem class");
2422 find directInstanceOf(problem,interpretation,element,type);
2423}
2424private pattern scopeDisallowsNewFileSystem_class(problem:LogicProblem, interpretation:PartialInterpretation) {
2425 find interpretation(problem,interpretation);
2426 PartialInterpretation.scopes(interpretation,scope);
2427 Scope.targetTypeInterpretation(scope,typeInterpretation);
2428 Scope.maxNewElements(scope,0);
2429 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
2430 Type.name(type,"FileSystem class");
2431}
2432
2433/**
2434 * An element may be an instance of type "FileSystem class".
2435 */
2436private pattern mayInstanceOfFileSystem_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
2437{
2438 find interpretation(problem,interpretation);
2439 PartialInterpretation.newElements(interpretation,element);
2440 neg find mustInstanceOfModel_class(problem,interpretation,element);
2441 neg find mustInstanceOfFSObject_class(problem,interpretation,element);
2442 neg find scopeDisallowsNewFileSystem_class(problem, interpretation);
2443 neg find isPrimitive(element);
2444} or {
2445 find interpretation(problem,interpretation);
2446 PartialInterpretation.openWorldElements(interpretation,element);
2447 neg find mustInstanceOfModel_class(problem,interpretation,element);
2448 neg find mustInstanceOfFSObject_class(problem,interpretation,element);
2449 neg find scopeDisallowsNewFileSystem_class(problem, interpretation);
2450 neg find isPrimitive(element);
2451} or
2452{ find mustInstanceOfFileSystem_class(problem,interpretation,element); }
2453/**
2454 * An element must be an instance of type "FSObject class".
2455 */
2456private pattern mustInstanceOfFSObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
2457 Type.name(type,"FSObject class");
2458 find directInstanceOf(problem,interpretation,element,type);
2459}
2460private pattern scopeDisallowsNewFSObject_class(problem:LogicProblem, interpretation:PartialInterpretation) {
2461 find interpretation(problem,interpretation);
2462 PartialInterpretation.scopes(interpretation,scope);
2463 Scope.targetTypeInterpretation(scope,typeInterpretation);
2464 Scope.maxNewElements(scope,0);
2465 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
2466 Type.name(type,"FSObject class");
2467}
2468
2469/**
2470 * An element may be an instance of type "FSObject class".
2471 */
2472private pattern mayInstanceOfFSObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
2473{
2474 find interpretation(problem,interpretation);
2475 PartialInterpretation.newElements(interpretation,element);
2476 neg find mustInstanceOfFile_class(problem,interpretation,element);
2477 neg find mustInstanceOfModel_class(problem,interpretation,element);
2478 neg find mustInstanceOfDir_class(problem,interpretation,element);
2479 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
2480 neg find scopeDisallowsNewFSObject_class(problem, interpretation);
2481 neg find isPrimitive(element);
2482} or {
2483 find interpretation(problem,interpretation);
2484 PartialInterpretation.openWorldElements(interpretation,element);
2485 neg find mustInstanceOfFile_class(problem,interpretation,element);
2486 neg find mustInstanceOfModel_class(problem,interpretation,element);
2487 neg find mustInstanceOfDir_class(problem,interpretation,element);
2488 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
2489 neg find scopeDisallowsNewFSObject_class(problem, interpretation);
2490 neg find isPrimitive(element);
2491} or
2492{ find mustInstanceOfFSObject_class(problem,interpretation,element); }
2493/**
2494 * An element must be an instance of type "Dir class".
2495 */
2496private pattern mustInstanceOfDir_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
2497 Type.name(type,"Dir class");
2498 find directInstanceOf(problem,interpretation,element,type);
2499}
2500private pattern scopeDisallowsNewDir_class(problem:LogicProblem, interpretation:PartialInterpretation) {
2501 find interpretation(problem,interpretation);
2502 PartialInterpretation.scopes(interpretation,scope);
2503 Scope.targetTypeInterpretation(scope,typeInterpretation);
2504 Scope.maxNewElements(scope,0);
2505 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
2506 Type.name(type,"Dir class");
2507}
2508
2509/**
2510 * An element may be an instance of type "Dir class".
2511 */
2512private pattern mayInstanceOfDir_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
2513{
2514 find interpretation(problem,interpretation);
2515 PartialInterpretation.newElements(interpretation,element);
2516 neg find mustInstanceOfFile_class(problem,interpretation,element);
2517 neg find mustInstanceOfModel_class(problem,interpretation,element);
2518 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
2519 neg find scopeDisallowsNewDir_class(problem, interpretation);
2520 neg find isPrimitive(element);
2521} or {
2522 find interpretation(problem,interpretation);
2523 PartialInterpretation.openWorldElements(interpretation,element);
2524 neg find mustInstanceOfFile_class(problem,interpretation,element);
2525 neg find mustInstanceOfModel_class(problem,interpretation,element);
2526 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
2527 neg find scopeDisallowsNewDir_class(problem, interpretation);
2528 neg find isPrimitive(element);
2529} or
2530{ find mustInstanceOfDir_class(problem,interpretation,element); }
2531/**
2532 * An element must be an instance of type "File class".
2533 */
2534private pattern mustInstanceOfFile_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
2535 Type.name(type,"File class");
2536 find directInstanceOf(problem,interpretation,element,type);
2537}
2538private pattern scopeDisallowsNewFile_class(problem:LogicProblem, interpretation:PartialInterpretation) {
2539 find interpretation(problem,interpretation);
2540 PartialInterpretation.scopes(interpretation,scope);
2541 Scope.targetTypeInterpretation(scope,typeInterpretation);
2542 Scope.maxNewElements(scope,0);
2543 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
2544 Type.name(type,"File class");
2545}
2546
2547/**
2548 * An element may be an instance of type "File class".
2549 */
2550private pattern mayInstanceOfFile_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
2551{
2552 find interpretation(problem,interpretation);
2553 PartialInterpretation.newElements(interpretation,element);
2554 neg find mustInstanceOfModel_class(problem,interpretation,element);
2555 neg find mustInstanceOfDir_class(problem,interpretation,element);
2556 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
2557 neg find scopeDisallowsNewFile_class(problem, interpretation);
2558 neg find isPrimitive(element);
2559} or {
2560 find interpretation(problem,interpretation);
2561 PartialInterpretation.openWorldElements(interpretation,element);
2562 neg find mustInstanceOfModel_class(problem,interpretation,element);
2563 neg find mustInstanceOfDir_class(problem,interpretation,element);
2564 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
2565 neg find scopeDisallowsNewFile_class(problem, interpretation);
2566 neg find isPrimitive(element);
2567} or
2568{ find mustInstanceOfFile_class(problem,interpretation,element); }
2569/**
2570 * An element must be an instance of type "Model class".
2571 */
2572private pattern mustInstanceOfModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
2573 Type.name(type,"Model class");
2574 find directInstanceOf(problem,interpretation,element,type);
2575}
2576private pattern scopeDisallowsNewModel_class(problem:LogicProblem, interpretation:PartialInterpretation) {
2577 find interpretation(problem,interpretation);
2578 PartialInterpretation.scopes(interpretation,scope);
2579 Scope.targetTypeInterpretation(scope,typeInterpretation);
2580 Scope.maxNewElements(scope,0);
2581 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
2582 Type.name(type,"Model class");
2583}
2584
2585/**
2586 * An element may be an instance of type "Model class".
2587 */
2588private pattern mayInstanceOfModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
2589{
2590 find interpretation(problem,interpretation);
2591 PartialInterpretation.newElements(interpretation,element);
2592 neg find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,element);
2593 neg find mustInstanceOfFSObject_class(problem,interpretation,element);
2594 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
2595 neg find scopeDisallowsNewModel_class(problem, interpretation);
2596 neg find isPrimitive(element);
2597} or {
2598 find interpretation(problem,interpretation);
2599 PartialInterpretation.openWorldElements(interpretation,element);
2600 neg find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,element);
2601 neg find mustInstanceOfFSObject_class(problem,interpretation,element);
2602 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
2603 neg find scopeDisallowsNewModel_class(problem, interpretation);
2604 neg find isPrimitive(element);
2605} or
2606{ find mustInstanceOfModel_class(problem,interpretation,element); }
2607/**
2608 * An element must be an instance of type "Model class DefinedPart".
2609 */
2610private pattern mustInstanceOfModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
2611 Type.name(type,"Model class DefinedPart");
2612 find directInstanceOf(problem,interpretation,element,type);
2613}
2614private pattern scopeDisallowsNewModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
2615 find interpretation(problem,interpretation);
2616 PartialInterpretation.scopes(interpretation,scope);
2617 Scope.targetTypeInterpretation(scope,typeInterpretation);
2618 Scope.maxNewElements(scope,0);
2619 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
2620 Type.name(type,"Model class DefinedPart");
2621}
2622
2623/**
2624 * An element may be an instance of type "Model class DefinedPart".
2625 */
2626private pattern mayInstanceOfModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
2627{ find mustInstanceOfModel_class_DefinedPart(problem,interpretation,element); }
2628/**
2629 * An element must be an instance of type "Model class UndefinedPart".
2630 */
2631private pattern mustInstanceOfModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
2632 Type.name(type,"Model class UndefinedPart");
2633 find directInstanceOf(problem,interpretation,element,type);
2634}
2635private pattern scopeDisallowsNewModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
2636 find interpretation(problem,interpretation);
2637 PartialInterpretation.scopes(interpretation,scope);
2638 Scope.targetTypeInterpretation(scope,typeInterpretation);
2639 Scope.maxNewElements(scope,0);
2640 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
2641 Type.name(type,"Model class UndefinedPart");
2642}
2643
2644/**
2645 * An element may be an instance of type "Model class UndefinedPart".
2646 */
2647private pattern mayInstanceOfModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
2648{
2649 find interpretation(problem,interpretation);
2650 PartialInterpretation.newElements(interpretation,element);
2651 neg find mustInstanceOfFSObject_class(problem,interpretation,element);
2652 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
2653 neg find scopeDisallowsNewModel_class_UndefinedPart(problem, interpretation);
2654 neg find isPrimitive(element);
2655} or {
2656 find interpretation(problem,interpretation);
2657 PartialInterpretation.openWorldElements(interpretation,element);
2658 neg find mustInstanceOfFSObject_class(problem,interpretation,element);
2659 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
2660 neg find scopeDisallowsNewModel_class_UndefinedPart(problem, interpretation);
2661 neg find isPrimitive(element);
2662} or
2663{ find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,element); }
2664
2665//////////
2666// 1.2 Relation Declaration Indexers
2667//////////
2668/**
2669 * Matcher for detecting tuples t where []root reference FileSystem(source,target)
2670 */
2671private pattern mustInRelationroot_reference_FileSystem(
2672 problem:LogicProblem, interpretation:PartialInterpretation,
2673 source: DefinedElement, target:DefinedElement)
2674{
2675 find interpretation(problem,interpretation);
2676 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
2677 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"root reference FileSystem");
2678 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
2679 BinaryElementRelationLink.param1(link,source);
2680 BinaryElementRelationLink.param2(link,target);
2681}
2682/**
2683 * Matcher for detecting tuples t where <>root reference FileSystem(source,target)
2684 */
2685private pattern mayInRelationroot_reference_FileSystem(
2686 problem:LogicProblem, interpretation:PartialInterpretation,
2687 source: DefinedElement, target:DefinedElement)
2688{
2689 find interpretation(problem,interpretation);
2690 // The two endpoint of the link have to exist
2691 find mayExist(problem, interpretation, source);
2692 find mayExist(problem, interpretation, target);
2693 // Type consistency
2694 find mayInstanceOfFileSystem_class(problem,interpretation,source);
2695 find mayInstanceOfDir_class(problem,interpretation,target);
2696 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
2697 // the upper bound of the multiplicity should be considered.
2698 numberOfExistingReferences == count find mustInRelationroot_reference_FileSystem(problem,interpretation,source,_);
2699 check(numberOfExistingReferences < 1);
2700 // The reference is containment, then a new reference cannot be create if:
2701 // 1. Multiple parents
2702 neg find mustContains4(problem,interpretation,_,target);
2703 // 2. Circle in the containment hierarchy
2704 neg find mustTransitiveContains(source,target);
2705} or {
2706 find mustInRelationroot_reference_FileSystem(problem,interpretation,source,target);
2707}
2708/**
2709 * Matcher for detecting tuples t where []live reference FileSystem(source,target)
2710 */
2711private pattern mustInRelationlive_reference_FileSystem(
2712 problem:LogicProblem, interpretation:PartialInterpretation,
2713 source: DefinedElement, target:DefinedElement)
2714{
2715 find interpretation(problem,interpretation);
2716 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
2717 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"live reference FileSystem");
2718 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
2719 BinaryElementRelationLink.param1(link,source);
2720 BinaryElementRelationLink.param2(link,target);
2721}
2722/**
2723 * Matcher for detecting tuples t where <>live reference FileSystem(source,target)
2724 */
2725private pattern mayInRelationlive_reference_FileSystem(
2726 problem:LogicProblem, interpretation:PartialInterpretation,
2727 source: DefinedElement, target:DefinedElement)
2728{
2729 find interpretation(problem,interpretation);
2730 // The two endpoint of the link have to exist
2731 find mayExist(problem, interpretation, source);
2732 find mayExist(problem, interpretation, target);
2733 // Type consistency
2734 find mayInstanceOfFileSystem_class(problem,interpretation,source);
2735 find mayInstanceOfFSObject_class(problem,interpretation,target);
2736} or {
2737 find mustInRelationlive_reference_FileSystem(problem,interpretation,source,target);
2738}
2739/**
2740 * Matcher for detecting tuples t where []parent reference FSObject(source,target)
2741 */
2742private pattern mustInRelationparent_reference_FSObject(
2743 problem:LogicProblem, interpretation:PartialInterpretation,
2744 source: DefinedElement, target:DefinedElement)
2745{
2746 find interpretation(problem,interpretation);
2747 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
2748 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"parent reference FSObject");
2749 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
2750 BinaryElementRelationLink.param1(link,source);
2751 BinaryElementRelationLink.param2(link,target);
2752}
2753/**
2754 * Matcher for detecting tuples t where <>parent reference FSObject(source,target)
2755 */
2756private pattern mayInRelationparent_reference_FSObject(
2757 problem:LogicProblem, interpretation:PartialInterpretation,
2758 source: DefinedElement, target:DefinedElement)
2759{
2760 find interpretation(problem,interpretation);
2761 // The two endpoint of the link have to exist
2762 find mayExist(problem, interpretation, source);
2763 find mayExist(problem, interpretation, target);
2764 // Type consistency
2765 find mayInstanceOfFSObject_class(problem,interpretation,source);
2766 find mayInstanceOfDir_class(problem,interpretation,target);
2767 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
2768 // the upper bound of the multiplicity should be considered.
2769 numberOfExistingReferences == count find mustInRelationparent_reference_FSObject(problem,interpretation,source,_);
2770 check(numberOfExistingReferences < 1);
2771 // The eOpposite of the reference is containment, then a referene cannot be created if
2772 // 1. Multiple parents
2773 neg find mustContains4(problem,interpretation,source,_);
2774 // 2. Circle in the containment hierarchy
2775 neg find mustTransitiveContains(source,target);
2776} or {
2777 find mustInRelationparent_reference_FSObject(problem,interpretation,source,target);
2778}
2779/**
2780 * Matcher for detecting tuples t where []contents reference Dir(source,target)
2781 */
2782private pattern mustInRelationcontents_reference_Dir(
2783 problem:LogicProblem, interpretation:PartialInterpretation,
2784 source: DefinedElement, target:DefinedElement)
2785{
2786 find interpretation(problem,interpretation);
2787 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
2788 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"contents reference Dir");
2789 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
2790 BinaryElementRelationLink.param1(link,source);
2791 BinaryElementRelationLink.param2(link,target);
2792}
2793/**
2794 * Matcher for detecting tuples t where <>contents reference Dir(source,target)
2795 */
2796private pattern mayInRelationcontents_reference_Dir(
2797 problem:LogicProblem, interpretation:PartialInterpretation,
2798 source: DefinedElement, target:DefinedElement)
2799{
2800 find interpretation(problem,interpretation);
2801 // The two endpoint of the link have to exist
2802 find mayExist(problem, interpretation, source);
2803 find mayExist(problem, interpretation, target);
2804 // Type consistency
2805 find mayInstanceOfDir_class(problem,interpretation,source);
2806 find mayInstanceOfFSObject_class(problem,interpretation,target);
2807 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
2808 // the upper bound of the opposite reference multiplicity should be considered.
2809 numberOfExistingOppositeReferences == count find mustInRelationparent_reference_FSObject(problem,interpretation,target,_);
2810 check(numberOfExistingOppositeReferences < 1);
2811 // The reference is containment, then a new reference cannot be create if:
2812 // 1. Multiple parents
2813 neg find mustContains4(problem,interpretation,_,target);
2814 // 2. Circle in the containment hierarchy
2815 neg find mustTransitiveContains(source,target);
2816} or {
2817 find mustInRelationcontents_reference_Dir(problem,interpretation,source,target);
2818}
2819/**
2820 * Matcher for detecting tuples t where []filesystems reference Model(source,target)
2821 */
2822private pattern mustInRelationfilesystems_reference_Model(
2823 problem:LogicProblem, interpretation:PartialInterpretation,
2824 source: DefinedElement, target:DefinedElement)
2825{
2826 find interpretation(problem,interpretation);
2827 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
2828 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"filesystems reference Model");
2829 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
2830 BinaryElementRelationLink.param1(link,source);
2831 BinaryElementRelationLink.param2(link,target);
2832}
2833/**
2834 * Matcher for detecting tuples t where <>filesystems reference Model(source,target)
2835 */
2836private pattern mayInRelationfilesystems_reference_Model(
2837 problem:LogicProblem, interpretation:PartialInterpretation,
2838 source: DefinedElement, target:DefinedElement)
2839{
2840 find interpretation(problem,interpretation);
2841 // The two endpoint of the link have to exist
2842 find mayExist(problem, interpretation, source);
2843 find mayExist(problem, interpretation, target);
2844 // Type consistency
2845 find mayInstanceOfModel_class(problem,interpretation,source);
2846 find mayInstanceOfFileSystem_class(problem,interpretation,target);
2847 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
2848 // the upper bound of the multiplicity should be considered.
2849 numberOfExistingReferences == count find mustInRelationfilesystems_reference_Model(problem,interpretation,source,_);
2850 check(numberOfExistingReferences < 1);
2851 // The reference is containment, then a new reference cannot be create if:
2852 // 1. Multiple parents
2853 neg find mustContains4(problem,interpretation,_,target);
2854 // 2. Circle in the containment hierarchy
2855 neg find mustTransitiveContains(source,target);
2856} or {
2857 find mustInRelationfilesystems_reference_Model(problem,interpretation,source,target);
2858}
2859/**
2860 * Matcher for detecting tuples t where []otherFSObjects reference Model(source,target)
2861 */
2862private pattern mustInRelationotherFSObjects_reference_Model(
2863 problem:LogicProblem, interpretation:PartialInterpretation,
2864 source: DefinedElement, target:DefinedElement)
2865{
2866 find interpretation(problem,interpretation);
2867 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
2868 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"otherFSObjects reference Model");
2869 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
2870 BinaryElementRelationLink.param1(link,source);
2871 BinaryElementRelationLink.param2(link,target);
2872}
2873/**
2874 * Matcher for detecting tuples t where <>otherFSObjects reference Model(source,target)
2875 */
2876private pattern mayInRelationotherFSObjects_reference_Model(
2877 problem:LogicProblem, interpretation:PartialInterpretation,
2878 source: DefinedElement, target:DefinedElement)
2879{
2880 find interpretation(problem,interpretation);
2881 // The two endpoint of the link have to exist
2882 find mayExist(problem, interpretation, source);
2883 find mayExist(problem, interpretation, target);
2884 // Type consistency
2885 find mayInstanceOfModel_class(problem,interpretation,source);
2886 find mayInstanceOfFSObject_class(problem,interpretation,target);
2887 // The reference is containment, then a new reference cannot be create if:
2888 // 1. Multiple parents
2889 neg find mustContains4(problem,interpretation,_,target);
2890 // 2. Circle in the containment hierarchy
2891 neg find mustTransitiveContains(source,target);
2892} or {
2893 find mustInRelationotherFSObjects_reference_Model(problem,interpretation,source,target);
2894}
2895
2896//////////
2897// 1.3 Relation Definition Indexers
2898//////////
2899
2900//////////
2901// 1.4 Containment Indexer
2902//////////
2903private pattern mustContains2(source: DefinedElement, target: DefinedElement) {
2904 find mustContains4(_,_,source,target);
2905}
2906
2907private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation,
2908 source: DefinedElement, target: DefinedElement)
2909 { find mustInRelationroot_reference_FileSystem(problem,interpretation,source,target); }or
2910
2911 { find mustInRelationcontents_reference_Dir(problem,interpretation,source,target); }or
2912
2913 { find mustInRelationfilesystems_reference_Model(problem,interpretation,source,target); }or
2914
2915 { find mustInRelationotherFSObjects_reference_Model(problem,interpretation,source,target); }
2916
2917private pattern mustTransitiveContains(source,target) {
2918 find mustContains2+(source,target);
2919}
2920
2921//////////
2922// 2. Invalidation Indexers
2923//////////
2924// 2.1 Invalidated by WF Queries
2925//////////
2926
2927//////////
2928// 3. Unfinishedness Indexers
2929//////////
2930// 3.1 Unfinishedness Measured by Multiplicity
2931//////////
2932pattern unfinishedLowerMultiplicity_root_reference_FileSystem(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) {
2933 find interpretation(problem,interpretation);
2934 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
2935 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"root reference FileSystem");
2936 find mustInstanceOfFileSystem_class(problem,interpretation,object);
2937 numberOfExistingReferences == count find mustInRelationroot_reference_FileSystem(problem,interpretation,object,_);
2938 check(numberOfExistingReferences < 1);
2939 missingMultiplicity == eval(1-numberOfExistingReferences);
2940}
2941pattern unfinishedLowerMultiplicity_filesystems_reference_Model(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) {
2942 find interpretation(problem,interpretation);
2943 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
2944 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"filesystems reference Model");
2945 find mustInstanceOfModel_class(problem,interpretation,object);
2946 numberOfExistingReferences == count find mustInRelationfilesystems_reference_Model(problem,interpretation,object,_);
2947 check(numberOfExistingReferences < 1);
2948 missingMultiplicity == eval(1-numberOfExistingReferences);
2949}
2950
2951//////////
2952// 3.2 Unfinishedness Measured by WF Queries
2953//////////
2954
2955//////////
2956// 4. Refinement Indexers
2957//////////
2958// 4.1 Object constructors
2959//////////
2960private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation)
2961{
2962 find interpretation(problem,interpretation);
2963 find mustInstanceOfFile_class(problem,interpretation,root);
2964 find mustExist(problem, interpretation, root);
2965}or{
2966 find interpretation(problem,interpretation);
2967 find mustInstanceOfDir_class(problem,interpretation,root);
2968 find mustExist(problem, interpretation, root);
2969}or{
2970 find interpretation(problem,interpretation);
2971 find mustInstanceOfFileSystem_class(problem,interpretation,root);
2972 find mustExist(problem, interpretation, root);
2973}or{
2974 find interpretation(problem,interpretation);
2975 find mustInstanceOfModel_class(problem,interpretation,root);
2976 find mustExist(problem, interpretation, root);
2977}or{
2978 find interpretation(problem,interpretation);
2979 find mustInstanceOfFSObject_class(problem,interpretation,root);
2980 find mustExist(problem, interpretation, root);
2981}or{
2982 find interpretation(problem,interpretation);
2983 find mustInstanceOfModel_class_DefinedPart(problem,interpretation,root);
2984 find mustExist(problem, interpretation, root);
2985}or{
2986 find interpretation(problem,interpretation);
2987 find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,root);
2988 find mustExist(problem, interpretation, root);
2989}
2990pattern createObject_Model_class_UndefinedPart(
2991 problem:LogicProblem, interpretation:PartialInterpretation,
2992 typeInterpretation:PartialComplexTypeInterpretation)
2993{
2994 find interpretation(problem,interpretation);
2995 neg find hasElementInContainment(problem,interpretation);
2996 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
2997 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Model class UndefinedPart");
2998 find mayInstanceOfModel_class_UndefinedPart(problem,interpretation,newObject);
2999 find mayExist(problem, interpretation, newObject);
3000 neg find mustExist(problem, interpretation, newObject);
3001}
3002pattern createObject_File_class_by_contents_reference_Dir_with_parent_reference_FSObject(
3003 problem:LogicProblem, interpretation:PartialInterpretation,
3004 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
3005 container:DefinedElement)
3006{
3007 find interpretation(problem,interpretation);
3008 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
3009 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"File class");
3010 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
3011 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"contents reference Dir");
3012 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
3013 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FSObject");
3014 find mustInstanceOfDir_class(problem,interpretation,container);
3015 find mayInstanceOfFile_class(problem,interpretation,newObject);
3016 find mayInRelationcontents_reference_Dir(problem,interpretation,container,newObject);
3017 find mustExist(problem, interpretation, container);
3018 neg find mustExist(problem, interpretation, newObject);
3019}
3020pattern createObject_File_class_by_otherFSObjects_reference_Model(
3021 problem:LogicProblem, interpretation:PartialInterpretation,
3022 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
3023 container:DefinedElement)
3024{
3025 find interpretation(problem,interpretation);
3026 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
3027 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"File class");
3028 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
3029 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"otherFSObjects reference Model");
3030 find mustInstanceOfModel_class(problem,interpretation,container);
3031 find mayInstanceOfFile_class(problem,interpretation,newObject);
3032 find mayInRelationotherFSObjects_reference_Model(problem,interpretation,container,newObject);
3033 find mustExist(problem, interpretation, container);
3034 neg find mustExist(problem, interpretation, newObject);
3035}
3036pattern createObject_File_class(
3037 problem:LogicProblem, interpretation:PartialInterpretation,
3038 typeInterpretation:PartialComplexTypeInterpretation)
3039{
3040 find interpretation(problem,interpretation);
3041 neg find hasElementInContainment(problem,interpretation);
3042 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
3043 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"File class");
3044 find mayInstanceOfFile_class(problem,interpretation,newObject);
3045 find mayExist(problem, interpretation, newObject);
3046 neg find mustExist(problem, interpretation, newObject);
3047}
3048pattern createObject_Dir_class_by_root_reference_FileSystem(
3049 problem:LogicProblem, interpretation:PartialInterpretation,
3050 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
3051 container:DefinedElement)
3052{
3053 find interpretation(problem,interpretation);
3054 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
3055 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Dir class");
3056 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
3057 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"root reference FileSystem");
3058 find mustInstanceOfFileSystem_class(problem,interpretation,container);
3059 find mayInstanceOfDir_class(problem,interpretation,newObject);
3060 find mayInRelationroot_reference_FileSystem(problem,interpretation,container,newObject);
3061 find mustExist(problem, interpretation, container);
3062 neg find mustExist(problem, interpretation, newObject);
3063}
3064pattern createObject_Dir_class_by_contents_reference_Dir_with_parent_reference_FSObject(
3065 problem:LogicProblem, interpretation:PartialInterpretation,
3066 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
3067 container:DefinedElement)
3068{
3069 find interpretation(problem,interpretation);
3070 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
3071 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Dir class");
3072 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
3073 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"contents reference Dir");
3074 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
3075 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FSObject");
3076 find mustInstanceOfDir_class(problem,interpretation,container);
3077 find mayInstanceOfDir_class(problem,interpretation,newObject);
3078 find mayInRelationcontents_reference_Dir(problem,interpretation,container,newObject);
3079 find mustExist(problem, interpretation, container);
3080 neg find mustExist(problem, interpretation, newObject);
3081}
3082pattern createObject_Dir_class_by_otherFSObjects_reference_Model(
3083 problem:LogicProblem, interpretation:PartialInterpretation,
3084 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
3085 container:DefinedElement)
3086{
3087 find interpretation(problem,interpretation);
3088 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
3089 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Dir class");
3090 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
3091 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"otherFSObjects reference Model");
3092 find mustInstanceOfModel_class(problem,interpretation,container);
3093 find mayInstanceOfDir_class(problem,interpretation,newObject);
3094 find mayInRelationotherFSObjects_reference_Model(problem,interpretation,container,newObject);
3095 find mustExist(problem, interpretation, container);
3096 neg find mustExist(problem, interpretation, newObject);
3097}
3098pattern createObject_Dir_class(
3099 problem:LogicProblem, interpretation:PartialInterpretation,
3100 typeInterpretation:PartialComplexTypeInterpretation)
3101{
3102 find interpretation(problem,interpretation);
3103 neg find hasElementInContainment(problem,interpretation);
3104 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
3105 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Dir class");
3106 find mayInstanceOfDir_class(problem,interpretation,newObject);
3107 find mayExist(problem, interpretation, newObject);
3108 neg find mustExist(problem, interpretation, newObject);
3109}
3110pattern createObject_FileSystem_class_by_filesystems_reference_Model(
3111 problem:LogicProblem, interpretation:PartialInterpretation,
3112 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
3113 container:DefinedElement)
3114{
3115 find interpretation(problem,interpretation);
3116 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
3117 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FileSystem class");
3118 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
3119 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"filesystems reference Model");
3120 find mustInstanceOfModel_class(problem,interpretation,container);
3121 find mayInstanceOfFileSystem_class(problem,interpretation,newObject);
3122 find mayInRelationfilesystems_reference_Model(problem,interpretation,container,newObject);
3123 find mustExist(problem, interpretation, container);
3124 neg find mustExist(problem, interpretation, newObject);
3125}
3126pattern createObject_FileSystem_class(
3127 problem:LogicProblem, interpretation:PartialInterpretation,
3128 typeInterpretation:PartialComplexTypeInterpretation)
3129{
3130 find interpretation(problem,interpretation);
3131 neg find hasElementInContainment(problem,interpretation);
3132 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
3133 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FileSystem class");
3134 find mayInstanceOfFileSystem_class(problem,interpretation,newObject);
3135 find mayExist(problem, interpretation, newObject);
3136 neg find mustExist(problem, interpretation, newObject);
3137}
3138
3139//////////
3140// 4.2 Type refinement
3141//////////
3142pattern refineTypeTo_Model_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
3143 find interpretation(problem,interpretation);
3144 PartialInterpretation.newElements(interpretation,element);
3145 find mayInstanceOfModel_class_UndefinedPart(problem,interpretation,element);
3146 neg find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,element);
3147 neg find mustInstanceOfFSObject_class(problem,interpretation,element);
3148 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
3149}
3150pattern refineTypeTo_File_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
3151 find interpretation(problem,interpretation);
3152 PartialInterpretation.newElements(interpretation,element);
3153 find mayInstanceOfFile_class(problem,interpretation,element);
3154 neg find mustInstanceOfFile_class(problem,interpretation,element);
3155 neg find mustInstanceOfModel_class(problem,interpretation,element);
3156 neg find mustInstanceOfDir_class(problem,interpretation,element);
3157 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
3158}
3159pattern refineTypeTo_Dir_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
3160 find interpretation(problem,interpretation);
3161 PartialInterpretation.newElements(interpretation,element);
3162 find mayInstanceOfDir_class(problem,interpretation,element);
3163 neg find mustInstanceOfFile_class(problem,interpretation,element);
3164 neg find mustInstanceOfModel_class(problem,interpretation,element);
3165 neg find mustInstanceOfDir_class(problem,interpretation,element);
3166 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
3167}
3168pattern refineTypeTo_FileSystem_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
3169 find interpretation(problem,interpretation);
3170 PartialInterpretation.newElements(interpretation,element);
3171 find mayInstanceOfFileSystem_class(problem,interpretation,element);
3172 neg find mustInstanceOfModel_class(problem,interpretation,element);
3173 neg find mustInstanceOfFSObject_class(problem,interpretation,element);
3174 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
3175}
3176
3177//////////
3178// 4.3 Relation refinement
3179//////////
3180pattern refineRelation_live_reference_FileSystem(
3181 problem:LogicProblem, interpretation:PartialInterpretation,
3182 relationIterpretation:PartialRelationInterpretation,
3183 from: DefinedElement, to: DefinedElement)
3184{
3185 find interpretation(problem,interpretation);
3186 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
3187 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"live reference FileSystem");
3188 find mustExist(problem, interpretation, from);
3189 find mustExist(problem, interpretation, to);
3190 find mustInstanceOfFileSystem_class(problem,interpretation,from);
3191 find mustInstanceOfFSObject_class(problem,interpretation,to);
3192 find mayInRelationlive_reference_FileSystem(problem,interpretation,from,to);
3193 neg find mustInRelationlive_reference_FileSystem(problem,interpretation,from,to);
3194}
3195import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage"
3196import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem"
3197import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language"
3198
3199//////////
3200// 0. Util
3201//////////
3202private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) {
3203 PartialInterpretation.problem(interpretation,problem);
3204}
3205
3206/////////////////////////
3207// 0.1 Existence
3208/////////////////////////
3209private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
3210 find interpretation(problem,interpretation);
3211 LogicProblem.elements(problem,element);
3212} or {
3213 find interpretation(problem,interpretation);
3214 PartialInterpretation.newElements(interpretation,element);
3215}
3216
3217private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
3218 find mustExist(problem,interpretation,element);
3219} or {
3220 find interpretation(problem,interpretation);
3221 neg find elementCloseWorld(element);
3222 PartialInterpretation.openWorldElements(interpretation,element);
3223}
3224
3225private pattern elementCloseWorld(element:DefinedElement) {
3226 PartialInterpretation.openWorldElements(i,element);
3227 PartialInterpretation.maxNewElements(i,0);
3228} or {
3229 Scope.targetTypeInterpretation(scope,interpretation);
3230 PartialTypeInterpratation.elements(interpretation,element);
3231 Scope.maxNewElements(scope,0);
3232}
3233
3234////////////////////////
3235// 0.2 Equivalence
3236////////////////////////
3237pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) {
3238 find mayExist(problem,interpretation,a);
3239 find mayExist(problem,interpretation,b);
3240 a == b;
3241}
3242
3243////////////////////////
3244// 0.3 Required Patterns by TypeIndexer
3245////////////////////////
3246private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) {
3247 find interpretation(problem,interpretation);
3248 LogicProblem.types(problem,type);
3249 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
3250 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
3251}
3252
3253private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) {
3254 find interpretation(problem,interpretation);
3255 LogicProblem.types(problem,type);
3256 TypeDefinition.elements(type,element);
3257} or {
3258 find interpretation(problem,interpretation);
3259 find typeInterpretation(problem,interpretation,type,typeInterpretation);
3260 PartialComplexTypeInterpretation.elements(typeInterpretation,element);
3261}
3262
3263private pattern isPrimitive(element: PrimitiveElement) {
3264 PrimitiveElement(element);
3265}
3266
3267//////////
3268// 1. Problem-Specific Base Indexers
3269//////////
3270// 1.1 Type Indexers
3271//////////
3272// 1.1.1 primitive Type Indexers
3273//////////
3274
3275//////////
3276// 1.1.2 domain-specific Type Indexers
3277//////////
3278/**
3279 * An element must be an instance of type "Pseudostate class".
3280 */
3281private pattern mustInstanceOfPseudostate_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
3282 Type.name(type,"Pseudostate class");
3283 find directInstanceOf(problem,interpretation,element,type);
3284}
3285private pattern scopeDisallowsNewPseudostate_class(problem:LogicProblem, interpretation:PartialInterpretation) {
3286 find interpretation(problem,interpretation);
3287 PartialInterpretation.scopes(interpretation,scope);
3288 Scope.targetTypeInterpretation(scope,typeInterpretation);
3289 Scope.maxNewElements(scope,0);
3290 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
3291 Type.name(type,"Pseudostate class");
3292}
3293
3294/**
3295 * An element may be an instance of type "Pseudostate class".
3296 */
3297private pattern mayInstanceOfPseudostate_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
3298{
3299 find interpretation(problem,interpretation);
3300 PartialInterpretation.newElements(interpretation,element);
3301 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
3302 neg find mustInstanceOfEntry_class(problem,interpretation,element);
3303 neg find mustInstanceOfChoice_class(problem,interpretation,element);
3304 neg find mustInstanceOfTransition_class(problem,interpretation,element);
3305 neg find mustInstanceOfRegion_class(problem,interpretation,element);
3306 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
3307 neg find mustInstanceOfExit_class(problem,interpretation,element);
3308 neg find mustInstanceOfSynchronization_class(problem,interpretation,element);
3309 neg find scopeDisallowsNewPseudostate_class(problem, interpretation);
3310 neg find isPrimitive(element);
3311} or {
3312 find interpretation(problem,interpretation);
3313 PartialInterpretation.openWorldElements(interpretation,element);
3314 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
3315 neg find mustInstanceOfEntry_class(problem,interpretation,element);
3316 neg find mustInstanceOfChoice_class(problem,interpretation,element);
3317 neg find mustInstanceOfTransition_class(problem,interpretation,element);
3318 neg find mustInstanceOfRegion_class(problem,interpretation,element);
3319 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
3320 neg find mustInstanceOfExit_class(problem,interpretation,element);
3321 neg find mustInstanceOfSynchronization_class(problem,interpretation,element);
3322 neg find scopeDisallowsNewPseudostate_class(problem, interpretation);
3323 neg find isPrimitive(element);
3324} or
3325{ find mustInstanceOfPseudostate_class(problem,interpretation,element); }
3326/**
3327 * An element must be an instance of type "Vertex class".
3328 */
3329private pattern mustInstanceOfVertex_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
3330 Type.name(type,"Vertex class");
3331 find directInstanceOf(problem,interpretation,element,type);
3332}
3333private pattern scopeDisallowsNewVertex_class(problem:LogicProblem, interpretation:PartialInterpretation) {
3334 find interpretation(problem,interpretation);
3335 PartialInterpretation.scopes(interpretation,scope);
3336 Scope.targetTypeInterpretation(scope,typeInterpretation);
3337 Scope.maxNewElements(scope,0);
3338 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
3339 Type.name(type,"Vertex class");
3340}
3341
3342/**
3343 * An element may be an instance of type "Vertex class".
3344 */
3345private pattern mayInstanceOfVertex_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
3346{
3347 find interpretation(problem,interpretation);
3348 PartialInterpretation.newElements(interpretation,element);
3349 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
3350 neg find mustInstanceOfPseudostate_class(problem,interpretation,element);
3351 neg find mustInstanceOfTransition_class(problem,interpretation,element);
3352 neg find mustInstanceOfRegion_class(problem,interpretation,element);
3353 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
3354 neg find scopeDisallowsNewVertex_class(problem, interpretation);
3355 neg find isPrimitive(element);
3356} or {
3357 find interpretation(problem,interpretation);
3358 PartialInterpretation.openWorldElements(interpretation,element);
3359 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
3360 neg find mustInstanceOfPseudostate_class(problem,interpretation,element);
3361 neg find mustInstanceOfTransition_class(problem,interpretation,element);
3362 neg find mustInstanceOfRegion_class(problem,interpretation,element);
3363 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
3364 neg find scopeDisallowsNewVertex_class(problem, interpretation);
3365 neg find isPrimitive(element);
3366} or
3367{ find mustInstanceOfVertex_class(problem,interpretation,element); }
3368/**
3369 * An element must be an instance of type "Region class".
3370 */
3371private pattern mustInstanceOfRegion_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
3372 Type.name(type,"Region class");
3373 find directInstanceOf(problem,interpretation,element,type);
3374}
3375private pattern scopeDisallowsNewRegion_class(problem:LogicProblem, interpretation:PartialInterpretation) {
3376 find interpretation(problem,interpretation);
3377 PartialInterpretation.scopes(interpretation,scope);
3378 Scope.targetTypeInterpretation(scope,typeInterpretation);
3379 Scope.maxNewElements(scope,0);
3380 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
3381 Type.name(type,"Region class");
3382}
3383
3384/**
3385 * An element may be an instance of type "Region class".
3386 */
3387private pattern mayInstanceOfRegion_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
3388{
3389 find interpretation(problem,interpretation);
3390 PartialInterpretation.newElements(interpretation,element);
3391 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
3392 neg find mustInstanceOfTransition_class(problem,interpretation,element);
3393 neg find mustInstanceOfVertex_class(problem,interpretation,element);
3394 neg find scopeDisallowsNewRegion_class(problem, interpretation);
3395 neg find isPrimitive(element);
3396} or {
3397 find interpretation(problem,interpretation);
3398 PartialInterpretation.openWorldElements(interpretation,element);
3399 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
3400 neg find mustInstanceOfTransition_class(problem,interpretation,element);
3401 neg find mustInstanceOfVertex_class(problem,interpretation,element);
3402 neg find scopeDisallowsNewRegion_class(problem, interpretation);
3403 neg find isPrimitive(element);
3404} or
3405{ find mustInstanceOfRegion_class(problem,interpretation,element); }
3406/**
3407 * An element must be an instance of type "Transition class".
3408 */
3409private pattern mustInstanceOfTransition_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
3410 Type.name(type,"Transition class");
3411 find directInstanceOf(problem,interpretation,element,type);
3412}
3413private pattern scopeDisallowsNewTransition_class(problem:LogicProblem, interpretation:PartialInterpretation) {
3414 find interpretation(problem,interpretation);
3415 PartialInterpretation.scopes(interpretation,scope);
3416 Scope.targetTypeInterpretation(scope,typeInterpretation);
3417 Scope.maxNewElements(scope,0);
3418 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
3419 Type.name(type,"Transition class");
3420}
3421
3422/**
3423 * An element may be an instance of type "Transition class".
3424 */
3425private pattern mayInstanceOfTransition_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
3426{
3427 find interpretation(problem,interpretation);
3428 PartialInterpretation.newElements(interpretation,element);
3429 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
3430 neg find mustInstanceOfRegion_class(problem,interpretation,element);
3431 neg find mustInstanceOfVertex_class(problem,interpretation,element);
3432 neg find scopeDisallowsNewTransition_class(problem, interpretation);
3433 neg find isPrimitive(element);
3434} or {
3435 find interpretation(problem,interpretation);
3436 PartialInterpretation.openWorldElements(interpretation,element);
3437 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
3438 neg find mustInstanceOfRegion_class(problem,interpretation,element);
3439 neg find mustInstanceOfVertex_class(problem,interpretation,element);
3440 neg find scopeDisallowsNewTransition_class(problem, interpretation);
3441 neg find isPrimitive(element);
3442} or
3443{ find mustInstanceOfTransition_class(problem,interpretation,element); }
3444/**
3445 * An element must be an instance of type "Statechart class".
3446 */
3447private pattern mustInstanceOfStatechart_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
3448 Type.name(type,"Statechart class");
3449 find directInstanceOf(problem,interpretation,element,type);
3450}
3451private pattern scopeDisallowsNewStatechart_class(problem:LogicProblem, interpretation:PartialInterpretation) {
3452 find interpretation(problem,interpretation);
3453 PartialInterpretation.scopes(interpretation,scope);
3454 Scope.targetTypeInterpretation(scope,typeInterpretation);
3455 Scope.maxNewElements(scope,0);
3456 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
3457 Type.name(type,"Statechart class");
3458}
3459
3460/**
3461 * An element may be an instance of type "Statechart class".
3462 */
3463private pattern mayInstanceOfStatechart_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
3464{
3465 find interpretation(problem,interpretation);
3466 PartialInterpretation.newElements(interpretation,element);
3467 neg find mustInstanceOfRegion_class(problem,interpretation,element);
3468 neg find mustInstanceOfTransition_class(problem,interpretation,element);
3469 neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element);
3470 neg find mustInstanceOfVertex_class(problem,interpretation,element);
3471 neg find scopeDisallowsNewStatechart_class(problem, interpretation);
3472 neg find isPrimitive(element);
3473} or {
3474 find interpretation(problem,interpretation);
3475 PartialInterpretation.openWorldElements(interpretation,element);
3476 neg find mustInstanceOfRegion_class(problem,interpretation,element);
3477 neg find mustInstanceOfTransition_class(problem,interpretation,element);
3478 neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element);
3479 neg find mustInstanceOfVertex_class(problem,interpretation,element);
3480 neg find scopeDisallowsNewStatechart_class(problem, interpretation);
3481 neg find isPrimitive(element);
3482} or
3483{ find mustInstanceOfStatechart_class(problem,interpretation,element); }
3484/**
3485 * An element must be an instance of type "Entry class".
3486 */
3487private pattern mustInstanceOfEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
3488 Type.name(type,"Entry class");
3489 find directInstanceOf(problem,interpretation,element,type);
3490}
3491private pattern scopeDisallowsNewEntry_class(problem:LogicProblem, interpretation:PartialInterpretation) {
3492 find interpretation(problem,interpretation);
3493 PartialInterpretation.scopes(interpretation,scope);
3494 Scope.targetTypeInterpretation(scope,typeInterpretation);
3495 Scope.maxNewElements(scope,0);
3496 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
3497 Type.name(type,"Entry class");
3498}
3499
3500/**
3501 * An element may be an instance of type "Entry class".
3502 */
3503private pattern mayInstanceOfEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
3504{
3505 find interpretation(problem,interpretation);
3506 PartialInterpretation.newElements(interpretation,element);
3507 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
3508 neg find mustInstanceOfChoice_class(problem,interpretation,element);
3509 neg find mustInstanceOfRegion_class(problem,interpretation,element);
3510 neg find mustInstanceOfTransition_class(problem,interpretation,element);
3511 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
3512 neg find mustInstanceOfExit_class(problem,interpretation,element);
3513 neg find mustInstanceOfSynchronization_class(problem,interpretation,element);
3514 neg find scopeDisallowsNewEntry_class(problem, interpretation);
3515 neg find isPrimitive(element);
3516} or {
3517 find interpretation(problem,interpretation);
3518 PartialInterpretation.openWorldElements(interpretation,element);
3519 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
3520 neg find mustInstanceOfChoice_class(problem,interpretation,element);
3521 neg find mustInstanceOfRegion_class(problem,interpretation,element);
3522 neg find mustInstanceOfTransition_class(problem,interpretation,element);
3523 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
3524 neg find mustInstanceOfExit_class(problem,interpretation,element);
3525 neg find mustInstanceOfSynchronization_class(problem,interpretation,element);
3526 neg find scopeDisallowsNewEntry_class(problem, interpretation);
3527 neg find isPrimitive(element);
3528} or
3529{ find mustInstanceOfEntry_class(problem,interpretation,element); }
3530/**
3531 * An element must be an instance of type "Synchronization class".
3532 */
3533private pattern mustInstanceOfSynchronization_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
3534 Type.name(type,"Synchronization class");
3535 find directInstanceOf(problem,interpretation,element,type);
3536}
3537private pattern scopeDisallowsNewSynchronization_class(problem:LogicProblem, interpretation:PartialInterpretation) {
3538 find interpretation(problem,interpretation);
3539 PartialInterpretation.scopes(interpretation,scope);
3540 Scope.targetTypeInterpretation(scope,typeInterpretation);
3541 Scope.maxNewElements(scope,0);
3542 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
3543 Type.name(type,"Synchronization class");
3544}
3545
3546/**
3547 * An element may be an instance of type "Synchronization class".
3548 */
3549private pattern mayInstanceOfSynchronization_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
3550{
3551 find interpretation(problem,interpretation);
3552 PartialInterpretation.newElements(interpretation,element);
3553 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
3554 neg find mustInstanceOfEntry_class(problem,interpretation,element);
3555 neg find mustInstanceOfChoice_class(problem,interpretation,element);
3556 neg find mustInstanceOfRegion_class(problem,interpretation,element);
3557 neg find mustInstanceOfTransition_class(problem,interpretation,element);
3558 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
3559 neg find mustInstanceOfExit_class(problem,interpretation,element);
3560 neg find scopeDisallowsNewSynchronization_class(problem, interpretation);
3561 neg find isPrimitive(element);
3562} or {
3563 find interpretation(problem,interpretation);
3564 PartialInterpretation.openWorldElements(interpretation,element);
3565 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
3566 neg find mustInstanceOfEntry_class(problem,interpretation,element);
3567 neg find mustInstanceOfChoice_class(problem,interpretation,element);
3568 neg find mustInstanceOfRegion_class(problem,interpretation,element);
3569 neg find mustInstanceOfTransition_class(problem,interpretation,element);
3570 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
3571 neg find mustInstanceOfExit_class(problem,interpretation,element);
3572 neg find scopeDisallowsNewSynchronization_class(problem, interpretation);
3573 neg find isPrimitive(element);
3574} or
3575{ find mustInstanceOfSynchronization_class(problem,interpretation,element); }
3576/**
3577 * An element must be an instance of type "State class".
3578 */
3579private pattern mustInstanceOfState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
3580 Type.name(type,"State class");
3581 find directInstanceOf(problem,interpretation,element,type);
3582}
3583private pattern scopeDisallowsNewState_class(problem:LogicProblem, interpretation:PartialInterpretation) {
3584 find interpretation(problem,interpretation);
3585 PartialInterpretation.scopes(interpretation,scope);
3586 Scope.targetTypeInterpretation(scope,typeInterpretation);
3587 Scope.maxNewElements(scope,0);
3588 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
3589 Type.name(type,"State class");
3590}
3591
3592/**
3593 * An element may be an instance of type "State class".
3594 */
3595private pattern mayInstanceOfState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
3596{
3597 find interpretation(problem,interpretation);
3598 PartialInterpretation.newElements(interpretation,element);
3599 neg find mustInstanceOfPseudostate_class(problem,interpretation,element);
3600 neg find mustInstanceOfTransition_class(problem,interpretation,element);
3601 neg find mustInstanceOfRegion_class(problem,interpretation,element);
3602 neg find mustInstanceOfStatechart_class(problem,interpretation,element);
3603 neg find mustInstanceOfFinalState_class(problem,interpretation,element);
3604 neg find scopeDisallowsNewState_class(problem, interpretation);
3605 neg find isPrimitive(element);
3606} or {
3607 find interpretation(problem,interpretation);
3608 PartialInterpretation.openWorldElements(interpretation,element);
3609 neg find mustInstanceOfPseudostate_class(problem,interpretation,element);
3610 neg find mustInstanceOfTransition_class(problem,interpretation,element);
3611 neg find mustInstanceOfRegion_class(problem,interpretation,element);
3612 neg find mustInstanceOfStatechart_class(problem,interpretation,element);
3613 neg find mustInstanceOfFinalState_class(problem,interpretation,element);
3614 neg find scopeDisallowsNewState_class(problem, interpretation);
3615 neg find isPrimitive(element);
3616} or
3617{ find mustInstanceOfState_class(problem,interpretation,element); }
3618/**
3619 * An element must be an instance of type "RegularState class".
3620 */
3621private pattern mustInstanceOfRegularState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
3622 Type.name(type,"RegularState class");
3623 find directInstanceOf(problem,interpretation,element,type);
3624}
3625private pattern scopeDisallowsNewRegularState_class(problem:LogicProblem, interpretation:PartialInterpretation) {
3626 find interpretation(problem,interpretation);
3627 PartialInterpretation.scopes(interpretation,scope);
3628 Scope.targetTypeInterpretation(scope,typeInterpretation);
3629 Scope.maxNewElements(scope,0);
3630 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
3631 Type.name(type,"RegularState class");
3632}
3633
3634/**
3635 * An element may be an instance of type "RegularState class".
3636 */
3637private pattern mayInstanceOfRegularState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
3638{
3639 find interpretation(problem,interpretation);
3640 PartialInterpretation.newElements(interpretation,element);
3641 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
3642 neg find mustInstanceOfPseudostate_class(problem,interpretation,element);
3643 neg find mustInstanceOfTransition_class(problem,interpretation,element);
3644 neg find mustInstanceOfRegion_class(problem,interpretation,element);
3645 neg find mustInstanceOfFinalState_class(problem,interpretation,element);
3646 neg find scopeDisallowsNewRegularState_class(problem, interpretation);
3647 neg find isPrimitive(element);
3648} or {
3649 find interpretation(problem,interpretation);
3650 PartialInterpretation.openWorldElements(interpretation,element);
3651 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
3652 neg find mustInstanceOfPseudostate_class(problem,interpretation,element);
3653 neg find mustInstanceOfTransition_class(problem,interpretation,element);
3654 neg find mustInstanceOfRegion_class(problem,interpretation,element);
3655 neg find mustInstanceOfFinalState_class(problem,interpretation,element);
3656 neg find scopeDisallowsNewRegularState_class(problem, interpretation);
3657 neg find isPrimitive(element);
3658} or
3659{ find mustInstanceOfRegularState_class(problem,interpretation,element); }
3660/**
3661 * An element must be an instance of type "CompositeElement class".
3662 */
3663private pattern mustInstanceOfCompositeElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
3664 Type.name(type,"CompositeElement class");
3665 find directInstanceOf(problem,interpretation,element,type);
3666}
3667private pattern scopeDisallowsNewCompositeElement_class(problem:LogicProblem, interpretation:PartialInterpretation) {
3668 find interpretation(problem,interpretation);
3669 PartialInterpretation.scopes(interpretation,scope);
3670 Scope.targetTypeInterpretation(scope,typeInterpretation);
3671 Scope.maxNewElements(scope,0);
3672 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
3673 Type.name(type,"CompositeElement class");
3674}
3675
3676/**
3677 * An element may be an instance of type "CompositeElement class".
3678 */
3679private pattern mayInstanceOfCompositeElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
3680{
3681 find interpretation(problem,interpretation);
3682 PartialInterpretation.newElements(interpretation,element);
3683 neg find mustInstanceOfTransition_class(problem,interpretation,element);
3684 neg find mustInstanceOfStatechart_class(problem,interpretation,element);
3685 neg find mustInstanceOfRegion_class(problem,interpretation,element);
3686 neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element);
3687 neg find mustInstanceOfVertex_class(problem,interpretation,element);
3688 neg find scopeDisallowsNewCompositeElement_class(problem, interpretation);
3689 neg find isPrimitive(element);
3690} or {
3691 find interpretation(problem,interpretation);
3692 PartialInterpretation.openWorldElements(interpretation,element);
3693 neg find mustInstanceOfTransition_class(problem,interpretation,element);
3694 neg find mustInstanceOfStatechart_class(problem,interpretation,element);
3695 neg find mustInstanceOfRegion_class(problem,interpretation,element);
3696 neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element);
3697 neg find mustInstanceOfVertex_class(problem,interpretation,element);
3698 neg find scopeDisallowsNewCompositeElement_class(problem, interpretation);
3699 neg find isPrimitive(element);
3700} or
3701{ find mustInstanceOfCompositeElement_class(problem,interpretation,element); }
3702/**
3703 * An element must be an instance of type "Choice class".
3704 */
3705private pattern mustInstanceOfChoice_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
3706 Type.name(type,"Choice class");
3707 find directInstanceOf(problem,interpretation,element,type);
3708}
3709private pattern scopeDisallowsNewChoice_class(problem:LogicProblem, interpretation:PartialInterpretation) {
3710 find interpretation(problem,interpretation);
3711 PartialInterpretation.scopes(interpretation,scope);
3712 Scope.targetTypeInterpretation(scope,typeInterpretation);
3713 Scope.maxNewElements(scope,0);
3714 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
3715 Type.name(type,"Choice class");
3716}
3717
3718/**
3719 * An element may be an instance of type "Choice class".
3720 */
3721private pattern mayInstanceOfChoice_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
3722{
3723 find interpretation(problem,interpretation);
3724 PartialInterpretation.newElements(interpretation,element);
3725 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
3726 neg find mustInstanceOfEntry_class(problem,interpretation,element);
3727 neg find mustInstanceOfRegion_class(problem,interpretation,element);
3728 neg find mustInstanceOfTransition_class(problem,interpretation,element);
3729 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
3730 neg find mustInstanceOfExit_class(problem,interpretation,element);
3731 neg find mustInstanceOfSynchronization_class(problem,interpretation,element);
3732 neg find scopeDisallowsNewChoice_class(problem, interpretation);
3733 neg find isPrimitive(element);
3734} or {
3735 find interpretation(problem,interpretation);
3736 PartialInterpretation.openWorldElements(interpretation,element);
3737 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
3738 neg find mustInstanceOfEntry_class(problem,interpretation,element);
3739 neg find mustInstanceOfRegion_class(problem,interpretation,element);
3740 neg find mustInstanceOfTransition_class(problem,interpretation,element);
3741 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
3742 neg find mustInstanceOfExit_class(problem,interpretation,element);
3743 neg find mustInstanceOfSynchronization_class(problem,interpretation,element);
3744 neg find scopeDisallowsNewChoice_class(problem, interpretation);
3745 neg find isPrimitive(element);
3746} or
3747{ find mustInstanceOfChoice_class(problem,interpretation,element); }
3748/**
3749 * An element must be an instance of type "Exit class".
3750 */
3751private pattern mustInstanceOfExit_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
3752 Type.name(type,"Exit class");
3753 find directInstanceOf(problem,interpretation,element,type);
3754}
3755private pattern scopeDisallowsNewExit_class(problem:LogicProblem, interpretation:PartialInterpretation) {
3756 find interpretation(problem,interpretation);
3757 PartialInterpretation.scopes(interpretation,scope);
3758 Scope.targetTypeInterpretation(scope,typeInterpretation);
3759 Scope.maxNewElements(scope,0);
3760 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
3761 Type.name(type,"Exit class");
3762}
3763
3764/**
3765 * An element may be an instance of type "Exit class".
3766 */
3767private pattern mayInstanceOfExit_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
3768{
3769 find interpretation(problem,interpretation);
3770 PartialInterpretation.newElements(interpretation,element);
3771 neg find mustInstanceOfEntry_class(problem,interpretation,element);
3772 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
3773 neg find mustInstanceOfChoice_class(problem,interpretation,element);
3774 neg find mustInstanceOfRegion_class(problem,interpretation,element);
3775 neg find mustInstanceOfTransition_class(problem,interpretation,element);
3776 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
3777 neg find mustInstanceOfSynchronization_class(problem,interpretation,element);
3778 neg find scopeDisallowsNewExit_class(problem, interpretation);
3779 neg find isPrimitive(element);
3780} or {
3781 find interpretation(problem,interpretation);
3782 PartialInterpretation.openWorldElements(interpretation,element);
3783 neg find mustInstanceOfEntry_class(problem,interpretation,element);
3784 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
3785 neg find mustInstanceOfChoice_class(problem,interpretation,element);
3786 neg find mustInstanceOfRegion_class(problem,interpretation,element);
3787 neg find mustInstanceOfTransition_class(problem,interpretation,element);
3788 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
3789 neg find mustInstanceOfSynchronization_class(problem,interpretation,element);
3790 neg find scopeDisallowsNewExit_class(problem, interpretation);
3791 neg find isPrimitive(element);
3792} or
3793{ find mustInstanceOfExit_class(problem,interpretation,element); }
3794/**
3795 * An element must be an instance of type "FinalState class".
3796 */
3797private pattern mustInstanceOfFinalState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
3798 Type.name(type,"FinalState class");
3799 find directInstanceOf(problem,interpretation,element,type);
3800}
3801private pattern scopeDisallowsNewFinalState_class(problem:LogicProblem, interpretation:PartialInterpretation) {
3802 find interpretation(problem,interpretation);
3803 PartialInterpretation.scopes(interpretation,scope);
3804 Scope.targetTypeInterpretation(scope,typeInterpretation);
3805 Scope.maxNewElements(scope,0);
3806 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
3807 Type.name(type,"FinalState class");
3808}
3809
3810/**
3811 * An element may be an instance of type "FinalState class".
3812 */
3813private pattern mayInstanceOfFinalState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
3814{
3815 find interpretation(problem,interpretation);
3816 PartialInterpretation.newElements(interpretation,element);
3817 neg find mustInstanceOfPseudostate_class(problem,interpretation,element);
3818 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
3819 neg find mustInstanceOfRegion_class(problem,interpretation,element);
3820 neg find mustInstanceOfTransition_class(problem,interpretation,element);
3821 neg find scopeDisallowsNewFinalState_class(problem, interpretation);
3822 neg find isPrimitive(element);
3823} or {
3824 find interpretation(problem,interpretation);
3825 PartialInterpretation.openWorldElements(interpretation,element);
3826 neg find mustInstanceOfPseudostate_class(problem,interpretation,element);
3827 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
3828 neg find mustInstanceOfRegion_class(problem,interpretation,element);
3829 neg find mustInstanceOfTransition_class(problem,interpretation,element);
3830 neg find scopeDisallowsNewFinalState_class(problem, interpretation);
3831 neg find isPrimitive(element);
3832} or
3833{ find mustInstanceOfFinalState_class(problem,interpretation,element); }
3834/**
3835 * An element must be an instance of type "Statechart class DefinedPart".
3836 */
3837private pattern mustInstanceOfStatechart_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
3838 Type.name(type,"Statechart class DefinedPart");
3839 find directInstanceOf(problem,interpretation,element,type);
3840}
3841private pattern scopeDisallowsNewStatechart_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
3842 find interpretation(problem,interpretation);
3843 PartialInterpretation.scopes(interpretation,scope);
3844 Scope.targetTypeInterpretation(scope,typeInterpretation);
3845 Scope.maxNewElements(scope,0);
3846 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
3847 Type.name(type,"Statechart class DefinedPart");
3848}
3849
3850/**
3851 * An element may be an instance of type "Statechart class DefinedPart".
3852 */
3853private pattern mayInstanceOfStatechart_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
3854{ find mustInstanceOfStatechart_class_DefinedPart(problem,interpretation,element); }
3855/**
3856 * An element must be an instance of type "Statechart class UndefinedPart".
3857 */
3858private pattern mustInstanceOfStatechart_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
3859 Type.name(type,"Statechart class UndefinedPart");
3860 find directInstanceOf(problem,interpretation,element,type);
3861}
3862private pattern scopeDisallowsNewStatechart_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
3863 find interpretation(problem,interpretation);
3864 PartialInterpretation.scopes(interpretation,scope);
3865 Scope.targetTypeInterpretation(scope,typeInterpretation);
3866 Scope.maxNewElements(scope,0);
3867 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
3868 Type.name(type,"Statechart class UndefinedPart");
3869}
3870
3871/**
3872 * An element may be an instance of type "Statechart class UndefinedPart".
3873 */
3874private pattern mayInstanceOfStatechart_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
3875{
3876 find interpretation(problem,interpretation);
3877 PartialInterpretation.newElements(interpretation,element);
3878 neg find mustInstanceOfRegion_class(problem,interpretation,element);
3879 neg find mustInstanceOfTransition_class(problem,interpretation,element);
3880 neg find mustInstanceOfVertex_class(problem,interpretation,element);
3881 neg find scopeDisallowsNewStatechart_class_UndefinedPart(problem, interpretation);
3882 neg find isPrimitive(element);
3883} or {
3884 find interpretation(problem,interpretation);
3885 PartialInterpretation.openWorldElements(interpretation,element);
3886 neg find mustInstanceOfRegion_class(problem,interpretation,element);
3887 neg find mustInstanceOfTransition_class(problem,interpretation,element);
3888 neg find mustInstanceOfVertex_class(problem,interpretation,element);
3889 neg find scopeDisallowsNewStatechart_class_UndefinedPart(problem, interpretation);
3890 neg find isPrimitive(element);
3891} or
3892{ find mustInstanceOfStatechart_class_UndefinedPart(problem,interpretation,element); }
3893/**
3894 * An element must be an instance of type "CompositeElement class DefinedPart".
3895 */
3896private pattern mustInstanceOfCompositeElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
3897 Type.name(type,"CompositeElement class DefinedPart");
3898 find directInstanceOf(problem,interpretation,element,type);
3899}
3900private pattern scopeDisallowsNewCompositeElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
3901 find interpretation(problem,interpretation);
3902 PartialInterpretation.scopes(interpretation,scope);
3903 Scope.targetTypeInterpretation(scope,typeInterpretation);
3904 Scope.maxNewElements(scope,0);
3905 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
3906 Type.name(type,"CompositeElement class DefinedPart");
3907}
3908
3909/**
3910 * An element may be an instance of type "CompositeElement class DefinedPart".
3911 */
3912private pattern mayInstanceOfCompositeElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
3913{ find mustInstanceOfCompositeElement_class_DefinedPart(problem,interpretation,element); }
3914/**
3915 * An element must be an instance of type "CompositeElement class UndefinedPart".
3916 */
3917private pattern mustInstanceOfCompositeElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
3918 Type.name(type,"CompositeElement class UndefinedPart");
3919 find directInstanceOf(problem,interpretation,element,type);
3920}
3921private pattern scopeDisallowsNewCompositeElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
3922 find interpretation(problem,interpretation);
3923 PartialInterpretation.scopes(interpretation,scope);
3924 Scope.targetTypeInterpretation(scope,typeInterpretation);
3925 Scope.maxNewElements(scope,0);
3926 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
3927 Type.name(type,"CompositeElement class UndefinedPart");
3928}
3929
3930/**
3931 * An element may be an instance of type "CompositeElement class UndefinedPart".
3932 */
3933private pattern mayInstanceOfCompositeElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
3934{
3935 find interpretation(problem,interpretation);
3936 PartialInterpretation.newElements(interpretation,element);
3937 neg find mustInstanceOfRegion_class(problem,interpretation,element);
3938 neg find mustInstanceOfStatechart_class(problem,interpretation,element);
3939 neg find mustInstanceOfTransition_class(problem,interpretation,element);
3940 neg find mustInstanceOfVertex_class(problem,interpretation,element);
3941 neg find scopeDisallowsNewCompositeElement_class_UndefinedPart(problem, interpretation);
3942 neg find isPrimitive(element);
3943} or {
3944 find interpretation(problem,interpretation);
3945 PartialInterpretation.openWorldElements(interpretation,element);
3946 neg find mustInstanceOfRegion_class(problem,interpretation,element);
3947 neg find mustInstanceOfStatechart_class(problem,interpretation,element);
3948 neg find mustInstanceOfTransition_class(problem,interpretation,element);
3949 neg find mustInstanceOfVertex_class(problem,interpretation,element);
3950 neg find scopeDisallowsNewCompositeElement_class_UndefinedPart(problem, interpretation);
3951 neg find isPrimitive(element);
3952} or
3953{ find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); }
3954
3955//////////
3956// 1.2 Relation Declaration Indexers
3957//////////
3958/**
3959 * Matcher for detecting tuples t where []incomingTransitions reference Vertex(source,target)
3960 */
3961private pattern mustInRelationincomingTransitions_reference_Vertex(
3962 problem:LogicProblem, interpretation:PartialInterpretation,
3963 source: DefinedElement, target:DefinedElement)
3964{
3965 find interpretation(problem,interpretation);
3966 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
3967 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"incomingTransitions reference Vertex");
3968 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
3969 BinaryElementRelationLink.param1(link,source);
3970 BinaryElementRelationLink.param2(link,target);
3971}
3972/**
3973 * Matcher for detecting tuples t where <>incomingTransitions reference Vertex(source,target)
3974 */
3975private pattern mayInRelationincomingTransitions_reference_Vertex(
3976 problem:LogicProblem, interpretation:PartialInterpretation,
3977 source: DefinedElement, target:DefinedElement)
3978{
3979 find interpretation(problem,interpretation);
3980 // The two endpoint of the link have to exist
3981 find mayExist(problem, interpretation, source);
3982 find mayExist(problem, interpretation, target);
3983 // Type consistency
3984 find mayInstanceOfVertex_class(problem,interpretation,source);
3985 find mayInstanceOfTransition_class(problem,interpretation,target);
3986 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
3987 // the upper bound of the opposite reference multiplicity should be considered.
3988 numberOfExistingOppositeReferences == count find mustInRelationtarget_reference_Transition(problem,interpretation,target,_);
3989 check(numberOfExistingOppositeReferences < 1);
3990} or {
3991 find mustInRelationincomingTransitions_reference_Vertex(problem,interpretation,source,target);
3992}
3993/**
3994 * Matcher for detecting tuples t where []outgoingTransitions reference Vertex(source,target)
3995 */
3996private pattern mustInRelationoutgoingTransitions_reference_Vertex(
3997 problem:LogicProblem, interpretation:PartialInterpretation,
3998 source: DefinedElement, target:DefinedElement)
3999{
4000 find interpretation(problem,interpretation);
4001 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
4002 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"outgoingTransitions reference Vertex");
4003 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
4004 BinaryElementRelationLink.param1(link,source);
4005 BinaryElementRelationLink.param2(link,target);
4006}
4007/**
4008 * Matcher for detecting tuples t where <>outgoingTransitions reference Vertex(source,target)
4009 */
4010private pattern mayInRelationoutgoingTransitions_reference_Vertex(
4011 problem:LogicProblem, interpretation:PartialInterpretation,
4012 source: DefinedElement, target:DefinedElement)
4013{
4014 find interpretation(problem,interpretation);
4015 // The two endpoint of the link have to exist
4016 find mayExist(problem, interpretation, source);
4017 find mayExist(problem, interpretation, target);
4018 // Type consistency
4019 find mayInstanceOfVertex_class(problem,interpretation,source);
4020 find mayInstanceOfTransition_class(problem,interpretation,target);
4021 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
4022 // the upper bound of the opposite reference multiplicity should be considered.
4023 numberOfExistingOppositeReferences == count find mustInRelationsource_reference_Transition(problem,interpretation,target,_);
4024 check(numberOfExistingOppositeReferences < 1);
4025 // The reference is containment, then a new reference cannot be create if:
4026 // 1. Multiple parents
4027 neg find mustContains4(problem,interpretation,_,target);
4028 // 2. Circle in the containment hierarchy
4029 neg find mustTransitiveContains(source,target);
4030} or {
4031 find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,source,target);
4032}
4033/**
4034 * Matcher for detecting tuples t where []vertices reference Region(source,target)
4035 */
4036private pattern mustInRelationvertices_reference_Region(
4037 problem:LogicProblem, interpretation:PartialInterpretation,
4038 source: DefinedElement, target:DefinedElement)
4039{
4040 find interpretation(problem,interpretation);
4041 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
4042 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"vertices reference Region");
4043 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
4044 BinaryElementRelationLink.param1(link,source);
4045 BinaryElementRelationLink.param2(link,target);
4046}
4047/**
4048 * Matcher for detecting tuples t where <>vertices reference Region(source,target)
4049 */
4050private pattern mayInRelationvertices_reference_Region(
4051 problem:LogicProblem, interpretation:PartialInterpretation,
4052 source: DefinedElement, target:DefinedElement)
4053{
4054 find interpretation(problem,interpretation);
4055 // The two endpoint of the link have to exist
4056 find mayExist(problem, interpretation, source);
4057 find mayExist(problem, interpretation, target);
4058 // Type consistency
4059 find mayInstanceOfRegion_class(problem,interpretation,source);
4060 find mayInstanceOfVertex_class(problem,interpretation,target);
4061 // The reference is containment, then a new reference cannot be create if:
4062 // 1. Multiple parents
4063 neg find mustContains4(problem,interpretation,_,target);
4064 // 2. Circle in the containment hierarchy
4065 neg find mustTransitiveContains(source,target);
4066} or {
4067 find mustInRelationvertices_reference_Region(problem,interpretation,source,target);
4068}
4069/**
4070 * Matcher for detecting tuples t where []target reference Transition(source,target)
4071 */
4072private pattern mustInRelationtarget_reference_Transition(
4073 problem:LogicProblem, interpretation:PartialInterpretation,
4074 source: DefinedElement, target:DefinedElement)
4075{
4076 find interpretation(problem,interpretation);
4077 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
4078 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"target reference Transition");
4079 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
4080 BinaryElementRelationLink.param1(link,source);
4081 BinaryElementRelationLink.param2(link,target);
4082}
4083/**
4084 * Matcher for detecting tuples t where <>target reference Transition(source,target)
4085 */
4086private pattern mayInRelationtarget_reference_Transition(
4087 problem:LogicProblem, interpretation:PartialInterpretation,
4088 source: DefinedElement, target:DefinedElement)
4089{
4090 find interpretation(problem,interpretation);
4091 // The two endpoint of the link have to exist
4092 find mayExist(problem, interpretation, source);
4093 find mayExist(problem, interpretation, target);
4094 // Type consistency
4095 find mayInstanceOfTransition_class(problem,interpretation,source);
4096 find mayInstanceOfVertex_class(problem,interpretation,target);
4097 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
4098 // the upper bound of the multiplicity should be considered.
4099 numberOfExistingReferences == count find mustInRelationtarget_reference_Transition(problem,interpretation,source,_);
4100 check(numberOfExistingReferences < 1);
4101} or {
4102 find mustInRelationtarget_reference_Transition(problem,interpretation,source,target);
4103}
4104/**
4105 * Matcher for detecting tuples t where []source reference Transition(source,target)
4106 */
4107private pattern mustInRelationsource_reference_Transition(
4108 problem:LogicProblem, interpretation:PartialInterpretation,
4109 source: DefinedElement, target:DefinedElement)
4110{
4111 find interpretation(problem,interpretation);
4112 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
4113 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"source reference Transition");
4114 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
4115 BinaryElementRelationLink.param1(link,source);
4116 BinaryElementRelationLink.param2(link,target);
4117}
4118/**
4119 * Matcher for detecting tuples t where <>source reference Transition(source,target)
4120 */
4121private pattern mayInRelationsource_reference_Transition(
4122 problem:LogicProblem, interpretation:PartialInterpretation,
4123 source: DefinedElement, target:DefinedElement)
4124{
4125 find interpretation(problem,interpretation);
4126 // The two endpoint of the link have to exist
4127 find mayExist(problem, interpretation, source);
4128 find mayExist(problem, interpretation, target);
4129 // Type consistency
4130 find mayInstanceOfTransition_class(problem,interpretation,source);
4131 find mayInstanceOfVertex_class(problem,interpretation,target);
4132 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
4133 // the upper bound of the multiplicity should be considered.
4134 numberOfExistingReferences == count find mustInRelationsource_reference_Transition(problem,interpretation,source,_);
4135 check(numberOfExistingReferences < 1);
4136 // The eOpposite of the reference is containment, then a referene cannot be created if
4137 // 1. Multiple parents
4138 neg find mustContains4(problem,interpretation,source,_);
4139 // 2. Circle in the containment hierarchy
4140 neg find mustTransitiveContains(source,target);
4141} or {
4142 find mustInRelationsource_reference_Transition(problem,interpretation,source,target);
4143}
4144/**
4145 * Matcher for detecting tuples t where []regions reference CompositeElement(source,target)
4146 */
4147private pattern mustInRelationregions_reference_CompositeElement(
4148 problem:LogicProblem, interpretation:PartialInterpretation,
4149 source: DefinedElement, target:DefinedElement)
4150{
4151 find interpretation(problem,interpretation);
4152 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
4153 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"regions reference CompositeElement");
4154 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
4155 BinaryElementRelationLink.param1(link,source);
4156 BinaryElementRelationLink.param2(link,target);
4157}
4158/**
4159 * Matcher for detecting tuples t where <>regions reference CompositeElement(source,target)
4160 */
4161private pattern mayInRelationregions_reference_CompositeElement(
4162 problem:LogicProblem, interpretation:PartialInterpretation,
4163 source: DefinedElement, target:DefinedElement)
4164{
4165 find interpretation(problem,interpretation);
4166 // The two endpoint of the link have to exist
4167 find mayExist(problem, interpretation, source);
4168 find mayExist(problem, interpretation, target);
4169 // Type consistency
4170 find mayInstanceOfCompositeElement_class(problem,interpretation,source);
4171 find mayInstanceOfRegion_class(problem,interpretation,target);
4172 // The reference is containment, then a new reference cannot be create if:
4173 // 1. Multiple parents
4174 neg find mustContains4(problem,interpretation,_,target);
4175 // 2. Circle in the containment hierarchy
4176 neg find mustTransitiveContains(source,target);
4177} or {
4178 find mustInRelationregions_reference_CompositeElement(problem,interpretation,source,target);
4179}
4180
4181//////////
4182// 1.3 Relation Definition Indexers
4183//////////
4184// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries entryInRegion
4185private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(
4186 problem:LogicProblem, interpretation:PartialInterpretation,
4187 var_r1, var_e1)
4188{
4189 find interpretation(problem,interpretation);
4190 find mustInstanceOfRegion_class(problem,interpretation,var_r1);
4191 find mustInstanceOfEntry_class(problem,interpretation,var_e1);
4192 // r1 is exported
4193 // e1 is exported
4194 find mustInstanceOfRegion_class(problem,interpretation,var_r1);
4195 find mustInRelationvertices_reference_Region(problem,interpretation,var_r1,var_virtual0);
4196 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
4197 var_virtual0 == var_e1;
4198}
4199private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(
4200 problem:LogicProblem, interpretation:PartialInterpretation,
4201 var_r1, var_e1)
4202{
4203 find interpretation(problem,interpretation);
4204 find mayInstanceOfRegion_class(problem,interpretation,var_r1);
4205 find mayInstanceOfEntry_class(problem,interpretation,var_e1);
4206 // r1 is exported
4207 // e1 is exported
4208 find mayInstanceOfRegion_class(problem,interpretation,var_r1);
4209 find mayInRelationvertices_reference_Region(problem,interpretation,var_r1,var_virtual0);
4210 find mayInstanceOfVertex_class(problem,interpretation,var_virtual0);
4211 find mayEquivalent(problem, interpretation, var_virtual0, var_e1);
4212}
4213private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(
4214 problem:LogicProblem, interpretation:PartialInterpretation,
4215 var_r1, var_e1)
4216{
4217 find interpretation(problem,interpretation);
4218 find mustInstanceOfRegion_class(problem,interpretation,var_r1);
4219 find mustInstanceOfEntry_class(problem,interpretation,var_e1);
4220 // r1 is exported
4221 // e1 is exported
4222 find mustInstanceOfRegion_class(problem,interpretation,var_r1);
4223 find mustInRelationvertices_reference_Region(problem,interpretation,var_r1,var_virtual0);
4224 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
4225 var_virtual0 == var_e1;
4226}
4227// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries noEntryInRegion
4228private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(
4229 problem:LogicProblem, interpretation:PartialInterpretation,
4230 var_r1)
4231{
4232 find interpretation(problem,interpretation);
4233 find mustInstanceOfRegion_class(problem,interpretation,var_r1);
4234 // r1 is exported
4235 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r1,_var__0);
4236}
4237private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(
4238 problem:LogicProblem, interpretation:PartialInterpretation,
4239 var_r1)
4240{
4241 find interpretation(problem,interpretation);
4242 find mayInstanceOfRegion_class(problem,interpretation,var_r1);
4243 // r1 is exported
4244 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r1,_var__0);
4245}
4246private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(
4247 problem:LogicProblem, interpretation:PartialInterpretation,
4248 var_r1)
4249{
4250 find interpretation(problem,interpretation);
4251 find mustInstanceOfRegion_class(problem,interpretation,var_r1);
4252 // r1 is exported
4253 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r1,_var__0);
4254}
4255// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries multipleEntryInRegion
4256private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(
4257 problem:LogicProblem, interpretation:PartialInterpretation,
4258 var_r)
4259{
4260 find interpretation(problem,interpretation);
4261 find mustInstanceOfRegion_class(problem,interpretation,var_r);
4262 // r is exported
4263 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e1);
4264 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e2);
4265 neg find mayEquivalent(problem, interpretation, var_e1, var_e2);
4266}
4267private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(
4268 problem:LogicProblem, interpretation:PartialInterpretation,
4269 var_r)
4270{
4271 find interpretation(problem,interpretation);
4272 find mayInstanceOfRegion_class(problem,interpretation,var_r);
4273 // r is exported
4274 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e1);
4275 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e2);
4276 var_e1 != var_e2;
4277}
4278private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(
4279 problem:LogicProblem, interpretation:PartialInterpretation,
4280 var_r)
4281{
4282 find interpretation(problem,interpretation);
4283 find mustInstanceOfRegion_class(problem,interpretation,var_r);
4284 // r is exported
4285 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e1);
4286 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e2);
4287 var_e1 != var_e2;
4288}
4289// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries transition
4290private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(
4291 problem:LogicProblem, interpretation:PartialInterpretation,
4292 var_t, var_src, var_trg)
4293{
4294 find interpretation(problem,interpretation);
4295 find mustInstanceOfTransition_class(problem,interpretation,var_t);
4296 find mustInstanceOfVertex_class(problem,interpretation,var_src);
4297 find mustInstanceOfVertex_class(problem,interpretation,var_trg);
4298 // t is exported
4299 // src is exported
4300 // trg is exported
4301 find mustInstanceOfTransition_class(problem,interpretation,var_t);
4302 find mustInRelationsource_reference_Transition(problem,interpretation,var_t,var_virtual0);
4303 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
4304 var_virtual0 == var_src;
4305 find mustInstanceOfTransition_class(problem,interpretation,var_t);
4306 find mustInRelationtarget_reference_Transition(problem,interpretation,var_t,var_virtual1);
4307 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
4308 var_virtual1 == var_trg;
4309}
4310private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(
4311 problem:LogicProblem, interpretation:PartialInterpretation,
4312 var_t, var_src, var_trg)
4313{
4314 find interpretation(problem,interpretation);
4315 find mayInstanceOfTransition_class(problem,interpretation,var_t);
4316 find mayInstanceOfVertex_class(problem,interpretation,var_src);
4317 find mayInstanceOfVertex_class(problem,interpretation,var_trg);
4318 // t is exported
4319 // src is exported
4320 // trg is exported
4321 find mayInstanceOfTransition_class(problem,interpretation,var_t);
4322 find mayInRelationsource_reference_Transition(problem,interpretation,var_t,var_virtual0);
4323 find mayInstanceOfVertex_class(problem,interpretation,var_virtual0);
4324 find mayEquivalent(problem, interpretation, var_virtual0, var_src);
4325 find mayInstanceOfTransition_class(problem,interpretation,var_t);
4326 find mayInRelationtarget_reference_Transition(problem,interpretation,var_t,var_virtual1);
4327 find mayInstanceOfVertex_class(problem,interpretation,var_virtual1);
4328 find mayEquivalent(problem, interpretation, var_virtual1, var_trg);
4329}
4330private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(
4331 problem:LogicProblem, interpretation:PartialInterpretation,
4332 var_t, var_src, var_trg)
4333{
4334 find interpretation(problem,interpretation);
4335 find mustInstanceOfTransition_class(problem,interpretation,var_t);
4336 find mustInstanceOfVertex_class(problem,interpretation,var_src);
4337 find mustInstanceOfVertex_class(problem,interpretation,var_trg);
4338 // t is exported
4339 // src is exported
4340 // trg is exported
4341 find mustInstanceOfTransition_class(problem,interpretation,var_t);
4342 find mustInRelationsource_reference_Transition(problem,interpretation,var_t,var_virtual0);
4343 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
4344 var_virtual0 == var_src;
4345 find mustInstanceOfTransition_class(problem,interpretation,var_t);
4346 find mustInRelationtarget_reference_Transition(problem,interpretation,var_t,var_virtual1);
4347 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
4348 var_virtual1 == var_trg;
4349}
4350// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries incomingToEntry
4351private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(
4352 problem:LogicProblem, interpretation:PartialInterpretation,
4353 var_t, var_e)
4354{
4355 find interpretation(problem,interpretation);
4356 find mustInstanceOfTransition_class(problem,interpretation,var_t);
4357 find mustInstanceOfEntry_class(problem,interpretation,var_e);
4358 // t is exported
4359 // e is exported
4360 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t,_var__0,var_e);
4361}
4362private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(
4363 problem:LogicProblem, interpretation:PartialInterpretation,
4364 var_t, var_e)
4365{
4366 find interpretation(problem,interpretation);
4367 find mayInstanceOfTransition_class(problem,interpretation,var_t);
4368 find mayInstanceOfEntry_class(problem,interpretation,var_e);
4369 // t is exported
4370 // e is exported
4371 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t,_var__0,var_e);
4372}
4373private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(
4374 problem:LogicProblem, interpretation:PartialInterpretation,
4375 var_t, var_e)
4376{
4377 find interpretation(problem,interpretation);
4378 find mustInstanceOfTransition_class(problem,interpretation,var_t);
4379 find mustInstanceOfEntry_class(problem,interpretation,var_e);
4380 // t is exported
4381 // e is exported
4382 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t,_var__0,var_e);
4383}
4384// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries noOutgoingTransitionFromEntry
4385private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(
4386 problem:LogicProblem, interpretation:PartialInterpretation,
4387 var_e)
4388{
4389 find interpretation(problem,interpretation);
4390 find mustInstanceOfEntry_class(problem,interpretation,var_e);
4391 // e is exported
4392 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_e,_var__1);
4393}
4394private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(
4395 problem:LogicProblem, interpretation:PartialInterpretation,
4396 var_e)
4397{
4398 find interpretation(problem,interpretation);
4399 find mayInstanceOfEntry_class(problem,interpretation,var_e);
4400 // e is exported
4401 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_e,_var__1);
4402}
4403private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(
4404 problem:LogicProblem, interpretation:PartialInterpretation,
4405 var_e)
4406{
4407 find interpretation(problem,interpretation);
4408 find mustInstanceOfEntry_class(problem,interpretation,var_e);
4409 // e is exported
4410 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_e,_var__1);
4411}
4412// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries multipleTransitionFromEntry
4413private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(
4414 problem:LogicProblem, interpretation:PartialInterpretation,
4415 var_e, var_t1, var_t2)
4416{
4417 find interpretation(problem,interpretation);
4418 find mustInstanceOfEntry_class(problem,interpretation,var_e);
4419 find mustInstanceOfTransition_class(problem,interpretation,var_t1);
4420 find mustInstanceOfTransition_class(problem,interpretation,var_t2);
4421 // e is exported
4422 // t1 is exported
4423 // t2 is exported
4424 find mustInstanceOfEntry_class(problem,interpretation,var_e);
4425 find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0);
4426 find mustInstanceOfTransition_class(problem,interpretation,var_virtual0);
4427 var_virtual0 == var_t1;
4428 find mustInstanceOfEntry_class(problem,interpretation,var_e);
4429 find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual1);
4430 find mustInstanceOfTransition_class(problem,interpretation,var_virtual1);
4431 var_virtual1 == var_t2;
4432 neg find mayEquivalent(problem, interpretation, var_t1, var_t2);
4433}
4434private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(
4435 problem:LogicProblem, interpretation:PartialInterpretation,
4436 var_e, var_t1, var_t2)
4437{
4438 find interpretation(problem,interpretation);
4439 find mayInstanceOfEntry_class(problem,interpretation,var_e);
4440 find mayInstanceOfTransition_class(problem,interpretation,var_t1);
4441 find mayInstanceOfTransition_class(problem,interpretation,var_t2);
4442 // e is exported
4443 // t1 is exported
4444 // t2 is exported
4445 find mayInstanceOfEntry_class(problem,interpretation,var_e);
4446 find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0);
4447 find mayInstanceOfTransition_class(problem,interpretation,var_virtual0);
4448 find mayEquivalent(problem, interpretation, var_virtual0, var_t1);
4449 find mayInstanceOfEntry_class(problem,interpretation,var_e);
4450 find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual1);
4451 find mayInstanceOfTransition_class(problem,interpretation,var_virtual1);
4452 find mayEquivalent(problem, interpretation, var_virtual1, var_t2);
4453 var_t1 != var_t2;
4454}
4455private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(
4456 problem:LogicProblem, interpretation:PartialInterpretation,
4457 var_e, var_t1, var_t2)
4458{
4459 find interpretation(problem,interpretation);
4460 find mustInstanceOfEntry_class(problem,interpretation,var_e);
4461 find mustInstanceOfTransition_class(problem,interpretation,var_t1);
4462 find mustInstanceOfTransition_class(problem,interpretation,var_t2);
4463 // e is exported
4464 // t1 is exported
4465 // t2 is exported
4466 find mustInstanceOfEntry_class(problem,interpretation,var_e);
4467 find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0);
4468 find mustInstanceOfTransition_class(problem,interpretation,var_virtual0);
4469 var_virtual0 == var_t1;
4470 find mustInstanceOfEntry_class(problem,interpretation,var_e);
4471 find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual1);
4472 find mustInstanceOfTransition_class(problem,interpretation,var_virtual1);
4473 var_virtual1 == var_t2;
4474 var_t1 != var_t2;
4475}
4476// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries outgoingFromExit
4477private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(
4478 problem:LogicProblem, interpretation:PartialInterpretation,
4479 var_t, var_e)
4480{
4481 find interpretation(problem,interpretation);
4482 find mustInstanceOfTransition_class(problem,interpretation,var_t);
4483 find mustInstanceOfExit_class(problem,interpretation,var_e);
4484 // t is exported
4485 // e is exported
4486 find mustInstanceOfExit_class(problem,interpretation,var_e);
4487 find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0);
4488 find mustInstanceOfTransition_class(problem,interpretation,var_virtual0);
4489 var_virtual0 == var_t;
4490}
4491private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(
4492 problem:LogicProblem, interpretation:PartialInterpretation,
4493 var_t, var_e)
4494{
4495 find interpretation(problem,interpretation);
4496 find mayInstanceOfTransition_class(problem,interpretation,var_t);
4497 find mayInstanceOfExit_class(problem,interpretation,var_e);
4498 // t is exported
4499 // e is exported
4500 find mayInstanceOfExit_class(problem,interpretation,var_e);
4501 find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0);
4502 find mayInstanceOfTransition_class(problem,interpretation,var_virtual0);
4503 find mayEquivalent(problem, interpretation, var_virtual0, var_t);
4504}
4505private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(
4506 problem:LogicProblem, interpretation:PartialInterpretation,
4507 var_t, var_e)
4508{
4509 find interpretation(problem,interpretation);
4510 find mustInstanceOfTransition_class(problem,interpretation,var_t);
4511 find mustInstanceOfExit_class(problem,interpretation,var_e);
4512 // t is exported
4513 // e is exported
4514 find mustInstanceOfExit_class(problem,interpretation,var_e);
4515 find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0);
4516 find mustInstanceOfTransition_class(problem,interpretation,var_virtual0);
4517 var_virtual0 == var_t;
4518}
4519// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries outgoingFromFinal
4520private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(
4521 problem:LogicProblem, interpretation:PartialInterpretation,
4522 var_t, var_f)
4523{
4524 find interpretation(problem,interpretation);
4525 find mustInstanceOfTransition_class(problem,interpretation,var_t);
4526 find mustInstanceOfFinalState_class(problem,interpretation,var_f);
4527 // t is exported
4528 // f is exported
4529 find mustInstanceOfFinalState_class(problem,interpretation,var_f);
4530 find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_f,var_virtual0);
4531 find mustInstanceOfTransition_class(problem,interpretation,var_virtual0);
4532 var_virtual0 == var_t;
4533}
4534private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(
4535 problem:LogicProblem, interpretation:PartialInterpretation,
4536 var_t, var_f)
4537{
4538 find interpretation(problem,interpretation);
4539 find mayInstanceOfTransition_class(problem,interpretation,var_t);
4540 find mayInstanceOfFinalState_class(problem,interpretation,var_f);
4541 // t is exported
4542 // f is exported
4543 find mayInstanceOfFinalState_class(problem,interpretation,var_f);
4544 find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_f,var_virtual0);
4545 find mayInstanceOfTransition_class(problem,interpretation,var_virtual0);
4546 find mayEquivalent(problem, interpretation, var_virtual0, var_t);
4547}
4548private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(
4549 problem:LogicProblem, interpretation:PartialInterpretation,
4550 var_t, var_f)
4551{
4552 find interpretation(problem,interpretation);
4553 find mustInstanceOfTransition_class(problem,interpretation,var_t);
4554 find mustInstanceOfFinalState_class(problem,interpretation,var_f);
4555 // t is exported
4556 // f is exported
4557 find mustInstanceOfFinalState_class(problem,interpretation,var_f);
4558 find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_f,var_virtual0);
4559 find mustInstanceOfTransition_class(problem,interpretation,var_virtual0);
4560 var_virtual0 == var_t;
4561}
4562// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries noStateInRegion
4563private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(
4564 problem:LogicProblem, interpretation:PartialInterpretation,
4565 var_region)
4566{
4567 find interpretation(problem,interpretation);
4568 find mustInstanceOfRegion_class(problem,interpretation,var_region);
4569 // region is exported
4570 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion(problem,interpretation,var_region,_var__0);
4571}
4572private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(
4573 problem:LogicProblem, interpretation:PartialInterpretation,
4574 var_region)
4575{
4576 find interpretation(problem,interpretation);
4577 find mayInstanceOfRegion_class(problem,interpretation,var_region);
4578 // region is exported
4579 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion(problem,interpretation,var_region,_var__0);
4580}
4581private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(
4582 problem:LogicProblem, interpretation:PartialInterpretation,
4583 var_region)
4584{
4585 find interpretation(problem,interpretation);
4586 find mustInstanceOfRegion_class(problem,interpretation,var_region);
4587 // region is exported
4588 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion(problem,interpretation,var_region,_var__0);
4589}
4590// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries StateInRegion
4591private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion(
4592 problem:LogicProblem, interpretation:PartialInterpretation,
4593 var_region, var_state)
4594{
4595 find interpretation(problem,interpretation);
4596 find mustInstanceOfRegion_class(problem,interpretation,var_region);
4597 find mustInstanceOfState_class(problem,interpretation,var_state);
4598 // region is exported
4599 // state is exported
4600 find mustInstanceOfRegion_class(problem,interpretation,var_region);
4601 find mustInRelationvertices_reference_Region(problem,interpretation,var_region,var_virtual0);
4602 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
4603 var_virtual0 == var_state;
4604}
4605private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion(
4606 problem:LogicProblem, interpretation:PartialInterpretation,
4607 var_region, var_state)
4608{
4609 find interpretation(problem,interpretation);
4610 find mayInstanceOfRegion_class(problem,interpretation,var_region);
4611 find mayInstanceOfState_class(problem,interpretation,var_state);
4612 // region is exported
4613 // state is exported
4614 find mayInstanceOfRegion_class(problem,interpretation,var_region);
4615 find mayInRelationvertices_reference_Region(problem,interpretation,var_region,var_virtual0);
4616 find mayInstanceOfVertex_class(problem,interpretation,var_virtual0);
4617 find mayEquivalent(problem, interpretation, var_virtual0, var_state);
4618}
4619private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion(
4620 problem:LogicProblem, interpretation:PartialInterpretation,
4621 var_region, var_state)
4622{
4623 find interpretation(problem,interpretation);
4624 find mustInstanceOfRegion_class(problem,interpretation,var_region);
4625 find mustInstanceOfState_class(problem,interpretation,var_state);
4626 // region is exported
4627 // state is exported
4628 find mustInstanceOfRegion_class(problem,interpretation,var_region);
4629 find mustInRelationvertices_reference_Region(problem,interpretation,var_region,var_virtual0);
4630 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
4631 var_virtual0 == var_state;
4632}
4633// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries choiceHasNoOutgoing
4634private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(
4635 problem:LogicProblem, interpretation:PartialInterpretation,
4636 var_c)
4637{
4638 find interpretation(problem,interpretation);
4639 find mustInstanceOfChoice_class(problem,interpretation,var_c);
4640 // c is exported
4641 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_c,_var__1);
4642}
4643private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(
4644 problem:LogicProblem, interpretation:PartialInterpretation,
4645 var_c)
4646{
4647 find interpretation(problem,interpretation);
4648 find mayInstanceOfChoice_class(problem,interpretation,var_c);
4649 // c is exported
4650 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_c,_var__1);
4651}
4652private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(
4653 problem:LogicProblem, interpretation:PartialInterpretation,
4654 var_c)
4655{
4656 find interpretation(problem,interpretation);
4657 find mustInstanceOfChoice_class(problem,interpretation,var_c);
4658 // c is exported
4659 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_c,_var__1);
4660}
4661// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries choiceHasNoIncoming
4662private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(
4663 problem:LogicProblem, interpretation:PartialInterpretation,
4664 var_c)
4665{
4666 find interpretation(problem,interpretation);
4667 find mustInstanceOfChoice_class(problem,interpretation,var_c);
4668 // c is exported
4669 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_c);
4670}
4671private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(
4672 problem:LogicProblem, interpretation:PartialInterpretation,
4673 var_c)
4674{
4675 find interpretation(problem,interpretation);
4676 find mayInstanceOfChoice_class(problem,interpretation,var_c);
4677 // c is exported
4678 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_c);
4679}
4680private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(
4681 problem:LogicProblem, interpretation:PartialInterpretation,
4682 var_c)
4683{
4684 find interpretation(problem,interpretation);
4685 find mustInstanceOfChoice_class(problem,interpretation,var_c);
4686 // c is exported
4687 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_c);
4688}
4689// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries synchHasNoOutgoing
4690private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(
4691 problem:LogicProblem, interpretation:PartialInterpretation,
4692 var_s)
4693{
4694 find interpretation(problem,interpretation);
4695 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
4696 // s is exported
4697 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,_var__1);
4698}
4699private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(
4700 problem:LogicProblem, interpretation:PartialInterpretation,
4701 var_s)
4702{
4703 find interpretation(problem,interpretation);
4704 find mayInstanceOfSynchronization_class(problem,interpretation,var_s);
4705 // s is exported
4706 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,_var__1);
4707}
4708private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(
4709 problem:LogicProblem, interpretation:PartialInterpretation,
4710 var_s)
4711{
4712 find interpretation(problem,interpretation);
4713 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
4714 // s is exported
4715 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,_var__1);
4716}
4717// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries synchHasNoIncoming
4718private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(
4719 problem:LogicProblem, interpretation:PartialInterpretation,
4720 var_s)
4721{
4722 find interpretation(problem,interpretation);
4723 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
4724 // s is exported
4725 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_s);
4726}
4727private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(
4728 problem:LogicProblem, interpretation:PartialInterpretation,
4729 var_s)
4730{
4731 find interpretation(problem,interpretation);
4732 find mayInstanceOfSynchronization_class(problem,interpretation,var_s);
4733 // s is exported
4734 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_s);
4735}
4736private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(
4737 problem:LogicProblem, interpretation:PartialInterpretation,
4738 var_s)
4739{
4740 find interpretation(problem,interpretation);
4741 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
4742 // s is exported
4743 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_s);
4744}
4745// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries SynchronizedIncomingInSameRegion
4746private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(
4747 problem:LogicProblem, interpretation:PartialInterpretation,
4748 var_s, var_v1, var_v2)
4749{
4750 find interpretation(problem,interpretation);
4751 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
4752 find mustInstanceOfVertex_class(problem,interpretation,var_v1);
4753 find mustInstanceOfVertex_class(problem,interpretation,var_v2);
4754 // s is exported
4755 // v1 is exported
4756 // v2 is exported
4757 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_v1,var_s);
4758 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_v2,var_s);
4759 neg find mayEquivalent(problem, interpretation, var_t1, var_t2);
4760 find mustInstanceOfRegion_class(problem,interpretation,var_r);
4761 find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0);
4762 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
4763 var_virtual0 == var_v1;
4764 find mustInstanceOfRegion_class(problem,interpretation,var_r);
4765 find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1);
4766 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
4767 var_virtual1 == var_v2;
4768}or{
4769 find interpretation(problem,interpretation);
4770 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
4771 find mustInstanceOfVertex_class(problem,interpretation,var_v1);
4772 find mustInstanceOfVertex_class(problem,interpretation,var_v2);
4773 // s is exported
4774 // v1 is exported
4775 // v2 is exported
4776 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_s,var_v1);
4777 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_s,var_v2);
4778 neg find mayEquivalent(problem, interpretation, var_t1, var_t2);
4779 find mustInstanceOfRegion_class(problem,interpretation,var_r);
4780 find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0);
4781 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
4782 var_virtual0 == var_v1;
4783 find mustInstanceOfRegion_class(problem,interpretation,var_r);
4784 find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1);
4785 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
4786 var_virtual1 == var_v2;
4787}
4788private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(
4789 problem:LogicProblem, interpretation:PartialInterpretation,
4790 var_s, var_v1, var_v2)
4791{
4792 find interpretation(problem,interpretation);
4793 find mayInstanceOfSynchronization_class(problem,interpretation,var_s);
4794 find mayInstanceOfVertex_class(problem,interpretation,var_v1);
4795 find mayInstanceOfVertex_class(problem,interpretation,var_v2);
4796 // s is exported
4797 // v1 is exported
4798 // v2 is exported
4799 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_v1,var_s);
4800 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_v2,var_s);
4801 var_t1 != var_t2;
4802 find mayInstanceOfRegion_class(problem,interpretation,var_r);
4803 find mayInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0);
4804 find mayInstanceOfVertex_class(problem,interpretation,var_virtual0);
4805 find mayEquivalent(problem, interpretation, var_virtual0, var_v1);
4806 find mayInstanceOfRegion_class(problem,interpretation,var_r);
4807 find mayInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1);
4808 find mayInstanceOfVertex_class(problem,interpretation,var_virtual1);
4809 find mayEquivalent(problem, interpretation, var_virtual1, var_v2);
4810}or{
4811 find interpretation(problem,interpretation);
4812 find mayInstanceOfSynchronization_class(problem,interpretation,var_s);
4813 find mayInstanceOfVertex_class(problem,interpretation,var_v1);
4814 find mayInstanceOfVertex_class(problem,interpretation,var_v2);
4815 // s is exported
4816 // v1 is exported
4817 // v2 is exported
4818 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_s,var_v1);
4819 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_s,var_v2);
4820 var_t1 != var_t2;
4821 find mayInstanceOfRegion_class(problem,interpretation,var_r);
4822 find mayInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0);
4823 find mayInstanceOfVertex_class(problem,interpretation,var_virtual0);
4824 find mayEquivalent(problem, interpretation, var_virtual0, var_v1);
4825 find mayInstanceOfRegion_class(problem,interpretation,var_r);
4826 find mayInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1);
4827 find mayInstanceOfVertex_class(problem,interpretation,var_virtual1);
4828 find mayEquivalent(problem, interpretation, var_virtual1, var_v2);
4829}
4830private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(
4831 problem:LogicProblem, interpretation:PartialInterpretation,
4832 var_s, var_v1, var_v2)
4833{
4834 find interpretation(problem,interpretation);
4835 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
4836 find mustInstanceOfVertex_class(problem,interpretation,var_v1);
4837 find mustInstanceOfVertex_class(problem,interpretation,var_v2);
4838 // s is exported
4839 // v1 is exported
4840 // v2 is exported
4841 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_v1,var_s);
4842 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_v2,var_s);
4843 var_t1 != var_t2;
4844 find mustInstanceOfRegion_class(problem,interpretation,var_r);
4845 find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0);
4846 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
4847 var_virtual0 == var_v1;
4848 find mustInstanceOfRegion_class(problem,interpretation,var_r);
4849 find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1);
4850 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
4851 var_virtual1 == var_v2;
4852}or{
4853 find interpretation(problem,interpretation);
4854 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
4855 find mustInstanceOfVertex_class(problem,interpretation,var_v1);
4856 find mustInstanceOfVertex_class(problem,interpretation,var_v2);
4857 // s is exported
4858 // v1 is exported
4859 // v2 is exported
4860 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_s,var_v1);
4861 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_s,var_v2);
4862 var_t1 != var_t2;
4863 find mustInstanceOfRegion_class(problem,interpretation,var_r);
4864 find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0);
4865 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
4866 var_virtual0 == var_v1;
4867 find mustInstanceOfRegion_class(problem,interpretation,var_r);
4868 find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1);
4869 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
4870 var_virtual1 == var_v2;
4871}
4872// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries notSynchronizingStates
4873private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(
4874 problem:LogicProblem, interpretation:PartialInterpretation,
4875 var_s)
4876{
4877 find interpretation(problem,interpretation);
4878 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
4879 // s is exported
4880 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition(problem,interpretation,var_s);
4881 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition(problem,interpretation,var_s);
4882}
4883private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(
4884 problem:LogicProblem, interpretation:PartialInterpretation,
4885 var_s)
4886{
4887 find interpretation(problem,interpretation);
4888 find mayInstanceOfSynchronization_class(problem,interpretation,var_s);
4889 // s is exported
4890 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition(problem,interpretation,var_s);
4891 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition(problem,interpretation,var_s);
4892}
4893private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(
4894 problem:LogicProblem, interpretation:PartialInterpretation,
4895 var_s)
4896{
4897 find interpretation(problem,interpretation);
4898 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
4899 // s is exported
4900 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition(problem,interpretation,var_s);
4901 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition(problem,interpretation,var_s);
4902}
4903// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries hasMultipleOutgoingTrainsition
4904private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition(
4905 problem:LogicProblem, interpretation:PartialInterpretation,
4906 var_v)
4907{
4908 find interpretation(problem,interpretation);
4909 find mustInstanceOfSynchronization_class(problem,interpretation,var_v);
4910 // v is exported
4911 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_trg1);
4912 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v,var_trg2);
4913 neg find mayEquivalent(problem, interpretation, var_trg1, var_trg2);
4914}
4915private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition(
4916 problem:LogicProblem, interpretation:PartialInterpretation,
4917 var_v)
4918{
4919 find interpretation(problem,interpretation);
4920 find mayInstanceOfSynchronization_class(problem,interpretation,var_v);
4921 // v is exported
4922 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_trg1);
4923 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v,var_trg2);
4924 var_trg1 != var_trg2;
4925}
4926private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition(
4927 problem:LogicProblem, interpretation:PartialInterpretation,
4928 var_v)
4929{
4930 find interpretation(problem,interpretation);
4931 find mustInstanceOfSynchronization_class(problem,interpretation,var_v);
4932 // v is exported
4933 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_trg1);
4934 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v,var_trg2);
4935 var_trg1 != var_trg2;
4936}
4937// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries hasMultipleIncomingTrainsition
4938private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition(
4939 problem:LogicProblem, interpretation:PartialInterpretation,
4940 var_v)
4941{
4942 find interpretation(problem,interpretation);
4943 find mustInstanceOfSynchronization_class(problem,interpretation,var_v);
4944 // v is exported
4945 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_src1,var_v);
4946 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_src2,var_v);
4947 neg find mayEquivalent(problem, interpretation, var_src1, var_src2);
4948}
4949private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition(
4950 problem:LogicProblem, interpretation:PartialInterpretation,
4951 var_v)
4952{
4953 find interpretation(problem,interpretation);
4954 find mayInstanceOfSynchronization_class(problem,interpretation,var_v);
4955 // v is exported
4956 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_src1,var_v);
4957 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_src2,var_v);
4958 var_src1 != var_src2;
4959}
4960private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition(
4961 problem:LogicProblem, interpretation:PartialInterpretation,
4962 var_v)
4963{
4964 find interpretation(problem,interpretation);
4965 find mustInstanceOfSynchronization_class(problem,interpretation,var_v);
4966 // v is exported
4967 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_src1,var_v);
4968 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_src2,var_v);
4969 var_src1 != var_src2;
4970}
4971// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries SynchronizedRegionsAreNotSiblings
4972private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(
4973 problem:LogicProblem, interpretation:PartialInterpretation,
4974 var_s, var_v1, var_v2)
4975{
4976 find interpretation(problem,interpretation);
4977 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
4978 find mustInstanceOfVertex_class(problem,interpretation,var_v1);
4979 find mustInstanceOfVertex_class(problem,interpretation,var_v2);
4980 // s is exported
4981 // v1 is exported
4982 // v2 is exported
4983 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v1,var_s);
4984 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v2,var_s);
4985 find mustInstanceOfCompositeElement_class(problem,interpretation,var_r1);
4986 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0);
4987 find mustInstanceOfRegion_class(problem,interpretation,var_virtual0);
4988 find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1);
4989 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
4990 var_virtual1 == var_v1;
4991 find mustInstanceOfCompositeElement_class(problem,interpretation,var_r2);
4992 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2);
4993 find mustInstanceOfRegion_class(problem,interpretation,var_virtual2);
4994 find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3);
4995 find mustInstanceOfVertex_class(problem,interpretation,var_virtual3);
4996 var_virtual3 == var_v2;
4997 neg find mayEquivalent(problem, interpretation, var_r1, var_r2);
4998}or{
4999 find interpretation(problem,interpretation);
5000 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
5001 find mustInstanceOfVertex_class(problem,interpretation,var_v1);
5002 find mustInstanceOfVertex_class(problem,interpretation,var_v2);
5003 // s is exported
5004 // v1 is exported
5005 // v2 is exported
5006 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v1);
5007 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_s,var_v2);
5008 find mustInstanceOfCompositeElement_class(problem,interpretation,var_r1);
5009 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0);
5010 find mustInstanceOfRegion_class(problem,interpretation,var_virtual0);
5011 find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1);
5012 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
5013 var_virtual1 == var_v1;
5014 find mustInstanceOfCompositeElement_class(problem,interpretation,var_r2);
5015 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2);
5016 find mustInstanceOfRegion_class(problem,interpretation,var_virtual2);
5017 find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3);
5018 find mustInstanceOfVertex_class(problem,interpretation,var_virtual3);
5019 var_virtual3 == var_v2;
5020 neg find mayEquivalent(problem, interpretation, var_r1, var_r2);
5021}
5022private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(
5023 problem:LogicProblem, interpretation:PartialInterpretation,
5024 var_s, var_v1, var_v2)
5025{
5026 find interpretation(problem,interpretation);
5027 find mayInstanceOfSynchronization_class(problem,interpretation,var_s);
5028 find mayInstanceOfVertex_class(problem,interpretation,var_v1);
5029 find mayInstanceOfVertex_class(problem,interpretation,var_v2);
5030 // s is exported
5031 // v1 is exported
5032 // v2 is exported
5033 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v1,var_s);
5034 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v2,var_s);
5035 find mayInstanceOfCompositeElement_class(problem,interpretation,var_r1);
5036 find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0);
5037 find mayInstanceOfRegion_class(problem,interpretation,var_virtual0);
5038 find mayInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1);
5039 find mayInstanceOfVertex_class(problem,interpretation,var_virtual1);
5040 find mayEquivalent(problem, interpretation, var_virtual1, var_v1);
5041 find mayInstanceOfCompositeElement_class(problem,interpretation,var_r2);
5042 find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2);
5043 find mayInstanceOfRegion_class(problem,interpretation,var_virtual2);
5044 find mayInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3);
5045 find mayInstanceOfVertex_class(problem,interpretation,var_virtual3);
5046 find mayEquivalent(problem, interpretation, var_virtual3, var_v2);
5047 var_r1 != var_r2;
5048}or{
5049 find interpretation(problem,interpretation);
5050 find mayInstanceOfSynchronization_class(problem,interpretation,var_s);
5051 find mayInstanceOfVertex_class(problem,interpretation,var_v1);
5052 find mayInstanceOfVertex_class(problem,interpretation,var_v2);
5053 // s is exported
5054 // v1 is exported
5055 // v2 is exported
5056 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v1);
5057 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_s,var_v2);
5058 find mayInstanceOfCompositeElement_class(problem,interpretation,var_r1);
5059 find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0);
5060 find mayInstanceOfRegion_class(problem,interpretation,var_virtual0);
5061 find mayInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1);
5062 find mayInstanceOfVertex_class(problem,interpretation,var_virtual1);
5063 find mayEquivalent(problem, interpretation, var_virtual1, var_v1);
5064 find mayInstanceOfCompositeElement_class(problem,interpretation,var_r2);
5065 find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2);
5066 find mayInstanceOfRegion_class(problem,interpretation,var_virtual2);
5067 find mayInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3);
5068 find mayInstanceOfVertex_class(problem,interpretation,var_virtual3);
5069 find mayEquivalent(problem, interpretation, var_virtual3, var_v2);
5070 var_r1 != var_r2;
5071}
5072private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(
5073 problem:LogicProblem, interpretation:PartialInterpretation,
5074 var_s, var_v1, var_v2)
5075{
5076 find interpretation(problem,interpretation);
5077 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
5078 find mustInstanceOfVertex_class(problem,interpretation,var_v1);
5079 find mustInstanceOfVertex_class(problem,interpretation,var_v2);
5080 // s is exported
5081 // v1 is exported
5082 // v2 is exported
5083 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v1,var_s);
5084 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v2,var_s);
5085 find mustInstanceOfCompositeElement_class(problem,interpretation,var_r1);
5086 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0);
5087 find mustInstanceOfRegion_class(problem,interpretation,var_virtual0);
5088 find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1);
5089 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
5090 var_virtual1 == var_v1;
5091 find mustInstanceOfCompositeElement_class(problem,interpretation,var_r2);
5092 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2);
5093 find mustInstanceOfRegion_class(problem,interpretation,var_virtual2);
5094 find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3);
5095 find mustInstanceOfVertex_class(problem,interpretation,var_virtual3);
5096 var_virtual3 == var_v2;
5097 var_r1 != var_r2;
5098}or{
5099 find interpretation(problem,interpretation);
5100 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
5101 find mustInstanceOfVertex_class(problem,interpretation,var_v1);
5102 find mustInstanceOfVertex_class(problem,interpretation,var_v2);
5103 // s is exported
5104 // v1 is exported
5105 // v2 is exported
5106 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v1);
5107 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_s,var_v2);
5108 find mustInstanceOfCompositeElement_class(problem,interpretation,var_r1);
5109 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0);
5110 find mustInstanceOfRegion_class(problem,interpretation,var_virtual0);
5111 find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1);
5112 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
5113 var_virtual1 == var_v1;
5114 find mustInstanceOfCompositeElement_class(problem,interpretation,var_r2);
5115 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2);
5116 find mustInstanceOfRegion_class(problem,interpretation,var_virtual2);
5117 find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3);
5118 find mustInstanceOfVertex_class(problem,interpretation,var_virtual3);
5119 var_virtual3 == var_v2;
5120 var_r1 != var_r2;
5121}
5122// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries child
5123private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(
5124 problem:LogicProblem, interpretation:PartialInterpretation,
5125 var_parent, var_child)
5126{
5127 find interpretation(problem,interpretation);
5128 find mustInstanceOfCompositeElement_class(problem,interpretation,var_parent);
5129 find mustInstanceOfVertex_class(problem,interpretation,var_child);
5130 // parent is exported
5131 // child is exported
5132 find mustInstanceOfCompositeElement_class(problem,interpretation,var_parent);
5133 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_parent,var_virtual0);
5134 find mustInstanceOfRegion_class(problem,interpretation,var_virtual0);
5135 find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1);
5136 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
5137 var_virtual1 == var_child;
5138}
5139private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(
5140 problem:LogicProblem, interpretation:PartialInterpretation,
5141 var_parent, var_child)
5142{
5143 find interpretation(problem,interpretation);
5144 find mayInstanceOfCompositeElement_class(problem,interpretation,var_parent);
5145 find mayInstanceOfVertex_class(problem,interpretation,var_child);
5146 // parent is exported
5147 // child is exported
5148 find mayInstanceOfCompositeElement_class(problem,interpretation,var_parent);
5149 find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_parent,var_virtual0);
5150 find mayInstanceOfRegion_class(problem,interpretation,var_virtual0);
5151 find mayInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1);
5152 find mayInstanceOfVertex_class(problem,interpretation,var_virtual1);
5153 find mayEquivalent(problem, interpretation, var_virtual1, var_child);
5154}
5155private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(
5156 problem:LogicProblem, interpretation:PartialInterpretation,
5157 var_parent, var_child)
5158{
5159 find interpretation(problem,interpretation);
5160 find mustInstanceOfCompositeElement_class(problem,interpretation,var_parent);
5161 find mustInstanceOfVertex_class(problem,interpretation,var_child);
5162 // parent is exported
5163 // child is exported
5164 find mustInstanceOfCompositeElement_class(problem,interpretation,var_parent);
5165 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_parent,var_virtual0);
5166 find mustInstanceOfRegion_class(problem,interpretation,var_virtual0);
5167 find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1);
5168 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
5169 var_virtual1 == var_child;
5170}
5171// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries SynchronizedRegionDoesNotHaveMultipleRegions
5172private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(
5173 problem:LogicProblem, interpretation:PartialInterpretation,
5174 var_s, var_v)
5175{
5176 find interpretation(problem,interpretation);
5177 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
5178 find mustInstanceOfVertex_class(problem,interpretation,var_v);
5179 // s is exported
5180 // v is exported
5181 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_s);
5182 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v);
5183 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c);
5184}or{
5185 find interpretation(problem,interpretation);
5186 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
5187 find mustInstanceOfVertex_class(problem,interpretation,var_v);
5188 // s is exported
5189 // v is exported
5190 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v);
5191 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v);
5192 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c);
5193}
5194private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(
5195 problem:LogicProblem, interpretation:PartialInterpretation,
5196 var_s, var_v)
5197{
5198 find interpretation(problem,interpretation);
5199 find mayInstanceOfSynchronization_class(problem,interpretation,var_s);
5200 find mayInstanceOfVertex_class(problem,interpretation,var_v);
5201 // s is exported
5202 // v is exported
5203 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_s);
5204 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v);
5205 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c);
5206}or{
5207 find interpretation(problem,interpretation);
5208 find mayInstanceOfSynchronization_class(problem,interpretation,var_s);
5209 find mayInstanceOfVertex_class(problem,interpretation,var_v);
5210 // s is exported
5211 // v is exported
5212 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v);
5213 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v);
5214 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c);
5215}
5216private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(
5217 problem:LogicProblem, interpretation:PartialInterpretation,
5218 var_s, var_v)
5219{
5220 find interpretation(problem,interpretation);
5221 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
5222 find mustInstanceOfVertex_class(problem,interpretation,var_v);
5223 // s is exported
5224 // v is exported
5225 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_s);
5226 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v);
5227 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c);
5228}or{
5229 find interpretation(problem,interpretation);
5230 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
5231 find mustInstanceOfVertex_class(problem,interpretation,var_v);
5232 // s is exported
5233 // v is exported
5234 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v);
5235 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v);
5236 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c);
5237}
5238// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries hasMultipleRegions
5239private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(
5240 problem:LogicProblem, interpretation:PartialInterpretation,
5241 var_composite)
5242{
5243 find interpretation(problem,interpretation);
5244 find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite);
5245 // composite is exported
5246 find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite);
5247 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual0);
5248 find mustInstanceOfRegion_class(problem,interpretation,var_virtual0);
5249 var_virtual0 == var_region1;
5250 find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite);
5251 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual1);
5252 find mustInstanceOfRegion_class(problem,interpretation,var_virtual1);
5253 var_virtual1 == var_region2;
5254 neg find mayEquivalent(problem, interpretation, var_region1, var_region2);
5255}
5256private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(
5257 problem:LogicProblem, interpretation:PartialInterpretation,
5258 var_composite)
5259{
5260 find interpretation(problem,interpretation);
5261 find mayInstanceOfCompositeElement_class(problem,interpretation,var_composite);
5262 // composite is exported
5263 find mayInstanceOfCompositeElement_class(problem,interpretation,var_composite);
5264 find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual0);
5265 find mayInstanceOfRegion_class(problem,interpretation,var_virtual0);
5266 find mayEquivalent(problem, interpretation, var_virtual0, var_region1);
5267 find mayInstanceOfCompositeElement_class(problem,interpretation,var_composite);
5268 find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual1);
5269 find mayInstanceOfRegion_class(problem,interpretation,var_virtual1);
5270 find mayEquivalent(problem, interpretation, var_virtual1, var_region2);
5271 var_region1 != var_region2;
5272}
5273private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(
5274 problem:LogicProblem, interpretation:PartialInterpretation,
5275 var_composite)
5276{
5277 find interpretation(problem,interpretation);
5278 find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite);
5279 // composite is exported
5280 find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite);
5281 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual0);
5282 find mustInstanceOfRegion_class(problem,interpretation,var_virtual0);
5283 var_virtual0 == var_region1;
5284 find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite);
5285 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual1);
5286 find mustInstanceOfRegion_class(problem,interpretation,var_virtual1);
5287 var_virtual1 == var_region2;
5288 var_region1 != var_region2;
5289}
5290// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries synchThree
5291private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(
5292 problem:LogicProblem, interpretation:PartialInterpretation,
5293 var_s)
5294{
5295 find interpretation(problem,interpretation);
5296 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
5297 // s is exported
5298 find mustInstanceOfTransition_class(problem,interpretation,var_t1);
5299 find mustInRelationtarget_reference_Transition(problem,interpretation,var_t1,var_virtual0);
5300 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
5301 var_virtual0 == var_s;
5302 find mustInstanceOfTransition_class(problem,interpretation,var_t2);
5303 find mustInRelationtarget_reference_Transition(problem,interpretation,var_t2,var_virtual1);
5304 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
5305 var_virtual1 == var_s;
5306 find mustInstanceOfTransition_class(problem,interpretation,var_t3);
5307 find mustInRelationtarget_reference_Transition(problem,interpretation,var_t3,var_virtual2);
5308 find mustInstanceOfVertex_class(problem,interpretation,var_virtual2);
5309 var_virtual2 == var_s;
5310 neg find mayEquivalent(problem, interpretation, var_t1, var_t2);
5311 neg find mayEquivalent(problem, interpretation, var_t2, var_t3);
5312 neg find mayEquivalent(problem, interpretation, var_t1, var_t3);
5313}or{
5314 find interpretation(problem,interpretation);
5315 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
5316 // s is exported
5317 find mustInstanceOfTransition_class(problem,interpretation,var_t1);
5318 find mustInRelationsource_reference_Transition(problem,interpretation,var_t1,var_virtual0);
5319 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
5320 var_virtual0 == var_s;
5321 find mustInstanceOfTransition_class(problem,interpretation,var_t2);
5322 find mustInRelationsource_reference_Transition(problem,interpretation,var_t2,var_virtual1);
5323 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
5324 var_virtual1 == var_s;
5325 find mustInstanceOfTransition_class(problem,interpretation,var_t3);
5326 find mustInRelationsource_reference_Transition(problem,interpretation,var_t3,var_virtual2);
5327 find mustInstanceOfVertex_class(problem,interpretation,var_virtual2);
5328 var_virtual2 == var_s;
5329 neg find mayEquivalent(problem, interpretation, var_t1, var_t2);
5330 neg find mayEquivalent(problem, interpretation, var_t2, var_t3);
5331 neg find mayEquivalent(problem, interpretation, var_t1, var_t3);
5332}
5333private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(
5334 problem:LogicProblem, interpretation:PartialInterpretation,
5335 var_s)
5336{
5337 find interpretation(problem,interpretation);
5338 find mayInstanceOfSynchronization_class(problem,interpretation,var_s);
5339 // s is exported
5340 find mayInstanceOfTransition_class(problem,interpretation,var_t1);
5341 find mayInRelationtarget_reference_Transition(problem,interpretation,var_t1,var_virtual0);
5342 find mayInstanceOfVertex_class(problem,interpretation,var_virtual0);
5343 find mayEquivalent(problem, interpretation, var_virtual0, var_s);
5344 find mayInstanceOfTransition_class(problem,interpretation,var_t2);
5345 find mayInRelationtarget_reference_Transition(problem,interpretation,var_t2,var_virtual1);
5346 find mayInstanceOfVertex_class(problem,interpretation,var_virtual1);
5347 find mayEquivalent(problem, interpretation, var_virtual1, var_s);
5348 find mayInstanceOfTransition_class(problem,interpretation,var_t3);
5349 find mayInRelationtarget_reference_Transition(problem,interpretation,var_t3,var_virtual2);
5350 find mayInstanceOfVertex_class(problem,interpretation,var_virtual2);
5351 find mayEquivalent(problem, interpretation, var_virtual2, var_s);
5352 var_t1 != var_t2;
5353 var_t2 != var_t3;
5354 var_t1 != var_t3;
5355}or{
5356 find interpretation(problem,interpretation);
5357 find mayInstanceOfSynchronization_class(problem,interpretation,var_s);
5358 // s is exported
5359 find mayInstanceOfTransition_class(problem,interpretation,var_t1);
5360 find mayInRelationsource_reference_Transition(problem,interpretation,var_t1,var_virtual0);
5361 find mayInstanceOfVertex_class(problem,interpretation,var_virtual0);
5362 find mayEquivalent(problem, interpretation, var_virtual0, var_s);
5363 find mayInstanceOfTransition_class(problem,interpretation,var_t2);
5364 find mayInRelationsource_reference_Transition(problem,interpretation,var_t2,var_virtual1);
5365 find mayInstanceOfVertex_class(problem,interpretation,var_virtual1);
5366 find mayEquivalent(problem, interpretation, var_virtual1, var_s);
5367 find mayInstanceOfTransition_class(problem,interpretation,var_t3);
5368 find mayInRelationsource_reference_Transition(problem,interpretation,var_t3,var_virtual2);
5369 find mayInstanceOfVertex_class(problem,interpretation,var_virtual2);
5370 find mayEquivalent(problem, interpretation, var_virtual2, var_s);
5371 var_t1 != var_t2;
5372 var_t2 != var_t3;
5373 var_t1 != var_t3;
5374}
5375private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(
5376 problem:LogicProblem, interpretation:PartialInterpretation,
5377 var_s)
5378{
5379 find interpretation(problem,interpretation);
5380 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
5381 // s is exported
5382 find mustInstanceOfTransition_class(problem,interpretation,var_t1);
5383 find mustInRelationtarget_reference_Transition(problem,interpretation,var_t1,var_virtual0);
5384 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
5385 var_virtual0 == var_s;
5386 find mustInstanceOfTransition_class(problem,interpretation,var_t2);
5387 find mustInRelationtarget_reference_Transition(problem,interpretation,var_t2,var_virtual1);
5388 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
5389 var_virtual1 == var_s;
5390 find mustInstanceOfTransition_class(problem,interpretation,var_t3);
5391 find mustInRelationtarget_reference_Transition(problem,interpretation,var_t3,var_virtual2);
5392 find mustInstanceOfVertex_class(problem,interpretation,var_virtual2);
5393 var_virtual2 == var_s;
5394 var_t1 != var_t2;
5395 var_t2 != var_t3;
5396 var_t1 != var_t3;
5397}or{
5398 find interpretation(problem,interpretation);
5399 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
5400 // s is exported
5401 find mustInstanceOfTransition_class(problem,interpretation,var_t1);
5402 find mustInRelationsource_reference_Transition(problem,interpretation,var_t1,var_virtual0);
5403 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
5404 var_virtual0 == var_s;
5405 find mustInstanceOfTransition_class(problem,interpretation,var_t2);
5406 find mustInRelationsource_reference_Transition(problem,interpretation,var_t2,var_virtual1);
5407 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
5408 var_virtual1 == var_s;
5409 find mustInstanceOfTransition_class(problem,interpretation,var_t3);
5410 find mustInRelationsource_reference_Transition(problem,interpretation,var_t3,var_virtual2);
5411 find mustInstanceOfVertex_class(problem,interpretation,var_virtual2);
5412 var_virtual2 == var_s;
5413 var_t1 != var_t2;
5414 var_t2 != var_t3;
5415 var_t1 != var_t3;
5416}
5417// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries twoSynch
5418private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(
5419 problem:LogicProblem, interpretation:PartialInterpretation,
5420 var_s1, var_s2)
5421{
5422 find interpretation(problem,interpretation);
5423 find mustInstanceOfSynchronization_class(problem,interpretation,var_s1);
5424 find mustInstanceOfSynchronization_class(problem,interpretation,var_s2);
5425 // s1 is exported
5426 // s2 is exported
5427 find mustInstanceOfSynchronization_class(problem,interpretation,var_s1);
5428 find mustInstanceOfSynchronization_class(problem,interpretation,var_s2);
5429 neg find mayEquivalent(problem, interpretation, var_s1, var_s2);
5430}
5431private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(
5432 problem:LogicProblem, interpretation:PartialInterpretation,
5433 var_s1, var_s2)
5434{
5435 find interpretation(problem,interpretation);
5436 find mayInstanceOfSynchronization_class(problem,interpretation,var_s1);
5437 find mayInstanceOfSynchronization_class(problem,interpretation,var_s2);
5438 // s1 is exported
5439 // s2 is exported
5440 find mayInstanceOfSynchronization_class(problem,interpretation,var_s1);
5441 find mayInstanceOfSynchronization_class(problem,interpretation,var_s2);
5442 var_s1 != var_s2;
5443}
5444private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(
5445 problem:LogicProblem, interpretation:PartialInterpretation,
5446 var_s1, var_s2)
5447{
5448 find interpretation(problem,interpretation);
5449 find mustInstanceOfSynchronization_class(problem,interpretation,var_s1);
5450 find mustInstanceOfSynchronization_class(problem,interpretation,var_s2);
5451 // s1 is exported
5452 // s2 is exported
5453 find mustInstanceOfSynchronization_class(problem,interpretation,var_s1);
5454 find mustInstanceOfSynchronization_class(problem,interpretation,var_s2);
5455 var_s1 != var_s2;
5456}
5457
5458//////////
5459// 1.4 Containment Indexer
5460//////////
5461private pattern mustContains2(source: DefinedElement, target: DefinedElement) {
5462 find mustContains4(_,_,source,target);
5463}
5464
5465private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation,
5466 source: DefinedElement, target: DefinedElement)
5467 { find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,source,target); }or
5468
5469 { find mustInRelationvertices_reference_Region(problem,interpretation,source,target); }or
5470
5471 { find mustInRelationregions_reference_CompositeElement(problem,interpretation,source,target); }
5472
5473private pattern mustTransitiveContains(source,target) {
5474 find mustContains2+(source,target);
5475}
5476
5477//////////
5478// 2. Invalidation Indexers
5479//////////
5480// 2.1 Invalidated by WF Queries
5481//////////
5482pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(problem:LogicProblem, interpretation:PartialInterpretation,
5483 var_r1)
5484{
5485 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(problem,interpretation,var_r1);
5486}
5487pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(problem:LogicProblem, interpretation:PartialInterpretation,
5488 var_r)
5489{
5490 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(problem,interpretation,var_r);
5491}
5492pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(problem:LogicProblem, interpretation:PartialInterpretation,
5493 var_t, var_e)
5494{
5495 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(problem,interpretation,var_t,var_e);
5496}
5497pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(problem:LogicProblem, interpretation:PartialInterpretation,
5498 var_e)
5499{
5500 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(problem,interpretation,var_e);
5501}
5502pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(problem:LogicProblem, interpretation:PartialInterpretation,
5503 var_e, var_t1, var_t2)
5504{
5505 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(problem,interpretation,var_e,var_t1,var_t2);
5506}
5507pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(problem:LogicProblem, interpretation:PartialInterpretation,
5508 var_t, var_e)
5509{
5510 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(problem,interpretation,var_t,var_e);
5511}
5512pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(problem:LogicProblem, interpretation:PartialInterpretation,
5513 var_t, var_f)
5514{
5515 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(problem,interpretation,var_t,var_f);
5516}
5517pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(problem:LogicProblem, interpretation:PartialInterpretation,
5518 var_region)
5519{
5520 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(problem,interpretation,var_region);
5521}
5522pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(problem:LogicProblem, interpretation:PartialInterpretation,
5523 var_c)
5524{
5525 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(problem,interpretation,var_c);
5526}
5527pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(problem:LogicProblem, interpretation:PartialInterpretation,
5528 var_c)
5529{
5530 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(problem,interpretation,var_c);
5531}
5532pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(problem:LogicProblem, interpretation:PartialInterpretation,
5533 var_s)
5534{
5535 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(problem,interpretation,var_s);
5536}
5537pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(problem:LogicProblem, interpretation:PartialInterpretation,
5538 var_s)
5539{
5540 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(problem,interpretation,var_s);
5541}
5542pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(problem:LogicProblem, interpretation:PartialInterpretation,
5543 var_s, var_v1, var_v2)
5544{
5545 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(problem,interpretation,var_s,var_v1,var_v2);
5546}
5547pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(problem:LogicProblem, interpretation:PartialInterpretation,
5548 var_s)
5549{
5550 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(problem,interpretation,var_s);
5551}
5552pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(problem:LogicProblem, interpretation:PartialInterpretation,
5553 var_s, var_v1, var_v2)
5554{
5555 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(problem,interpretation,var_s,var_v1,var_v2);
5556}
5557pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(problem:LogicProblem, interpretation:PartialInterpretation,
5558 var_s, var_v)
5559{
5560 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(problem,interpretation,var_s,var_v);
5561}
5562pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(problem:LogicProblem, interpretation:PartialInterpretation,
5563 var_s)
5564{
5565 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(problem,interpretation,var_s);
5566}
5567pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(problem:LogicProblem, interpretation:PartialInterpretation,
5568 var_s1, var_s2)
5569{
5570 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(problem,interpretation,var_s1,var_s2);
5571}
5572
5573//////////
5574// 3. Unfinishedness Indexers
5575//////////
5576// 3.1 Unfinishedness Measured by Multiplicity
5577//////////
5578pattern unfinishedLowerMultiplicity_target_reference_Transition(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) {
5579 find interpretation(problem,interpretation);
5580 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
5581 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"target reference Transition");
5582 find mustInstanceOfTransition_class(problem,interpretation,object);
5583 numberOfExistingReferences == count find mustInRelationtarget_reference_Transition(problem,interpretation,object,_);
5584 check(numberOfExistingReferences < 1);
5585 missingMultiplicity == eval(1-numberOfExistingReferences);
5586}
5587
5588//////////
5589// 3.2 Unfinishedness Measured by WF Queries
5590//////////
5591pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(problem:LogicProblem, interpretation:PartialInterpretation,
5592 var_r1)
5593{
5594 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(problem,interpretation,var_r1);
5595}
5596pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(problem:LogicProblem, interpretation:PartialInterpretation,
5597 var_r)
5598{
5599 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(problem,interpretation,var_r);
5600}
5601pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(problem:LogicProblem, interpretation:PartialInterpretation,
5602 var_t, var_e)
5603{
5604 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(problem,interpretation,var_t,var_e);
5605}
5606pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(problem:LogicProblem, interpretation:PartialInterpretation,
5607 var_e)
5608{
5609 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(problem,interpretation,var_e);
5610}
5611pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(problem:LogicProblem, interpretation:PartialInterpretation,
5612 var_e, var_t1, var_t2)
5613{
5614 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(problem,interpretation,var_e,var_t1,var_t2);
5615}
5616pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(problem:LogicProblem, interpretation:PartialInterpretation,
5617 var_t, var_e)
5618{
5619 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(problem,interpretation,var_t,var_e);
5620}
5621pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(problem:LogicProblem, interpretation:PartialInterpretation,
5622 var_t, var_f)
5623{
5624 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(problem,interpretation,var_t,var_f);
5625}
5626pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(problem:LogicProblem, interpretation:PartialInterpretation,
5627 var_region)
5628{
5629 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(problem,interpretation,var_region);
5630}
5631pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(problem:LogicProblem, interpretation:PartialInterpretation,
5632 var_c)
5633{
5634 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(problem,interpretation,var_c);
5635}
5636pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(problem:LogicProblem, interpretation:PartialInterpretation,
5637 var_c)
5638{
5639 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(problem,interpretation,var_c);
5640}
5641pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(problem:LogicProblem, interpretation:PartialInterpretation,
5642 var_s)
5643{
5644 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(problem,interpretation,var_s);
5645}
5646pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(problem:LogicProblem, interpretation:PartialInterpretation,
5647 var_s)
5648{
5649 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(problem,interpretation,var_s);
5650}
5651pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(problem:LogicProblem, interpretation:PartialInterpretation,
5652 var_s, var_v1, var_v2)
5653{
5654 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(problem,interpretation,var_s,var_v1,var_v2);
5655}
5656pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(problem:LogicProblem, interpretation:PartialInterpretation,
5657 var_s)
5658{
5659 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(problem,interpretation,var_s);
5660}
5661pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(problem:LogicProblem, interpretation:PartialInterpretation,
5662 var_s, var_v1, var_v2)
5663{
5664 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(problem,interpretation,var_s,var_v1,var_v2);
5665}
5666pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(problem:LogicProblem, interpretation:PartialInterpretation,
5667 var_s, var_v)
5668{
5669 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(problem,interpretation,var_s,var_v);
5670}
5671pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(problem:LogicProblem, interpretation:PartialInterpretation,
5672 var_s)
5673{
5674 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(problem,interpretation,var_s);
5675}
5676pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(problem:LogicProblem, interpretation:PartialInterpretation,
5677 var_s1, var_s2)
5678{
5679 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(problem,interpretation,var_s1,var_s2);
5680}
5681
5682//////////
5683// 4. Refinement Indexers
5684//////////
5685// 4.1 Object constructors
5686//////////
5687private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation)
5688{
5689 find interpretation(problem,interpretation);
5690 find mustInstanceOfPseudostate_class(problem,interpretation,root);
5691 find mustExist(problem, interpretation, root);
5692}or{
5693 find interpretation(problem,interpretation);
5694 find mustInstanceOfVertex_class(problem,interpretation,root);
5695 find mustExist(problem, interpretation, root);
5696}or{
5697 find interpretation(problem,interpretation);
5698 find mustInstanceOfCompositeElement_class(problem,interpretation,root);
5699 find mustExist(problem, interpretation, root);
5700}or{
5701 find interpretation(problem,interpretation);
5702 find mustInstanceOfFinalState_class(problem,interpretation,root);
5703 find mustExist(problem, interpretation, root);
5704}or{
5705 find interpretation(problem,interpretation);
5706 find mustInstanceOfTransition_class(problem,interpretation,root);
5707 find mustExist(problem, interpretation, root);
5708}or{
5709 find interpretation(problem,interpretation);
5710 find mustInstanceOfRegion_class(problem,interpretation,root);
5711 find mustExist(problem, interpretation, root);
5712}or{
5713 find interpretation(problem,interpretation);
5714 find mustInstanceOfStatechart_class(problem,interpretation,root);
5715 find mustExist(problem, interpretation, root);
5716}or{
5717 find interpretation(problem,interpretation);
5718 find mustInstanceOfExit_class(problem,interpretation,root);
5719 find mustExist(problem, interpretation, root);
5720}or{
5721 find interpretation(problem,interpretation);
5722 find mustInstanceOfChoice_class(problem,interpretation,root);
5723 find mustExist(problem, interpretation, root);
5724}or{
5725 find interpretation(problem,interpretation);
5726 find mustInstanceOfRegularState_class(problem,interpretation,root);
5727 find mustExist(problem, interpretation, root);
5728}or{
5729 find interpretation(problem,interpretation);
5730 find mustInstanceOfSynchronization_class(problem,interpretation,root);
5731 find mustExist(problem, interpretation, root);
5732}or{
5733 find interpretation(problem,interpretation);
5734 find mustInstanceOfEntry_class(problem,interpretation,root);
5735 find mustExist(problem, interpretation, root);
5736}or{
5737 find interpretation(problem,interpretation);
5738 find mustInstanceOfState_class(problem,interpretation,root);
5739 find mustExist(problem, interpretation, root);
5740}or{
5741 find interpretation(problem,interpretation);
5742 find mustInstanceOfStatechart_class_DefinedPart(problem,interpretation,root);
5743 find mustExist(problem, interpretation, root);
5744}or{
5745 find interpretation(problem,interpretation);
5746 find mustInstanceOfStatechart_class_UndefinedPart(problem,interpretation,root);
5747 find mustExist(problem, interpretation, root);
5748}or{
5749 find interpretation(problem,interpretation);
5750 find mustInstanceOfCompositeElement_class_DefinedPart(problem,interpretation,root);
5751 find mustExist(problem, interpretation, root);
5752}or{
5753 find interpretation(problem,interpretation);
5754 find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,root);
5755 find mustExist(problem, interpretation, root);
5756}
5757pattern createObject_Entry_class_by_vertices_reference_Region(
5758 problem:LogicProblem, interpretation:PartialInterpretation,
5759 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
5760 container:DefinedElement)
5761{
5762 find interpretation(problem,interpretation);
5763 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
5764 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Entry class");
5765 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
5766 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region");
5767 find mustInstanceOfRegion_class(problem,interpretation,container);
5768 find mayInstanceOfEntry_class(problem,interpretation,newObject);
5769 find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject);
5770 find mustExist(problem, interpretation, container);
5771 neg find mustExist(problem, interpretation, newObject);
5772}
5773pattern createObject_Entry_class(
5774 problem:LogicProblem, interpretation:PartialInterpretation,
5775 typeInterpretation:PartialComplexTypeInterpretation)
5776{
5777 find interpretation(problem,interpretation);
5778 neg find hasElementInContainment(problem,interpretation);
5779 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
5780 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Entry class");
5781 find mayInstanceOfEntry_class(problem,interpretation,newObject);
5782 find mayExist(problem, interpretation, newObject);
5783 neg find mustExist(problem, interpretation, newObject);
5784}
5785pattern createObject_Choice_class_by_vertices_reference_Region(
5786 problem:LogicProblem, interpretation:PartialInterpretation,
5787 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
5788 container:DefinedElement)
5789{
5790 find interpretation(problem,interpretation);
5791 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
5792 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Choice class");
5793 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
5794 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region");
5795 find mustInstanceOfRegion_class(problem,interpretation,container);
5796 find mayInstanceOfChoice_class(problem,interpretation,newObject);
5797 find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject);
5798 find mustExist(problem, interpretation, container);
5799 neg find mustExist(problem, interpretation, newObject);
5800}
5801pattern createObject_Choice_class(
5802 problem:LogicProblem, interpretation:PartialInterpretation,
5803 typeInterpretation:PartialComplexTypeInterpretation)
5804{
5805 find interpretation(problem,interpretation);
5806 neg find hasElementInContainment(problem,interpretation);
5807 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
5808 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Choice class");
5809 find mayInstanceOfChoice_class(problem,interpretation,newObject);
5810 find mayExist(problem, interpretation, newObject);
5811 neg find mustExist(problem, interpretation, newObject);
5812}
5813pattern createObject_State_class_by_vertices_reference_Region(
5814 problem:LogicProblem, interpretation:PartialInterpretation,
5815 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
5816 container:DefinedElement)
5817{
5818 find interpretation(problem,interpretation);
5819 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
5820 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"State class");
5821 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
5822 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region");
5823 find mustInstanceOfRegion_class(problem,interpretation,container);
5824 find mayInstanceOfState_class(problem,interpretation,newObject);
5825 find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject);
5826 find mustExist(problem, interpretation, container);
5827 neg find mustExist(problem, interpretation, newObject);
5828}
5829pattern createObject_State_class(
5830 problem:LogicProblem, interpretation:PartialInterpretation,
5831 typeInterpretation:PartialComplexTypeInterpretation)
5832{
5833 find interpretation(problem,interpretation);
5834 neg find hasElementInContainment(problem,interpretation);
5835 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
5836 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"State class");
5837 find mayInstanceOfState_class(problem,interpretation,newObject);
5838 find mayExist(problem, interpretation, newObject);
5839 neg find mustExist(problem, interpretation, newObject);
5840}
5841pattern createObject_Statechart_class_UndefinedPart(
5842 problem:LogicProblem, interpretation:PartialInterpretation,
5843 typeInterpretation:PartialComplexTypeInterpretation)
5844{
5845 find interpretation(problem,interpretation);
5846 neg find hasElementInContainment(problem,interpretation);
5847 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
5848 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Statechart class UndefinedPart");
5849 find mayInstanceOfStatechart_class_UndefinedPart(problem,interpretation,newObject);
5850 find mayExist(problem, interpretation, newObject);
5851 neg find mustExist(problem, interpretation, newObject);
5852}
5853pattern createObject_Transition_class_by_outgoingTransitions_reference_Vertex_with_source_reference_Transition(
5854 problem:LogicProblem, interpretation:PartialInterpretation,
5855 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
5856 container:DefinedElement)
5857{
5858 find interpretation(problem,interpretation);
5859 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
5860 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Transition class");
5861 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
5862 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingTransitions reference Vertex");
5863 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
5864 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"source reference Transition");
5865 find mustInstanceOfVertex_class(problem,interpretation,container);
5866 find mayInstanceOfTransition_class(problem,interpretation,newObject);
5867 find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,container,newObject);
5868 find mustExist(problem, interpretation, container);
5869 neg find mustExist(problem, interpretation, newObject);
5870}
5871pattern createObject_Transition_class(
5872 problem:LogicProblem, interpretation:PartialInterpretation,
5873 typeInterpretation:PartialComplexTypeInterpretation)
5874{
5875 find interpretation(problem,interpretation);
5876 neg find hasElementInContainment(problem,interpretation);
5877 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
5878 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Transition class");
5879 find mayInstanceOfTransition_class(problem,interpretation,newObject);
5880 find mayExist(problem, interpretation, newObject);
5881 neg find mustExist(problem, interpretation, newObject);
5882}
5883pattern createObject_Region_class_by_regions_reference_CompositeElement(
5884 problem:LogicProblem, interpretation:PartialInterpretation,
5885 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
5886 container:DefinedElement)
5887{
5888 find interpretation(problem,interpretation);
5889 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
5890 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Region class");
5891 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
5892 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"regions reference CompositeElement");
5893 find mustInstanceOfCompositeElement_class(problem,interpretation,container);
5894 find mayInstanceOfRegion_class(problem,interpretation,newObject);
5895 find mayInRelationregions_reference_CompositeElement(problem,interpretation,container,newObject);
5896 find mustExist(problem, interpretation, container);
5897 neg find mustExist(problem, interpretation, newObject);
5898}
5899pattern createObject_Region_class(
5900 problem:LogicProblem, interpretation:PartialInterpretation,
5901 typeInterpretation:PartialComplexTypeInterpretation)
5902{
5903 find interpretation(problem,interpretation);
5904 neg find hasElementInContainment(problem,interpretation);
5905 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
5906 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Region class");
5907 find mayInstanceOfRegion_class(problem,interpretation,newObject);
5908 find mayExist(problem, interpretation, newObject);
5909 neg find mustExist(problem, interpretation, newObject);
5910}
5911pattern createObject_FinalState_class_by_vertices_reference_Region(
5912 problem:LogicProblem, interpretation:PartialInterpretation,
5913 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
5914 container:DefinedElement)
5915{
5916 find interpretation(problem,interpretation);
5917 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
5918 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FinalState class");
5919 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
5920 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region");
5921 find mustInstanceOfRegion_class(problem,interpretation,container);
5922 find mayInstanceOfFinalState_class(problem,interpretation,newObject);
5923 find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject);
5924 find mustExist(problem, interpretation, container);
5925 neg find mustExist(problem, interpretation, newObject);
5926}
5927pattern createObject_FinalState_class(
5928 problem:LogicProblem, interpretation:PartialInterpretation,
5929 typeInterpretation:PartialComplexTypeInterpretation)
5930{
5931 find interpretation(problem,interpretation);
5932 neg find hasElementInContainment(problem,interpretation);
5933 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
5934 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FinalState class");
5935 find mayInstanceOfFinalState_class(problem,interpretation,newObject);
5936 find mayExist(problem, interpretation, newObject);
5937 neg find mustExist(problem, interpretation, newObject);
5938}
5939pattern createObject_Exit_class_by_vertices_reference_Region(
5940 problem:LogicProblem, interpretation:PartialInterpretation,
5941 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
5942 container:DefinedElement)
5943{
5944 find interpretation(problem,interpretation);
5945 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
5946 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Exit class");
5947 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
5948 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region");
5949 find mustInstanceOfRegion_class(problem,interpretation,container);
5950 find mayInstanceOfExit_class(problem,interpretation,newObject);
5951 find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject);
5952 find mustExist(problem, interpretation, container);
5953 neg find mustExist(problem, interpretation, newObject);
5954}
5955pattern createObject_Exit_class(
5956 problem:LogicProblem, interpretation:PartialInterpretation,
5957 typeInterpretation:PartialComplexTypeInterpretation)
5958{
5959 find interpretation(problem,interpretation);
5960 neg find hasElementInContainment(problem,interpretation);
5961 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
5962 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Exit class");
5963 find mayInstanceOfExit_class(problem,interpretation,newObject);
5964 find mayExist(problem, interpretation, newObject);
5965 neg find mustExist(problem, interpretation, newObject);
5966}
5967pattern createObject_Synchronization_class_by_vertices_reference_Region(
5968 problem:LogicProblem, interpretation:PartialInterpretation,
5969 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
5970 container:DefinedElement)
5971{
5972 find interpretation(problem,interpretation);
5973 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
5974 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Synchronization class");
5975 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
5976 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region");
5977 find mustInstanceOfRegion_class(problem,interpretation,container);
5978 find mayInstanceOfSynchronization_class(problem,interpretation,newObject);
5979 find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject);
5980 find mustExist(problem, interpretation, container);
5981 neg find mustExist(problem, interpretation, newObject);
5982}
5983pattern createObject_Synchronization_class(
5984 problem:LogicProblem, interpretation:PartialInterpretation,
5985 typeInterpretation:PartialComplexTypeInterpretation)
5986{
5987 find interpretation(problem,interpretation);
5988 neg find hasElementInContainment(problem,interpretation);
5989 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
5990 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Synchronization class");
5991 find mayInstanceOfSynchronization_class(problem,interpretation,newObject);
5992 find mayExist(problem, interpretation, newObject);
5993 neg find mustExist(problem, interpretation, newObject);
5994}
5995
5996//////////
5997// 4.2 Type refinement
5998//////////
5999pattern refineTypeTo_Entry_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
6000 find interpretation(problem,interpretation);
6001 PartialInterpretation.newElements(interpretation,element);
6002 find mayInstanceOfEntry_class(problem,interpretation,element);
6003 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
6004 neg find mustInstanceOfEntry_class(problem,interpretation,element);
6005 neg find mustInstanceOfChoice_class(problem,interpretation,element);
6006 neg find mustInstanceOfRegion_class(problem,interpretation,element);
6007 neg find mustInstanceOfTransition_class(problem,interpretation,element);
6008 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
6009 neg find mustInstanceOfExit_class(problem,interpretation,element);
6010 neg find mustInstanceOfSynchronization_class(problem,interpretation,element);
6011}
6012pattern refineTypeTo_Choice_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
6013 find interpretation(problem,interpretation);
6014 PartialInterpretation.newElements(interpretation,element);
6015 find mayInstanceOfChoice_class(problem,interpretation,element);
6016 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
6017 neg find mustInstanceOfEntry_class(problem,interpretation,element);
6018 neg find mustInstanceOfChoice_class(problem,interpretation,element);
6019 neg find mustInstanceOfRegion_class(problem,interpretation,element);
6020 neg find mustInstanceOfTransition_class(problem,interpretation,element);
6021 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
6022 neg find mustInstanceOfExit_class(problem,interpretation,element);
6023 neg find mustInstanceOfSynchronization_class(problem,interpretation,element);
6024}
6025pattern refineTypeTo_State_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
6026 find interpretation(problem,interpretation);
6027 PartialInterpretation.newElements(interpretation,element);
6028 find mayInstanceOfState_class(problem,interpretation,element);
6029 neg find mustInstanceOfPseudostate_class(problem,interpretation,element);
6030 neg find mustInstanceOfState_class(problem,interpretation,element);
6031 neg find mustInstanceOfTransition_class(problem,interpretation,element);
6032 neg find mustInstanceOfRegion_class(problem,interpretation,element);
6033 neg find mustInstanceOfStatechart_class(problem,interpretation,element);
6034 neg find mustInstanceOfFinalState_class(problem,interpretation,element);
6035}
6036pattern refineTypeTo_Statechart_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
6037 find interpretation(problem,interpretation);
6038 PartialInterpretation.newElements(interpretation,element);
6039 find mayInstanceOfStatechart_class_UndefinedPart(problem,interpretation,element);
6040 neg find mustInstanceOfStatechart_class_UndefinedPart(problem,interpretation,element);
6041 neg find mustInstanceOfRegion_class(problem,interpretation,element);
6042 neg find mustInstanceOfTransition_class(problem,interpretation,element);
6043 neg find mustInstanceOfVertex_class(problem,interpretation,element);
6044}
6045pattern refineTypeTo_Transition_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
6046 find interpretation(problem,interpretation);
6047 PartialInterpretation.newElements(interpretation,element);
6048 find mayInstanceOfTransition_class(problem,interpretation,element);
6049 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
6050 neg find mustInstanceOfRegion_class(problem,interpretation,element);
6051 neg find mustInstanceOfTransition_class(problem,interpretation,element);
6052 neg find mustInstanceOfVertex_class(problem,interpretation,element);
6053}
6054pattern refineTypeTo_Region_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
6055 find interpretation(problem,interpretation);
6056 PartialInterpretation.newElements(interpretation,element);
6057 find mayInstanceOfRegion_class(problem,interpretation,element);
6058 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
6059 neg find mustInstanceOfTransition_class(problem,interpretation,element);
6060 neg find mustInstanceOfRegion_class(problem,interpretation,element);
6061 neg find mustInstanceOfVertex_class(problem,interpretation,element);
6062}
6063pattern refineTypeTo_FinalState_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
6064 find interpretation(problem,interpretation);
6065 PartialInterpretation.newElements(interpretation,element);
6066 find mayInstanceOfFinalState_class(problem,interpretation,element);
6067 neg find mustInstanceOfPseudostate_class(problem,interpretation,element);
6068 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
6069 neg find mustInstanceOfRegion_class(problem,interpretation,element);
6070 neg find mustInstanceOfTransition_class(problem,interpretation,element);
6071 neg find mustInstanceOfFinalState_class(problem,interpretation,element);
6072}
6073pattern refineTypeTo_Exit_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
6074 find interpretation(problem,interpretation);
6075 PartialInterpretation.newElements(interpretation,element);
6076 find mayInstanceOfExit_class(problem,interpretation,element);
6077 neg find mustInstanceOfEntry_class(problem,interpretation,element);
6078 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
6079 neg find mustInstanceOfChoice_class(problem,interpretation,element);
6080 neg find mustInstanceOfRegion_class(problem,interpretation,element);
6081 neg find mustInstanceOfTransition_class(problem,interpretation,element);
6082 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
6083 neg find mustInstanceOfExit_class(problem,interpretation,element);
6084 neg find mustInstanceOfSynchronization_class(problem,interpretation,element);
6085}
6086pattern refineTypeTo_Synchronization_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
6087 find interpretation(problem,interpretation);
6088 PartialInterpretation.newElements(interpretation,element);
6089 find mayInstanceOfSynchronization_class(problem,interpretation,element);
6090 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
6091 neg find mustInstanceOfEntry_class(problem,interpretation,element);
6092 neg find mustInstanceOfChoice_class(problem,interpretation,element);
6093 neg find mustInstanceOfRegion_class(problem,interpretation,element);
6094 neg find mustInstanceOfTransition_class(problem,interpretation,element);
6095 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
6096 neg find mustInstanceOfSynchronization_class(problem,interpretation,element);
6097 neg find mustInstanceOfExit_class(problem,interpretation,element);
6098}
6099
6100//////////
6101// 4.3 Relation refinement
6102//////////
6103pattern refineRelation_incomingTransitions_reference_Vertex_and_target_reference_Transition(
6104 problem:LogicProblem, interpretation:PartialInterpretation,
6105 relationIterpretation:PartialRelationInterpretation, oppositeInterpretation:PartialRelationInterpretation,
6106 from: DefinedElement, to: DefinedElement)
6107{
6108 find interpretation(problem,interpretation);
6109 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
6110 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"incomingTransitions reference Vertex");
6111 PartialInterpretation.partialrelationinterpretation(interpretation,oppositeInterpretation);
6112 PartialRelationInterpretation.interpretationOf.name(oppositeInterpretation,"target reference Transition");
6113 find mustExist(problem, interpretation, from);
6114 find mustExist(problem, interpretation, to);
6115 find mustInstanceOfVertex_class(problem,interpretation,from);
6116 find mustInstanceOfTransition_class(problem,interpretation,to);
6117 find mayInRelationincomingTransitions_reference_Vertex(problem,interpretation,from,to);
6118 neg find mustInRelationincomingTransitions_reference_Vertex(problem,interpretation,from,to);
6119}
6120import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage"
6121import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem"
6122import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language"
6123
6124//////////
6125// 0. Util
6126//////////
6127private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) {
6128 PartialInterpretation.problem(interpretation,problem);
6129}
6130
6131/////////////////////////
6132// 0.1 Existence
6133/////////////////////////
6134private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
6135 find interpretation(problem,interpretation);
6136 LogicProblem.elements(problem,element);
6137} or {
6138 find interpretation(problem,interpretation);
6139 PartialInterpretation.newElements(interpretation,element);
6140}
6141
6142private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
6143 find mustExist(problem,interpretation,element);
6144} or {
6145 find interpretation(problem,interpretation);
6146 neg find elementCloseWorld(element);
6147 PartialInterpretation.openWorldElements(interpretation,element);
6148}
6149
6150private pattern elementCloseWorld(element:DefinedElement) {
6151 PartialInterpretation.openWorldElements(i,element);
6152 PartialInterpretation.maxNewElements(i,0);
6153} or {
6154 Scope.targetTypeInterpretation(scope,interpretation);
6155 PartialTypeInterpratation.elements(interpretation,element);
6156 Scope.maxNewElements(scope,0);
6157}
6158
6159////////////////////////
6160// 0.2 Equivalence
6161////////////////////////
6162pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) {
6163 find mayExist(problem,interpretation,a);
6164 find mayExist(problem,interpretation,b);
6165 a == b;
6166}
6167
6168////////////////////////
6169// 0.3 Required Patterns by TypeIndexer
6170////////////////////////
6171private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) {
6172 find interpretation(problem,interpretation);
6173 LogicProblem.types(problem,type);
6174 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
6175 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
6176}
6177
6178private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) {
6179 find interpretation(problem,interpretation);
6180 LogicProblem.types(problem,type);
6181 TypeDefinition.elements(type,element);
6182} or {
6183 find interpretation(problem,interpretation);
6184 find typeInterpretation(problem,interpretation,type,typeInterpretation);
6185 PartialComplexTypeInterpretation.elements(typeInterpretation,element);
6186}
6187
6188private pattern isPrimitive(element: PrimitiveElement) {
6189 PrimitiveElement(element);
6190}
6191
6192//////////
6193// 1. Problem-Specific Base Indexers
6194//////////
6195// 1.1 Type Indexers
6196//////////
6197// 1.1.1 primitive Type Indexers
6198//////////
6199
6200//////////
6201// 1.1.2 domain-specific Type Indexers
6202//////////
6203/**
6204 * An element must be an instance of type "Pseudostate class".
6205 */
6206private pattern mustInstanceOfPseudostate_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
6207 Type.name(type,"Pseudostate class");
6208 find directInstanceOf(problem,interpretation,element,type);
6209}
6210private pattern scopeDisallowsNewPseudostate_class(problem:LogicProblem, interpretation:PartialInterpretation) {
6211 find interpretation(problem,interpretation);
6212 PartialInterpretation.scopes(interpretation,scope);
6213 Scope.targetTypeInterpretation(scope,typeInterpretation);
6214 Scope.maxNewElements(scope,0);
6215 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
6216 Type.name(type,"Pseudostate class");
6217}
6218
6219/**
6220 * An element may be an instance of type "Pseudostate class".
6221 */
6222private pattern mayInstanceOfPseudostate_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
6223{
6224 find interpretation(problem,interpretation);
6225 PartialInterpretation.newElements(interpretation,element);
6226 neg find mustInstanceOfChoice_class(problem,interpretation,element);
6227 neg find mustInstanceOfEntry_class(problem,interpretation,element);
6228 neg find mustInstanceOfExit_class(problem,interpretation,element);
6229 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
6230 neg find mustInstanceOfTransition_class(problem,interpretation,element);
6231 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
6232 neg find mustInstanceOfSynchronization_class(problem,interpretation,element);
6233 neg find mustInstanceOfRegion_class(problem,interpretation,element);
6234 neg find scopeDisallowsNewPseudostate_class(problem, interpretation);
6235 neg find isPrimitive(element);
6236} or {
6237 find interpretation(problem,interpretation);
6238 PartialInterpretation.openWorldElements(interpretation,element);
6239 neg find mustInstanceOfChoice_class(problem,interpretation,element);
6240 neg find mustInstanceOfEntry_class(problem,interpretation,element);
6241 neg find mustInstanceOfExit_class(problem,interpretation,element);
6242 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
6243 neg find mustInstanceOfTransition_class(problem,interpretation,element);
6244 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
6245 neg find mustInstanceOfSynchronization_class(problem,interpretation,element);
6246 neg find mustInstanceOfRegion_class(problem,interpretation,element);
6247 neg find scopeDisallowsNewPseudostate_class(problem, interpretation);
6248 neg find isPrimitive(element);
6249} or
6250{ find mustInstanceOfPseudostate_class(problem,interpretation,element); }
6251/**
6252 * An element must be an instance of type "Vertex class".
6253 */
6254private pattern mustInstanceOfVertex_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
6255 Type.name(type,"Vertex class");
6256 find directInstanceOf(problem,interpretation,element,type);
6257}
6258private pattern scopeDisallowsNewVertex_class(problem:LogicProblem, interpretation:PartialInterpretation) {
6259 find interpretation(problem,interpretation);
6260 PartialInterpretation.scopes(interpretation,scope);
6261 Scope.targetTypeInterpretation(scope,typeInterpretation);
6262 Scope.maxNewElements(scope,0);
6263 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
6264 Type.name(type,"Vertex class");
6265}
6266
6267/**
6268 * An element may be an instance of type "Vertex class".
6269 */
6270private pattern mayInstanceOfVertex_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
6271{
6272 find interpretation(problem,interpretation);
6273 PartialInterpretation.newElements(interpretation,element);
6274 neg find mustInstanceOfPseudostate_class(problem,interpretation,element);
6275 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
6276 neg find mustInstanceOfTransition_class(problem,interpretation,element);
6277 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
6278 neg find mustInstanceOfRegion_class(problem,interpretation,element);
6279 neg find scopeDisallowsNewVertex_class(problem, interpretation);
6280 neg find isPrimitive(element);
6281} or {
6282 find interpretation(problem,interpretation);
6283 PartialInterpretation.openWorldElements(interpretation,element);
6284 neg find mustInstanceOfPseudostate_class(problem,interpretation,element);
6285 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
6286 neg find mustInstanceOfTransition_class(problem,interpretation,element);
6287 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
6288 neg find mustInstanceOfRegion_class(problem,interpretation,element);
6289 neg find scopeDisallowsNewVertex_class(problem, interpretation);
6290 neg find isPrimitive(element);
6291} or
6292{ find mustInstanceOfVertex_class(problem,interpretation,element); }
6293/**
6294 * An element must be an instance of type "Region class".
6295 */
6296private pattern mustInstanceOfRegion_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
6297 Type.name(type,"Region class");
6298 find directInstanceOf(problem,interpretation,element,type);
6299}
6300private pattern scopeDisallowsNewRegion_class(problem:LogicProblem, interpretation:PartialInterpretation) {
6301 find interpretation(problem,interpretation);
6302 PartialInterpretation.scopes(interpretation,scope);
6303 Scope.targetTypeInterpretation(scope,typeInterpretation);
6304 Scope.maxNewElements(scope,0);
6305 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
6306 Type.name(type,"Region class");
6307}
6308
6309/**
6310 * An element may be an instance of type "Region class".
6311 */
6312private pattern mayInstanceOfRegion_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
6313{
6314 find interpretation(problem,interpretation);
6315 PartialInterpretation.newElements(interpretation,element);
6316 neg find mustInstanceOfVertex_class(problem,interpretation,element);
6317 neg find mustInstanceOfTransition_class(problem,interpretation,element);
6318 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
6319 neg find scopeDisallowsNewRegion_class(problem, interpretation);
6320 neg find isPrimitive(element);
6321} or {
6322 find interpretation(problem,interpretation);
6323 PartialInterpretation.openWorldElements(interpretation,element);
6324 neg find mustInstanceOfVertex_class(problem,interpretation,element);
6325 neg find mustInstanceOfTransition_class(problem,interpretation,element);
6326 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
6327 neg find scopeDisallowsNewRegion_class(problem, interpretation);
6328 neg find isPrimitive(element);
6329} or
6330{ find mustInstanceOfRegion_class(problem,interpretation,element); }
6331/**
6332 * An element must be an instance of type "Transition class".
6333 */
6334private pattern mustInstanceOfTransition_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
6335 Type.name(type,"Transition class");
6336 find directInstanceOf(problem,interpretation,element,type);
6337}
6338private pattern scopeDisallowsNewTransition_class(problem:LogicProblem, interpretation:PartialInterpretation) {
6339 find interpretation(problem,interpretation);
6340 PartialInterpretation.scopes(interpretation,scope);
6341 Scope.targetTypeInterpretation(scope,typeInterpretation);
6342 Scope.maxNewElements(scope,0);
6343 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
6344 Type.name(type,"Transition class");
6345}
6346
6347/**
6348 * An element may be an instance of type "Transition class".
6349 */
6350private pattern mayInstanceOfTransition_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
6351{
6352 find interpretation(problem,interpretation);
6353 PartialInterpretation.newElements(interpretation,element);
6354 neg find mustInstanceOfVertex_class(problem,interpretation,element);
6355 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
6356 neg find mustInstanceOfRegion_class(problem,interpretation,element);
6357 neg find scopeDisallowsNewTransition_class(problem, interpretation);
6358 neg find isPrimitive(element);
6359} or {
6360 find interpretation(problem,interpretation);
6361 PartialInterpretation.openWorldElements(interpretation,element);
6362 neg find mustInstanceOfVertex_class(problem,interpretation,element);
6363 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
6364 neg find mustInstanceOfRegion_class(problem,interpretation,element);
6365 neg find scopeDisallowsNewTransition_class(problem, interpretation);
6366 neg find isPrimitive(element);
6367} or
6368{ find mustInstanceOfTransition_class(problem,interpretation,element); }
6369/**
6370 * An element must be an instance of type "Statechart class".
6371 */
6372private pattern mustInstanceOfStatechart_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
6373 Type.name(type,"Statechart class");
6374 find directInstanceOf(problem,interpretation,element,type);
6375}
6376private pattern scopeDisallowsNewStatechart_class(problem:LogicProblem, interpretation:PartialInterpretation) {
6377 find interpretation(problem,interpretation);
6378 PartialInterpretation.scopes(interpretation,scope);
6379 Scope.targetTypeInterpretation(scope,typeInterpretation);
6380 Scope.maxNewElements(scope,0);
6381 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
6382 Type.name(type,"Statechart class");
6383}
6384
6385/**
6386 * An element may be an instance of type "Statechart class".
6387 */
6388private pattern mayInstanceOfStatechart_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
6389{
6390 find interpretation(problem,interpretation);
6391 PartialInterpretation.newElements(interpretation,element);
6392 neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element);
6393 neg find mustInstanceOfVertex_class(problem,interpretation,element);
6394 neg find mustInstanceOfTransition_class(problem,interpretation,element);
6395 neg find mustInstanceOfRegion_class(problem,interpretation,element);
6396 neg find scopeDisallowsNewStatechart_class(problem, interpretation);
6397 neg find isPrimitive(element);
6398} or {
6399 find interpretation(problem,interpretation);
6400 PartialInterpretation.openWorldElements(interpretation,element);
6401 neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element);
6402 neg find mustInstanceOfVertex_class(problem,interpretation,element);
6403 neg find mustInstanceOfTransition_class(problem,interpretation,element);
6404 neg find mustInstanceOfRegion_class(problem,interpretation,element);
6405 neg find scopeDisallowsNewStatechart_class(problem, interpretation);
6406 neg find isPrimitive(element);
6407} or
6408{ find mustInstanceOfStatechart_class(problem,interpretation,element); }
6409/**
6410 * An element must be an instance of type "Entry class".
6411 */
6412private pattern mustInstanceOfEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
6413 Type.name(type,"Entry class");
6414 find directInstanceOf(problem,interpretation,element,type);
6415}
6416private pattern scopeDisallowsNewEntry_class(problem:LogicProblem, interpretation:PartialInterpretation) {
6417 find interpretation(problem,interpretation);
6418 PartialInterpretation.scopes(interpretation,scope);
6419 Scope.targetTypeInterpretation(scope,typeInterpretation);
6420 Scope.maxNewElements(scope,0);
6421 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
6422 Type.name(type,"Entry class");
6423}
6424
6425/**
6426 * An element may be an instance of type "Entry class".
6427 */
6428private pattern mayInstanceOfEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
6429{
6430 find interpretation(problem,interpretation);
6431 PartialInterpretation.newElements(interpretation,element);
6432 neg find mustInstanceOfChoice_class(problem,interpretation,element);
6433 neg find mustInstanceOfExit_class(problem,interpretation,element);
6434 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
6435 neg find mustInstanceOfTransition_class(problem,interpretation,element);
6436 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
6437 neg find mustInstanceOfSynchronization_class(problem,interpretation,element);
6438 neg find mustInstanceOfRegion_class(problem,interpretation,element);
6439 neg find scopeDisallowsNewEntry_class(problem, interpretation);
6440 neg find isPrimitive(element);
6441} or {
6442 find interpretation(problem,interpretation);
6443 PartialInterpretation.openWorldElements(interpretation,element);
6444 neg find mustInstanceOfChoice_class(problem,interpretation,element);
6445 neg find mustInstanceOfExit_class(problem,interpretation,element);
6446 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
6447 neg find mustInstanceOfTransition_class(problem,interpretation,element);
6448 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
6449 neg find mustInstanceOfSynchronization_class(problem,interpretation,element);
6450 neg find mustInstanceOfRegion_class(problem,interpretation,element);
6451 neg find scopeDisallowsNewEntry_class(problem, interpretation);
6452 neg find isPrimitive(element);
6453} or
6454{ find mustInstanceOfEntry_class(problem,interpretation,element); }
6455/**
6456 * An element must be an instance of type "Synchronization class".
6457 */
6458private pattern mustInstanceOfSynchronization_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
6459 Type.name(type,"Synchronization class");
6460 find directInstanceOf(problem,interpretation,element,type);
6461}
6462private pattern scopeDisallowsNewSynchronization_class(problem:LogicProblem, interpretation:PartialInterpretation) {
6463 find interpretation(problem,interpretation);
6464 PartialInterpretation.scopes(interpretation,scope);
6465 Scope.targetTypeInterpretation(scope,typeInterpretation);
6466 Scope.maxNewElements(scope,0);
6467 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
6468 Type.name(type,"Synchronization class");
6469}
6470
6471/**
6472 * An element may be an instance of type "Synchronization class".
6473 */
6474private pattern mayInstanceOfSynchronization_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
6475{
6476 find interpretation(problem,interpretation);
6477 PartialInterpretation.newElements(interpretation,element);
6478 neg find mustInstanceOfChoice_class(problem,interpretation,element);
6479 neg find mustInstanceOfEntry_class(problem,interpretation,element);
6480 neg find mustInstanceOfExit_class(problem,interpretation,element);
6481 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
6482 neg find mustInstanceOfTransition_class(problem,interpretation,element);
6483 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
6484 neg find mustInstanceOfRegion_class(problem,interpretation,element);
6485 neg find scopeDisallowsNewSynchronization_class(problem, interpretation);
6486 neg find isPrimitive(element);
6487} or {
6488 find interpretation(problem,interpretation);
6489 PartialInterpretation.openWorldElements(interpretation,element);
6490 neg find mustInstanceOfChoice_class(problem,interpretation,element);
6491 neg find mustInstanceOfEntry_class(problem,interpretation,element);
6492 neg find mustInstanceOfExit_class(problem,interpretation,element);
6493 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
6494 neg find mustInstanceOfTransition_class(problem,interpretation,element);
6495 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
6496 neg find mustInstanceOfRegion_class(problem,interpretation,element);
6497 neg find scopeDisallowsNewSynchronization_class(problem, interpretation);
6498 neg find isPrimitive(element);
6499} or
6500{ find mustInstanceOfSynchronization_class(problem,interpretation,element); }
6501/**
6502 * An element must be an instance of type "State class".
6503 */
6504private pattern mustInstanceOfState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
6505 Type.name(type,"State class");
6506 find directInstanceOf(problem,interpretation,element,type);
6507}
6508private pattern scopeDisallowsNewState_class(problem:LogicProblem, interpretation:PartialInterpretation) {
6509 find interpretation(problem,interpretation);
6510 PartialInterpretation.scopes(interpretation,scope);
6511 Scope.targetTypeInterpretation(scope,typeInterpretation);
6512 Scope.maxNewElements(scope,0);
6513 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
6514 Type.name(type,"State class");
6515}
6516
6517/**
6518 * An element may be an instance of type "State class".
6519 */
6520private pattern mayInstanceOfState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
6521{
6522 find interpretation(problem,interpretation);
6523 PartialInterpretation.newElements(interpretation,element);
6524 neg find mustInstanceOfPseudostate_class(problem,interpretation,element);
6525 neg find mustInstanceOfFinalState_class(problem,interpretation,element);
6526 neg find mustInstanceOfTransition_class(problem,interpretation,element);
6527 neg find mustInstanceOfStatechart_class(problem,interpretation,element);
6528 neg find mustInstanceOfRegion_class(problem,interpretation,element);
6529 neg find scopeDisallowsNewState_class(problem, interpretation);
6530 neg find isPrimitive(element);
6531} or {
6532 find interpretation(problem,interpretation);
6533 PartialInterpretation.openWorldElements(interpretation,element);
6534 neg find mustInstanceOfPseudostate_class(problem,interpretation,element);
6535 neg find mustInstanceOfFinalState_class(problem,interpretation,element);
6536 neg find mustInstanceOfTransition_class(problem,interpretation,element);
6537 neg find mustInstanceOfStatechart_class(problem,interpretation,element);
6538 neg find mustInstanceOfRegion_class(problem,interpretation,element);
6539 neg find scopeDisallowsNewState_class(problem, interpretation);
6540 neg find isPrimitive(element);
6541} or
6542{ find mustInstanceOfState_class(problem,interpretation,element); }
6543/**
6544 * An element must be an instance of type "RegularState class".
6545 */
6546private pattern mustInstanceOfRegularState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
6547 Type.name(type,"RegularState class");
6548 find directInstanceOf(problem,interpretation,element,type);
6549}
6550private pattern scopeDisallowsNewRegularState_class(problem:LogicProblem, interpretation:PartialInterpretation) {
6551 find interpretation(problem,interpretation);
6552 PartialInterpretation.scopes(interpretation,scope);
6553 Scope.targetTypeInterpretation(scope,typeInterpretation);
6554 Scope.maxNewElements(scope,0);
6555 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
6556 Type.name(type,"RegularState class");
6557}
6558
6559/**
6560 * An element may be an instance of type "RegularState class".
6561 */
6562private pattern mayInstanceOfRegularState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
6563{
6564 find interpretation(problem,interpretation);
6565 PartialInterpretation.newElements(interpretation,element);
6566 neg find mustInstanceOfPseudostate_class(problem,interpretation,element);
6567 neg find mustInstanceOfFinalState_class(problem,interpretation,element);
6568 neg find mustInstanceOfTransition_class(problem,interpretation,element);
6569 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
6570 neg find mustInstanceOfRegion_class(problem,interpretation,element);
6571 neg find scopeDisallowsNewRegularState_class(problem, interpretation);
6572 neg find isPrimitive(element);
6573} or {
6574 find interpretation(problem,interpretation);
6575 PartialInterpretation.openWorldElements(interpretation,element);
6576 neg find mustInstanceOfPseudostate_class(problem,interpretation,element);
6577 neg find mustInstanceOfFinalState_class(problem,interpretation,element);
6578 neg find mustInstanceOfTransition_class(problem,interpretation,element);
6579 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
6580 neg find mustInstanceOfRegion_class(problem,interpretation,element);
6581 neg find scopeDisallowsNewRegularState_class(problem, interpretation);
6582 neg find isPrimitive(element);
6583} or
6584{ find mustInstanceOfRegularState_class(problem,interpretation,element); }
6585/**
6586 * An element must be an instance of type "CompositeElement class".
6587 */
6588private pattern mustInstanceOfCompositeElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
6589 Type.name(type,"CompositeElement class");
6590 find directInstanceOf(problem,interpretation,element,type);
6591}
6592private pattern scopeDisallowsNewCompositeElement_class(problem:LogicProblem, interpretation:PartialInterpretation) {
6593 find interpretation(problem,interpretation);
6594 PartialInterpretation.scopes(interpretation,scope);
6595 Scope.targetTypeInterpretation(scope,typeInterpretation);
6596 Scope.maxNewElements(scope,0);
6597 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
6598 Type.name(type,"CompositeElement class");
6599}
6600
6601/**
6602 * An element may be an instance of type "CompositeElement class".
6603 */
6604private pattern mayInstanceOfCompositeElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
6605{
6606 find interpretation(problem,interpretation);
6607 PartialInterpretation.newElements(interpretation,element);
6608 neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element);
6609 neg find mustInstanceOfVertex_class(problem,interpretation,element);
6610 neg find mustInstanceOfTransition_class(problem,interpretation,element);
6611 neg find mustInstanceOfStatechart_class(problem,interpretation,element);
6612 neg find mustInstanceOfRegion_class(problem,interpretation,element);
6613 neg find scopeDisallowsNewCompositeElement_class(problem, interpretation);
6614 neg find isPrimitive(element);
6615} or {
6616 find interpretation(problem,interpretation);
6617 PartialInterpretation.openWorldElements(interpretation,element);
6618 neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element);
6619 neg find mustInstanceOfVertex_class(problem,interpretation,element);
6620 neg find mustInstanceOfTransition_class(problem,interpretation,element);
6621 neg find mustInstanceOfStatechart_class(problem,interpretation,element);
6622 neg find mustInstanceOfRegion_class(problem,interpretation,element);
6623 neg find scopeDisallowsNewCompositeElement_class(problem, interpretation);
6624 neg find isPrimitive(element);
6625} or
6626{ find mustInstanceOfCompositeElement_class(problem,interpretation,element); }
6627/**
6628 * An element must be an instance of type "Choice class".
6629 */
6630private pattern mustInstanceOfChoice_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
6631 Type.name(type,"Choice class");
6632 find directInstanceOf(problem,interpretation,element,type);
6633}
6634private pattern scopeDisallowsNewChoice_class(problem:LogicProblem, interpretation:PartialInterpretation) {
6635 find interpretation(problem,interpretation);
6636 PartialInterpretation.scopes(interpretation,scope);
6637 Scope.targetTypeInterpretation(scope,typeInterpretation);
6638 Scope.maxNewElements(scope,0);
6639 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
6640 Type.name(type,"Choice class");
6641}
6642
6643/**
6644 * An element may be an instance of type "Choice class".
6645 */
6646private pattern mayInstanceOfChoice_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
6647{
6648 find interpretation(problem,interpretation);
6649 PartialInterpretation.newElements(interpretation,element);
6650 neg find mustInstanceOfEntry_class(problem,interpretation,element);
6651 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
6652 neg find mustInstanceOfExit_class(problem,interpretation,element);
6653 neg find mustInstanceOfTransition_class(problem,interpretation,element);
6654 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
6655 neg find mustInstanceOfRegion_class(problem,interpretation,element);
6656 neg find mustInstanceOfSynchronization_class(problem,interpretation,element);
6657 neg find scopeDisallowsNewChoice_class(problem, interpretation);
6658 neg find isPrimitive(element);
6659} or {
6660 find interpretation(problem,interpretation);
6661 PartialInterpretation.openWorldElements(interpretation,element);
6662 neg find mustInstanceOfEntry_class(problem,interpretation,element);
6663 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
6664 neg find mustInstanceOfExit_class(problem,interpretation,element);
6665 neg find mustInstanceOfTransition_class(problem,interpretation,element);
6666 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
6667 neg find mustInstanceOfRegion_class(problem,interpretation,element);
6668 neg find mustInstanceOfSynchronization_class(problem,interpretation,element);
6669 neg find scopeDisallowsNewChoice_class(problem, interpretation);
6670 neg find isPrimitive(element);
6671} or
6672{ find mustInstanceOfChoice_class(problem,interpretation,element); }
6673/**
6674 * An element must be an instance of type "Exit class".
6675 */
6676private pattern mustInstanceOfExit_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
6677 Type.name(type,"Exit class");
6678 find directInstanceOf(problem,interpretation,element,type);
6679}
6680private pattern scopeDisallowsNewExit_class(problem:LogicProblem, interpretation:PartialInterpretation) {
6681 find interpretation(problem,interpretation);
6682 PartialInterpretation.scopes(interpretation,scope);
6683 Scope.targetTypeInterpretation(scope,typeInterpretation);
6684 Scope.maxNewElements(scope,0);
6685 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
6686 Type.name(type,"Exit class");
6687}
6688
6689/**
6690 * An element may be an instance of type "Exit class".
6691 */
6692private pattern mayInstanceOfExit_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
6693{
6694 find interpretation(problem,interpretation);
6695 PartialInterpretation.newElements(interpretation,element);
6696 neg find mustInstanceOfChoice_class(problem,interpretation,element);
6697 neg find mustInstanceOfEntry_class(problem,interpretation,element);
6698 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
6699 neg find mustInstanceOfTransition_class(problem,interpretation,element);
6700 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
6701 neg find mustInstanceOfSynchronization_class(problem,interpretation,element);
6702 neg find mustInstanceOfRegion_class(problem,interpretation,element);
6703 neg find scopeDisallowsNewExit_class(problem, interpretation);
6704 neg find isPrimitive(element);
6705} or {
6706 find interpretation(problem,interpretation);
6707 PartialInterpretation.openWorldElements(interpretation,element);
6708 neg find mustInstanceOfChoice_class(problem,interpretation,element);
6709 neg find mustInstanceOfEntry_class(problem,interpretation,element);
6710 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
6711 neg find mustInstanceOfTransition_class(problem,interpretation,element);
6712 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
6713 neg find mustInstanceOfSynchronization_class(problem,interpretation,element);
6714 neg find mustInstanceOfRegion_class(problem,interpretation,element);
6715 neg find scopeDisallowsNewExit_class(problem, interpretation);
6716 neg find isPrimitive(element);
6717} or
6718{ find mustInstanceOfExit_class(problem,interpretation,element); }
6719/**
6720 * An element must be an instance of type "FinalState class".
6721 */
6722private pattern mustInstanceOfFinalState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
6723 Type.name(type,"FinalState class");
6724 find directInstanceOf(problem,interpretation,element,type);
6725}
6726private pattern scopeDisallowsNewFinalState_class(problem:LogicProblem, interpretation:PartialInterpretation) {
6727 find interpretation(problem,interpretation);
6728 PartialInterpretation.scopes(interpretation,scope);
6729 Scope.targetTypeInterpretation(scope,typeInterpretation);
6730 Scope.maxNewElements(scope,0);
6731 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
6732 Type.name(type,"FinalState class");
6733}
6734
6735/**
6736 * An element may be an instance of type "FinalState class".
6737 */
6738private pattern mayInstanceOfFinalState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
6739{
6740 find interpretation(problem,interpretation);
6741 PartialInterpretation.newElements(interpretation,element);
6742 neg find mustInstanceOfPseudostate_class(problem,interpretation,element);
6743 neg find mustInstanceOfTransition_class(problem,interpretation,element);
6744 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
6745 neg find mustInstanceOfRegion_class(problem,interpretation,element);
6746 neg find scopeDisallowsNewFinalState_class(problem, interpretation);
6747 neg find isPrimitive(element);
6748} or {
6749 find interpretation(problem,interpretation);
6750 PartialInterpretation.openWorldElements(interpretation,element);
6751 neg find mustInstanceOfPseudostate_class(problem,interpretation,element);
6752 neg find mustInstanceOfTransition_class(problem,interpretation,element);
6753 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
6754 neg find mustInstanceOfRegion_class(problem,interpretation,element);
6755 neg find scopeDisallowsNewFinalState_class(problem, interpretation);
6756 neg find isPrimitive(element);
6757} or
6758{ find mustInstanceOfFinalState_class(problem,interpretation,element); }
6759/**
6760 * An element must be an instance of type "Statechart class DefinedPart".
6761 */
6762private pattern mustInstanceOfStatechart_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
6763 Type.name(type,"Statechart class DefinedPart");
6764 find directInstanceOf(problem,interpretation,element,type);
6765}
6766private pattern scopeDisallowsNewStatechart_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
6767 find interpretation(problem,interpretation);
6768 PartialInterpretation.scopes(interpretation,scope);
6769 Scope.targetTypeInterpretation(scope,typeInterpretation);
6770 Scope.maxNewElements(scope,0);
6771 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
6772 Type.name(type,"Statechart class DefinedPart");
6773}
6774
6775/**
6776 * An element may be an instance of type "Statechart class DefinedPart".
6777 */
6778private pattern mayInstanceOfStatechart_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
6779{ find mustInstanceOfStatechart_class_DefinedPart(problem,interpretation,element); }
6780/**
6781 * An element must be an instance of type "Statechart class UndefinedPart".
6782 */
6783private pattern mustInstanceOfStatechart_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
6784 Type.name(type,"Statechart class UndefinedPart");
6785 find directInstanceOf(problem,interpretation,element,type);
6786}
6787private pattern scopeDisallowsNewStatechart_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
6788 find interpretation(problem,interpretation);
6789 PartialInterpretation.scopes(interpretation,scope);
6790 Scope.targetTypeInterpretation(scope,typeInterpretation);
6791 Scope.maxNewElements(scope,0);
6792 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
6793 Type.name(type,"Statechart class UndefinedPart");
6794}
6795
6796/**
6797 * An element may be an instance of type "Statechart class UndefinedPart".
6798 */
6799private pattern mayInstanceOfStatechart_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
6800{
6801 find interpretation(problem,interpretation);
6802 PartialInterpretation.newElements(interpretation,element);
6803 neg find mustInstanceOfVertex_class(problem,interpretation,element);
6804 neg find mustInstanceOfTransition_class(problem,interpretation,element);
6805 neg find mustInstanceOfRegion_class(problem,interpretation,element);
6806 neg find scopeDisallowsNewStatechart_class_UndefinedPart(problem, interpretation);
6807 neg find isPrimitive(element);
6808} or {
6809 find interpretation(problem,interpretation);
6810 PartialInterpretation.openWorldElements(interpretation,element);
6811 neg find mustInstanceOfVertex_class(problem,interpretation,element);
6812 neg find mustInstanceOfTransition_class(problem,interpretation,element);
6813 neg find mustInstanceOfRegion_class(problem,interpretation,element);
6814 neg find scopeDisallowsNewStatechart_class_UndefinedPart(problem, interpretation);
6815 neg find isPrimitive(element);
6816} or
6817{ find mustInstanceOfStatechart_class_UndefinedPart(problem,interpretation,element); }
6818/**
6819 * An element must be an instance of type "CompositeElement class DefinedPart".
6820 */
6821private pattern mustInstanceOfCompositeElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
6822 Type.name(type,"CompositeElement class DefinedPart");
6823 find directInstanceOf(problem,interpretation,element,type);
6824}
6825private pattern scopeDisallowsNewCompositeElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
6826 find interpretation(problem,interpretation);
6827 PartialInterpretation.scopes(interpretation,scope);
6828 Scope.targetTypeInterpretation(scope,typeInterpretation);
6829 Scope.maxNewElements(scope,0);
6830 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
6831 Type.name(type,"CompositeElement class DefinedPart");
6832}
6833
6834/**
6835 * An element may be an instance of type "CompositeElement class DefinedPart".
6836 */
6837private pattern mayInstanceOfCompositeElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
6838{ find mustInstanceOfCompositeElement_class_DefinedPart(problem,interpretation,element); }
6839/**
6840 * An element must be an instance of type "CompositeElement class UndefinedPart".
6841 */
6842private pattern mustInstanceOfCompositeElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
6843 Type.name(type,"CompositeElement class UndefinedPart");
6844 find directInstanceOf(problem,interpretation,element,type);
6845}
6846private pattern scopeDisallowsNewCompositeElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
6847 find interpretation(problem,interpretation);
6848 PartialInterpretation.scopes(interpretation,scope);
6849 Scope.targetTypeInterpretation(scope,typeInterpretation);
6850 Scope.maxNewElements(scope,0);
6851 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
6852 Type.name(type,"CompositeElement class UndefinedPart");
6853}
6854
6855/**
6856 * An element may be an instance of type "CompositeElement class UndefinedPart".
6857 */
6858private pattern mayInstanceOfCompositeElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
6859{
6860 find interpretation(problem,interpretation);
6861 PartialInterpretation.newElements(interpretation,element);
6862 neg find mustInstanceOfVertex_class(problem,interpretation,element);
6863 neg find mustInstanceOfTransition_class(problem,interpretation,element);
6864 neg find mustInstanceOfStatechart_class(problem,interpretation,element);
6865 neg find mustInstanceOfRegion_class(problem,interpretation,element);
6866 neg find scopeDisallowsNewCompositeElement_class_UndefinedPart(problem, interpretation);
6867 neg find isPrimitive(element);
6868} or {
6869 find interpretation(problem,interpretation);
6870 PartialInterpretation.openWorldElements(interpretation,element);
6871 neg find mustInstanceOfVertex_class(problem,interpretation,element);
6872 neg find mustInstanceOfTransition_class(problem,interpretation,element);
6873 neg find mustInstanceOfStatechart_class(problem,interpretation,element);
6874 neg find mustInstanceOfRegion_class(problem,interpretation,element);
6875 neg find scopeDisallowsNewCompositeElement_class_UndefinedPart(problem, interpretation);
6876 neg find isPrimitive(element);
6877} or
6878{ find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); }
6879
6880//////////
6881// 1.2 Relation Declaration Indexers
6882//////////
6883/**
6884 * Matcher for detecting tuples t where []incomingTransitions reference Vertex(source,target)
6885 */
6886private pattern mustInRelationincomingTransitions_reference_Vertex(
6887 problem:LogicProblem, interpretation:PartialInterpretation,
6888 source: DefinedElement, target:DefinedElement)
6889{
6890 find interpretation(problem,interpretation);
6891 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
6892 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"incomingTransitions reference Vertex");
6893 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
6894 BinaryElementRelationLink.param1(link,source);
6895 BinaryElementRelationLink.param2(link,target);
6896}
6897/**
6898 * Matcher for detecting tuples t where <>incomingTransitions reference Vertex(source,target)
6899 */
6900private pattern mayInRelationincomingTransitions_reference_Vertex(
6901 problem:LogicProblem, interpretation:PartialInterpretation,
6902 source: DefinedElement, target:DefinedElement)
6903{
6904 find interpretation(problem,interpretation);
6905 // The two endpoint of the link have to exist
6906 find mayExist(problem, interpretation, source);
6907 find mayExist(problem, interpretation, target);
6908 // Type consistency
6909 find mayInstanceOfVertex_class(problem,interpretation,source);
6910 find mayInstanceOfTransition_class(problem,interpretation,target);
6911 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
6912 // the upper bound of the opposite reference multiplicity should be considered.
6913 numberOfExistingOppositeReferences == count find mustInRelationtarget_reference_Transition(problem,interpretation,target,_);
6914 check(numberOfExistingOppositeReferences < 1);
6915} or {
6916 find mustInRelationincomingTransitions_reference_Vertex(problem,interpretation,source,target);
6917}
6918/**
6919 * Matcher for detecting tuples t where []outgoingTransitions reference Vertex(source,target)
6920 */
6921private pattern mustInRelationoutgoingTransitions_reference_Vertex(
6922 problem:LogicProblem, interpretation:PartialInterpretation,
6923 source: DefinedElement, target:DefinedElement)
6924{
6925 find interpretation(problem,interpretation);
6926 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
6927 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"outgoingTransitions reference Vertex");
6928 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
6929 BinaryElementRelationLink.param1(link,source);
6930 BinaryElementRelationLink.param2(link,target);
6931}
6932/**
6933 * Matcher for detecting tuples t where <>outgoingTransitions reference Vertex(source,target)
6934 */
6935private pattern mayInRelationoutgoingTransitions_reference_Vertex(
6936 problem:LogicProblem, interpretation:PartialInterpretation,
6937 source: DefinedElement, target:DefinedElement)
6938{
6939 find interpretation(problem,interpretation);
6940 // The two endpoint of the link have to exist
6941 find mayExist(problem, interpretation, source);
6942 find mayExist(problem, interpretation, target);
6943 // Type consistency
6944 find mayInstanceOfVertex_class(problem,interpretation,source);
6945 find mayInstanceOfTransition_class(problem,interpretation,target);
6946 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
6947 // the upper bound of the opposite reference multiplicity should be considered.
6948 numberOfExistingOppositeReferences == count find mustInRelationsource_reference_Transition(problem,interpretation,target,_);
6949 check(numberOfExistingOppositeReferences < 1);
6950 // The reference is containment, then a new reference cannot be create if:
6951 // 1. Multiple parents
6952 neg find mustContains4(problem,interpretation,_,target);
6953 // 2. Circle in the containment hierarchy
6954 neg find mustTransitiveContains(source,target);
6955} or {
6956 find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,source,target);
6957}
6958/**
6959 * Matcher for detecting tuples t where []vertices reference Region(source,target)
6960 */
6961private pattern mustInRelationvertices_reference_Region(
6962 problem:LogicProblem, interpretation:PartialInterpretation,
6963 source: DefinedElement, target:DefinedElement)
6964{
6965 find interpretation(problem,interpretation);
6966 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
6967 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"vertices reference Region");
6968 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
6969 BinaryElementRelationLink.param1(link,source);
6970 BinaryElementRelationLink.param2(link,target);
6971}
6972/**
6973 * Matcher for detecting tuples t where <>vertices reference Region(source,target)
6974 */
6975private pattern mayInRelationvertices_reference_Region(
6976 problem:LogicProblem, interpretation:PartialInterpretation,
6977 source: DefinedElement, target:DefinedElement)
6978{
6979 find interpretation(problem,interpretation);
6980 // The two endpoint of the link have to exist
6981 find mayExist(problem, interpretation, source);
6982 find mayExist(problem, interpretation, target);
6983 // Type consistency
6984 find mayInstanceOfRegion_class(problem,interpretation,source);
6985 find mayInstanceOfVertex_class(problem,interpretation,target);
6986 // The reference is containment, then a new reference cannot be create if:
6987 // 1. Multiple parents
6988 neg find mustContains4(problem,interpretation,_,target);
6989 // 2. Circle in the containment hierarchy
6990 neg find mustTransitiveContains(source,target);
6991} or {
6992 find mustInRelationvertices_reference_Region(problem,interpretation,source,target);
6993}
6994/**
6995 * Matcher for detecting tuples t where []target reference Transition(source,target)
6996 */
6997private pattern mustInRelationtarget_reference_Transition(
6998 problem:LogicProblem, interpretation:PartialInterpretation,
6999 source: DefinedElement, target:DefinedElement)
7000{
7001 find interpretation(problem,interpretation);
7002 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
7003 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"target reference Transition");
7004 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
7005 BinaryElementRelationLink.param1(link,source);
7006 BinaryElementRelationLink.param2(link,target);
7007}
7008/**
7009 * Matcher for detecting tuples t where <>target reference Transition(source,target)
7010 */
7011private pattern mayInRelationtarget_reference_Transition(
7012 problem:LogicProblem, interpretation:PartialInterpretation,
7013 source: DefinedElement, target:DefinedElement)
7014{
7015 find interpretation(problem,interpretation);
7016 // The two endpoint of the link have to exist
7017 find mayExist(problem, interpretation, source);
7018 find mayExist(problem, interpretation, target);
7019 // Type consistency
7020 find mayInstanceOfTransition_class(problem,interpretation,source);
7021 find mayInstanceOfVertex_class(problem,interpretation,target);
7022 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
7023 // the upper bound of the multiplicity should be considered.
7024 numberOfExistingReferences == count find mustInRelationtarget_reference_Transition(problem,interpretation,source,_);
7025 check(numberOfExistingReferences < 1);
7026} or {
7027 find mustInRelationtarget_reference_Transition(problem,interpretation,source,target);
7028}
7029/**
7030 * Matcher for detecting tuples t where []source reference Transition(source,target)
7031 */
7032private pattern mustInRelationsource_reference_Transition(
7033 problem:LogicProblem, interpretation:PartialInterpretation,
7034 source: DefinedElement, target:DefinedElement)
7035{
7036 find interpretation(problem,interpretation);
7037 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
7038 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"source reference Transition");
7039 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
7040 BinaryElementRelationLink.param1(link,source);
7041 BinaryElementRelationLink.param2(link,target);
7042}
7043/**
7044 * Matcher for detecting tuples t where <>source reference Transition(source,target)
7045 */
7046private pattern mayInRelationsource_reference_Transition(
7047 problem:LogicProblem, interpretation:PartialInterpretation,
7048 source: DefinedElement, target:DefinedElement)
7049{
7050 find interpretation(problem,interpretation);
7051 // The two endpoint of the link have to exist
7052 find mayExist(problem, interpretation, source);
7053 find mayExist(problem, interpretation, target);
7054 // Type consistency
7055 find mayInstanceOfTransition_class(problem,interpretation,source);
7056 find mayInstanceOfVertex_class(problem,interpretation,target);
7057 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
7058 // the upper bound of the multiplicity should be considered.
7059 numberOfExistingReferences == count find mustInRelationsource_reference_Transition(problem,interpretation,source,_);
7060 check(numberOfExistingReferences < 1);
7061 // The eOpposite of the reference is containment, then a referene cannot be created if
7062 // 1. Multiple parents
7063 neg find mustContains4(problem,interpretation,source,_);
7064 // 2. Circle in the containment hierarchy
7065 neg find mustTransitiveContains(source,target);
7066} or {
7067 find mustInRelationsource_reference_Transition(problem,interpretation,source,target);
7068}
7069/**
7070 * Matcher for detecting tuples t where []regions reference CompositeElement(source,target)
7071 */
7072private pattern mustInRelationregions_reference_CompositeElement(
7073 problem:LogicProblem, interpretation:PartialInterpretation,
7074 source: DefinedElement, target:DefinedElement)
7075{
7076 find interpretation(problem,interpretation);
7077 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
7078 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"regions reference CompositeElement");
7079 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
7080 BinaryElementRelationLink.param1(link,source);
7081 BinaryElementRelationLink.param2(link,target);
7082}
7083/**
7084 * Matcher for detecting tuples t where <>regions reference CompositeElement(source,target)
7085 */
7086private pattern mayInRelationregions_reference_CompositeElement(
7087 problem:LogicProblem, interpretation:PartialInterpretation,
7088 source: DefinedElement, target:DefinedElement)
7089{
7090 find interpretation(problem,interpretation);
7091 // The two endpoint of the link have to exist
7092 find mayExist(problem, interpretation, source);
7093 find mayExist(problem, interpretation, target);
7094 // Type consistency
7095 find mayInstanceOfCompositeElement_class(problem,interpretation,source);
7096 find mayInstanceOfRegion_class(problem,interpretation,target);
7097 // The reference is containment, then a new reference cannot be create if:
7098 // 1. Multiple parents
7099 neg find mustContains4(problem,interpretation,_,target);
7100 // 2. Circle in the containment hierarchy
7101 neg find mustTransitiveContains(source,target);
7102} or {
7103 find mustInRelationregions_reference_CompositeElement(problem,interpretation,source,target);
7104}
7105
7106//////////
7107// 1.3 Relation Definition Indexers
7108//////////
7109// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries entryInRegion
7110private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(
7111 problem:LogicProblem, interpretation:PartialInterpretation,
7112 var_r1, var_e1)
7113{
7114 find interpretation(problem,interpretation);
7115 find mustInstanceOfRegion_class(problem,interpretation,var_r1);
7116 find mustInstanceOfEntry_class(problem,interpretation,var_e1);
7117 // r1 is exported
7118 // e1 is exported
7119 find mustInstanceOfRegion_class(problem,interpretation,var_r1);
7120 find mustInRelationvertices_reference_Region(problem,interpretation,var_r1,var_virtual0);
7121 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
7122 var_virtual0 == var_e1;
7123}
7124private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(
7125 problem:LogicProblem, interpretation:PartialInterpretation,
7126 var_r1, var_e1)
7127{
7128 find interpretation(problem,interpretation);
7129 find mayInstanceOfRegion_class(problem,interpretation,var_r1);
7130 find mayInstanceOfEntry_class(problem,interpretation,var_e1);
7131 // r1 is exported
7132 // e1 is exported
7133 find mayInstanceOfRegion_class(problem,interpretation,var_r1);
7134 find mayInRelationvertices_reference_Region(problem,interpretation,var_r1,var_virtual0);
7135 find mayInstanceOfVertex_class(problem,interpretation,var_virtual0);
7136 find mayEquivalent(problem, interpretation, var_virtual0, var_e1);
7137}
7138private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(
7139 problem:LogicProblem, interpretation:PartialInterpretation,
7140 var_r1, var_e1)
7141{
7142 find interpretation(problem,interpretation);
7143 find mustInstanceOfRegion_class(problem,interpretation,var_r1);
7144 find mustInstanceOfEntry_class(problem,interpretation,var_e1);
7145 // r1 is exported
7146 // e1 is exported
7147 find mustInstanceOfRegion_class(problem,interpretation,var_r1);
7148 find mustInRelationvertices_reference_Region(problem,interpretation,var_r1,var_virtual0);
7149 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
7150 var_virtual0 == var_e1;
7151}
7152// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries noEntryInRegion
7153private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(
7154 problem:LogicProblem, interpretation:PartialInterpretation,
7155 var_r1)
7156{
7157 find interpretation(problem,interpretation);
7158 find mustInstanceOfRegion_class(problem,interpretation,var_r1);
7159 // r1 is exported
7160 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r1,_var__0);
7161}
7162private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(
7163 problem:LogicProblem, interpretation:PartialInterpretation,
7164 var_r1)
7165{
7166 find interpretation(problem,interpretation);
7167 find mayInstanceOfRegion_class(problem,interpretation,var_r1);
7168 // r1 is exported
7169 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r1,_var__0);
7170}
7171private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(
7172 problem:LogicProblem, interpretation:PartialInterpretation,
7173 var_r1)
7174{
7175 find interpretation(problem,interpretation);
7176 find mustInstanceOfRegion_class(problem,interpretation,var_r1);
7177 // r1 is exported
7178 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r1,_var__0);
7179}
7180// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries multipleEntryInRegion
7181private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(
7182 problem:LogicProblem, interpretation:PartialInterpretation,
7183 var_r)
7184{
7185 find interpretation(problem,interpretation);
7186 find mustInstanceOfRegion_class(problem,interpretation,var_r);
7187 // r is exported
7188 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e1);
7189 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e2);
7190 neg find mayEquivalent(problem, interpretation, var_e1, var_e2);
7191}
7192private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(
7193 problem:LogicProblem, interpretation:PartialInterpretation,
7194 var_r)
7195{
7196 find interpretation(problem,interpretation);
7197 find mayInstanceOfRegion_class(problem,interpretation,var_r);
7198 // r is exported
7199 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e1);
7200 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e2);
7201 var_e1 != var_e2;
7202}
7203private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(
7204 problem:LogicProblem, interpretation:PartialInterpretation,
7205 var_r)
7206{
7207 find interpretation(problem,interpretation);
7208 find mustInstanceOfRegion_class(problem,interpretation,var_r);
7209 // r is exported
7210 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e1);
7211 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e2);
7212 var_e1 != var_e2;
7213}
7214// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries transition
7215private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(
7216 problem:LogicProblem, interpretation:PartialInterpretation,
7217 var_t, var_src, var_trg)
7218{
7219 find interpretation(problem,interpretation);
7220 find mustInstanceOfTransition_class(problem,interpretation,var_t);
7221 find mustInstanceOfVertex_class(problem,interpretation,var_src);
7222 find mustInstanceOfVertex_class(problem,interpretation,var_trg);
7223 // t is exported
7224 // src is exported
7225 // trg is exported
7226 find mustInstanceOfTransition_class(problem,interpretation,var_t);
7227 find mustInRelationsource_reference_Transition(problem,interpretation,var_t,var_virtual0);
7228 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
7229 var_virtual0 == var_src;
7230 find mustInstanceOfTransition_class(problem,interpretation,var_t);
7231 find mustInRelationtarget_reference_Transition(problem,interpretation,var_t,var_virtual1);
7232 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
7233 var_virtual1 == var_trg;
7234}
7235private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(
7236 problem:LogicProblem, interpretation:PartialInterpretation,
7237 var_t, var_src, var_trg)
7238{
7239 find interpretation(problem,interpretation);
7240 find mayInstanceOfTransition_class(problem,interpretation,var_t);
7241 find mayInstanceOfVertex_class(problem,interpretation,var_src);
7242 find mayInstanceOfVertex_class(problem,interpretation,var_trg);
7243 // t is exported
7244 // src is exported
7245 // trg is exported
7246 find mayInstanceOfTransition_class(problem,interpretation,var_t);
7247 find mayInRelationsource_reference_Transition(problem,interpretation,var_t,var_virtual0);
7248 find mayInstanceOfVertex_class(problem,interpretation,var_virtual0);
7249 find mayEquivalent(problem, interpretation, var_virtual0, var_src);
7250 find mayInstanceOfTransition_class(problem,interpretation,var_t);
7251 find mayInRelationtarget_reference_Transition(problem,interpretation,var_t,var_virtual1);
7252 find mayInstanceOfVertex_class(problem,interpretation,var_virtual1);
7253 find mayEquivalent(problem, interpretation, var_virtual1, var_trg);
7254}
7255private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(
7256 problem:LogicProblem, interpretation:PartialInterpretation,
7257 var_t, var_src, var_trg)
7258{
7259 find interpretation(problem,interpretation);
7260 find mustInstanceOfTransition_class(problem,interpretation,var_t);
7261 find mustInstanceOfVertex_class(problem,interpretation,var_src);
7262 find mustInstanceOfVertex_class(problem,interpretation,var_trg);
7263 // t is exported
7264 // src is exported
7265 // trg is exported
7266 find mustInstanceOfTransition_class(problem,interpretation,var_t);
7267 find mustInRelationsource_reference_Transition(problem,interpretation,var_t,var_virtual0);
7268 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
7269 var_virtual0 == var_src;
7270 find mustInstanceOfTransition_class(problem,interpretation,var_t);
7271 find mustInRelationtarget_reference_Transition(problem,interpretation,var_t,var_virtual1);
7272 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
7273 var_virtual1 == var_trg;
7274}
7275// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries incomingToEntry
7276private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(
7277 problem:LogicProblem, interpretation:PartialInterpretation,
7278 var_t, var_e)
7279{
7280 find interpretation(problem,interpretation);
7281 find mustInstanceOfTransition_class(problem,interpretation,var_t);
7282 find mustInstanceOfEntry_class(problem,interpretation,var_e);
7283 // t is exported
7284 // e is exported
7285 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t,_var__0,var_e);
7286}
7287private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(
7288 problem:LogicProblem, interpretation:PartialInterpretation,
7289 var_t, var_e)
7290{
7291 find interpretation(problem,interpretation);
7292 find mayInstanceOfTransition_class(problem,interpretation,var_t);
7293 find mayInstanceOfEntry_class(problem,interpretation,var_e);
7294 // t is exported
7295 // e is exported
7296 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t,_var__0,var_e);
7297}
7298private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(
7299 problem:LogicProblem, interpretation:PartialInterpretation,
7300 var_t, var_e)
7301{
7302 find interpretation(problem,interpretation);
7303 find mustInstanceOfTransition_class(problem,interpretation,var_t);
7304 find mustInstanceOfEntry_class(problem,interpretation,var_e);
7305 // t is exported
7306 // e is exported
7307 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t,_var__0,var_e);
7308}
7309// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries noOutgoingTransitionFromEntry
7310private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(
7311 problem:LogicProblem, interpretation:PartialInterpretation,
7312 var_e)
7313{
7314 find interpretation(problem,interpretation);
7315 find mustInstanceOfEntry_class(problem,interpretation,var_e);
7316 // e is exported
7317 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_e,_var__1);
7318}
7319private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(
7320 problem:LogicProblem, interpretation:PartialInterpretation,
7321 var_e)
7322{
7323 find interpretation(problem,interpretation);
7324 find mayInstanceOfEntry_class(problem,interpretation,var_e);
7325 // e is exported
7326 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_e,_var__1);
7327}
7328private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(
7329 problem:LogicProblem, interpretation:PartialInterpretation,
7330 var_e)
7331{
7332 find interpretation(problem,interpretation);
7333 find mustInstanceOfEntry_class(problem,interpretation,var_e);
7334 // e is exported
7335 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_e,_var__1);
7336}
7337// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries multipleTransitionFromEntry
7338private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(
7339 problem:LogicProblem, interpretation:PartialInterpretation,
7340 var_e, var_t1, var_t2)
7341{
7342 find interpretation(problem,interpretation);
7343 find mustInstanceOfEntry_class(problem,interpretation,var_e);
7344 find mustInstanceOfTransition_class(problem,interpretation,var_t1);
7345 find mustInstanceOfTransition_class(problem,interpretation,var_t2);
7346 // e is exported
7347 // t1 is exported
7348 // t2 is exported
7349 find mustInstanceOfEntry_class(problem,interpretation,var_e);
7350 find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0);
7351 find mustInstanceOfTransition_class(problem,interpretation,var_virtual0);
7352 var_virtual0 == var_t1;
7353 find mustInstanceOfEntry_class(problem,interpretation,var_e);
7354 find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual1);
7355 find mustInstanceOfTransition_class(problem,interpretation,var_virtual1);
7356 var_virtual1 == var_t2;
7357 neg find mayEquivalent(problem, interpretation, var_t1, var_t2);
7358}
7359private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(
7360 problem:LogicProblem, interpretation:PartialInterpretation,
7361 var_e, var_t1, var_t2)
7362{
7363 find interpretation(problem,interpretation);
7364 find mayInstanceOfEntry_class(problem,interpretation,var_e);
7365 find mayInstanceOfTransition_class(problem,interpretation,var_t1);
7366 find mayInstanceOfTransition_class(problem,interpretation,var_t2);
7367 // e is exported
7368 // t1 is exported
7369 // t2 is exported
7370 find mayInstanceOfEntry_class(problem,interpretation,var_e);
7371 find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0);
7372 find mayInstanceOfTransition_class(problem,interpretation,var_virtual0);
7373 find mayEquivalent(problem, interpretation, var_virtual0, var_t1);
7374 find mayInstanceOfEntry_class(problem,interpretation,var_e);
7375 find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual1);
7376 find mayInstanceOfTransition_class(problem,interpretation,var_virtual1);
7377 find mayEquivalent(problem, interpretation, var_virtual1, var_t2);
7378 var_t1 != var_t2;
7379}
7380private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(
7381 problem:LogicProblem, interpretation:PartialInterpretation,
7382 var_e, var_t1, var_t2)
7383{
7384 find interpretation(problem,interpretation);
7385 find mustInstanceOfEntry_class(problem,interpretation,var_e);
7386 find mustInstanceOfTransition_class(problem,interpretation,var_t1);
7387 find mustInstanceOfTransition_class(problem,interpretation,var_t2);
7388 // e is exported
7389 // t1 is exported
7390 // t2 is exported
7391 find mustInstanceOfEntry_class(problem,interpretation,var_e);
7392 find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0);
7393 find mustInstanceOfTransition_class(problem,interpretation,var_virtual0);
7394 var_virtual0 == var_t1;
7395 find mustInstanceOfEntry_class(problem,interpretation,var_e);
7396 find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual1);
7397 find mustInstanceOfTransition_class(problem,interpretation,var_virtual1);
7398 var_virtual1 == var_t2;
7399 var_t1 != var_t2;
7400}
7401// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries outgoingFromExit
7402private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(
7403 problem:LogicProblem, interpretation:PartialInterpretation,
7404 var_t, var_e)
7405{
7406 find interpretation(problem,interpretation);
7407 find mustInstanceOfTransition_class(problem,interpretation,var_t);
7408 find mustInstanceOfExit_class(problem,interpretation,var_e);
7409 // t is exported
7410 // e is exported
7411 find mustInstanceOfExit_class(problem,interpretation,var_e);
7412 find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0);
7413 find mustInstanceOfTransition_class(problem,interpretation,var_virtual0);
7414 var_virtual0 == var_t;
7415}
7416private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(
7417 problem:LogicProblem, interpretation:PartialInterpretation,
7418 var_t, var_e)
7419{
7420 find interpretation(problem,interpretation);
7421 find mayInstanceOfTransition_class(problem,interpretation,var_t);
7422 find mayInstanceOfExit_class(problem,interpretation,var_e);
7423 // t is exported
7424 // e is exported
7425 find mayInstanceOfExit_class(problem,interpretation,var_e);
7426 find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0);
7427 find mayInstanceOfTransition_class(problem,interpretation,var_virtual0);
7428 find mayEquivalent(problem, interpretation, var_virtual0, var_t);
7429}
7430private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(
7431 problem:LogicProblem, interpretation:PartialInterpretation,
7432 var_t, var_e)
7433{
7434 find interpretation(problem,interpretation);
7435 find mustInstanceOfTransition_class(problem,interpretation,var_t);
7436 find mustInstanceOfExit_class(problem,interpretation,var_e);
7437 // t is exported
7438 // e is exported
7439 find mustInstanceOfExit_class(problem,interpretation,var_e);
7440 find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0);
7441 find mustInstanceOfTransition_class(problem,interpretation,var_virtual0);
7442 var_virtual0 == var_t;
7443}
7444// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries outgoingFromFinal
7445private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(
7446 problem:LogicProblem, interpretation:PartialInterpretation,
7447 var_t, var_f)
7448{
7449 find interpretation(problem,interpretation);
7450 find mustInstanceOfTransition_class(problem,interpretation,var_t);
7451 find mustInstanceOfFinalState_class(problem,interpretation,var_f);
7452 // t is exported
7453 // f is exported
7454 find mustInstanceOfFinalState_class(problem,interpretation,var_f);
7455 find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_f,var_virtual0);
7456 find mustInstanceOfTransition_class(problem,interpretation,var_virtual0);
7457 var_virtual0 == var_t;
7458}
7459private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(
7460 problem:LogicProblem, interpretation:PartialInterpretation,
7461 var_t, var_f)
7462{
7463 find interpretation(problem,interpretation);
7464 find mayInstanceOfTransition_class(problem,interpretation,var_t);
7465 find mayInstanceOfFinalState_class(problem,interpretation,var_f);
7466 // t is exported
7467 // f is exported
7468 find mayInstanceOfFinalState_class(problem,interpretation,var_f);
7469 find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_f,var_virtual0);
7470 find mayInstanceOfTransition_class(problem,interpretation,var_virtual0);
7471 find mayEquivalent(problem, interpretation, var_virtual0, var_t);
7472}
7473private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(
7474 problem:LogicProblem, interpretation:PartialInterpretation,
7475 var_t, var_f)
7476{
7477 find interpretation(problem,interpretation);
7478 find mustInstanceOfTransition_class(problem,interpretation,var_t);
7479 find mustInstanceOfFinalState_class(problem,interpretation,var_f);
7480 // t is exported
7481 // f is exported
7482 find mustInstanceOfFinalState_class(problem,interpretation,var_f);
7483 find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_f,var_virtual0);
7484 find mustInstanceOfTransition_class(problem,interpretation,var_virtual0);
7485 var_virtual0 == var_t;
7486}
7487// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries noStateInRegion
7488private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(
7489 problem:LogicProblem, interpretation:PartialInterpretation,
7490 var_region)
7491{
7492 find interpretation(problem,interpretation);
7493 find mustInstanceOfRegion_class(problem,interpretation,var_region);
7494 // region is exported
7495 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion(problem,interpretation,var_region,_var__0);
7496}
7497private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(
7498 problem:LogicProblem, interpretation:PartialInterpretation,
7499 var_region)
7500{
7501 find interpretation(problem,interpretation);
7502 find mayInstanceOfRegion_class(problem,interpretation,var_region);
7503 // region is exported
7504 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion(problem,interpretation,var_region,_var__0);
7505}
7506private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(
7507 problem:LogicProblem, interpretation:PartialInterpretation,
7508 var_region)
7509{
7510 find interpretation(problem,interpretation);
7511 find mustInstanceOfRegion_class(problem,interpretation,var_region);
7512 // region is exported
7513 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion(problem,interpretation,var_region,_var__0);
7514}
7515// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries StateInRegion
7516private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion(
7517 problem:LogicProblem, interpretation:PartialInterpretation,
7518 var_region, var_state)
7519{
7520 find interpretation(problem,interpretation);
7521 find mustInstanceOfRegion_class(problem,interpretation,var_region);
7522 find mustInstanceOfState_class(problem,interpretation,var_state);
7523 // region is exported
7524 // state is exported
7525 find mustInstanceOfRegion_class(problem,interpretation,var_region);
7526 find mustInRelationvertices_reference_Region(problem,interpretation,var_region,var_virtual0);
7527 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
7528 var_virtual0 == var_state;
7529}
7530private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion(
7531 problem:LogicProblem, interpretation:PartialInterpretation,
7532 var_region, var_state)
7533{
7534 find interpretation(problem,interpretation);
7535 find mayInstanceOfRegion_class(problem,interpretation,var_region);
7536 find mayInstanceOfState_class(problem,interpretation,var_state);
7537 // region is exported
7538 // state is exported
7539 find mayInstanceOfRegion_class(problem,interpretation,var_region);
7540 find mayInRelationvertices_reference_Region(problem,interpretation,var_region,var_virtual0);
7541 find mayInstanceOfVertex_class(problem,interpretation,var_virtual0);
7542 find mayEquivalent(problem, interpretation, var_virtual0, var_state);
7543}
7544private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion(
7545 problem:LogicProblem, interpretation:PartialInterpretation,
7546 var_region, var_state)
7547{
7548 find interpretation(problem,interpretation);
7549 find mustInstanceOfRegion_class(problem,interpretation,var_region);
7550 find mustInstanceOfState_class(problem,interpretation,var_state);
7551 // region is exported
7552 // state is exported
7553 find mustInstanceOfRegion_class(problem,interpretation,var_region);
7554 find mustInRelationvertices_reference_Region(problem,interpretation,var_region,var_virtual0);
7555 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
7556 var_virtual0 == var_state;
7557}
7558// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries choiceHasNoOutgoing
7559private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(
7560 problem:LogicProblem, interpretation:PartialInterpretation,
7561 var_c)
7562{
7563 find interpretation(problem,interpretation);
7564 find mustInstanceOfChoice_class(problem,interpretation,var_c);
7565 // c is exported
7566 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_c,_var__1);
7567}
7568private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(
7569 problem:LogicProblem, interpretation:PartialInterpretation,
7570 var_c)
7571{
7572 find interpretation(problem,interpretation);
7573 find mayInstanceOfChoice_class(problem,interpretation,var_c);
7574 // c is exported
7575 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_c,_var__1);
7576}
7577private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(
7578 problem:LogicProblem, interpretation:PartialInterpretation,
7579 var_c)
7580{
7581 find interpretation(problem,interpretation);
7582 find mustInstanceOfChoice_class(problem,interpretation,var_c);
7583 // c is exported
7584 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_c,_var__1);
7585}
7586// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries choiceHasNoIncoming
7587private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(
7588 problem:LogicProblem, interpretation:PartialInterpretation,
7589 var_c)
7590{
7591 find interpretation(problem,interpretation);
7592 find mustInstanceOfChoice_class(problem,interpretation,var_c);
7593 // c is exported
7594 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_c);
7595}
7596private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(
7597 problem:LogicProblem, interpretation:PartialInterpretation,
7598 var_c)
7599{
7600 find interpretation(problem,interpretation);
7601 find mayInstanceOfChoice_class(problem,interpretation,var_c);
7602 // c is exported
7603 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_c);
7604}
7605private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(
7606 problem:LogicProblem, interpretation:PartialInterpretation,
7607 var_c)
7608{
7609 find interpretation(problem,interpretation);
7610 find mustInstanceOfChoice_class(problem,interpretation,var_c);
7611 // c is exported
7612 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_c);
7613}
7614// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries synchHasNoOutgoing
7615private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(
7616 problem:LogicProblem, interpretation:PartialInterpretation,
7617 var_s)
7618{
7619 find interpretation(problem,interpretation);
7620 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
7621 // s is exported
7622 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,_var__1);
7623}
7624private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(
7625 problem:LogicProblem, interpretation:PartialInterpretation,
7626 var_s)
7627{
7628 find interpretation(problem,interpretation);
7629 find mayInstanceOfSynchronization_class(problem,interpretation,var_s);
7630 // s is exported
7631 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,_var__1);
7632}
7633private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(
7634 problem:LogicProblem, interpretation:PartialInterpretation,
7635 var_s)
7636{
7637 find interpretation(problem,interpretation);
7638 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
7639 // s is exported
7640 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,_var__1);
7641}
7642// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries synchHasNoIncoming
7643private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(
7644 problem:LogicProblem, interpretation:PartialInterpretation,
7645 var_s)
7646{
7647 find interpretation(problem,interpretation);
7648 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
7649 // s is exported
7650 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_s);
7651}
7652private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(
7653 problem:LogicProblem, interpretation:PartialInterpretation,
7654 var_s)
7655{
7656 find interpretation(problem,interpretation);
7657 find mayInstanceOfSynchronization_class(problem,interpretation,var_s);
7658 // s is exported
7659 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_s);
7660}
7661private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(
7662 problem:LogicProblem, interpretation:PartialInterpretation,
7663 var_s)
7664{
7665 find interpretation(problem,interpretation);
7666 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
7667 // s is exported
7668 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_s);
7669}
7670// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries SynchronizedIncomingInSameRegion
7671private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(
7672 problem:LogicProblem, interpretation:PartialInterpretation,
7673 var_s, var_v1, var_v2)
7674{
7675 find interpretation(problem,interpretation);
7676 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
7677 find mustInstanceOfVertex_class(problem,interpretation,var_v1);
7678 find mustInstanceOfVertex_class(problem,interpretation,var_v2);
7679 // s is exported
7680 // v1 is exported
7681 // v2 is exported
7682 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_v1,var_s);
7683 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_v2,var_s);
7684 neg find mayEquivalent(problem, interpretation, var_t1, var_t2);
7685 find mustInstanceOfRegion_class(problem,interpretation,var_r);
7686 find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0);
7687 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
7688 var_virtual0 == var_v1;
7689 find mustInstanceOfRegion_class(problem,interpretation,var_r);
7690 find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1);
7691 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
7692 var_virtual1 == var_v2;
7693}or{
7694 find interpretation(problem,interpretation);
7695 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
7696 find mustInstanceOfVertex_class(problem,interpretation,var_v1);
7697 find mustInstanceOfVertex_class(problem,interpretation,var_v2);
7698 // s is exported
7699 // v1 is exported
7700 // v2 is exported
7701 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_s,var_v1);
7702 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_s,var_v2);
7703 neg find mayEquivalent(problem, interpretation, var_t1, var_t2);
7704 find mustInstanceOfRegion_class(problem,interpretation,var_r);
7705 find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0);
7706 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
7707 var_virtual0 == var_v1;
7708 find mustInstanceOfRegion_class(problem,interpretation,var_r);
7709 find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1);
7710 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
7711 var_virtual1 == var_v2;
7712}
7713private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(
7714 problem:LogicProblem, interpretation:PartialInterpretation,
7715 var_s, var_v1, var_v2)
7716{
7717 find interpretation(problem,interpretation);
7718 find mayInstanceOfSynchronization_class(problem,interpretation,var_s);
7719 find mayInstanceOfVertex_class(problem,interpretation,var_v1);
7720 find mayInstanceOfVertex_class(problem,interpretation,var_v2);
7721 // s is exported
7722 // v1 is exported
7723 // v2 is exported
7724 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_v1,var_s);
7725 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_v2,var_s);
7726 var_t1 != var_t2;
7727 find mayInstanceOfRegion_class(problem,interpretation,var_r);
7728 find mayInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0);
7729 find mayInstanceOfVertex_class(problem,interpretation,var_virtual0);
7730 find mayEquivalent(problem, interpretation, var_virtual0, var_v1);
7731 find mayInstanceOfRegion_class(problem,interpretation,var_r);
7732 find mayInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1);
7733 find mayInstanceOfVertex_class(problem,interpretation,var_virtual1);
7734 find mayEquivalent(problem, interpretation, var_virtual1, var_v2);
7735}or{
7736 find interpretation(problem,interpretation);
7737 find mayInstanceOfSynchronization_class(problem,interpretation,var_s);
7738 find mayInstanceOfVertex_class(problem,interpretation,var_v1);
7739 find mayInstanceOfVertex_class(problem,interpretation,var_v2);
7740 // s is exported
7741 // v1 is exported
7742 // v2 is exported
7743 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_s,var_v1);
7744 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_s,var_v2);
7745 var_t1 != var_t2;
7746 find mayInstanceOfRegion_class(problem,interpretation,var_r);
7747 find mayInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0);
7748 find mayInstanceOfVertex_class(problem,interpretation,var_virtual0);
7749 find mayEquivalent(problem, interpretation, var_virtual0, var_v1);
7750 find mayInstanceOfRegion_class(problem,interpretation,var_r);
7751 find mayInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1);
7752 find mayInstanceOfVertex_class(problem,interpretation,var_virtual1);
7753 find mayEquivalent(problem, interpretation, var_virtual1, var_v2);
7754}
7755private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(
7756 problem:LogicProblem, interpretation:PartialInterpretation,
7757 var_s, var_v1, var_v2)
7758{
7759 find interpretation(problem,interpretation);
7760 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
7761 find mustInstanceOfVertex_class(problem,interpretation,var_v1);
7762 find mustInstanceOfVertex_class(problem,interpretation,var_v2);
7763 // s is exported
7764 // v1 is exported
7765 // v2 is exported
7766 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_v1,var_s);
7767 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_v2,var_s);
7768 var_t1 != var_t2;
7769 find mustInstanceOfRegion_class(problem,interpretation,var_r);
7770 find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0);
7771 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
7772 var_virtual0 == var_v1;
7773 find mustInstanceOfRegion_class(problem,interpretation,var_r);
7774 find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1);
7775 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
7776 var_virtual1 == var_v2;
7777}or{
7778 find interpretation(problem,interpretation);
7779 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
7780 find mustInstanceOfVertex_class(problem,interpretation,var_v1);
7781 find mustInstanceOfVertex_class(problem,interpretation,var_v2);
7782 // s is exported
7783 // v1 is exported
7784 // v2 is exported
7785 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_s,var_v1);
7786 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_s,var_v2);
7787 var_t1 != var_t2;
7788 find mustInstanceOfRegion_class(problem,interpretation,var_r);
7789 find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0);
7790 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
7791 var_virtual0 == var_v1;
7792 find mustInstanceOfRegion_class(problem,interpretation,var_r);
7793 find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1);
7794 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
7795 var_virtual1 == var_v2;
7796}
7797// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries notSynchronizingStates
7798private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(
7799 problem:LogicProblem, interpretation:PartialInterpretation,
7800 var_s)
7801{
7802 find interpretation(problem,interpretation);
7803 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
7804 // s is exported
7805 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition(problem,interpretation,var_s);
7806 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition(problem,interpretation,var_s);
7807}
7808private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(
7809 problem:LogicProblem, interpretation:PartialInterpretation,
7810 var_s)
7811{
7812 find interpretation(problem,interpretation);
7813 find mayInstanceOfSynchronization_class(problem,interpretation,var_s);
7814 // s is exported
7815 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition(problem,interpretation,var_s);
7816 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition(problem,interpretation,var_s);
7817}
7818private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(
7819 problem:LogicProblem, interpretation:PartialInterpretation,
7820 var_s)
7821{
7822 find interpretation(problem,interpretation);
7823 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
7824 // s is exported
7825 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition(problem,interpretation,var_s);
7826 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition(problem,interpretation,var_s);
7827}
7828// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries hasMultipleOutgoingTrainsition
7829private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition(
7830 problem:LogicProblem, interpretation:PartialInterpretation,
7831 var_v)
7832{
7833 find interpretation(problem,interpretation);
7834 find mustInstanceOfSynchronization_class(problem,interpretation,var_v);
7835 // v is exported
7836 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_trg1);
7837 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v,var_trg2);
7838 neg find mayEquivalent(problem, interpretation, var_trg1, var_trg2);
7839}
7840private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition(
7841 problem:LogicProblem, interpretation:PartialInterpretation,
7842 var_v)
7843{
7844 find interpretation(problem,interpretation);
7845 find mayInstanceOfSynchronization_class(problem,interpretation,var_v);
7846 // v is exported
7847 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_trg1);
7848 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v,var_trg2);
7849 var_trg1 != var_trg2;
7850}
7851private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition(
7852 problem:LogicProblem, interpretation:PartialInterpretation,
7853 var_v)
7854{
7855 find interpretation(problem,interpretation);
7856 find mustInstanceOfSynchronization_class(problem,interpretation,var_v);
7857 // v is exported
7858 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_trg1);
7859 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v,var_trg2);
7860 var_trg1 != var_trg2;
7861}
7862// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries hasMultipleIncomingTrainsition
7863private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition(
7864 problem:LogicProblem, interpretation:PartialInterpretation,
7865 var_v)
7866{
7867 find interpretation(problem,interpretation);
7868 find mustInstanceOfSynchronization_class(problem,interpretation,var_v);
7869 // v is exported
7870 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_src1,var_v);
7871 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_src2,var_v);
7872 neg find mayEquivalent(problem, interpretation, var_src1, var_src2);
7873}
7874private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition(
7875 problem:LogicProblem, interpretation:PartialInterpretation,
7876 var_v)
7877{
7878 find interpretation(problem,interpretation);
7879 find mayInstanceOfSynchronization_class(problem,interpretation,var_v);
7880 // v is exported
7881 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_src1,var_v);
7882 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_src2,var_v);
7883 var_src1 != var_src2;
7884}
7885private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition(
7886 problem:LogicProblem, interpretation:PartialInterpretation,
7887 var_v)
7888{
7889 find interpretation(problem,interpretation);
7890 find mustInstanceOfSynchronization_class(problem,interpretation,var_v);
7891 // v is exported
7892 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_src1,var_v);
7893 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_src2,var_v);
7894 var_src1 != var_src2;
7895}
7896// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries SynchronizedRegionsAreNotSiblings
7897private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(
7898 problem:LogicProblem, interpretation:PartialInterpretation,
7899 var_s, var_v1, var_v2)
7900{
7901 find interpretation(problem,interpretation);
7902 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
7903 find mustInstanceOfVertex_class(problem,interpretation,var_v1);
7904 find mustInstanceOfVertex_class(problem,interpretation,var_v2);
7905 // s is exported
7906 // v1 is exported
7907 // v2 is exported
7908 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v1,var_s);
7909 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v2,var_s);
7910 find mustInstanceOfCompositeElement_class(problem,interpretation,var_r1);
7911 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0);
7912 find mustInstanceOfRegion_class(problem,interpretation,var_virtual0);
7913 find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1);
7914 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
7915 var_virtual1 == var_v1;
7916 find mustInstanceOfCompositeElement_class(problem,interpretation,var_r2);
7917 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2);
7918 find mustInstanceOfRegion_class(problem,interpretation,var_virtual2);
7919 find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3);
7920 find mustInstanceOfVertex_class(problem,interpretation,var_virtual3);
7921 var_virtual3 == var_v2;
7922 neg find mayEquivalent(problem, interpretation, var_r1, var_r2);
7923}or{
7924 find interpretation(problem,interpretation);
7925 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
7926 find mustInstanceOfVertex_class(problem,interpretation,var_v1);
7927 find mustInstanceOfVertex_class(problem,interpretation,var_v2);
7928 // s is exported
7929 // v1 is exported
7930 // v2 is exported
7931 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v1);
7932 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_s,var_v2);
7933 find mustInstanceOfCompositeElement_class(problem,interpretation,var_r1);
7934 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0);
7935 find mustInstanceOfRegion_class(problem,interpretation,var_virtual0);
7936 find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1);
7937 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
7938 var_virtual1 == var_v1;
7939 find mustInstanceOfCompositeElement_class(problem,interpretation,var_r2);
7940 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2);
7941 find mustInstanceOfRegion_class(problem,interpretation,var_virtual2);
7942 find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3);
7943 find mustInstanceOfVertex_class(problem,interpretation,var_virtual3);
7944 var_virtual3 == var_v2;
7945 neg find mayEquivalent(problem, interpretation, var_r1, var_r2);
7946}
7947private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(
7948 problem:LogicProblem, interpretation:PartialInterpretation,
7949 var_s, var_v1, var_v2)
7950{
7951 find interpretation(problem,interpretation);
7952 find mayInstanceOfSynchronization_class(problem,interpretation,var_s);
7953 find mayInstanceOfVertex_class(problem,interpretation,var_v1);
7954 find mayInstanceOfVertex_class(problem,interpretation,var_v2);
7955 // s is exported
7956 // v1 is exported
7957 // v2 is exported
7958 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v1,var_s);
7959 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v2,var_s);
7960 find mayInstanceOfCompositeElement_class(problem,interpretation,var_r1);
7961 find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0);
7962 find mayInstanceOfRegion_class(problem,interpretation,var_virtual0);
7963 find mayInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1);
7964 find mayInstanceOfVertex_class(problem,interpretation,var_virtual1);
7965 find mayEquivalent(problem, interpretation, var_virtual1, var_v1);
7966 find mayInstanceOfCompositeElement_class(problem,interpretation,var_r2);
7967 find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2);
7968 find mayInstanceOfRegion_class(problem,interpretation,var_virtual2);
7969 find mayInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3);
7970 find mayInstanceOfVertex_class(problem,interpretation,var_virtual3);
7971 find mayEquivalent(problem, interpretation, var_virtual3, var_v2);
7972 var_r1 != var_r2;
7973}or{
7974 find interpretation(problem,interpretation);
7975 find mayInstanceOfSynchronization_class(problem,interpretation,var_s);
7976 find mayInstanceOfVertex_class(problem,interpretation,var_v1);
7977 find mayInstanceOfVertex_class(problem,interpretation,var_v2);
7978 // s is exported
7979 // v1 is exported
7980 // v2 is exported
7981 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v1);
7982 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_s,var_v2);
7983 find mayInstanceOfCompositeElement_class(problem,interpretation,var_r1);
7984 find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0);
7985 find mayInstanceOfRegion_class(problem,interpretation,var_virtual0);
7986 find mayInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1);
7987 find mayInstanceOfVertex_class(problem,interpretation,var_virtual1);
7988 find mayEquivalent(problem, interpretation, var_virtual1, var_v1);
7989 find mayInstanceOfCompositeElement_class(problem,interpretation,var_r2);
7990 find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2);
7991 find mayInstanceOfRegion_class(problem,interpretation,var_virtual2);
7992 find mayInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3);
7993 find mayInstanceOfVertex_class(problem,interpretation,var_virtual3);
7994 find mayEquivalent(problem, interpretation, var_virtual3, var_v2);
7995 var_r1 != var_r2;
7996}
7997private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(
7998 problem:LogicProblem, interpretation:PartialInterpretation,
7999 var_s, var_v1, var_v2)
8000{
8001 find interpretation(problem,interpretation);
8002 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
8003 find mustInstanceOfVertex_class(problem,interpretation,var_v1);
8004 find mustInstanceOfVertex_class(problem,interpretation,var_v2);
8005 // s is exported
8006 // v1 is exported
8007 // v2 is exported
8008 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v1,var_s);
8009 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v2,var_s);
8010 find mustInstanceOfCompositeElement_class(problem,interpretation,var_r1);
8011 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0);
8012 find mustInstanceOfRegion_class(problem,interpretation,var_virtual0);
8013 find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1);
8014 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
8015 var_virtual1 == var_v1;
8016 find mustInstanceOfCompositeElement_class(problem,interpretation,var_r2);
8017 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2);
8018 find mustInstanceOfRegion_class(problem,interpretation,var_virtual2);
8019 find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3);
8020 find mustInstanceOfVertex_class(problem,interpretation,var_virtual3);
8021 var_virtual3 == var_v2;
8022 var_r1 != var_r2;
8023}or{
8024 find interpretation(problem,interpretation);
8025 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
8026 find mustInstanceOfVertex_class(problem,interpretation,var_v1);
8027 find mustInstanceOfVertex_class(problem,interpretation,var_v2);
8028 // s is exported
8029 // v1 is exported
8030 // v2 is exported
8031 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v1);
8032 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_s,var_v2);
8033 find mustInstanceOfCompositeElement_class(problem,interpretation,var_r1);
8034 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0);
8035 find mustInstanceOfRegion_class(problem,interpretation,var_virtual0);
8036 find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1);
8037 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
8038 var_virtual1 == var_v1;
8039 find mustInstanceOfCompositeElement_class(problem,interpretation,var_r2);
8040 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2);
8041 find mustInstanceOfRegion_class(problem,interpretation,var_virtual2);
8042 find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3);
8043 find mustInstanceOfVertex_class(problem,interpretation,var_virtual3);
8044 var_virtual3 == var_v2;
8045 var_r1 != var_r2;
8046}
8047// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries child
8048private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(
8049 problem:LogicProblem, interpretation:PartialInterpretation,
8050 var_parent, var_child)
8051{
8052 find interpretation(problem,interpretation);
8053 find mustInstanceOfCompositeElement_class(problem,interpretation,var_parent);
8054 find mustInstanceOfVertex_class(problem,interpretation,var_child);
8055 // parent is exported
8056 // child is exported
8057 find mustInstanceOfCompositeElement_class(problem,interpretation,var_parent);
8058 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_parent,var_virtual0);
8059 find mustInstanceOfRegion_class(problem,interpretation,var_virtual0);
8060 find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1);
8061 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
8062 var_virtual1 == var_child;
8063}
8064private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(
8065 problem:LogicProblem, interpretation:PartialInterpretation,
8066 var_parent, var_child)
8067{
8068 find interpretation(problem,interpretation);
8069 find mayInstanceOfCompositeElement_class(problem,interpretation,var_parent);
8070 find mayInstanceOfVertex_class(problem,interpretation,var_child);
8071 // parent is exported
8072 // child is exported
8073 find mayInstanceOfCompositeElement_class(problem,interpretation,var_parent);
8074 find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_parent,var_virtual0);
8075 find mayInstanceOfRegion_class(problem,interpretation,var_virtual0);
8076 find mayInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1);
8077 find mayInstanceOfVertex_class(problem,interpretation,var_virtual1);
8078 find mayEquivalent(problem, interpretation, var_virtual1, var_child);
8079}
8080private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(
8081 problem:LogicProblem, interpretation:PartialInterpretation,
8082 var_parent, var_child)
8083{
8084 find interpretation(problem,interpretation);
8085 find mustInstanceOfCompositeElement_class(problem,interpretation,var_parent);
8086 find mustInstanceOfVertex_class(problem,interpretation,var_child);
8087 // parent is exported
8088 // child is exported
8089 find mustInstanceOfCompositeElement_class(problem,interpretation,var_parent);
8090 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_parent,var_virtual0);
8091 find mustInstanceOfRegion_class(problem,interpretation,var_virtual0);
8092 find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1);
8093 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
8094 var_virtual1 == var_child;
8095}
8096// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries SynchronizedRegionDoesNotHaveMultipleRegions
8097private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(
8098 problem:LogicProblem, interpretation:PartialInterpretation,
8099 var_s, var_v)
8100{
8101 find interpretation(problem,interpretation);
8102 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
8103 find mustInstanceOfVertex_class(problem,interpretation,var_v);
8104 // s is exported
8105 // v is exported
8106 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_s);
8107 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v);
8108 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c);
8109}or{
8110 find interpretation(problem,interpretation);
8111 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
8112 find mustInstanceOfVertex_class(problem,interpretation,var_v);
8113 // s is exported
8114 // v is exported
8115 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v);
8116 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v);
8117 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c);
8118}
8119private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(
8120 problem:LogicProblem, interpretation:PartialInterpretation,
8121 var_s, var_v)
8122{
8123 find interpretation(problem,interpretation);
8124 find mayInstanceOfSynchronization_class(problem,interpretation,var_s);
8125 find mayInstanceOfVertex_class(problem,interpretation,var_v);
8126 // s is exported
8127 // v is exported
8128 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_s);
8129 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v);
8130 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c);
8131}or{
8132 find interpretation(problem,interpretation);
8133 find mayInstanceOfSynchronization_class(problem,interpretation,var_s);
8134 find mayInstanceOfVertex_class(problem,interpretation,var_v);
8135 // s is exported
8136 // v is exported
8137 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v);
8138 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v);
8139 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c);
8140}
8141private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(
8142 problem:LogicProblem, interpretation:PartialInterpretation,
8143 var_s, var_v)
8144{
8145 find interpretation(problem,interpretation);
8146 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
8147 find mustInstanceOfVertex_class(problem,interpretation,var_v);
8148 // s is exported
8149 // v is exported
8150 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_s);
8151 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v);
8152 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c);
8153}or{
8154 find interpretation(problem,interpretation);
8155 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
8156 find mustInstanceOfVertex_class(problem,interpretation,var_v);
8157 // s is exported
8158 // v is exported
8159 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v);
8160 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v);
8161 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c);
8162}
8163// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries hasMultipleRegions
8164private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(
8165 problem:LogicProblem, interpretation:PartialInterpretation,
8166 var_composite)
8167{
8168 find interpretation(problem,interpretation);
8169 find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite);
8170 // composite is exported
8171 find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite);
8172 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual0);
8173 find mustInstanceOfRegion_class(problem,interpretation,var_virtual0);
8174 var_virtual0 == var_region1;
8175 find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite);
8176 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual1);
8177 find mustInstanceOfRegion_class(problem,interpretation,var_virtual1);
8178 var_virtual1 == var_region2;
8179 neg find mayEquivalent(problem, interpretation, var_region1, var_region2);
8180}
8181private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(
8182 problem:LogicProblem, interpretation:PartialInterpretation,
8183 var_composite)
8184{
8185 find interpretation(problem,interpretation);
8186 find mayInstanceOfCompositeElement_class(problem,interpretation,var_composite);
8187 // composite is exported
8188 find mayInstanceOfCompositeElement_class(problem,interpretation,var_composite);
8189 find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual0);
8190 find mayInstanceOfRegion_class(problem,interpretation,var_virtual0);
8191 find mayEquivalent(problem, interpretation, var_virtual0, var_region1);
8192 find mayInstanceOfCompositeElement_class(problem,interpretation,var_composite);
8193 find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual1);
8194 find mayInstanceOfRegion_class(problem,interpretation,var_virtual1);
8195 find mayEquivalent(problem, interpretation, var_virtual1, var_region2);
8196 var_region1 != var_region2;
8197}
8198private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(
8199 problem:LogicProblem, interpretation:PartialInterpretation,
8200 var_composite)
8201{
8202 find interpretation(problem,interpretation);
8203 find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite);
8204 // composite is exported
8205 find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite);
8206 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual0);
8207 find mustInstanceOfRegion_class(problem,interpretation,var_virtual0);
8208 var_virtual0 == var_region1;
8209 find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite);
8210 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual1);
8211 find mustInstanceOfRegion_class(problem,interpretation,var_virtual1);
8212 var_virtual1 == var_region2;
8213 var_region1 != var_region2;
8214}
8215// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries synchThree
8216private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(
8217 problem:LogicProblem, interpretation:PartialInterpretation,
8218 var_s)
8219{
8220 find interpretation(problem,interpretation);
8221 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
8222 // s is exported
8223 find mustInstanceOfTransition_class(problem,interpretation,var_t1);
8224 find mustInRelationtarget_reference_Transition(problem,interpretation,var_t1,var_virtual0);
8225 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
8226 var_virtual0 == var_s;
8227 find mustInstanceOfTransition_class(problem,interpretation,var_t2);
8228 find mustInRelationtarget_reference_Transition(problem,interpretation,var_t2,var_virtual1);
8229 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
8230 var_virtual1 == var_s;
8231 find mustInstanceOfTransition_class(problem,interpretation,var_t3);
8232 find mustInRelationtarget_reference_Transition(problem,interpretation,var_t3,var_virtual2);
8233 find mustInstanceOfVertex_class(problem,interpretation,var_virtual2);
8234 var_virtual2 == var_s;
8235 neg find mayEquivalent(problem, interpretation, var_t1, var_t2);
8236 neg find mayEquivalent(problem, interpretation, var_t2, var_t3);
8237 neg find mayEquivalent(problem, interpretation, var_t1, var_t3);
8238}or{
8239 find interpretation(problem,interpretation);
8240 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
8241 // s is exported
8242 find mustInstanceOfTransition_class(problem,interpretation,var_t1);
8243 find mustInRelationsource_reference_Transition(problem,interpretation,var_t1,var_virtual0);
8244 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
8245 var_virtual0 == var_s;
8246 find mustInstanceOfTransition_class(problem,interpretation,var_t2);
8247 find mustInRelationsource_reference_Transition(problem,interpretation,var_t2,var_virtual1);
8248 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
8249 var_virtual1 == var_s;
8250 find mustInstanceOfTransition_class(problem,interpretation,var_t3);
8251 find mustInRelationsource_reference_Transition(problem,interpretation,var_t3,var_virtual2);
8252 find mustInstanceOfVertex_class(problem,interpretation,var_virtual2);
8253 var_virtual2 == var_s;
8254 neg find mayEquivalent(problem, interpretation, var_t1, var_t2);
8255 neg find mayEquivalent(problem, interpretation, var_t2, var_t3);
8256 neg find mayEquivalent(problem, interpretation, var_t1, var_t3);
8257}
8258private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(
8259 problem:LogicProblem, interpretation:PartialInterpretation,
8260 var_s)
8261{
8262 find interpretation(problem,interpretation);
8263 find mayInstanceOfSynchronization_class(problem,interpretation,var_s);
8264 // s is exported
8265 find mayInstanceOfTransition_class(problem,interpretation,var_t1);
8266 find mayInRelationtarget_reference_Transition(problem,interpretation,var_t1,var_virtual0);
8267 find mayInstanceOfVertex_class(problem,interpretation,var_virtual0);
8268 find mayEquivalent(problem, interpretation, var_virtual0, var_s);
8269 find mayInstanceOfTransition_class(problem,interpretation,var_t2);
8270 find mayInRelationtarget_reference_Transition(problem,interpretation,var_t2,var_virtual1);
8271 find mayInstanceOfVertex_class(problem,interpretation,var_virtual1);
8272 find mayEquivalent(problem, interpretation, var_virtual1, var_s);
8273 find mayInstanceOfTransition_class(problem,interpretation,var_t3);
8274 find mayInRelationtarget_reference_Transition(problem,interpretation,var_t3,var_virtual2);
8275 find mayInstanceOfVertex_class(problem,interpretation,var_virtual2);
8276 find mayEquivalent(problem, interpretation, var_virtual2, var_s);
8277 var_t1 != var_t2;
8278 var_t2 != var_t3;
8279 var_t1 != var_t3;
8280}or{
8281 find interpretation(problem,interpretation);
8282 find mayInstanceOfSynchronization_class(problem,interpretation,var_s);
8283 // s is exported
8284 find mayInstanceOfTransition_class(problem,interpretation,var_t1);
8285 find mayInRelationsource_reference_Transition(problem,interpretation,var_t1,var_virtual0);
8286 find mayInstanceOfVertex_class(problem,interpretation,var_virtual0);
8287 find mayEquivalent(problem, interpretation, var_virtual0, var_s);
8288 find mayInstanceOfTransition_class(problem,interpretation,var_t2);
8289 find mayInRelationsource_reference_Transition(problem,interpretation,var_t2,var_virtual1);
8290 find mayInstanceOfVertex_class(problem,interpretation,var_virtual1);
8291 find mayEquivalent(problem, interpretation, var_virtual1, var_s);
8292 find mayInstanceOfTransition_class(problem,interpretation,var_t3);
8293 find mayInRelationsource_reference_Transition(problem,interpretation,var_t3,var_virtual2);
8294 find mayInstanceOfVertex_class(problem,interpretation,var_virtual2);
8295 find mayEquivalent(problem, interpretation, var_virtual2, var_s);
8296 var_t1 != var_t2;
8297 var_t2 != var_t3;
8298 var_t1 != var_t3;
8299}
8300private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(
8301 problem:LogicProblem, interpretation:PartialInterpretation,
8302 var_s)
8303{
8304 find interpretation(problem,interpretation);
8305 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
8306 // s is exported
8307 find mustInstanceOfTransition_class(problem,interpretation,var_t1);
8308 find mustInRelationtarget_reference_Transition(problem,interpretation,var_t1,var_virtual0);
8309 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
8310 var_virtual0 == var_s;
8311 find mustInstanceOfTransition_class(problem,interpretation,var_t2);
8312 find mustInRelationtarget_reference_Transition(problem,interpretation,var_t2,var_virtual1);
8313 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
8314 var_virtual1 == var_s;
8315 find mustInstanceOfTransition_class(problem,interpretation,var_t3);
8316 find mustInRelationtarget_reference_Transition(problem,interpretation,var_t3,var_virtual2);
8317 find mustInstanceOfVertex_class(problem,interpretation,var_virtual2);
8318 var_virtual2 == var_s;
8319 var_t1 != var_t2;
8320 var_t2 != var_t3;
8321 var_t1 != var_t3;
8322}or{
8323 find interpretation(problem,interpretation);
8324 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
8325 // s is exported
8326 find mustInstanceOfTransition_class(problem,interpretation,var_t1);
8327 find mustInRelationsource_reference_Transition(problem,interpretation,var_t1,var_virtual0);
8328 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
8329 var_virtual0 == var_s;
8330 find mustInstanceOfTransition_class(problem,interpretation,var_t2);
8331 find mustInRelationsource_reference_Transition(problem,interpretation,var_t2,var_virtual1);
8332 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
8333 var_virtual1 == var_s;
8334 find mustInstanceOfTransition_class(problem,interpretation,var_t3);
8335 find mustInRelationsource_reference_Transition(problem,interpretation,var_t3,var_virtual2);
8336 find mustInstanceOfVertex_class(problem,interpretation,var_virtual2);
8337 var_virtual2 == var_s;
8338 var_t1 != var_t2;
8339 var_t2 != var_t3;
8340 var_t1 != var_t3;
8341}
8342// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries twoSynch
8343private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(
8344 problem:LogicProblem, interpretation:PartialInterpretation,
8345 var_s1, var_s2)
8346{
8347 find interpretation(problem,interpretation);
8348 find mustInstanceOfSynchronization_class(problem,interpretation,var_s1);
8349 find mustInstanceOfSynchronization_class(problem,interpretation,var_s2);
8350 // s1 is exported
8351 // s2 is exported
8352 find mustInstanceOfSynchronization_class(problem,interpretation,var_s1);
8353 find mustInstanceOfSynchronization_class(problem,interpretation,var_s2);
8354 neg find mayEquivalent(problem, interpretation, var_s1, var_s2);
8355}
8356private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(
8357 problem:LogicProblem, interpretation:PartialInterpretation,
8358 var_s1, var_s2)
8359{
8360 find interpretation(problem,interpretation);
8361 find mayInstanceOfSynchronization_class(problem,interpretation,var_s1);
8362 find mayInstanceOfSynchronization_class(problem,interpretation,var_s2);
8363 // s1 is exported
8364 // s2 is exported
8365 find mayInstanceOfSynchronization_class(problem,interpretation,var_s1);
8366 find mayInstanceOfSynchronization_class(problem,interpretation,var_s2);
8367 var_s1 != var_s2;
8368}
8369private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(
8370 problem:LogicProblem, interpretation:PartialInterpretation,
8371 var_s1, var_s2)
8372{
8373 find interpretation(problem,interpretation);
8374 find mustInstanceOfSynchronization_class(problem,interpretation,var_s1);
8375 find mustInstanceOfSynchronization_class(problem,interpretation,var_s2);
8376 // s1 is exported
8377 // s2 is exported
8378 find mustInstanceOfSynchronization_class(problem,interpretation,var_s1);
8379 find mustInstanceOfSynchronization_class(problem,interpretation,var_s2);
8380 var_s1 != var_s2;
8381}
8382
8383//////////
8384// 1.4 Containment Indexer
8385//////////
8386private pattern mustContains2(source: DefinedElement, target: DefinedElement) {
8387 find mustContains4(_,_,source,target);
8388}
8389
8390private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation,
8391 source: DefinedElement, target: DefinedElement)
8392 { find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,source,target); }or
8393
8394 { find mustInRelationvertices_reference_Region(problem,interpretation,source,target); }or
8395
8396 { find mustInRelationregions_reference_CompositeElement(problem,interpretation,source,target); }
8397
8398private pattern mustTransitiveContains(source,target) {
8399 find mustContains2+(source,target);
8400}
8401
8402//////////
8403// 2. Invalidation Indexers
8404//////////
8405// 2.1 Invalidated by WF Queries
8406//////////
8407pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(problem:LogicProblem, interpretation:PartialInterpretation,
8408 var_r1)
8409{
8410 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(problem,interpretation,var_r1);
8411}
8412pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(problem:LogicProblem, interpretation:PartialInterpretation,
8413 var_r)
8414{
8415 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(problem,interpretation,var_r);
8416}
8417pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(problem:LogicProblem, interpretation:PartialInterpretation,
8418 var_t, var_e)
8419{
8420 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(problem,interpretation,var_t,var_e);
8421}
8422pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(problem:LogicProblem, interpretation:PartialInterpretation,
8423 var_e)
8424{
8425 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(problem,interpretation,var_e);
8426}
8427pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(problem:LogicProblem, interpretation:PartialInterpretation,
8428 var_e, var_t1, var_t2)
8429{
8430 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(problem,interpretation,var_e,var_t1,var_t2);
8431}
8432pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(problem:LogicProblem, interpretation:PartialInterpretation,
8433 var_t, var_e)
8434{
8435 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(problem,interpretation,var_t,var_e);
8436}
8437pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(problem:LogicProblem, interpretation:PartialInterpretation,
8438 var_t, var_f)
8439{
8440 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(problem,interpretation,var_t,var_f);
8441}
8442pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(problem:LogicProblem, interpretation:PartialInterpretation,
8443 var_region)
8444{
8445 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(problem,interpretation,var_region);
8446}
8447pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(problem:LogicProblem, interpretation:PartialInterpretation,
8448 var_c)
8449{
8450 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(problem,interpretation,var_c);
8451}
8452pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(problem:LogicProblem, interpretation:PartialInterpretation,
8453 var_c)
8454{
8455 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(problem,interpretation,var_c);
8456}
8457pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(problem:LogicProblem, interpretation:PartialInterpretation,
8458 var_s)
8459{
8460 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(problem,interpretation,var_s);
8461}
8462pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(problem:LogicProblem, interpretation:PartialInterpretation,
8463 var_s)
8464{
8465 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(problem,interpretation,var_s);
8466}
8467pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(problem:LogicProblem, interpretation:PartialInterpretation,
8468 var_s, var_v1, var_v2)
8469{
8470 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(problem,interpretation,var_s,var_v1,var_v2);
8471}
8472pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(problem:LogicProblem, interpretation:PartialInterpretation,
8473 var_s)
8474{
8475 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(problem,interpretation,var_s);
8476}
8477pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(problem:LogicProblem, interpretation:PartialInterpretation,
8478 var_s, var_v1, var_v2)
8479{
8480 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(problem,interpretation,var_s,var_v1,var_v2);
8481}
8482pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(problem:LogicProblem, interpretation:PartialInterpretation,
8483 var_s, var_v)
8484{
8485 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(problem,interpretation,var_s,var_v);
8486}
8487pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(problem:LogicProblem, interpretation:PartialInterpretation,
8488 var_s)
8489{
8490 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(problem,interpretation,var_s);
8491}
8492pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(problem:LogicProblem, interpretation:PartialInterpretation,
8493 var_s1, var_s2)
8494{
8495 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(problem,interpretation,var_s1,var_s2);
8496}
8497
8498//////////
8499// 3. Unfinishedness Indexers
8500//////////
8501// 3.1 Unfinishedness Measured by Multiplicity
8502//////////
8503pattern unfinishedLowerMultiplicity_target_reference_Transition(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) {
8504 find interpretation(problem,interpretation);
8505 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
8506 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"target reference Transition");
8507 find mustInstanceOfTransition_class(problem,interpretation,object);
8508 numberOfExistingReferences == count find mustInRelationtarget_reference_Transition(problem,interpretation,object,_);
8509 check(numberOfExistingReferences < 1);
8510 missingMultiplicity == eval(1-numberOfExistingReferences);
8511}
8512
8513//////////
8514// 3.2 Unfinishedness Measured by WF Queries
8515//////////
8516pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(problem:LogicProblem, interpretation:PartialInterpretation,
8517 var_r1)
8518{
8519 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(problem,interpretation,var_r1);
8520}
8521pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(problem:LogicProblem, interpretation:PartialInterpretation,
8522 var_r)
8523{
8524 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(problem,interpretation,var_r);
8525}
8526pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(problem:LogicProblem, interpretation:PartialInterpretation,
8527 var_t, var_e)
8528{
8529 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(problem,interpretation,var_t,var_e);
8530}
8531pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(problem:LogicProblem, interpretation:PartialInterpretation,
8532 var_e)
8533{
8534 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(problem,interpretation,var_e);
8535}
8536pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(problem:LogicProblem, interpretation:PartialInterpretation,
8537 var_e, var_t1, var_t2)
8538{
8539 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(problem,interpretation,var_e,var_t1,var_t2);
8540}
8541pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(problem:LogicProblem, interpretation:PartialInterpretation,
8542 var_t, var_e)
8543{
8544 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(problem,interpretation,var_t,var_e);
8545}
8546pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(problem:LogicProblem, interpretation:PartialInterpretation,
8547 var_t, var_f)
8548{
8549 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(problem,interpretation,var_t,var_f);
8550}
8551pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(problem:LogicProblem, interpretation:PartialInterpretation,
8552 var_region)
8553{
8554 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(problem,interpretation,var_region);
8555}
8556pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(problem:LogicProblem, interpretation:PartialInterpretation,
8557 var_c)
8558{
8559 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(problem,interpretation,var_c);
8560}
8561pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(problem:LogicProblem, interpretation:PartialInterpretation,
8562 var_c)
8563{
8564 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(problem,interpretation,var_c);
8565}
8566pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(problem:LogicProblem, interpretation:PartialInterpretation,
8567 var_s)
8568{
8569 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(problem,interpretation,var_s);
8570}
8571pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(problem:LogicProblem, interpretation:PartialInterpretation,
8572 var_s)
8573{
8574 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(problem,interpretation,var_s);
8575}
8576pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(problem:LogicProblem, interpretation:PartialInterpretation,
8577 var_s, var_v1, var_v2)
8578{
8579 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(problem,interpretation,var_s,var_v1,var_v2);
8580}
8581pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(problem:LogicProblem, interpretation:PartialInterpretation,
8582 var_s)
8583{
8584 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(problem,interpretation,var_s);
8585}
8586pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(problem:LogicProblem, interpretation:PartialInterpretation,
8587 var_s, var_v1, var_v2)
8588{
8589 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(problem,interpretation,var_s,var_v1,var_v2);
8590}
8591pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(problem:LogicProblem, interpretation:PartialInterpretation,
8592 var_s, var_v)
8593{
8594 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(problem,interpretation,var_s,var_v);
8595}
8596pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(problem:LogicProblem, interpretation:PartialInterpretation,
8597 var_s)
8598{
8599 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(problem,interpretation,var_s);
8600}
8601pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(problem:LogicProblem, interpretation:PartialInterpretation,
8602 var_s1, var_s2)
8603{
8604 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(problem,interpretation,var_s1,var_s2);
8605}
8606
8607//////////
8608// 4. Refinement Indexers
8609//////////
8610// 4.1 Object constructors
8611//////////
8612private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation)
8613{
8614 find interpretation(problem,interpretation);
8615 find mustInstanceOfPseudostate_class(problem,interpretation,root);
8616 find mustExist(problem, interpretation, root);
8617}or{
8618 find interpretation(problem,interpretation);
8619 find mustInstanceOfVertex_class(problem,interpretation,root);
8620 find mustExist(problem, interpretation, root);
8621}or{
8622 find interpretation(problem,interpretation);
8623 find mustInstanceOfCompositeElement_class(problem,interpretation,root);
8624 find mustExist(problem, interpretation, root);
8625}or{
8626 find interpretation(problem,interpretation);
8627 find mustInstanceOfFinalState_class(problem,interpretation,root);
8628 find mustExist(problem, interpretation, root);
8629}or{
8630 find interpretation(problem,interpretation);
8631 find mustInstanceOfTransition_class(problem,interpretation,root);
8632 find mustExist(problem, interpretation, root);
8633}or{
8634 find interpretation(problem,interpretation);
8635 find mustInstanceOfRegion_class(problem,interpretation,root);
8636 find mustExist(problem, interpretation, root);
8637}or{
8638 find interpretation(problem,interpretation);
8639 find mustInstanceOfStatechart_class(problem,interpretation,root);
8640 find mustExist(problem, interpretation, root);
8641}or{
8642 find interpretation(problem,interpretation);
8643 find mustInstanceOfExit_class(problem,interpretation,root);
8644 find mustExist(problem, interpretation, root);
8645}or{
8646 find interpretation(problem,interpretation);
8647 find mustInstanceOfChoice_class(problem,interpretation,root);
8648 find mustExist(problem, interpretation, root);
8649}or{
8650 find interpretation(problem,interpretation);
8651 find mustInstanceOfRegularState_class(problem,interpretation,root);
8652 find mustExist(problem, interpretation, root);
8653}or{
8654 find interpretation(problem,interpretation);
8655 find mustInstanceOfSynchronization_class(problem,interpretation,root);
8656 find mustExist(problem, interpretation, root);
8657}or{
8658 find interpretation(problem,interpretation);
8659 find mustInstanceOfEntry_class(problem,interpretation,root);
8660 find mustExist(problem, interpretation, root);
8661}or{
8662 find interpretation(problem,interpretation);
8663 find mustInstanceOfState_class(problem,interpretation,root);
8664 find mustExist(problem, interpretation, root);
8665}or{
8666 find interpretation(problem,interpretation);
8667 find mustInstanceOfStatechart_class_DefinedPart(problem,interpretation,root);
8668 find mustExist(problem, interpretation, root);
8669}or{
8670 find interpretation(problem,interpretation);
8671 find mustInstanceOfStatechart_class_UndefinedPart(problem,interpretation,root);
8672 find mustExist(problem, interpretation, root);
8673}or{
8674 find interpretation(problem,interpretation);
8675 find mustInstanceOfCompositeElement_class_DefinedPart(problem,interpretation,root);
8676 find mustExist(problem, interpretation, root);
8677}or{
8678 find interpretation(problem,interpretation);
8679 find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,root);
8680 find mustExist(problem, interpretation, root);
8681}
8682pattern createObject_State_class_by_vertices_reference_Region(
8683 problem:LogicProblem, interpretation:PartialInterpretation,
8684 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
8685 container:DefinedElement)
8686{
8687 find interpretation(problem,interpretation);
8688 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
8689 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"State class");
8690 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
8691 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region");
8692 find mustInstanceOfRegion_class(problem,interpretation,container);
8693 find mayInstanceOfState_class(problem,interpretation,newObject);
8694 find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject);
8695 find mustExist(problem, interpretation, container);
8696 neg find mustExist(problem, interpretation, newObject);
8697}
8698pattern createObject_State_class(
8699 problem:LogicProblem, interpretation:PartialInterpretation,
8700 typeInterpretation:PartialComplexTypeInterpretation)
8701{
8702 find interpretation(problem,interpretation);
8703 neg find hasElementInContainment(problem,interpretation);
8704 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
8705 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"State class");
8706 find mayInstanceOfState_class(problem,interpretation,newObject);
8707 find mayExist(problem, interpretation, newObject);
8708 neg find mustExist(problem, interpretation, newObject);
8709}
8710pattern createObject_FinalState_class_by_vertices_reference_Region(
8711 problem:LogicProblem, interpretation:PartialInterpretation,
8712 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
8713 container:DefinedElement)
8714{
8715 find interpretation(problem,interpretation);
8716 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
8717 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FinalState class");
8718 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
8719 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region");
8720 find mustInstanceOfRegion_class(problem,interpretation,container);
8721 find mayInstanceOfFinalState_class(problem,interpretation,newObject);
8722 find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject);
8723 find mustExist(problem, interpretation, container);
8724 neg find mustExist(problem, interpretation, newObject);
8725}
8726pattern createObject_FinalState_class(
8727 problem:LogicProblem, interpretation:PartialInterpretation,
8728 typeInterpretation:PartialComplexTypeInterpretation)
8729{
8730 find interpretation(problem,interpretation);
8731 neg find hasElementInContainment(problem,interpretation);
8732 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
8733 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FinalState class");
8734 find mayInstanceOfFinalState_class(problem,interpretation,newObject);
8735 find mayExist(problem, interpretation, newObject);
8736 neg find mustExist(problem, interpretation, newObject);
8737}
8738pattern createObject_Choice_class_by_vertices_reference_Region(
8739 problem:LogicProblem, interpretation:PartialInterpretation,
8740 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
8741 container:DefinedElement)
8742{
8743 find interpretation(problem,interpretation);
8744 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
8745 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Choice class");
8746 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
8747 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region");
8748 find mustInstanceOfRegion_class(problem,interpretation,container);
8749 find mayInstanceOfChoice_class(problem,interpretation,newObject);
8750 find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject);
8751 find mustExist(problem, interpretation, container);
8752 neg find mustExist(problem, interpretation, newObject);
8753}
8754pattern createObject_Choice_class(
8755 problem:LogicProblem, interpretation:PartialInterpretation,
8756 typeInterpretation:PartialComplexTypeInterpretation)
8757{
8758 find interpretation(problem,interpretation);
8759 neg find hasElementInContainment(problem,interpretation);
8760 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
8761 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Choice class");
8762 find mayInstanceOfChoice_class(problem,interpretation,newObject);
8763 find mayExist(problem, interpretation, newObject);
8764 neg find mustExist(problem, interpretation, newObject);
8765}
8766pattern createObject_Entry_class_by_vertices_reference_Region(
8767 problem:LogicProblem, interpretation:PartialInterpretation,
8768 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
8769 container:DefinedElement)
8770{
8771 find interpretation(problem,interpretation);
8772 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
8773 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Entry class");
8774 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
8775 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region");
8776 find mustInstanceOfRegion_class(problem,interpretation,container);
8777 find mayInstanceOfEntry_class(problem,interpretation,newObject);
8778 find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject);
8779 find mustExist(problem, interpretation, container);
8780 neg find mustExist(problem, interpretation, newObject);
8781}
8782pattern createObject_Entry_class(
8783 problem:LogicProblem, interpretation:PartialInterpretation,
8784 typeInterpretation:PartialComplexTypeInterpretation)
8785{
8786 find interpretation(problem,interpretation);
8787 neg find hasElementInContainment(problem,interpretation);
8788 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
8789 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Entry class");
8790 find mayInstanceOfEntry_class(problem,interpretation,newObject);
8791 find mayExist(problem, interpretation, newObject);
8792 neg find mustExist(problem, interpretation, newObject);
8793}
8794pattern createObject_Statechart_class_UndefinedPart(
8795 problem:LogicProblem, interpretation:PartialInterpretation,
8796 typeInterpretation:PartialComplexTypeInterpretation)
8797{
8798 find interpretation(problem,interpretation);
8799 neg find hasElementInContainment(problem,interpretation);
8800 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
8801 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Statechart class UndefinedPart");
8802 find mayInstanceOfStatechart_class_UndefinedPart(problem,interpretation,newObject);
8803 find mayExist(problem, interpretation, newObject);
8804 neg find mustExist(problem, interpretation, newObject);
8805}
8806pattern createObject_Exit_class_by_vertices_reference_Region(
8807 problem:LogicProblem, interpretation:PartialInterpretation,
8808 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
8809 container:DefinedElement)
8810{
8811 find interpretation(problem,interpretation);
8812 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
8813 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Exit class");
8814 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
8815 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region");
8816 find mustInstanceOfRegion_class(problem,interpretation,container);
8817 find mayInstanceOfExit_class(problem,interpretation,newObject);
8818 find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject);
8819 find mustExist(problem, interpretation, container);
8820 neg find mustExist(problem, interpretation, newObject);
8821}
8822pattern createObject_Exit_class(
8823 problem:LogicProblem, interpretation:PartialInterpretation,
8824 typeInterpretation:PartialComplexTypeInterpretation)
8825{
8826 find interpretation(problem,interpretation);
8827 neg find hasElementInContainment(problem,interpretation);
8828 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
8829 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Exit class");
8830 find mayInstanceOfExit_class(problem,interpretation,newObject);
8831 find mayExist(problem, interpretation, newObject);
8832 neg find mustExist(problem, interpretation, newObject);
8833}
8834pattern createObject_Transition_class_by_outgoingTransitions_reference_Vertex_with_source_reference_Transition(
8835 problem:LogicProblem, interpretation:PartialInterpretation,
8836 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
8837 container:DefinedElement)
8838{
8839 find interpretation(problem,interpretation);
8840 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
8841 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Transition class");
8842 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
8843 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingTransitions reference Vertex");
8844 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
8845 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"source reference Transition");
8846 find mustInstanceOfVertex_class(problem,interpretation,container);
8847 find mayInstanceOfTransition_class(problem,interpretation,newObject);
8848 find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,container,newObject);
8849 find mustExist(problem, interpretation, container);
8850 neg find mustExist(problem, interpretation, newObject);
8851}
8852pattern createObject_Transition_class(
8853 problem:LogicProblem, interpretation:PartialInterpretation,
8854 typeInterpretation:PartialComplexTypeInterpretation)
8855{
8856 find interpretation(problem,interpretation);
8857 neg find hasElementInContainment(problem,interpretation);
8858 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
8859 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Transition class");
8860 find mayInstanceOfTransition_class(problem,interpretation,newObject);
8861 find mayExist(problem, interpretation, newObject);
8862 neg find mustExist(problem, interpretation, newObject);
8863}
8864pattern createObject_Region_class_by_regions_reference_CompositeElement(
8865 problem:LogicProblem, interpretation:PartialInterpretation,
8866 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
8867 container:DefinedElement)
8868{
8869 find interpretation(problem,interpretation);
8870 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
8871 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Region class");
8872 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
8873 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"regions reference CompositeElement");
8874 find mustInstanceOfCompositeElement_class(problem,interpretation,container);
8875 find mayInstanceOfRegion_class(problem,interpretation,newObject);
8876 find mayInRelationregions_reference_CompositeElement(problem,interpretation,container,newObject);
8877 find mustExist(problem, interpretation, container);
8878 neg find mustExist(problem, interpretation, newObject);
8879}
8880pattern createObject_Region_class(
8881 problem:LogicProblem, interpretation:PartialInterpretation,
8882 typeInterpretation:PartialComplexTypeInterpretation)
8883{
8884 find interpretation(problem,interpretation);
8885 neg find hasElementInContainment(problem,interpretation);
8886 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
8887 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Region class");
8888 find mayInstanceOfRegion_class(problem,interpretation,newObject);
8889 find mayExist(problem, interpretation, newObject);
8890 neg find mustExist(problem, interpretation, newObject);
8891}
8892pattern createObject_Synchronization_class_by_vertices_reference_Region(
8893 problem:LogicProblem, interpretation:PartialInterpretation,
8894 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
8895 container:DefinedElement)
8896{
8897 find interpretation(problem,interpretation);
8898 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
8899 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Synchronization class");
8900 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
8901 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region");
8902 find mustInstanceOfRegion_class(problem,interpretation,container);
8903 find mayInstanceOfSynchronization_class(problem,interpretation,newObject);
8904 find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject);
8905 find mustExist(problem, interpretation, container);
8906 neg find mustExist(problem, interpretation, newObject);
8907}
8908pattern createObject_Synchronization_class(
8909 problem:LogicProblem, interpretation:PartialInterpretation,
8910 typeInterpretation:PartialComplexTypeInterpretation)
8911{
8912 find interpretation(problem,interpretation);
8913 neg find hasElementInContainment(problem,interpretation);
8914 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
8915 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Synchronization class");
8916 find mayInstanceOfSynchronization_class(problem,interpretation,newObject);
8917 find mayExist(problem, interpretation, newObject);
8918 neg find mustExist(problem, interpretation, newObject);
8919}
8920
8921//////////
8922// 4.2 Type refinement
8923//////////
8924pattern refineTypeTo_State_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
8925 find interpretation(problem,interpretation);
8926 PartialInterpretation.newElements(interpretation,element);
8927 find mayInstanceOfState_class(problem,interpretation,element);
8928 neg find mustInstanceOfState_class(problem,interpretation,element);
8929 neg find mustInstanceOfPseudostate_class(problem,interpretation,element);
8930 neg find mustInstanceOfFinalState_class(problem,interpretation,element);
8931 neg find mustInstanceOfTransition_class(problem,interpretation,element);
8932 neg find mustInstanceOfStatechart_class(problem,interpretation,element);
8933 neg find mustInstanceOfRegion_class(problem,interpretation,element);
8934}
8935pattern refineTypeTo_FinalState_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
8936 find interpretation(problem,interpretation);
8937 PartialInterpretation.newElements(interpretation,element);
8938 find mayInstanceOfFinalState_class(problem,interpretation,element);
8939 neg find mustInstanceOfPseudostate_class(problem,interpretation,element);
8940 neg find mustInstanceOfFinalState_class(problem,interpretation,element);
8941 neg find mustInstanceOfTransition_class(problem,interpretation,element);
8942 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
8943 neg find mustInstanceOfRegion_class(problem,interpretation,element);
8944}
8945pattern refineTypeTo_Choice_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
8946 find interpretation(problem,interpretation);
8947 PartialInterpretation.newElements(interpretation,element);
8948 find mayInstanceOfChoice_class(problem,interpretation,element);
8949 neg find mustInstanceOfChoice_class(problem,interpretation,element);
8950 neg find mustInstanceOfEntry_class(problem,interpretation,element);
8951 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
8952 neg find mustInstanceOfExit_class(problem,interpretation,element);
8953 neg find mustInstanceOfTransition_class(problem,interpretation,element);
8954 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
8955 neg find mustInstanceOfRegion_class(problem,interpretation,element);
8956 neg find mustInstanceOfSynchronization_class(problem,interpretation,element);
8957}
8958pattern refineTypeTo_Entry_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
8959 find interpretation(problem,interpretation);
8960 PartialInterpretation.newElements(interpretation,element);
8961 find mayInstanceOfEntry_class(problem,interpretation,element);
8962 neg find mustInstanceOfChoice_class(problem,interpretation,element);
8963 neg find mustInstanceOfEntry_class(problem,interpretation,element);
8964 neg find mustInstanceOfExit_class(problem,interpretation,element);
8965 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
8966 neg find mustInstanceOfTransition_class(problem,interpretation,element);
8967 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
8968 neg find mustInstanceOfSynchronization_class(problem,interpretation,element);
8969 neg find mustInstanceOfRegion_class(problem,interpretation,element);
8970}
8971pattern refineTypeTo_Statechart_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
8972 find interpretation(problem,interpretation);
8973 PartialInterpretation.newElements(interpretation,element);
8974 find mayInstanceOfStatechart_class_UndefinedPart(problem,interpretation,element);
8975 neg find mustInstanceOfVertex_class(problem,interpretation,element);
8976 neg find mustInstanceOfStatechart_class_UndefinedPart(problem,interpretation,element);
8977 neg find mustInstanceOfTransition_class(problem,interpretation,element);
8978 neg find mustInstanceOfRegion_class(problem,interpretation,element);
8979}
8980pattern refineTypeTo_Exit_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
8981 find interpretation(problem,interpretation);
8982 PartialInterpretation.newElements(interpretation,element);
8983 find mayInstanceOfExit_class(problem,interpretation,element);
8984 neg find mustInstanceOfChoice_class(problem,interpretation,element);
8985 neg find mustInstanceOfEntry_class(problem,interpretation,element);
8986 neg find mustInstanceOfExit_class(problem,interpretation,element);
8987 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
8988 neg find mustInstanceOfTransition_class(problem,interpretation,element);
8989 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
8990 neg find mustInstanceOfSynchronization_class(problem,interpretation,element);
8991 neg find mustInstanceOfRegion_class(problem,interpretation,element);
8992}
8993pattern refineTypeTo_Transition_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
8994 find interpretation(problem,interpretation);
8995 PartialInterpretation.newElements(interpretation,element);
8996 find mayInstanceOfTransition_class(problem,interpretation,element);
8997 neg find mustInstanceOfVertex_class(problem,interpretation,element);
8998 neg find mustInstanceOfTransition_class(problem,interpretation,element);
8999 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
9000 neg find mustInstanceOfRegion_class(problem,interpretation,element);
9001}
9002pattern refineTypeTo_Region_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
9003 find interpretation(problem,interpretation);
9004 PartialInterpretation.newElements(interpretation,element);
9005 find mayInstanceOfRegion_class(problem,interpretation,element);
9006 neg find mustInstanceOfVertex_class(problem,interpretation,element);
9007 neg find mustInstanceOfTransition_class(problem,interpretation,element);
9008 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
9009 neg find mustInstanceOfRegion_class(problem,interpretation,element);
9010}
9011pattern refineTypeTo_Synchronization_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
9012 find interpretation(problem,interpretation);
9013 PartialInterpretation.newElements(interpretation,element);
9014 find mayInstanceOfSynchronization_class(problem,interpretation,element);
9015 neg find mustInstanceOfChoice_class(problem,interpretation,element);
9016 neg find mustInstanceOfEntry_class(problem,interpretation,element);
9017 neg find mustInstanceOfExit_class(problem,interpretation,element);
9018 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
9019 neg find mustInstanceOfTransition_class(problem,interpretation,element);
9020 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
9021 neg find mustInstanceOfSynchronization_class(problem,interpretation,element);
9022 neg find mustInstanceOfRegion_class(problem,interpretation,element);
9023}
9024
9025//////////
9026// 4.3 Relation refinement
9027//////////
9028pattern refineRelation_incomingTransitions_reference_Vertex_and_target_reference_Transition(
9029 problem:LogicProblem, interpretation:PartialInterpretation,
9030 relationIterpretation:PartialRelationInterpretation, oppositeInterpretation:PartialRelationInterpretation,
9031 from: DefinedElement, to: DefinedElement)
9032{
9033 find interpretation(problem,interpretation);
9034 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
9035 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"incomingTransitions reference Vertex");
9036 PartialInterpretation.partialrelationinterpretation(interpretation,oppositeInterpretation);
9037 PartialRelationInterpretation.interpretationOf.name(oppositeInterpretation,"target reference Transition");
9038 find mustExist(problem, interpretation, from);
9039 find mustExist(problem, interpretation, to);
9040 find mustInstanceOfVertex_class(problem,interpretation,from);
9041 find mustInstanceOfTransition_class(problem,interpretation,to);
9042 find mayInRelationincomingTransitions_reference_Vertex(problem,interpretation,from,to);
9043 neg find mustInRelationincomingTransitions_reference_Vertex(problem,interpretation,from,to);
9044}
9045import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage"
9046import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem"
9047import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language"
9048
9049//////////
9050// 0. Util
9051//////////
9052private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) {
9053 PartialInterpretation.problem(interpretation,problem);
9054}
9055
9056/////////////////////////
9057// 0.1 Existence
9058/////////////////////////
9059private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
9060 find interpretation(problem,interpretation);
9061 LogicProblem.elements(problem,element);
9062} or {
9063 find interpretation(problem,interpretation);
9064 PartialInterpretation.newElements(interpretation,element);
9065}
9066
9067private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
9068 find mustExist(problem,interpretation,element);
9069} or {
9070 find interpretation(problem,interpretation);
9071 neg find elementCloseWorld(element);
9072 PartialInterpretation.openWorldElements(interpretation,element);
9073}
9074
9075private pattern elementCloseWorld(element:DefinedElement) {
9076 PartialInterpretation.openWorldElements(i,element);
9077 PartialInterpretation.maxNewElements(i,0);
9078} or {
9079 Scope.targetTypeInterpretation(scope,interpretation);
9080 PartialTypeInterpratation.elements(interpretation,element);
9081 Scope.maxNewElements(scope,0);
9082}
9083
9084////////////////////////
9085// 0.2 Equivalence
9086////////////////////////
9087pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) {
9088 find mayExist(problem,interpretation,a);
9089 find mayExist(problem,interpretation,b);
9090 a == b;
9091}
9092
9093////////////////////////
9094// 0.3 Required Patterns by TypeIndexer
9095////////////////////////
9096private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) {
9097 find interpretation(problem,interpretation);
9098 LogicProblem.types(problem,type);
9099 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
9100 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
9101}
9102
9103private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) {
9104 find interpretation(problem,interpretation);
9105 LogicProblem.types(problem,type);
9106 TypeDefinition.elements(type,element);
9107} or {
9108 find interpretation(problem,interpretation);
9109 find typeInterpretation(problem,interpretation,type,typeInterpretation);
9110 PartialComplexTypeInterpretation.elements(typeInterpretation,element);
9111}
9112
9113private pattern isPrimitive(element: PrimitiveElement) {
9114 PrimitiveElement(element);
9115}
9116
9117//////////
9118// 1. Problem-Specific Base Indexers
9119//////////
9120// 1.1 Type Indexers
9121//////////
9122// 1.1.1 primitive Type Indexers
9123//////////
9124
9125//////////
9126// 1.1.2 domain-specific Type Indexers
9127//////////
9128/**
9129 * An element must be an instance of type "Pseudostate class".
9130 */
9131private pattern mustInstanceOfPseudostate_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
9132 Type.name(type,"Pseudostate class");
9133 find directInstanceOf(problem,interpretation,element,type);
9134}
9135private pattern scopeDisallowsNewPseudostate_class(problem:LogicProblem, interpretation:PartialInterpretation) {
9136 find interpretation(problem,interpretation);
9137 PartialInterpretation.scopes(interpretation,scope);
9138 Scope.targetTypeInterpretation(scope,typeInterpretation);
9139 Scope.maxNewElements(scope,0);
9140 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
9141 Type.name(type,"Pseudostate class");
9142}
9143
9144/**
9145 * An element may be an instance of type "Pseudostate class".
9146 */
9147private pattern mayInstanceOfPseudostate_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
9148{
9149 find interpretation(problem,interpretation);
9150 PartialInterpretation.newElements(interpretation,element);
9151 neg find mustInstanceOfEntry_class(problem,interpretation,element);
9152 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
9153 neg find mustInstanceOfSynchronization_class(problem,interpretation,element);
9154 neg find mustInstanceOfTransition_class(problem,interpretation,element);
9155 neg find mustInstanceOfChoice_class(problem,interpretation,element);
9156 neg find mustInstanceOfRegion_class(problem,interpretation,element);
9157 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
9158 neg find mustInstanceOfExit_class(problem,interpretation,element);
9159 neg find scopeDisallowsNewPseudostate_class(problem, interpretation);
9160 neg find isPrimitive(element);
9161} or {
9162 find interpretation(problem,interpretation);
9163 PartialInterpretation.openWorldElements(interpretation,element);
9164 neg find mustInstanceOfEntry_class(problem,interpretation,element);
9165 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
9166 neg find mustInstanceOfSynchronization_class(problem,interpretation,element);
9167 neg find mustInstanceOfTransition_class(problem,interpretation,element);
9168 neg find mustInstanceOfChoice_class(problem,interpretation,element);
9169 neg find mustInstanceOfRegion_class(problem,interpretation,element);
9170 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
9171 neg find mustInstanceOfExit_class(problem,interpretation,element);
9172 neg find scopeDisallowsNewPseudostate_class(problem, interpretation);
9173 neg find isPrimitive(element);
9174} or
9175{ find mustInstanceOfPseudostate_class(problem,interpretation,element); }
9176/**
9177 * An element must be an instance of type "Vertex class".
9178 */
9179private pattern mustInstanceOfVertex_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
9180 Type.name(type,"Vertex class");
9181 find directInstanceOf(problem,interpretation,element,type);
9182}
9183private pattern scopeDisallowsNewVertex_class(problem:LogicProblem, interpretation:PartialInterpretation) {
9184 find interpretation(problem,interpretation);
9185 PartialInterpretation.scopes(interpretation,scope);
9186 Scope.targetTypeInterpretation(scope,typeInterpretation);
9187 Scope.maxNewElements(scope,0);
9188 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
9189 Type.name(type,"Vertex class");
9190}
9191
9192/**
9193 * An element may be an instance of type "Vertex class".
9194 */
9195private pattern mayInstanceOfVertex_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
9196{
9197 find interpretation(problem,interpretation);
9198 PartialInterpretation.newElements(interpretation,element);
9199 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
9200 neg find mustInstanceOfTransition_class(problem,interpretation,element);
9201 neg find mustInstanceOfRegion_class(problem,interpretation,element);
9202 neg find mustInstanceOfPseudostate_class(problem,interpretation,element);
9203 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
9204 neg find scopeDisallowsNewVertex_class(problem, interpretation);
9205 neg find isPrimitive(element);
9206} or {
9207 find interpretation(problem,interpretation);
9208 PartialInterpretation.openWorldElements(interpretation,element);
9209 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
9210 neg find mustInstanceOfTransition_class(problem,interpretation,element);
9211 neg find mustInstanceOfRegion_class(problem,interpretation,element);
9212 neg find mustInstanceOfPseudostate_class(problem,interpretation,element);
9213 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
9214 neg find scopeDisallowsNewVertex_class(problem, interpretation);
9215 neg find isPrimitive(element);
9216} or
9217{ find mustInstanceOfVertex_class(problem,interpretation,element); }
9218/**
9219 * An element must be an instance of type "Region class".
9220 */
9221private pattern mustInstanceOfRegion_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
9222 Type.name(type,"Region class");
9223 find directInstanceOf(problem,interpretation,element,type);
9224}
9225private pattern scopeDisallowsNewRegion_class(problem:LogicProblem, interpretation:PartialInterpretation) {
9226 find interpretation(problem,interpretation);
9227 PartialInterpretation.scopes(interpretation,scope);
9228 Scope.targetTypeInterpretation(scope,typeInterpretation);
9229 Scope.maxNewElements(scope,0);
9230 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
9231 Type.name(type,"Region class");
9232}
9233
9234/**
9235 * An element may be an instance of type "Region class".
9236 */
9237private pattern mayInstanceOfRegion_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
9238{
9239 find interpretation(problem,interpretation);
9240 PartialInterpretation.newElements(interpretation,element);
9241 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
9242 neg find mustInstanceOfVertex_class(problem,interpretation,element);
9243 neg find mustInstanceOfTransition_class(problem,interpretation,element);
9244 neg find scopeDisallowsNewRegion_class(problem, interpretation);
9245 neg find isPrimitive(element);
9246} or {
9247 find interpretation(problem,interpretation);
9248 PartialInterpretation.openWorldElements(interpretation,element);
9249 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
9250 neg find mustInstanceOfVertex_class(problem,interpretation,element);
9251 neg find mustInstanceOfTransition_class(problem,interpretation,element);
9252 neg find scopeDisallowsNewRegion_class(problem, interpretation);
9253 neg find isPrimitive(element);
9254} or
9255{ find mustInstanceOfRegion_class(problem,interpretation,element); }
9256/**
9257 * An element must be an instance of type "Transition class".
9258 */
9259private pattern mustInstanceOfTransition_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
9260 Type.name(type,"Transition class");
9261 find directInstanceOf(problem,interpretation,element,type);
9262}
9263private pattern scopeDisallowsNewTransition_class(problem:LogicProblem, interpretation:PartialInterpretation) {
9264 find interpretation(problem,interpretation);
9265 PartialInterpretation.scopes(interpretation,scope);
9266 Scope.targetTypeInterpretation(scope,typeInterpretation);
9267 Scope.maxNewElements(scope,0);
9268 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
9269 Type.name(type,"Transition class");
9270}
9271
9272/**
9273 * An element may be an instance of type "Transition class".
9274 */
9275private pattern mayInstanceOfTransition_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
9276{
9277 find interpretation(problem,interpretation);
9278 PartialInterpretation.newElements(interpretation,element);
9279 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
9280 neg find mustInstanceOfVertex_class(problem,interpretation,element);
9281 neg find mustInstanceOfRegion_class(problem,interpretation,element);
9282 neg find scopeDisallowsNewTransition_class(problem, interpretation);
9283 neg find isPrimitive(element);
9284} or {
9285 find interpretation(problem,interpretation);
9286 PartialInterpretation.openWorldElements(interpretation,element);
9287 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
9288 neg find mustInstanceOfVertex_class(problem,interpretation,element);
9289 neg find mustInstanceOfRegion_class(problem,interpretation,element);
9290 neg find scopeDisallowsNewTransition_class(problem, interpretation);
9291 neg find isPrimitive(element);
9292} or
9293{ find mustInstanceOfTransition_class(problem,interpretation,element); }
9294/**
9295 * An element must be an instance of type "Statechart class".
9296 */
9297private pattern mustInstanceOfStatechart_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
9298 Type.name(type,"Statechart class");
9299 find directInstanceOf(problem,interpretation,element,type);
9300}
9301private pattern scopeDisallowsNewStatechart_class(problem:LogicProblem, interpretation:PartialInterpretation) {
9302 find interpretation(problem,interpretation);
9303 PartialInterpretation.scopes(interpretation,scope);
9304 Scope.targetTypeInterpretation(scope,typeInterpretation);
9305 Scope.maxNewElements(scope,0);
9306 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
9307 Type.name(type,"Statechart class");
9308}
9309
9310/**
9311 * An element may be an instance of type "Statechart class".
9312 */
9313private pattern mayInstanceOfStatechart_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
9314{
9315 find interpretation(problem,interpretation);
9316 PartialInterpretation.newElements(interpretation,element);
9317 neg find mustInstanceOfVertex_class(problem,interpretation,element);
9318 neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element);
9319 neg find mustInstanceOfTransition_class(problem,interpretation,element);
9320 neg find mustInstanceOfRegion_class(problem,interpretation,element);
9321 neg find scopeDisallowsNewStatechart_class(problem, interpretation);
9322 neg find isPrimitive(element);
9323} or {
9324 find interpretation(problem,interpretation);
9325 PartialInterpretation.openWorldElements(interpretation,element);
9326 neg find mustInstanceOfVertex_class(problem,interpretation,element);
9327 neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element);
9328 neg find mustInstanceOfTransition_class(problem,interpretation,element);
9329 neg find mustInstanceOfRegion_class(problem,interpretation,element);
9330 neg find scopeDisallowsNewStatechart_class(problem, interpretation);
9331 neg find isPrimitive(element);
9332} or
9333{ find mustInstanceOfStatechart_class(problem,interpretation,element); }
9334/**
9335 * An element must be an instance of type "Entry class".
9336 */
9337private pattern mustInstanceOfEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
9338 Type.name(type,"Entry class");
9339 find directInstanceOf(problem,interpretation,element,type);
9340}
9341private pattern scopeDisallowsNewEntry_class(problem:LogicProblem, interpretation:PartialInterpretation) {
9342 find interpretation(problem,interpretation);
9343 PartialInterpretation.scopes(interpretation,scope);
9344 Scope.targetTypeInterpretation(scope,typeInterpretation);
9345 Scope.maxNewElements(scope,0);
9346 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
9347 Type.name(type,"Entry class");
9348}
9349
9350/**
9351 * An element may be an instance of type "Entry class".
9352 */
9353private pattern mayInstanceOfEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
9354{
9355 find interpretation(problem,interpretation);
9356 PartialInterpretation.newElements(interpretation,element);
9357 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
9358 neg find mustInstanceOfSynchronization_class(problem,interpretation,element);
9359 neg find mustInstanceOfChoice_class(problem,interpretation,element);
9360 neg find mustInstanceOfTransition_class(problem,interpretation,element);
9361 neg find mustInstanceOfRegion_class(problem,interpretation,element);
9362 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
9363 neg find mustInstanceOfExit_class(problem,interpretation,element);
9364 neg find scopeDisallowsNewEntry_class(problem, interpretation);
9365 neg find isPrimitive(element);
9366} or {
9367 find interpretation(problem,interpretation);
9368 PartialInterpretation.openWorldElements(interpretation,element);
9369 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
9370 neg find mustInstanceOfSynchronization_class(problem,interpretation,element);
9371 neg find mustInstanceOfChoice_class(problem,interpretation,element);
9372 neg find mustInstanceOfTransition_class(problem,interpretation,element);
9373 neg find mustInstanceOfRegion_class(problem,interpretation,element);
9374 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
9375 neg find mustInstanceOfExit_class(problem,interpretation,element);
9376 neg find scopeDisallowsNewEntry_class(problem, interpretation);
9377 neg find isPrimitive(element);
9378} or
9379{ find mustInstanceOfEntry_class(problem,interpretation,element); }
9380/**
9381 * An element must be an instance of type "Synchronization class".
9382 */
9383private pattern mustInstanceOfSynchronization_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
9384 Type.name(type,"Synchronization class");
9385 find directInstanceOf(problem,interpretation,element,type);
9386}
9387private pattern scopeDisallowsNewSynchronization_class(problem:LogicProblem, interpretation:PartialInterpretation) {
9388 find interpretation(problem,interpretation);
9389 PartialInterpretation.scopes(interpretation,scope);
9390 Scope.targetTypeInterpretation(scope,typeInterpretation);
9391 Scope.maxNewElements(scope,0);
9392 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
9393 Type.name(type,"Synchronization class");
9394}
9395
9396/**
9397 * An element may be an instance of type "Synchronization class".
9398 */
9399private pattern mayInstanceOfSynchronization_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
9400{
9401 find interpretation(problem,interpretation);
9402 PartialInterpretation.newElements(interpretation,element);
9403 neg find mustInstanceOfEntry_class(problem,interpretation,element);
9404 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
9405 neg find mustInstanceOfChoice_class(problem,interpretation,element);
9406 neg find mustInstanceOfTransition_class(problem,interpretation,element);
9407 neg find mustInstanceOfRegion_class(problem,interpretation,element);
9408 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
9409 neg find mustInstanceOfExit_class(problem,interpretation,element);
9410 neg find scopeDisallowsNewSynchronization_class(problem, interpretation);
9411 neg find isPrimitive(element);
9412} or {
9413 find interpretation(problem,interpretation);
9414 PartialInterpretation.openWorldElements(interpretation,element);
9415 neg find mustInstanceOfEntry_class(problem,interpretation,element);
9416 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
9417 neg find mustInstanceOfChoice_class(problem,interpretation,element);
9418 neg find mustInstanceOfTransition_class(problem,interpretation,element);
9419 neg find mustInstanceOfRegion_class(problem,interpretation,element);
9420 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
9421 neg find mustInstanceOfExit_class(problem,interpretation,element);
9422 neg find scopeDisallowsNewSynchronization_class(problem, interpretation);
9423 neg find isPrimitive(element);
9424} or
9425{ find mustInstanceOfSynchronization_class(problem,interpretation,element); }
9426/**
9427 * An element must be an instance of type "State class".
9428 */
9429private pattern mustInstanceOfState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
9430 Type.name(type,"State class");
9431 find directInstanceOf(problem,interpretation,element,type);
9432}
9433private pattern scopeDisallowsNewState_class(problem:LogicProblem, interpretation:PartialInterpretation) {
9434 find interpretation(problem,interpretation);
9435 PartialInterpretation.scopes(interpretation,scope);
9436 Scope.targetTypeInterpretation(scope,typeInterpretation);
9437 Scope.maxNewElements(scope,0);
9438 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
9439 Type.name(type,"State class");
9440}
9441
9442/**
9443 * An element may be an instance of type "State class".
9444 */
9445private pattern mayInstanceOfState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
9446{
9447 find interpretation(problem,interpretation);
9448 PartialInterpretation.newElements(interpretation,element);
9449 neg find mustInstanceOfStatechart_class(problem,interpretation,element);
9450 neg find mustInstanceOfFinalState_class(problem,interpretation,element);
9451 neg find mustInstanceOfTransition_class(problem,interpretation,element);
9452 neg find mustInstanceOfRegion_class(problem,interpretation,element);
9453 neg find mustInstanceOfPseudostate_class(problem,interpretation,element);
9454 neg find scopeDisallowsNewState_class(problem, interpretation);
9455 neg find isPrimitive(element);
9456} or {
9457 find interpretation(problem,interpretation);
9458 PartialInterpretation.openWorldElements(interpretation,element);
9459 neg find mustInstanceOfStatechart_class(problem,interpretation,element);
9460 neg find mustInstanceOfFinalState_class(problem,interpretation,element);
9461 neg find mustInstanceOfTransition_class(problem,interpretation,element);
9462 neg find mustInstanceOfRegion_class(problem,interpretation,element);
9463 neg find mustInstanceOfPseudostate_class(problem,interpretation,element);
9464 neg find scopeDisallowsNewState_class(problem, interpretation);
9465 neg find isPrimitive(element);
9466} or
9467{ find mustInstanceOfState_class(problem,interpretation,element); }
9468/**
9469 * An element must be an instance of type "RegularState class".
9470 */
9471private pattern mustInstanceOfRegularState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
9472 Type.name(type,"RegularState class");
9473 find directInstanceOf(problem,interpretation,element,type);
9474}
9475private pattern scopeDisallowsNewRegularState_class(problem:LogicProblem, interpretation:PartialInterpretation) {
9476 find interpretation(problem,interpretation);
9477 PartialInterpretation.scopes(interpretation,scope);
9478 Scope.targetTypeInterpretation(scope,typeInterpretation);
9479 Scope.maxNewElements(scope,0);
9480 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
9481 Type.name(type,"RegularState class");
9482}
9483
9484/**
9485 * An element may be an instance of type "RegularState class".
9486 */
9487private pattern mayInstanceOfRegularState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
9488{
9489 find interpretation(problem,interpretation);
9490 PartialInterpretation.newElements(interpretation,element);
9491 neg find mustInstanceOfFinalState_class(problem,interpretation,element);
9492 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
9493 neg find mustInstanceOfTransition_class(problem,interpretation,element);
9494 neg find mustInstanceOfRegion_class(problem,interpretation,element);
9495 neg find mustInstanceOfPseudostate_class(problem,interpretation,element);
9496 neg find scopeDisallowsNewRegularState_class(problem, interpretation);
9497 neg find isPrimitive(element);
9498} or {
9499 find interpretation(problem,interpretation);
9500 PartialInterpretation.openWorldElements(interpretation,element);
9501 neg find mustInstanceOfFinalState_class(problem,interpretation,element);
9502 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
9503 neg find mustInstanceOfTransition_class(problem,interpretation,element);
9504 neg find mustInstanceOfRegion_class(problem,interpretation,element);
9505 neg find mustInstanceOfPseudostate_class(problem,interpretation,element);
9506 neg find scopeDisallowsNewRegularState_class(problem, interpretation);
9507 neg find isPrimitive(element);
9508} or
9509{ find mustInstanceOfRegularState_class(problem,interpretation,element); }
9510/**
9511 * An element must be an instance of type "CompositeElement class".
9512 */
9513private pattern mustInstanceOfCompositeElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
9514 Type.name(type,"CompositeElement class");
9515 find directInstanceOf(problem,interpretation,element,type);
9516}
9517private pattern scopeDisallowsNewCompositeElement_class(problem:LogicProblem, interpretation:PartialInterpretation) {
9518 find interpretation(problem,interpretation);
9519 PartialInterpretation.scopes(interpretation,scope);
9520 Scope.targetTypeInterpretation(scope,typeInterpretation);
9521 Scope.maxNewElements(scope,0);
9522 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
9523 Type.name(type,"CompositeElement class");
9524}
9525
9526/**
9527 * An element may be an instance of type "CompositeElement class".
9528 */
9529private pattern mayInstanceOfCompositeElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
9530{
9531 find interpretation(problem,interpretation);
9532 PartialInterpretation.newElements(interpretation,element);
9533 neg find mustInstanceOfStatechart_class(problem,interpretation,element);
9534 neg find mustInstanceOfVertex_class(problem,interpretation,element);
9535 neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element);
9536 neg find mustInstanceOfTransition_class(problem,interpretation,element);
9537 neg find mustInstanceOfRegion_class(problem,interpretation,element);
9538 neg find scopeDisallowsNewCompositeElement_class(problem, interpretation);
9539 neg find isPrimitive(element);
9540} or {
9541 find interpretation(problem,interpretation);
9542 PartialInterpretation.openWorldElements(interpretation,element);
9543 neg find mustInstanceOfStatechart_class(problem,interpretation,element);
9544 neg find mustInstanceOfVertex_class(problem,interpretation,element);
9545 neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element);
9546 neg find mustInstanceOfTransition_class(problem,interpretation,element);
9547 neg find mustInstanceOfRegion_class(problem,interpretation,element);
9548 neg find scopeDisallowsNewCompositeElement_class(problem, interpretation);
9549 neg find isPrimitive(element);
9550} or
9551{ find mustInstanceOfCompositeElement_class(problem,interpretation,element); }
9552/**
9553 * An element must be an instance of type "Choice class".
9554 */
9555private pattern mustInstanceOfChoice_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
9556 Type.name(type,"Choice class");
9557 find directInstanceOf(problem,interpretation,element,type);
9558}
9559private pattern scopeDisallowsNewChoice_class(problem:LogicProblem, interpretation:PartialInterpretation) {
9560 find interpretation(problem,interpretation);
9561 PartialInterpretation.scopes(interpretation,scope);
9562 Scope.targetTypeInterpretation(scope,typeInterpretation);
9563 Scope.maxNewElements(scope,0);
9564 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
9565 Type.name(type,"Choice class");
9566}
9567
9568/**
9569 * An element may be an instance of type "Choice class".
9570 */
9571private pattern mayInstanceOfChoice_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
9572{
9573 find interpretation(problem,interpretation);
9574 PartialInterpretation.newElements(interpretation,element);
9575 neg find mustInstanceOfEntry_class(problem,interpretation,element);
9576 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
9577 neg find mustInstanceOfSynchronization_class(problem,interpretation,element);
9578 neg find mustInstanceOfTransition_class(problem,interpretation,element);
9579 neg find mustInstanceOfRegion_class(problem,interpretation,element);
9580 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
9581 neg find mustInstanceOfExit_class(problem,interpretation,element);
9582 neg find scopeDisallowsNewChoice_class(problem, interpretation);
9583 neg find isPrimitive(element);
9584} or {
9585 find interpretation(problem,interpretation);
9586 PartialInterpretation.openWorldElements(interpretation,element);
9587 neg find mustInstanceOfEntry_class(problem,interpretation,element);
9588 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
9589 neg find mustInstanceOfSynchronization_class(problem,interpretation,element);
9590 neg find mustInstanceOfTransition_class(problem,interpretation,element);
9591 neg find mustInstanceOfRegion_class(problem,interpretation,element);
9592 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
9593 neg find mustInstanceOfExit_class(problem,interpretation,element);
9594 neg find scopeDisallowsNewChoice_class(problem, interpretation);
9595 neg find isPrimitive(element);
9596} or
9597{ find mustInstanceOfChoice_class(problem,interpretation,element); }
9598/**
9599 * An element must be an instance of type "Exit class".
9600 */
9601private pattern mustInstanceOfExit_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
9602 Type.name(type,"Exit class");
9603 find directInstanceOf(problem,interpretation,element,type);
9604}
9605private pattern scopeDisallowsNewExit_class(problem:LogicProblem, interpretation:PartialInterpretation) {
9606 find interpretation(problem,interpretation);
9607 PartialInterpretation.scopes(interpretation,scope);
9608 Scope.targetTypeInterpretation(scope,typeInterpretation);
9609 Scope.maxNewElements(scope,0);
9610 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
9611 Type.name(type,"Exit class");
9612}
9613
9614/**
9615 * An element may be an instance of type "Exit class".
9616 */
9617private pattern mayInstanceOfExit_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
9618{
9619 find interpretation(problem,interpretation);
9620 PartialInterpretation.newElements(interpretation,element);
9621 neg find mustInstanceOfEntry_class(problem,interpretation,element);
9622 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
9623 neg find mustInstanceOfSynchronization_class(problem,interpretation,element);
9624 neg find mustInstanceOfTransition_class(problem,interpretation,element);
9625 neg find mustInstanceOfChoice_class(problem,interpretation,element);
9626 neg find mustInstanceOfRegion_class(problem,interpretation,element);
9627 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
9628 neg find scopeDisallowsNewExit_class(problem, interpretation);
9629 neg find isPrimitive(element);
9630} or {
9631 find interpretation(problem,interpretation);
9632 PartialInterpretation.openWorldElements(interpretation,element);
9633 neg find mustInstanceOfEntry_class(problem,interpretation,element);
9634 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
9635 neg find mustInstanceOfSynchronization_class(problem,interpretation,element);
9636 neg find mustInstanceOfTransition_class(problem,interpretation,element);
9637 neg find mustInstanceOfChoice_class(problem,interpretation,element);
9638 neg find mustInstanceOfRegion_class(problem,interpretation,element);
9639 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
9640 neg find scopeDisallowsNewExit_class(problem, interpretation);
9641 neg find isPrimitive(element);
9642} or
9643{ find mustInstanceOfExit_class(problem,interpretation,element); }
9644/**
9645 * An element must be an instance of type "FinalState class".
9646 */
9647private pattern mustInstanceOfFinalState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
9648 Type.name(type,"FinalState class");
9649 find directInstanceOf(problem,interpretation,element,type);
9650}
9651private pattern scopeDisallowsNewFinalState_class(problem:LogicProblem, interpretation:PartialInterpretation) {
9652 find interpretation(problem,interpretation);
9653 PartialInterpretation.scopes(interpretation,scope);
9654 Scope.targetTypeInterpretation(scope,typeInterpretation);
9655 Scope.maxNewElements(scope,0);
9656 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
9657 Type.name(type,"FinalState class");
9658}
9659
9660/**
9661 * An element may be an instance of type "FinalState class".
9662 */
9663private pattern mayInstanceOfFinalState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
9664{
9665 find interpretation(problem,interpretation);
9666 PartialInterpretation.newElements(interpretation,element);
9667 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
9668 neg find mustInstanceOfTransition_class(problem,interpretation,element);
9669 neg find mustInstanceOfRegion_class(problem,interpretation,element);
9670 neg find mustInstanceOfPseudostate_class(problem,interpretation,element);
9671 neg find scopeDisallowsNewFinalState_class(problem, interpretation);
9672 neg find isPrimitive(element);
9673} or {
9674 find interpretation(problem,interpretation);
9675 PartialInterpretation.openWorldElements(interpretation,element);
9676 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
9677 neg find mustInstanceOfTransition_class(problem,interpretation,element);
9678 neg find mustInstanceOfRegion_class(problem,interpretation,element);
9679 neg find mustInstanceOfPseudostate_class(problem,interpretation,element);
9680 neg find scopeDisallowsNewFinalState_class(problem, interpretation);
9681 neg find isPrimitive(element);
9682} or
9683{ find mustInstanceOfFinalState_class(problem,interpretation,element); }
9684/**
9685 * An element must be an instance of type "Statechart class DefinedPart".
9686 */
9687private pattern mustInstanceOfStatechart_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
9688 Type.name(type,"Statechart class DefinedPart");
9689 find directInstanceOf(problem,interpretation,element,type);
9690}
9691private pattern scopeDisallowsNewStatechart_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
9692 find interpretation(problem,interpretation);
9693 PartialInterpretation.scopes(interpretation,scope);
9694 Scope.targetTypeInterpretation(scope,typeInterpretation);
9695 Scope.maxNewElements(scope,0);
9696 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
9697 Type.name(type,"Statechart class DefinedPart");
9698}
9699
9700/**
9701 * An element may be an instance of type "Statechart class DefinedPart".
9702 */
9703private pattern mayInstanceOfStatechart_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
9704{ find mustInstanceOfStatechart_class_DefinedPart(problem,interpretation,element); }
9705/**
9706 * An element must be an instance of type "Statechart class UndefinedPart".
9707 */
9708private pattern mustInstanceOfStatechart_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
9709 Type.name(type,"Statechart class UndefinedPart");
9710 find directInstanceOf(problem,interpretation,element,type);
9711}
9712private pattern scopeDisallowsNewStatechart_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
9713 find interpretation(problem,interpretation);
9714 PartialInterpretation.scopes(interpretation,scope);
9715 Scope.targetTypeInterpretation(scope,typeInterpretation);
9716 Scope.maxNewElements(scope,0);
9717 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
9718 Type.name(type,"Statechart class UndefinedPart");
9719}
9720
9721/**
9722 * An element may be an instance of type "Statechart class UndefinedPart".
9723 */
9724private pattern mayInstanceOfStatechart_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
9725{
9726 find interpretation(problem,interpretation);
9727 PartialInterpretation.newElements(interpretation,element);
9728 neg find mustInstanceOfVertex_class(problem,interpretation,element);
9729 neg find mustInstanceOfTransition_class(problem,interpretation,element);
9730 neg find mustInstanceOfRegion_class(problem,interpretation,element);
9731 neg find scopeDisallowsNewStatechart_class_UndefinedPart(problem, interpretation);
9732 neg find isPrimitive(element);
9733} or {
9734 find interpretation(problem,interpretation);
9735 PartialInterpretation.openWorldElements(interpretation,element);
9736 neg find mustInstanceOfVertex_class(problem,interpretation,element);
9737 neg find mustInstanceOfTransition_class(problem,interpretation,element);
9738 neg find mustInstanceOfRegion_class(problem,interpretation,element);
9739 neg find scopeDisallowsNewStatechart_class_UndefinedPart(problem, interpretation);
9740 neg find isPrimitive(element);
9741} or
9742{ find mustInstanceOfStatechart_class_UndefinedPart(problem,interpretation,element); }
9743/**
9744 * An element must be an instance of type "CompositeElement class DefinedPart".
9745 */
9746private pattern mustInstanceOfCompositeElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
9747 Type.name(type,"CompositeElement class DefinedPart");
9748 find directInstanceOf(problem,interpretation,element,type);
9749}
9750private pattern scopeDisallowsNewCompositeElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
9751 find interpretation(problem,interpretation);
9752 PartialInterpretation.scopes(interpretation,scope);
9753 Scope.targetTypeInterpretation(scope,typeInterpretation);
9754 Scope.maxNewElements(scope,0);
9755 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
9756 Type.name(type,"CompositeElement class DefinedPart");
9757}
9758
9759/**
9760 * An element may be an instance of type "CompositeElement class DefinedPart".
9761 */
9762private pattern mayInstanceOfCompositeElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
9763{ find mustInstanceOfCompositeElement_class_DefinedPart(problem,interpretation,element); }
9764/**
9765 * An element must be an instance of type "CompositeElement class UndefinedPart".
9766 */
9767private pattern mustInstanceOfCompositeElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
9768 Type.name(type,"CompositeElement class UndefinedPart");
9769 find directInstanceOf(problem,interpretation,element,type);
9770}
9771private pattern scopeDisallowsNewCompositeElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
9772 find interpretation(problem,interpretation);
9773 PartialInterpretation.scopes(interpretation,scope);
9774 Scope.targetTypeInterpretation(scope,typeInterpretation);
9775 Scope.maxNewElements(scope,0);
9776 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
9777 Type.name(type,"CompositeElement class UndefinedPart");
9778}
9779
9780/**
9781 * An element may be an instance of type "CompositeElement class UndefinedPart".
9782 */
9783private pattern mayInstanceOfCompositeElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
9784{
9785 find interpretation(problem,interpretation);
9786 PartialInterpretation.newElements(interpretation,element);
9787 neg find mustInstanceOfStatechart_class(problem,interpretation,element);
9788 neg find mustInstanceOfVertex_class(problem,interpretation,element);
9789 neg find mustInstanceOfTransition_class(problem,interpretation,element);
9790 neg find mustInstanceOfRegion_class(problem,interpretation,element);
9791 neg find scopeDisallowsNewCompositeElement_class_UndefinedPart(problem, interpretation);
9792 neg find isPrimitive(element);
9793} or {
9794 find interpretation(problem,interpretation);
9795 PartialInterpretation.openWorldElements(interpretation,element);
9796 neg find mustInstanceOfStatechart_class(problem,interpretation,element);
9797 neg find mustInstanceOfVertex_class(problem,interpretation,element);
9798 neg find mustInstanceOfTransition_class(problem,interpretation,element);
9799 neg find mustInstanceOfRegion_class(problem,interpretation,element);
9800 neg find scopeDisallowsNewCompositeElement_class_UndefinedPart(problem, interpretation);
9801 neg find isPrimitive(element);
9802} or
9803{ find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); }
9804
9805//////////
9806// 1.2 Relation Declaration Indexers
9807//////////
9808/**
9809 * Matcher for detecting tuples t where []incomingTransitions reference Vertex(source,target)
9810 */
9811private pattern mustInRelationincomingTransitions_reference_Vertex(
9812 problem:LogicProblem, interpretation:PartialInterpretation,
9813 source: DefinedElement, target:DefinedElement)
9814{
9815 find interpretation(problem,interpretation);
9816 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
9817 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"incomingTransitions reference Vertex");
9818 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
9819 BinaryElementRelationLink.param1(link,source);
9820 BinaryElementRelationLink.param2(link,target);
9821}
9822/**
9823 * Matcher for detecting tuples t where <>incomingTransitions reference Vertex(source,target)
9824 */
9825private pattern mayInRelationincomingTransitions_reference_Vertex(
9826 problem:LogicProblem, interpretation:PartialInterpretation,
9827 source: DefinedElement, target:DefinedElement)
9828{
9829 find interpretation(problem,interpretation);
9830 // The two endpoint of the link have to exist
9831 find mayExist(problem, interpretation, source);
9832 find mayExist(problem, interpretation, target);
9833 // Type consistency
9834 find mayInstanceOfVertex_class(problem,interpretation,source);
9835 find mayInstanceOfTransition_class(problem,interpretation,target);
9836 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
9837 // the upper bound of the opposite reference multiplicity should be considered.
9838 numberOfExistingOppositeReferences == count find mustInRelationtarget_reference_Transition(problem,interpretation,target,_);
9839 check(numberOfExistingOppositeReferences < 1);
9840} or {
9841 find mustInRelationincomingTransitions_reference_Vertex(problem,interpretation,source,target);
9842}
9843/**
9844 * Matcher for detecting tuples t where []outgoingTransitions reference Vertex(source,target)
9845 */
9846private pattern mustInRelationoutgoingTransitions_reference_Vertex(
9847 problem:LogicProblem, interpretation:PartialInterpretation,
9848 source: DefinedElement, target:DefinedElement)
9849{
9850 find interpretation(problem,interpretation);
9851 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
9852 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"outgoingTransitions reference Vertex");
9853 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
9854 BinaryElementRelationLink.param1(link,source);
9855 BinaryElementRelationLink.param2(link,target);
9856}
9857/**
9858 * Matcher for detecting tuples t where <>outgoingTransitions reference Vertex(source,target)
9859 */
9860private pattern mayInRelationoutgoingTransitions_reference_Vertex(
9861 problem:LogicProblem, interpretation:PartialInterpretation,
9862 source: DefinedElement, target:DefinedElement)
9863{
9864 find interpretation(problem,interpretation);
9865 // The two endpoint of the link have to exist
9866 find mayExist(problem, interpretation, source);
9867 find mayExist(problem, interpretation, target);
9868 // Type consistency
9869 find mayInstanceOfVertex_class(problem,interpretation,source);
9870 find mayInstanceOfTransition_class(problem,interpretation,target);
9871 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
9872 // the upper bound of the opposite reference multiplicity should be considered.
9873 numberOfExistingOppositeReferences == count find mustInRelationsource_reference_Transition(problem,interpretation,target,_);
9874 check(numberOfExistingOppositeReferences < 1);
9875 // The reference is containment, then a new reference cannot be create if:
9876 // 1. Multiple parents
9877 neg find mustContains4(problem,interpretation,_,target);
9878 // 2. Circle in the containment hierarchy
9879 neg find mustTransitiveContains(source,target);
9880} or {
9881 find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,source,target);
9882}
9883/**
9884 * Matcher for detecting tuples t where []vertices reference Region(source,target)
9885 */
9886private pattern mustInRelationvertices_reference_Region(
9887 problem:LogicProblem, interpretation:PartialInterpretation,
9888 source: DefinedElement, target:DefinedElement)
9889{
9890 find interpretation(problem,interpretation);
9891 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
9892 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"vertices reference Region");
9893 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
9894 BinaryElementRelationLink.param1(link,source);
9895 BinaryElementRelationLink.param2(link,target);
9896}
9897/**
9898 * Matcher for detecting tuples t where <>vertices reference Region(source,target)
9899 */
9900private pattern mayInRelationvertices_reference_Region(
9901 problem:LogicProblem, interpretation:PartialInterpretation,
9902 source: DefinedElement, target:DefinedElement)
9903{
9904 find interpretation(problem,interpretation);
9905 // The two endpoint of the link have to exist
9906 find mayExist(problem, interpretation, source);
9907 find mayExist(problem, interpretation, target);
9908 // Type consistency
9909 find mayInstanceOfRegion_class(problem,interpretation,source);
9910 find mayInstanceOfVertex_class(problem,interpretation,target);
9911 // The reference is containment, then a new reference cannot be create if:
9912 // 1. Multiple parents
9913 neg find mustContains4(problem,interpretation,_,target);
9914 // 2. Circle in the containment hierarchy
9915 neg find mustTransitiveContains(source,target);
9916} or {
9917 find mustInRelationvertices_reference_Region(problem,interpretation,source,target);
9918}
9919/**
9920 * Matcher for detecting tuples t where []target reference Transition(source,target)
9921 */
9922private pattern mustInRelationtarget_reference_Transition(
9923 problem:LogicProblem, interpretation:PartialInterpretation,
9924 source: DefinedElement, target:DefinedElement)
9925{
9926 find interpretation(problem,interpretation);
9927 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
9928 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"target reference Transition");
9929 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
9930 BinaryElementRelationLink.param1(link,source);
9931 BinaryElementRelationLink.param2(link,target);
9932}
9933/**
9934 * Matcher for detecting tuples t where <>target reference Transition(source,target)
9935 */
9936private pattern mayInRelationtarget_reference_Transition(
9937 problem:LogicProblem, interpretation:PartialInterpretation,
9938 source: DefinedElement, target:DefinedElement)
9939{
9940 find interpretation(problem,interpretation);
9941 // The two endpoint of the link have to exist
9942 find mayExist(problem, interpretation, source);
9943 find mayExist(problem, interpretation, target);
9944 // Type consistency
9945 find mayInstanceOfTransition_class(problem,interpretation,source);
9946 find mayInstanceOfVertex_class(problem,interpretation,target);
9947 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
9948 // the upper bound of the multiplicity should be considered.
9949 numberOfExistingReferences == count find mustInRelationtarget_reference_Transition(problem,interpretation,source,_);
9950 check(numberOfExistingReferences < 1);
9951} or {
9952 find mustInRelationtarget_reference_Transition(problem,interpretation,source,target);
9953}
9954/**
9955 * Matcher for detecting tuples t where []source reference Transition(source,target)
9956 */
9957private pattern mustInRelationsource_reference_Transition(
9958 problem:LogicProblem, interpretation:PartialInterpretation,
9959 source: DefinedElement, target:DefinedElement)
9960{
9961 find interpretation(problem,interpretation);
9962 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
9963 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"source reference Transition");
9964 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
9965 BinaryElementRelationLink.param1(link,source);
9966 BinaryElementRelationLink.param2(link,target);
9967}
9968/**
9969 * Matcher for detecting tuples t where <>source reference Transition(source,target)
9970 */
9971private pattern mayInRelationsource_reference_Transition(
9972 problem:LogicProblem, interpretation:PartialInterpretation,
9973 source: DefinedElement, target:DefinedElement)
9974{
9975 find interpretation(problem,interpretation);
9976 // The two endpoint of the link have to exist
9977 find mayExist(problem, interpretation, source);
9978 find mayExist(problem, interpretation, target);
9979 // Type consistency
9980 find mayInstanceOfTransition_class(problem,interpretation,source);
9981 find mayInstanceOfVertex_class(problem,interpretation,target);
9982 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
9983 // the upper bound of the multiplicity should be considered.
9984 numberOfExistingReferences == count find mustInRelationsource_reference_Transition(problem,interpretation,source,_);
9985 check(numberOfExistingReferences < 1);
9986 // The eOpposite of the reference is containment, then a referene cannot be created if
9987 // 1. Multiple parents
9988 neg find mustContains4(problem,interpretation,source,_);
9989 // 2. Circle in the containment hierarchy
9990 neg find mustTransitiveContains(source,target);
9991} or {
9992 find mustInRelationsource_reference_Transition(problem,interpretation,source,target);
9993}
9994/**
9995 * Matcher for detecting tuples t where []regions reference CompositeElement(source,target)
9996 */
9997private pattern mustInRelationregions_reference_CompositeElement(
9998 problem:LogicProblem, interpretation:PartialInterpretation,
9999 source: DefinedElement, target:DefinedElement)
10000{
10001 find interpretation(problem,interpretation);
10002 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
10003 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"regions reference CompositeElement");
10004 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
10005 BinaryElementRelationLink.param1(link,source);
10006 BinaryElementRelationLink.param2(link,target);
10007}
10008/**
10009 * Matcher for detecting tuples t where <>regions reference CompositeElement(source,target)
10010 */
10011private pattern mayInRelationregions_reference_CompositeElement(
10012 problem:LogicProblem, interpretation:PartialInterpretation,
10013 source: DefinedElement, target:DefinedElement)
10014{
10015 find interpretation(problem,interpretation);
10016 // The two endpoint of the link have to exist
10017 find mayExist(problem, interpretation, source);
10018 find mayExist(problem, interpretation, target);
10019 // Type consistency
10020 find mayInstanceOfCompositeElement_class(problem,interpretation,source);
10021 find mayInstanceOfRegion_class(problem,interpretation,target);
10022 // The reference is containment, then a new reference cannot be create if:
10023 // 1. Multiple parents
10024 neg find mustContains4(problem,interpretation,_,target);
10025 // 2. Circle in the containment hierarchy
10026 neg find mustTransitiveContains(source,target);
10027} or {
10028 find mustInRelationregions_reference_CompositeElement(problem,interpretation,source,target);
10029}
10030
10031//////////
10032// 1.3 Relation Definition Indexers
10033//////////
10034// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries entryInRegion
10035private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(
10036 problem:LogicProblem, interpretation:PartialInterpretation,
10037 var_r1, var_e1)
10038{
10039 find interpretation(problem,interpretation);
10040 find mustInstanceOfRegion_class(problem,interpretation,var_r1);
10041 find mustInstanceOfEntry_class(problem,interpretation,var_e1);
10042 // r1 is exported
10043 // e1 is exported
10044 find mustInstanceOfRegion_class(problem,interpretation,var_r1);
10045 find mustInRelationvertices_reference_Region(problem,interpretation,var_r1,var_virtual0);
10046 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
10047 var_virtual0 == var_e1;
10048}
10049private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(
10050 problem:LogicProblem, interpretation:PartialInterpretation,
10051 var_r1, var_e1)
10052{
10053 find interpretation(problem,interpretation);
10054 find mayInstanceOfRegion_class(problem,interpretation,var_r1);
10055 find mayInstanceOfEntry_class(problem,interpretation,var_e1);
10056 // r1 is exported
10057 // e1 is exported
10058 find mayInstanceOfRegion_class(problem,interpretation,var_r1);
10059 find mayInRelationvertices_reference_Region(problem,interpretation,var_r1,var_virtual0);
10060 find mayInstanceOfVertex_class(problem,interpretation,var_virtual0);
10061 find mayEquivalent(problem, interpretation, var_virtual0, var_e1);
10062}
10063private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(
10064 problem:LogicProblem, interpretation:PartialInterpretation,
10065 var_r1, var_e1)
10066{
10067 find interpretation(problem,interpretation);
10068 find mustInstanceOfRegion_class(problem,interpretation,var_r1);
10069 find mustInstanceOfEntry_class(problem,interpretation,var_e1);
10070 // r1 is exported
10071 // e1 is exported
10072 find mustInstanceOfRegion_class(problem,interpretation,var_r1);
10073 find mustInRelationvertices_reference_Region(problem,interpretation,var_r1,var_virtual0);
10074 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
10075 var_virtual0 == var_e1;
10076}
10077// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries noEntryInRegion
10078private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(
10079 problem:LogicProblem, interpretation:PartialInterpretation,
10080 var_r1)
10081{
10082 find interpretation(problem,interpretation);
10083 find mustInstanceOfRegion_class(problem,interpretation,var_r1);
10084 // r1 is exported
10085 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r1,_var__0);
10086}
10087private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(
10088 problem:LogicProblem, interpretation:PartialInterpretation,
10089 var_r1)
10090{
10091 find interpretation(problem,interpretation);
10092 find mayInstanceOfRegion_class(problem,interpretation,var_r1);
10093 // r1 is exported
10094 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r1,_var__0);
10095}
10096private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(
10097 problem:LogicProblem, interpretation:PartialInterpretation,
10098 var_r1)
10099{
10100 find interpretation(problem,interpretation);
10101 find mustInstanceOfRegion_class(problem,interpretation,var_r1);
10102 // r1 is exported
10103 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r1,_var__0);
10104}
10105// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries multipleEntryInRegion
10106private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(
10107 problem:LogicProblem, interpretation:PartialInterpretation,
10108 var_r)
10109{
10110 find interpretation(problem,interpretation);
10111 find mustInstanceOfRegion_class(problem,interpretation,var_r);
10112 // r is exported
10113 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e1);
10114 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e2);
10115 neg find mayEquivalent(problem, interpretation, var_e1, var_e2);
10116}
10117private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(
10118 problem:LogicProblem, interpretation:PartialInterpretation,
10119 var_r)
10120{
10121 find interpretation(problem,interpretation);
10122 find mayInstanceOfRegion_class(problem,interpretation,var_r);
10123 // r is exported
10124 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e1);
10125 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e2);
10126 var_e1 != var_e2;
10127}
10128private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(
10129 problem:LogicProblem, interpretation:PartialInterpretation,
10130 var_r)
10131{
10132 find interpretation(problem,interpretation);
10133 find mustInstanceOfRegion_class(problem,interpretation,var_r);
10134 // r is exported
10135 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e1);
10136 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e2);
10137 var_e1 != var_e2;
10138}
10139// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries transition
10140private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(
10141 problem:LogicProblem, interpretation:PartialInterpretation,
10142 var_t, var_src, var_trg)
10143{
10144 find interpretation(problem,interpretation);
10145 find mustInstanceOfTransition_class(problem,interpretation,var_t);
10146 find mustInstanceOfVertex_class(problem,interpretation,var_src);
10147 find mustInstanceOfVertex_class(problem,interpretation,var_trg);
10148 // t is exported
10149 // src is exported
10150 // trg is exported
10151 find mustInstanceOfTransition_class(problem,interpretation,var_t);
10152 find mustInRelationsource_reference_Transition(problem,interpretation,var_t,var_virtual0);
10153 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
10154 var_virtual0 == var_src;
10155 find mustInstanceOfTransition_class(problem,interpretation,var_t);
10156 find mustInRelationtarget_reference_Transition(problem,interpretation,var_t,var_virtual1);
10157 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
10158 var_virtual1 == var_trg;
10159}
10160private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(
10161 problem:LogicProblem, interpretation:PartialInterpretation,
10162 var_t, var_src, var_trg)
10163{
10164 find interpretation(problem,interpretation);
10165 find mayInstanceOfTransition_class(problem,interpretation,var_t);
10166 find mayInstanceOfVertex_class(problem,interpretation,var_src);
10167 find mayInstanceOfVertex_class(problem,interpretation,var_trg);
10168 // t is exported
10169 // src is exported
10170 // trg is exported
10171 find mayInstanceOfTransition_class(problem,interpretation,var_t);
10172 find mayInRelationsource_reference_Transition(problem,interpretation,var_t,var_virtual0);
10173 find mayInstanceOfVertex_class(problem,interpretation,var_virtual0);
10174 find mayEquivalent(problem, interpretation, var_virtual0, var_src);
10175 find mayInstanceOfTransition_class(problem,interpretation,var_t);
10176 find mayInRelationtarget_reference_Transition(problem,interpretation,var_t,var_virtual1);
10177 find mayInstanceOfVertex_class(problem,interpretation,var_virtual1);
10178 find mayEquivalent(problem, interpretation, var_virtual1, var_trg);
10179}
10180private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(
10181 problem:LogicProblem, interpretation:PartialInterpretation,
10182 var_t, var_src, var_trg)
10183{
10184 find interpretation(problem,interpretation);
10185 find mustInstanceOfTransition_class(problem,interpretation,var_t);
10186 find mustInstanceOfVertex_class(problem,interpretation,var_src);
10187 find mustInstanceOfVertex_class(problem,interpretation,var_trg);
10188 // t is exported
10189 // src is exported
10190 // trg is exported
10191 find mustInstanceOfTransition_class(problem,interpretation,var_t);
10192 find mustInRelationsource_reference_Transition(problem,interpretation,var_t,var_virtual0);
10193 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
10194 var_virtual0 == var_src;
10195 find mustInstanceOfTransition_class(problem,interpretation,var_t);
10196 find mustInRelationtarget_reference_Transition(problem,interpretation,var_t,var_virtual1);
10197 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
10198 var_virtual1 == var_trg;
10199}
10200// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries incomingToEntry
10201private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(
10202 problem:LogicProblem, interpretation:PartialInterpretation,
10203 var_t, var_e)
10204{
10205 find interpretation(problem,interpretation);
10206 find mustInstanceOfTransition_class(problem,interpretation,var_t);
10207 find mustInstanceOfEntry_class(problem,interpretation,var_e);
10208 // t is exported
10209 // e is exported
10210 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t,_var__0,var_e);
10211}
10212private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(
10213 problem:LogicProblem, interpretation:PartialInterpretation,
10214 var_t, var_e)
10215{
10216 find interpretation(problem,interpretation);
10217 find mayInstanceOfTransition_class(problem,interpretation,var_t);
10218 find mayInstanceOfEntry_class(problem,interpretation,var_e);
10219 // t is exported
10220 // e is exported
10221 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t,_var__0,var_e);
10222}
10223private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(
10224 problem:LogicProblem, interpretation:PartialInterpretation,
10225 var_t, var_e)
10226{
10227 find interpretation(problem,interpretation);
10228 find mustInstanceOfTransition_class(problem,interpretation,var_t);
10229 find mustInstanceOfEntry_class(problem,interpretation,var_e);
10230 // t is exported
10231 // e is exported
10232 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t,_var__0,var_e);
10233}
10234// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries noOutgoingTransitionFromEntry
10235private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(
10236 problem:LogicProblem, interpretation:PartialInterpretation,
10237 var_e)
10238{
10239 find interpretation(problem,interpretation);
10240 find mustInstanceOfEntry_class(problem,interpretation,var_e);
10241 // e is exported
10242 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_e,_var__1);
10243}
10244private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(
10245 problem:LogicProblem, interpretation:PartialInterpretation,
10246 var_e)
10247{
10248 find interpretation(problem,interpretation);
10249 find mayInstanceOfEntry_class(problem,interpretation,var_e);
10250 // e is exported
10251 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_e,_var__1);
10252}
10253private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(
10254 problem:LogicProblem, interpretation:PartialInterpretation,
10255 var_e)
10256{
10257 find interpretation(problem,interpretation);
10258 find mustInstanceOfEntry_class(problem,interpretation,var_e);
10259 // e is exported
10260 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_e,_var__1);
10261}
10262// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries multipleTransitionFromEntry
10263private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(
10264 problem:LogicProblem, interpretation:PartialInterpretation,
10265 var_e, var_t1, var_t2)
10266{
10267 find interpretation(problem,interpretation);
10268 find mustInstanceOfEntry_class(problem,interpretation,var_e);
10269 find mustInstanceOfTransition_class(problem,interpretation,var_t1);
10270 find mustInstanceOfTransition_class(problem,interpretation,var_t2);
10271 // e is exported
10272 // t1 is exported
10273 // t2 is exported
10274 find mustInstanceOfEntry_class(problem,interpretation,var_e);
10275 find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0);
10276 find mustInstanceOfTransition_class(problem,interpretation,var_virtual0);
10277 var_virtual0 == var_t1;
10278 find mustInstanceOfEntry_class(problem,interpretation,var_e);
10279 find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual1);
10280 find mustInstanceOfTransition_class(problem,interpretation,var_virtual1);
10281 var_virtual1 == var_t2;
10282 neg find mayEquivalent(problem, interpretation, var_t1, var_t2);
10283}
10284private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(
10285 problem:LogicProblem, interpretation:PartialInterpretation,
10286 var_e, var_t1, var_t2)
10287{
10288 find interpretation(problem,interpretation);
10289 find mayInstanceOfEntry_class(problem,interpretation,var_e);
10290 find mayInstanceOfTransition_class(problem,interpretation,var_t1);
10291 find mayInstanceOfTransition_class(problem,interpretation,var_t2);
10292 // e is exported
10293 // t1 is exported
10294 // t2 is exported
10295 find mayInstanceOfEntry_class(problem,interpretation,var_e);
10296 find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0);
10297 find mayInstanceOfTransition_class(problem,interpretation,var_virtual0);
10298 find mayEquivalent(problem, interpretation, var_virtual0, var_t1);
10299 find mayInstanceOfEntry_class(problem,interpretation,var_e);
10300 find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual1);
10301 find mayInstanceOfTransition_class(problem,interpretation,var_virtual1);
10302 find mayEquivalent(problem, interpretation, var_virtual1, var_t2);
10303 var_t1 != var_t2;
10304}
10305private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(
10306 problem:LogicProblem, interpretation:PartialInterpretation,
10307 var_e, var_t1, var_t2)
10308{
10309 find interpretation(problem,interpretation);
10310 find mustInstanceOfEntry_class(problem,interpretation,var_e);
10311 find mustInstanceOfTransition_class(problem,interpretation,var_t1);
10312 find mustInstanceOfTransition_class(problem,interpretation,var_t2);
10313 // e is exported
10314 // t1 is exported
10315 // t2 is exported
10316 find mustInstanceOfEntry_class(problem,interpretation,var_e);
10317 find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0);
10318 find mustInstanceOfTransition_class(problem,interpretation,var_virtual0);
10319 var_virtual0 == var_t1;
10320 find mustInstanceOfEntry_class(problem,interpretation,var_e);
10321 find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual1);
10322 find mustInstanceOfTransition_class(problem,interpretation,var_virtual1);
10323 var_virtual1 == var_t2;
10324 var_t1 != var_t2;
10325}
10326// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries outgoingFromExit
10327private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(
10328 problem:LogicProblem, interpretation:PartialInterpretation,
10329 var_t, var_e)
10330{
10331 find interpretation(problem,interpretation);
10332 find mustInstanceOfTransition_class(problem,interpretation,var_t);
10333 find mustInstanceOfExit_class(problem,interpretation,var_e);
10334 // t is exported
10335 // e is exported
10336 find mustInstanceOfExit_class(problem,interpretation,var_e);
10337 find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0);
10338 find mustInstanceOfTransition_class(problem,interpretation,var_virtual0);
10339 var_virtual0 == var_t;
10340}
10341private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(
10342 problem:LogicProblem, interpretation:PartialInterpretation,
10343 var_t, var_e)
10344{
10345 find interpretation(problem,interpretation);
10346 find mayInstanceOfTransition_class(problem,interpretation,var_t);
10347 find mayInstanceOfExit_class(problem,interpretation,var_e);
10348 // t is exported
10349 // e is exported
10350 find mayInstanceOfExit_class(problem,interpretation,var_e);
10351 find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0);
10352 find mayInstanceOfTransition_class(problem,interpretation,var_virtual0);
10353 find mayEquivalent(problem, interpretation, var_virtual0, var_t);
10354}
10355private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(
10356 problem:LogicProblem, interpretation:PartialInterpretation,
10357 var_t, var_e)
10358{
10359 find interpretation(problem,interpretation);
10360 find mustInstanceOfTransition_class(problem,interpretation,var_t);
10361 find mustInstanceOfExit_class(problem,interpretation,var_e);
10362 // t is exported
10363 // e is exported
10364 find mustInstanceOfExit_class(problem,interpretation,var_e);
10365 find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0);
10366 find mustInstanceOfTransition_class(problem,interpretation,var_virtual0);
10367 var_virtual0 == var_t;
10368}
10369// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries outgoingFromFinal
10370private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(
10371 problem:LogicProblem, interpretation:PartialInterpretation,
10372 var_t, var_f)
10373{
10374 find interpretation(problem,interpretation);
10375 find mustInstanceOfTransition_class(problem,interpretation,var_t);
10376 find mustInstanceOfFinalState_class(problem,interpretation,var_f);
10377 // t is exported
10378 // f is exported
10379 find mustInstanceOfFinalState_class(problem,interpretation,var_f);
10380 find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_f,var_virtual0);
10381 find mustInstanceOfTransition_class(problem,interpretation,var_virtual0);
10382 var_virtual0 == var_t;
10383}
10384private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(
10385 problem:LogicProblem, interpretation:PartialInterpretation,
10386 var_t, var_f)
10387{
10388 find interpretation(problem,interpretation);
10389 find mayInstanceOfTransition_class(problem,interpretation,var_t);
10390 find mayInstanceOfFinalState_class(problem,interpretation,var_f);
10391 // t is exported
10392 // f is exported
10393 find mayInstanceOfFinalState_class(problem,interpretation,var_f);
10394 find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_f,var_virtual0);
10395 find mayInstanceOfTransition_class(problem,interpretation,var_virtual0);
10396 find mayEquivalent(problem, interpretation, var_virtual0, var_t);
10397}
10398private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(
10399 problem:LogicProblem, interpretation:PartialInterpretation,
10400 var_t, var_f)
10401{
10402 find interpretation(problem,interpretation);
10403 find mustInstanceOfTransition_class(problem,interpretation,var_t);
10404 find mustInstanceOfFinalState_class(problem,interpretation,var_f);
10405 // t is exported
10406 // f is exported
10407 find mustInstanceOfFinalState_class(problem,interpretation,var_f);
10408 find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_f,var_virtual0);
10409 find mustInstanceOfTransition_class(problem,interpretation,var_virtual0);
10410 var_virtual0 == var_t;
10411}
10412// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries noStateInRegion
10413private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(
10414 problem:LogicProblem, interpretation:PartialInterpretation,
10415 var_region)
10416{
10417 find interpretation(problem,interpretation);
10418 find mustInstanceOfRegion_class(problem,interpretation,var_region);
10419 // region is exported
10420 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion(problem,interpretation,var_region,_var__0);
10421}
10422private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(
10423 problem:LogicProblem, interpretation:PartialInterpretation,
10424 var_region)
10425{
10426 find interpretation(problem,interpretation);
10427 find mayInstanceOfRegion_class(problem,interpretation,var_region);
10428 // region is exported
10429 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion(problem,interpretation,var_region,_var__0);
10430}
10431private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(
10432 problem:LogicProblem, interpretation:PartialInterpretation,
10433 var_region)
10434{
10435 find interpretation(problem,interpretation);
10436 find mustInstanceOfRegion_class(problem,interpretation,var_region);
10437 // region is exported
10438 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion(problem,interpretation,var_region,_var__0);
10439}
10440// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries StateInRegion
10441private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion(
10442 problem:LogicProblem, interpretation:PartialInterpretation,
10443 var_region, var_state)
10444{
10445 find interpretation(problem,interpretation);
10446 find mustInstanceOfRegion_class(problem,interpretation,var_region);
10447 find mustInstanceOfState_class(problem,interpretation,var_state);
10448 // region is exported
10449 // state is exported
10450 find mustInstanceOfRegion_class(problem,interpretation,var_region);
10451 find mustInRelationvertices_reference_Region(problem,interpretation,var_region,var_virtual0);
10452 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
10453 var_virtual0 == var_state;
10454}
10455private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion(
10456 problem:LogicProblem, interpretation:PartialInterpretation,
10457 var_region, var_state)
10458{
10459 find interpretation(problem,interpretation);
10460 find mayInstanceOfRegion_class(problem,interpretation,var_region);
10461 find mayInstanceOfState_class(problem,interpretation,var_state);
10462 // region is exported
10463 // state is exported
10464 find mayInstanceOfRegion_class(problem,interpretation,var_region);
10465 find mayInRelationvertices_reference_Region(problem,interpretation,var_region,var_virtual0);
10466 find mayInstanceOfVertex_class(problem,interpretation,var_virtual0);
10467 find mayEquivalent(problem, interpretation, var_virtual0, var_state);
10468}
10469private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion(
10470 problem:LogicProblem, interpretation:PartialInterpretation,
10471 var_region, var_state)
10472{
10473 find interpretation(problem,interpretation);
10474 find mustInstanceOfRegion_class(problem,interpretation,var_region);
10475 find mustInstanceOfState_class(problem,interpretation,var_state);
10476 // region is exported
10477 // state is exported
10478 find mustInstanceOfRegion_class(problem,interpretation,var_region);
10479 find mustInRelationvertices_reference_Region(problem,interpretation,var_region,var_virtual0);
10480 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
10481 var_virtual0 == var_state;
10482}
10483// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries choiceHasNoOutgoing
10484private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(
10485 problem:LogicProblem, interpretation:PartialInterpretation,
10486 var_c)
10487{
10488 find interpretation(problem,interpretation);
10489 find mustInstanceOfChoice_class(problem,interpretation,var_c);
10490 // c is exported
10491 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_c,_var__1);
10492}
10493private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(
10494 problem:LogicProblem, interpretation:PartialInterpretation,
10495 var_c)
10496{
10497 find interpretation(problem,interpretation);
10498 find mayInstanceOfChoice_class(problem,interpretation,var_c);
10499 // c is exported
10500 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_c,_var__1);
10501}
10502private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(
10503 problem:LogicProblem, interpretation:PartialInterpretation,
10504 var_c)
10505{
10506 find interpretation(problem,interpretation);
10507 find mustInstanceOfChoice_class(problem,interpretation,var_c);
10508 // c is exported
10509 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_c,_var__1);
10510}
10511// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries choiceHasNoIncoming
10512private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(
10513 problem:LogicProblem, interpretation:PartialInterpretation,
10514 var_c)
10515{
10516 find interpretation(problem,interpretation);
10517 find mustInstanceOfChoice_class(problem,interpretation,var_c);
10518 // c is exported
10519 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_c);
10520}
10521private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(
10522 problem:LogicProblem, interpretation:PartialInterpretation,
10523 var_c)
10524{
10525 find interpretation(problem,interpretation);
10526 find mayInstanceOfChoice_class(problem,interpretation,var_c);
10527 // c is exported
10528 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_c);
10529}
10530private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(
10531 problem:LogicProblem, interpretation:PartialInterpretation,
10532 var_c)
10533{
10534 find interpretation(problem,interpretation);
10535 find mustInstanceOfChoice_class(problem,interpretation,var_c);
10536 // c is exported
10537 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_c);
10538}
10539// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries synchHasNoOutgoing
10540private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(
10541 problem:LogicProblem, interpretation:PartialInterpretation,
10542 var_s)
10543{
10544 find interpretation(problem,interpretation);
10545 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
10546 // s is exported
10547 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,_var__1);
10548}
10549private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(
10550 problem:LogicProblem, interpretation:PartialInterpretation,
10551 var_s)
10552{
10553 find interpretation(problem,interpretation);
10554 find mayInstanceOfSynchronization_class(problem,interpretation,var_s);
10555 // s is exported
10556 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,_var__1);
10557}
10558private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(
10559 problem:LogicProblem, interpretation:PartialInterpretation,
10560 var_s)
10561{
10562 find interpretation(problem,interpretation);
10563 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
10564 // s is exported
10565 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,_var__1);
10566}
10567// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries synchHasNoIncoming
10568private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(
10569 problem:LogicProblem, interpretation:PartialInterpretation,
10570 var_s)
10571{
10572 find interpretation(problem,interpretation);
10573 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
10574 // s is exported
10575 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_s);
10576}
10577private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(
10578 problem:LogicProblem, interpretation:PartialInterpretation,
10579 var_s)
10580{
10581 find interpretation(problem,interpretation);
10582 find mayInstanceOfSynchronization_class(problem,interpretation,var_s);
10583 // s is exported
10584 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_s);
10585}
10586private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(
10587 problem:LogicProblem, interpretation:PartialInterpretation,
10588 var_s)
10589{
10590 find interpretation(problem,interpretation);
10591 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
10592 // s is exported
10593 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_s);
10594}
10595// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries SynchronizedIncomingInSameRegion
10596private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(
10597 problem:LogicProblem, interpretation:PartialInterpretation,
10598 var_s, var_v1, var_v2)
10599{
10600 find interpretation(problem,interpretation);
10601 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
10602 find mustInstanceOfVertex_class(problem,interpretation,var_v1);
10603 find mustInstanceOfVertex_class(problem,interpretation,var_v2);
10604 // s is exported
10605 // v1 is exported
10606 // v2 is exported
10607 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_v1,var_s);
10608 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_v2,var_s);
10609 neg find mayEquivalent(problem, interpretation, var_t1, var_t2);
10610 find mustInstanceOfRegion_class(problem,interpretation,var_r);
10611 find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0);
10612 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
10613 var_virtual0 == var_v1;
10614 find mustInstanceOfRegion_class(problem,interpretation,var_r);
10615 find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1);
10616 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
10617 var_virtual1 == var_v2;
10618}or{
10619 find interpretation(problem,interpretation);
10620 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
10621 find mustInstanceOfVertex_class(problem,interpretation,var_v1);
10622 find mustInstanceOfVertex_class(problem,interpretation,var_v2);
10623 // s is exported
10624 // v1 is exported
10625 // v2 is exported
10626 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_s,var_v1);
10627 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_s,var_v2);
10628 neg find mayEquivalent(problem, interpretation, var_t1, var_t2);
10629 find mustInstanceOfRegion_class(problem,interpretation,var_r);
10630 find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0);
10631 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
10632 var_virtual0 == var_v1;
10633 find mustInstanceOfRegion_class(problem,interpretation,var_r);
10634 find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1);
10635 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
10636 var_virtual1 == var_v2;
10637}
10638private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(
10639 problem:LogicProblem, interpretation:PartialInterpretation,
10640 var_s, var_v1, var_v2)
10641{
10642 find interpretation(problem,interpretation);
10643 find mayInstanceOfSynchronization_class(problem,interpretation,var_s);
10644 find mayInstanceOfVertex_class(problem,interpretation,var_v1);
10645 find mayInstanceOfVertex_class(problem,interpretation,var_v2);
10646 // s is exported
10647 // v1 is exported
10648 // v2 is exported
10649 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_v1,var_s);
10650 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_v2,var_s);
10651 var_t1 != var_t2;
10652 find mayInstanceOfRegion_class(problem,interpretation,var_r);
10653 find mayInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0);
10654 find mayInstanceOfVertex_class(problem,interpretation,var_virtual0);
10655 find mayEquivalent(problem, interpretation, var_virtual0, var_v1);
10656 find mayInstanceOfRegion_class(problem,interpretation,var_r);
10657 find mayInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1);
10658 find mayInstanceOfVertex_class(problem,interpretation,var_virtual1);
10659 find mayEquivalent(problem, interpretation, var_virtual1, var_v2);
10660}or{
10661 find interpretation(problem,interpretation);
10662 find mayInstanceOfSynchronization_class(problem,interpretation,var_s);
10663 find mayInstanceOfVertex_class(problem,interpretation,var_v1);
10664 find mayInstanceOfVertex_class(problem,interpretation,var_v2);
10665 // s is exported
10666 // v1 is exported
10667 // v2 is exported
10668 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_s,var_v1);
10669 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_s,var_v2);
10670 var_t1 != var_t2;
10671 find mayInstanceOfRegion_class(problem,interpretation,var_r);
10672 find mayInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0);
10673 find mayInstanceOfVertex_class(problem,interpretation,var_virtual0);
10674 find mayEquivalent(problem, interpretation, var_virtual0, var_v1);
10675 find mayInstanceOfRegion_class(problem,interpretation,var_r);
10676 find mayInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1);
10677 find mayInstanceOfVertex_class(problem,interpretation,var_virtual1);
10678 find mayEquivalent(problem, interpretation, var_virtual1, var_v2);
10679}
10680private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(
10681 problem:LogicProblem, interpretation:PartialInterpretation,
10682 var_s, var_v1, var_v2)
10683{
10684 find interpretation(problem,interpretation);
10685 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
10686 find mustInstanceOfVertex_class(problem,interpretation,var_v1);
10687 find mustInstanceOfVertex_class(problem,interpretation,var_v2);
10688 // s is exported
10689 // v1 is exported
10690 // v2 is exported
10691 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_v1,var_s);
10692 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_v2,var_s);
10693 var_t1 != var_t2;
10694 find mustInstanceOfRegion_class(problem,interpretation,var_r);
10695 find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0);
10696 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
10697 var_virtual0 == var_v1;
10698 find mustInstanceOfRegion_class(problem,interpretation,var_r);
10699 find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1);
10700 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
10701 var_virtual1 == var_v2;
10702}or{
10703 find interpretation(problem,interpretation);
10704 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
10705 find mustInstanceOfVertex_class(problem,interpretation,var_v1);
10706 find mustInstanceOfVertex_class(problem,interpretation,var_v2);
10707 // s is exported
10708 // v1 is exported
10709 // v2 is exported
10710 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_s,var_v1);
10711 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_s,var_v2);
10712 var_t1 != var_t2;
10713 find mustInstanceOfRegion_class(problem,interpretation,var_r);
10714 find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0);
10715 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
10716 var_virtual0 == var_v1;
10717 find mustInstanceOfRegion_class(problem,interpretation,var_r);
10718 find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1);
10719 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
10720 var_virtual1 == var_v2;
10721}
10722// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries notSynchronizingStates
10723private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(
10724 problem:LogicProblem, interpretation:PartialInterpretation,
10725 var_s)
10726{
10727 find interpretation(problem,interpretation);
10728 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
10729 // s is exported
10730 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition(problem,interpretation,var_s);
10731 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition(problem,interpretation,var_s);
10732}
10733private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(
10734 problem:LogicProblem, interpretation:PartialInterpretation,
10735 var_s)
10736{
10737 find interpretation(problem,interpretation);
10738 find mayInstanceOfSynchronization_class(problem,interpretation,var_s);
10739 // s is exported
10740 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition(problem,interpretation,var_s);
10741 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition(problem,interpretation,var_s);
10742}
10743private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(
10744 problem:LogicProblem, interpretation:PartialInterpretation,
10745 var_s)
10746{
10747 find interpretation(problem,interpretation);
10748 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
10749 // s is exported
10750 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition(problem,interpretation,var_s);
10751 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition(problem,interpretation,var_s);
10752}
10753// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries hasMultipleOutgoingTrainsition
10754private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition(
10755 problem:LogicProblem, interpretation:PartialInterpretation,
10756 var_v)
10757{
10758 find interpretation(problem,interpretation);
10759 find mustInstanceOfSynchronization_class(problem,interpretation,var_v);
10760 // v is exported
10761 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_trg1);
10762 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v,var_trg2);
10763 neg find mayEquivalent(problem, interpretation, var_trg1, var_trg2);
10764}
10765private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition(
10766 problem:LogicProblem, interpretation:PartialInterpretation,
10767 var_v)
10768{
10769 find interpretation(problem,interpretation);
10770 find mayInstanceOfSynchronization_class(problem,interpretation,var_v);
10771 // v is exported
10772 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_trg1);
10773 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v,var_trg2);
10774 var_trg1 != var_trg2;
10775}
10776private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition(
10777 problem:LogicProblem, interpretation:PartialInterpretation,
10778 var_v)
10779{
10780 find interpretation(problem,interpretation);
10781 find mustInstanceOfSynchronization_class(problem,interpretation,var_v);
10782 // v is exported
10783 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_trg1);
10784 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v,var_trg2);
10785 var_trg1 != var_trg2;
10786}
10787// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries hasMultipleIncomingTrainsition
10788private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition(
10789 problem:LogicProblem, interpretation:PartialInterpretation,
10790 var_v)
10791{
10792 find interpretation(problem,interpretation);
10793 find mustInstanceOfSynchronization_class(problem,interpretation,var_v);
10794 // v is exported
10795 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_src1,var_v);
10796 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_src2,var_v);
10797 neg find mayEquivalent(problem, interpretation, var_src1, var_src2);
10798}
10799private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition(
10800 problem:LogicProblem, interpretation:PartialInterpretation,
10801 var_v)
10802{
10803 find interpretation(problem,interpretation);
10804 find mayInstanceOfSynchronization_class(problem,interpretation,var_v);
10805 // v is exported
10806 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_src1,var_v);
10807 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_src2,var_v);
10808 var_src1 != var_src2;
10809}
10810private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition(
10811 problem:LogicProblem, interpretation:PartialInterpretation,
10812 var_v)
10813{
10814 find interpretation(problem,interpretation);
10815 find mustInstanceOfSynchronization_class(problem,interpretation,var_v);
10816 // v is exported
10817 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_src1,var_v);
10818 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_src2,var_v);
10819 var_src1 != var_src2;
10820}
10821// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries SynchronizedRegionsAreNotSiblings
10822private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(
10823 problem:LogicProblem, interpretation:PartialInterpretation,
10824 var_s, var_v1, var_v2)
10825{
10826 find interpretation(problem,interpretation);
10827 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
10828 find mustInstanceOfVertex_class(problem,interpretation,var_v1);
10829 find mustInstanceOfVertex_class(problem,interpretation,var_v2);
10830 // s is exported
10831 // v1 is exported
10832 // v2 is exported
10833 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v1,var_s);
10834 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v2,var_s);
10835 find mustInstanceOfCompositeElement_class(problem,interpretation,var_r1);
10836 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0);
10837 find mustInstanceOfRegion_class(problem,interpretation,var_virtual0);
10838 find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1);
10839 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
10840 var_virtual1 == var_v1;
10841 find mustInstanceOfCompositeElement_class(problem,interpretation,var_r2);
10842 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2);
10843 find mustInstanceOfRegion_class(problem,interpretation,var_virtual2);
10844 find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3);
10845 find mustInstanceOfVertex_class(problem,interpretation,var_virtual3);
10846 var_virtual3 == var_v2;
10847 neg find mayEquivalent(problem, interpretation, var_r1, var_r2);
10848}or{
10849 find interpretation(problem,interpretation);
10850 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
10851 find mustInstanceOfVertex_class(problem,interpretation,var_v1);
10852 find mustInstanceOfVertex_class(problem,interpretation,var_v2);
10853 // s is exported
10854 // v1 is exported
10855 // v2 is exported
10856 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v1);
10857 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_s,var_v2);
10858 find mustInstanceOfCompositeElement_class(problem,interpretation,var_r1);
10859 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0);
10860 find mustInstanceOfRegion_class(problem,interpretation,var_virtual0);
10861 find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1);
10862 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
10863 var_virtual1 == var_v1;
10864 find mustInstanceOfCompositeElement_class(problem,interpretation,var_r2);
10865 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2);
10866 find mustInstanceOfRegion_class(problem,interpretation,var_virtual2);
10867 find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3);
10868 find mustInstanceOfVertex_class(problem,interpretation,var_virtual3);
10869 var_virtual3 == var_v2;
10870 neg find mayEquivalent(problem, interpretation, var_r1, var_r2);
10871}
10872private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(
10873 problem:LogicProblem, interpretation:PartialInterpretation,
10874 var_s, var_v1, var_v2)
10875{
10876 find interpretation(problem,interpretation);
10877 find mayInstanceOfSynchronization_class(problem,interpretation,var_s);
10878 find mayInstanceOfVertex_class(problem,interpretation,var_v1);
10879 find mayInstanceOfVertex_class(problem,interpretation,var_v2);
10880 // s is exported
10881 // v1 is exported
10882 // v2 is exported
10883 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v1,var_s);
10884 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v2,var_s);
10885 find mayInstanceOfCompositeElement_class(problem,interpretation,var_r1);
10886 find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0);
10887 find mayInstanceOfRegion_class(problem,interpretation,var_virtual0);
10888 find mayInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1);
10889 find mayInstanceOfVertex_class(problem,interpretation,var_virtual1);
10890 find mayEquivalent(problem, interpretation, var_virtual1, var_v1);
10891 find mayInstanceOfCompositeElement_class(problem,interpretation,var_r2);
10892 find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2);
10893 find mayInstanceOfRegion_class(problem,interpretation,var_virtual2);
10894 find mayInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3);
10895 find mayInstanceOfVertex_class(problem,interpretation,var_virtual3);
10896 find mayEquivalent(problem, interpretation, var_virtual3, var_v2);
10897 var_r1 != var_r2;
10898}or{
10899 find interpretation(problem,interpretation);
10900 find mayInstanceOfSynchronization_class(problem,interpretation,var_s);
10901 find mayInstanceOfVertex_class(problem,interpretation,var_v1);
10902 find mayInstanceOfVertex_class(problem,interpretation,var_v2);
10903 // s is exported
10904 // v1 is exported
10905 // v2 is exported
10906 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v1);
10907 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_s,var_v2);
10908 find mayInstanceOfCompositeElement_class(problem,interpretation,var_r1);
10909 find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0);
10910 find mayInstanceOfRegion_class(problem,interpretation,var_virtual0);
10911 find mayInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1);
10912 find mayInstanceOfVertex_class(problem,interpretation,var_virtual1);
10913 find mayEquivalent(problem, interpretation, var_virtual1, var_v1);
10914 find mayInstanceOfCompositeElement_class(problem,interpretation,var_r2);
10915 find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2);
10916 find mayInstanceOfRegion_class(problem,interpretation,var_virtual2);
10917 find mayInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3);
10918 find mayInstanceOfVertex_class(problem,interpretation,var_virtual3);
10919 find mayEquivalent(problem, interpretation, var_virtual3, var_v2);
10920 var_r1 != var_r2;
10921}
10922private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(
10923 problem:LogicProblem, interpretation:PartialInterpretation,
10924 var_s, var_v1, var_v2)
10925{
10926 find interpretation(problem,interpretation);
10927 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
10928 find mustInstanceOfVertex_class(problem,interpretation,var_v1);
10929 find mustInstanceOfVertex_class(problem,interpretation,var_v2);
10930 // s is exported
10931 // v1 is exported
10932 // v2 is exported
10933 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v1,var_s);
10934 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v2,var_s);
10935 find mustInstanceOfCompositeElement_class(problem,interpretation,var_r1);
10936 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0);
10937 find mustInstanceOfRegion_class(problem,interpretation,var_virtual0);
10938 find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1);
10939 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
10940 var_virtual1 == var_v1;
10941 find mustInstanceOfCompositeElement_class(problem,interpretation,var_r2);
10942 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2);
10943 find mustInstanceOfRegion_class(problem,interpretation,var_virtual2);
10944 find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3);
10945 find mustInstanceOfVertex_class(problem,interpretation,var_virtual3);
10946 var_virtual3 == var_v2;
10947 var_r1 != var_r2;
10948}or{
10949 find interpretation(problem,interpretation);
10950 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
10951 find mustInstanceOfVertex_class(problem,interpretation,var_v1);
10952 find mustInstanceOfVertex_class(problem,interpretation,var_v2);
10953 // s is exported
10954 // v1 is exported
10955 // v2 is exported
10956 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v1);
10957 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_s,var_v2);
10958 find mustInstanceOfCompositeElement_class(problem,interpretation,var_r1);
10959 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0);
10960 find mustInstanceOfRegion_class(problem,interpretation,var_virtual0);
10961 find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1);
10962 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
10963 var_virtual1 == var_v1;
10964 find mustInstanceOfCompositeElement_class(problem,interpretation,var_r2);
10965 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2);
10966 find mustInstanceOfRegion_class(problem,interpretation,var_virtual2);
10967 find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3);
10968 find mustInstanceOfVertex_class(problem,interpretation,var_virtual3);
10969 var_virtual3 == var_v2;
10970 var_r1 != var_r2;
10971}
10972// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries child
10973private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(
10974 problem:LogicProblem, interpretation:PartialInterpretation,
10975 var_parent, var_child)
10976{
10977 find interpretation(problem,interpretation);
10978 find mustInstanceOfCompositeElement_class(problem,interpretation,var_parent);
10979 find mustInstanceOfVertex_class(problem,interpretation,var_child);
10980 // parent is exported
10981 // child is exported
10982 find mustInstanceOfCompositeElement_class(problem,interpretation,var_parent);
10983 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_parent,var_virtual0);
10984 find mustInstanceOfRegion_class(problem,interpretation,var_virtual0);
10985 find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1);
10986 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
10987 var_virtual1 == var_child;
10988}
10989private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(
10990 problem:LogicProblem, interpretation:PartialInterpretation,
10991 var_parent, var_child)
10992{
10993 find interpretation(problem,interpretation);
10994 find mayInstanceOfCompositeElement_class(problem,interpretation,var_parent);
10995 find mayInstanceOfVertex_class(problem,interpretation,var_child);
10996 // parent is exported
10997 // child is exported
10998 find mayInstanceOfCompositeElement_class(problem,interpretation,var_parent);
10999 find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_parent,var_virtual0);
11000 find mayInstanceOfRegion_class(problem,interpretation,var_virtual0);
11001 find mayInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1);
11002 find mayInstanceOfVertex_class(problem,interpretation,var_virtual1);
11003 find mayEquivalent(problem, interpretation, var_virtual1, var_child);
11004}
11005private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(
11006 problem:LogicProblem, interpretation:PartialInterpretation,
11007 var_parent, var_child)
11008{
11009 find interpretation(problem,interpretation);
11010 find mustInstanceOfCompositeElement_class(problem,interpretation,var_parent);
11011 find mustInstanceOfVertex_class(problem,interpretation,var_child);
11012 // parent is exported
11013 // child is exported
11014 find mustInstanceOfCompositeElement_class(problem,interpretation,var_parent);
11015 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_parent,var_virtual0);
11016 find mustInstanceOfRegion_class(problem,interpretation,var_virtual0);
11017 find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1);
11018 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
11019 var_virtual1 == var_child;
11020}
11021// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries SynchronizedRegionDoesNotHaveMultipleRegions
11022private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(
11023 problem:LogicProblem, interpretation:PartialInterpretation,
11024 var_s, var_v)
11025{
11026 find interpretation(problem,interpretation);
11027 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
11028 find mustInstanceOfVertex_class(problem,interpretation,var_v);
11029 // s is exported
11030 // v is exported
11031 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_s);
11032 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v);
11033 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c);
11034}or{
11035 find interpretation(problem,interpretation);
11036 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
11037 find mustInstanceOfVertex_class(problem,interpretation,var_v);
11038 // s is exported
11039 // v is exported
11040 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v);
11041 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v);
11042 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c);
11043}
11044private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(
11045 problem:LogicProblem, interpretation:PartialInterpretation,
11046 var_s, var_v)
11047{
11048 find interpretation(problem,interpretation);
11049 find mayInstanceOfSynchronization_class(problem,interpretation,var_s);
11050 find mayInstanceOfVertex_class(problem,interpretation,var_v);
11051 // s is exported
11052 // v is exported
11053 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_s);
11054 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v);
11055 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c);
11056}or{
11057 find interpretation(problem,interpretation);
11058 find mayInstanceOfSynchronization_class(problem,interpretation,var_s);
11059 find mayInstanceOfVertex_class(problem,interpretation,var_v);
11060 // s is exported
11061 // v is exported
11062 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v);
11063 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v);
11064 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c);
11065}
11066private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(
11067 problem:LogicProblem, interpretation:PartialInterpretation,
11068 var_s, var_v)
11069{
11070 find interpretation(problem,interpretation);
11071 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
11072 find mustInstanceOfVertex_class(problem,interpretation,var_v);
11073 // s is exported
11074 // v is exported
11075 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_s);
11076 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v);
11077 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c);
11078}or{
11079 find interpretation(problem,interpretation);
11080 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
11081 find mustInstanceOfVertex_class(problem,interpretation,var_v);
11082 // s is exported
11083 // v is exported
11084 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v);
11085 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v);
11086 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c);
11087}
11088// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries hasMultipleRegions
11089private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(
11090 problem:LogicProblem, interpretation:PartialInterpretation,
11091 var_composite)
11092{
11093 find interpretation(problem,interpretation);
11094 find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite);
11095 // composite is exported
11096 find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite);
11097 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual0);
11098 find mustInstanceOfRegion_class(problem,interpretation,var_virtual0);
11099 var_virtual0 == var_region1;
11100 find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite);
11101 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual1);
11102 find mustInstanceOfRegion_class(problem,interpretation,var_virtual1);
11103 var_virtual1 == var_region2;
11104 neg find mayEquivalent(problem, interpretation, var_region1, var_region2);
11105}
11106private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(
11107 problem:LogicProblem, interpretation:PartialInterpretation,
11108 var_composite)
11109{
11110 find interpretation(problem,interpretation);
11111 find mayInstanceOfCompositeElement_class(problem,interpretation,var_composite);
11112 // composite is exported
11113 find mayInstanceOfCompositeElement_class(problem,interpretation,var_composite);
11114 find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual0);
11115 find mayInstanceOfRegion_class(problem,interpretation,var_virtual0);
11116 find mayEquivalent(problem, interpretation, var_virtual0, var_region1);
11117 find mayInstanceOfCompositeElement_class(problem,interpretation,var_composite);
11118 find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual1);
11119 find mayInstanceOfRegion_class(problem,interpretation,var_virtual1);
11120 find mayEquivalent(problem, interpretation, var_virtual1, var_region2);
11121 var_region1 != var_region2;
11122}
11123private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(
11124 problem:LogicProblem, interpretation:PartialInterpretation,
11125 var_composite)
11126{
11127 find interpretation(problem,interpretation);
11128 find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite);
11129 // composite is exported
11130 find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite);
11131 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual0);
11132 find mustInstanceOfRegion_class(problem,interpretation,var_virtual0);
11133 var_virtual0 == var_region1;
11134 find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite);
11135 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual1);
11136 find mustInstanceOfRegion_class(problem,interpretation,var_virtual1);
11137 var_virtual1 == var_region2;
11138 var_region1 != var_region2;
11139}
11140// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries synchThree
11141private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(
11142 problem:LogicProblem, interpretation:PartialInterpretation,
11143 var_s)
11144{
11145 find interpretation(problem,interpretation);
11146 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
11147 // s is exported
11148 find mustInstanceOfTransition_class(problem,interpretation,var_t1);
11149 find mustInRelationtarget_reference_Transition(problem,interpretation,var_t1,var_virtual0);
11150 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
11151 var_virtual0 == var_s;
11152 find mustInstanceOfTransition_class(problem,interpretation,var_t2);
11153 find mustInRelationtarget_reference_Transition(problem,interpretation,var_t2,var_virtual1);
11154 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
11155 var_virtual1 == var_s;
11156 find mustInstanceOfTransition_class(problem,interpretation,var_t3);
11157 find mustInRelationtarget_reference_Transition(problem,interpretation,var_t3,var_virtual2);
11158 find mustInstanceOfVertex_class(problem,interpretation,var_virtual2);
11159 var_virtual2 == var_s;
11160 neg find mayEquivalent(problem, interpretation, var_t1, var_t2);
11161 neg find mayEquivalent(problem, interpretation, var_t2, var_t3);
11162 neg find mayEquivalent(problem, interpretation, var_t1, var_t3);
11163}or{
11164 find interpretation(problem,interpretation);
11165 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
11166 // s is exported
11167 find mustInstanceOfTransition_class(problem,interpretation,var_t1);
11168 find mustInRelationsource_reference_Transition(problem,interpretation,var_t1,var_virtual0);
11169 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
11170 var_virtual0 == var_s;
11171 find mustInstanceOfTransition_class(problem,interpretation,var_t2);
11172 find mustInRelationsource_reference_Transition(problem,interpretation,var_t2,var_virtual1);
11173 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
11174 var_virtual1 == var_s;
11175 find mustInstanceOfTransition_class(problem,interpretation,var_t3);
11176 find mustInRelationsource_reference_Transition(problem,interpretation,var_t3,var_virtual2);
11177 find mustInstanceOfVertex_class(problem,interpretation,var_virtual2);
11178 var_virtual2 == var_s;
11179 neg find mayEquivalent(problem, interpretation, var_t1, var_t2);
11180 neg find mayEquivalent(problem, interpretation, var_t2, var_t3);
11181 neg find mayEquivalent(problem, interpretation, var_t1, var_t3);
11182}
11183private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(
11184 problem:LogicProblem, interpretation:PartialInterpretation,
11185 var_s)
11186{
11187 find interpretation(problem,interpretation);
11188 find mayInstanceOfSynchronization_class(problem,interpretation,var_s);
11189 // s is exported
11190 find mayInstanceOfTransition_class(problem,interpretation,var_t1);
11191 find mayInRelationtarget_reference_Transition(problem,interpretation,var_t1,var_virtual0);
11192 find mayInstanceOfVertex_class(problem,interpretation,var_virtual0);
11193 find mayEquivalent(problem, interpretation, var_virtual0, var_s);
11194 find mayInstanceOfTransition_class(problem,interpretation,var_t2);
11195 find mayInRelationtarget_reference_Transition(problem,interpretation,var_t2,var_virtual1);
11196 find mayInstanceOfVertex_class(problem,interpretation,var_virtual1);
11197 find mayEquivalent(problem, interpretation, var_virtual1, var_s);
11198 find mayInstanceOfTransition_class(problem,interpretation,var_t3);
11199 find mayInRelationtarget_reference_Transition(problem,interpretation,var_t3,var_virtual2);
11200 find mayInstanceOfVertex_class(problem,interpretation,var_virtual2);
11201 find mayEquivalent(problem, interpretation, var_virtual2, var_s);
11202 var_t1 != var_t2;
11203 var_t2 != var_t3;
11204 var_t1 != var_t3;
11205}or{
11206 find interpretation(problem,interpretation);
11207 find mayInstanceOfSynchronization_class(problem,interpretation,var_s);
11208 // s is exported
11209 find mayInstanceOfTransition_class(problem,interpretation,var_t1);
11210 find mayInRelationsource_reference_Transition(problem,interpretation,var_t1,var_virtual0);
11211 find mayInstanceOfVertex_class(problem,interpretation,var_virtual0);
11212 find mayEquivalent(problem, interpretation, var_virtual0, var_s);
11213 find mayInstanceOfTransition_class(problem,interpretation,var_t2);
11214 find mayInRelationsource_reference_Transition(problem,interpretation,var_t2,var_virtual1);
11215 find mayInstanceOfVertex_class(problem,interpretation,var_virtual1);
11216 find mayEquivalent(problem, interpretation, var_virtual1, var_s);
11217 find mayInstanceOfTransition_class(problem,interpretation,var_t3);
11218 find mayInRelationsource_reference_Transition(problem,interpretation,var_t3,var_virtual2);
11219 find mayInstanceOfVertex_class(problem,interpretation,var_virtual2);
11220 find mayEquivalent(problem, interpretation, var_virtual2, var_s);
11221 var_t1 != var_t2;
11222 var_t2 != var_t3;
11223 var_t1 != var_t3;
11224}
11225private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(
11226 problem:LogicProblem, interpretation:PartialInterpretation,
11227 var_s)
11228{
11229 find interpretation(problem,interpretation);
11230 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
11231 // s is exported
11232 find mustInstanceOfTransition_class(problem,interpretation,var_t1);
11233 find mustInRelationtarget_reference_Transition(problem,interpretation,var_t1,var_virtual0);
11234 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
11235 var_virtual0 == var_s;
11236 find mustInstanceOfTransition_class(problem,interpretation,var_t2);
11237 find mustInRelationtarget_reference_Transition(problem,interpretation,var_t2,var_virtual1);
11238 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
11239 var_virtual1 == var_s;
11240 find mustInstanceOfTransition_class(problem,interpretation,var_t3);
11241 find mustInRelationtarget_reference_Transition(problem,interpretation,var_t3,var_virtual2);
11242 find mustInstanceOfVertex_class(problem,interpretation,var_virtual2);
11243 var_virtual2 == var_s;
11244 var_t1 != var_t2;
11245 var_t2 != var_t3;
11246 var_t1 != var_t3;
11247}or{
11248 find interpretation(problem,interpretation);
11249 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
11250 // s is exported
11251 find mustInstanceOfTransition_class(problem,interpretation,var_t1);
11252 find mustInRelationsource_reference_Transition(problem,interpretation,var_t1,var_virtual0);
11253 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
11254 var_virtual0 == var_s;
11255 find mustInstanceOfTransition_class(problem,interpretation,var_t2);
11256 find mustInRelationsource_reference_Transition(problem,interpretation,var_t2,var_virtual1);
11257 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
11258 var_virtual1 == var_s;
11259 find mustInstanceOfTransition_class(problem,interpretation,var_t3);
11260 find mustInRelationsource_reference_Transition(problem,interpretation,var_t3,var_virtual2);
11261 find mustInstanceOfVertex_class(problem,interpretation,var_virtual2);
11262 var_virtual2 == var_s;
11263 var_t1 != var_t2;
11264 var_t2 != var_t3;
11265 var_t1 != var_t3;
11266}
11267// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries twoSynch
11268private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(
11269 problem:LogicProblem, interpretation:PartialInterpretation,
11270 var_s1, var_s2)
11271{
11272 find interpretation(problem,interpretation);
11273 find mustInstanceOfSynchronization_class(problem,interpretation,var_s1);
11274 find mustInstanceOfSynchronization_class(problem,interpretation,var_s2);
11275 // s1 is exported
11276 // s2 is exported
11277 find mustInstanceOfSynchronization_class(problem,interpretation,var_s1);
11278 find mustInstanceOfSynchronization_class(problem,interpretation,var_s2);
11279 neg find mayEquivalent(problem, interpretation, var_s1, var_s2);
11280}
11281private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(
11282 problem:LogicProblem, interpretation:PartialInterpretation,
11283 var_s1, var_s2)
11284{
11285 find interpretation(problem,interpretation);
11286 find mayInstanceOfSynchronization_class(problem,interpretation,var_s1);
11287 find mayInstanceOfSynchronization_class(problem,interpretation,var_s2);
11288 // s1 is exported
11289 // s2 is exported
11290 find mayInstanceOfSynchronization_class(problem,interpretation,var_s1);
11291 find mayInstanceOfSynchronization_class(problem,interpretation,var_s2);
11292 var_s1 != var_s2;
11293}
11294private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(
11295 problem:LogicProblem, interpretation:PartialInterpretation,
11296 var_s1, var_s2)
11297{
11298 find interpretation(problem,interpretation);
11299 find mustInstanceOfSynchronization_class(problem,interpretation,var_s1);
11300 find mustInstanceOfSynchronization_class(problem,interpretation,var_s2);
11301 // s1 is exported
11302 // s2 is exported
11303 find mustInstanceOfSynchronization_class(problem,interpretation,var_s1);
11304 find mustInstanceOfSynchronization_class(problem,interpretation,var_s2);
11305 var_s1 != var_s2;
11306}
11307
11308//////////
11309// 1.4 Containment Indexer
11310//////////
11311private pattern mustContains2(source: DefinedElement, target: DefinedElement) {
11312 find mustContains4(_,_,source,target);
11313}
11314
11315private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation,
11316 source: DefinedElement, target: DefinedElement)
11317 { find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,source,target); }or
11318
11319 { find mustInRelationvertices_reference_Region(problem,interpretation,source,target); }or
11320
11321 { find mustInRelationregions_reference_CompositeElement(problem,interpretation,source,target); }
11322
11323private pattern mustTransitiveContains(source,target) {
11324 find mustContains2+(source,target);
11325}
11326
11327//////////
11328// 2. Invalidation Indexers
11329//////////
11330// 2.1 Invalidated by WF Queries
11331//////////
11332pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(problem:LogicProblem, interpretation:PartialInterpretation,
11333 var_r1)
11334{
11335 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(problem,interpretation,var_r1);
11336}
11337pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(problem:LogicProblem, interpretation:PartialInterpretation,
11338 var_r)
11339{
11340 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(problem,interpretation,var_r);
11341}
11342pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(problem:LogicProblem, interpretation:PartialInterpretation,
11343 var_t, var_e)
11344{
11345 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(problem,interpretation,var_t,var_e);
11346}
11347pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(problem:LogicProblem, interpretation:PartialInterpretation,
11348 var_e)
11349{
11350 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(problem,interpretation,var_e);
11351}
11352pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(problem:LogicProblem, interpretation:PartialInterpretation,
11353 var_e, var_t1, var_t2)
11354{
11355 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(problem,interpretation,var_e,var_t1,var_t2);
11356}
11357pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(problem:LogicProblem, interpretation:PartialInterpretation,
11358 var_t, var_e)
11359{
11360 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(problem,interpretation,var_t,var_e);
11361}
11362pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(problem:LogicProblem, interpretation:PartialInterpretation,
11363 var_t, var_f)
11364{
11365 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(problem,interpretation,var_t,var_f);
11366}
11367pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(problem:LogicProblem, interpretation:PartialInterpretation,
11368 var_region)
11369{
11370 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(problem,interpretation,var_region);
11371}
11372pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(problem:LogicProblem, interpretation:PartialInterpretation,
11373 var_c)
11374{
11375 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(problem,interpretation,var_c);
11376}
11377pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(problem:LogicProblem, interpretation:PartialInterpretation,
11378 var_c)
11379{
11380 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(problem,interpretation,var_c);
11381}
11382pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(problem:LogicProblem, interpretation:PartialInterpretation,
11383 var_s)
11384{
11385 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(problem,interpretation,var_s);
11386}
11387pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(problem:LogicProblem, interpretation:PartialInterpretation,
11388 var_s)
11389{
11390 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(problem,interpretation,var_s);
11391}
11392pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(problem:LogicProblem, interpretation:PartialInterpretation,
11393 var_s, var_v1, var_v2)
11394{
11395 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(problem,interpretation,var_s,var_v1,var_v2);
11396}
11397pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(problem:LogicProblem, interpretation:PartialInterpretation,
11398 var_s)
11399{
11400 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(problem,interpretation,var_s);
11401}
11402pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(problem:LogicProblem, interpretation:PartialInterpretation,
11403 var_s, var_v1, var_v2)
11404{
11405 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(problem,interpretation,var_s,var_v1,var_v2);
11406}
11407pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(problem:LogicProblem, interpretation:PartialInterpretation,
11408 var_s, var_v)
11409{
11410 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(problem,interpretation,var_s,var_v);
11411}
11412pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(problem:LogicProblem, interpretation:PartialInterpretation,
11413 var_s)
11414{
11415 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(problem,interpretation,var_s);
11416}
11417pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(problem:LogicProblem, interpretation:PartialInterpretation,
11418 var_s1, var_s2)
11419{
11420 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(problem,interpretation,var_s1,var_s2);
11421}
11422
11423//////////
11424// 3. Unfinishedness Indexers
11425//////////
11426// 3.1 Unfinishedness Measured by Multiplicity
11427//////////
11428pattern unfinishedLowerMultiplicity_target_reference_Transition(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) {
11429 find interpretation(problem,interpretation);
11430 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
11431 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"target reference Transition");
11432 find mustInstanceOfTransition_class(problem,interpretation,object);
11433 numberOfExistingReferences == count find mustInRelationtarget_reference_Transition(problem,interpretation,object,_);
11434 check(numberOfExistingReferences < 1);
11435 missingMultiplicity == eval(1-numberOfExistingReferences);
11436}
11437
11438//////////
11439// 3.2 Unfinishedness Measured by WF Queries
11440//////////
11441pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(problem:LogicProblem, interpretation:PartialInterpretation,
11442 var_r1)
11443{
11444 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(problem,interpretation,var_r1);
11445}
11446pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(problem:LogicProblem, interpretation:PartialInterpretation,
11447 var_r)
11448{
11449 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(problem,interpretation,var_r);
11450}
11451pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(problem:LogicProblem, interpretation:PartialInterpretation,
11452 var_t, var_e)
11453{
11454 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(problem,interpretation,var_t,var_e);
11455}
11456pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(problem:LogicProblem, interpretation:PartialInterpretation,
11457 var_e)
11458{
11459 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(problem,interpretation,var_e);
11460}
11461pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(problem:LogicProblem, interpretation:PartialInterpretation,
11462 var_e, var_t1, var_t2)
11463{
11464 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(problem,interpretation,var_e,var_t1,var_t2);
11465}
11466pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(problem:LogicProblem, interpretation:PartialInterpretation,
11467 var_t, var_e)
11468{
11469 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(problem,interpretation,var_t,var_e);
11470}
11471pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(problem:LogicProblem, interpretation:PartialInterpretation,
11472 var_t, var_f)
11473{
11474 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(problem,interpretation,var_t,var_f);
11475}
11476pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(problem:LogicProblem, interpretation:PartialInterpretation,
11477 var_region)
11478{
11479 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(problem,interpretation,var_region);
11480}
11481pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(problem:LogicProblem, interpretation:PartialInterpretation,
11482 var_c)
11483{
11484 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(problem,interpretation,var_c);
11485}
11486pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(problem:LogicProblem, interpretation:PartialInterpretation,
11487 var_c)
11488{
11489 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(problem,interpretation,var_c);
11490}
11491pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(problem:LogicProblem, interpretation:PartialInterpretation,
11492 var_s)
11493{
11494 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(problem,interpretation,var_s);
11495}
11496pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(problem:LogicProblem, interpretation:PartialInterpretation,
11497 var_s)
11498{
11499 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(problem,interpretation,var_s);
11500}
11501pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(problem:LogicProblem, interpretation:PartialInterpretation,
11502 var_s, var_v1, var_v2)
11503{
11504 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(problem,interpretation,var_s,var_v1,var_v2);
11505}
11506pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(problem:LogicProblem, interpretation:PartialInterpretation,
11507 var_s)
11508{
11509 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(problem,interpretation,var_s);
11510}
11511pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(problem:LogicProblem, interpretation:PartialInterpretation,
11512 var_s, var_v1, var_v2)
11513{
11514 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(problem,interpretation,var_s,var_v1,var_v2);
11515}
11516pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(problem:LogicProblem, interpretation:PartialInterpretation,
11517 var_s, var_v)
11518{
11519 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(problem,interpretation,var_s,var_v);
11520}
11521pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(problem:LogicProblem, interpretation:PartialInterpretation,
11522 var_s)
11523{
11524 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(problem,interpretation,var_s);
11525}
11526pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(problem:LogicProblem, interpretation:PartialInterpretation,
11527 var_s1, var_s2)
11528{
11529 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(problem,interpretation,var_s1,var_s2);
11530}
11531
11532//////////
11533// 4. Refinement Indexers
11534//////////
11535// 4.1 Object constructors
11536//////////
11537private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation)
11538{
11539 find interpretation(problem,interpretation);
11540 find mustInstanceOfPseudostate_class(problem,interpretation,root);
11541 find mustExist(problem, interpretation, root);
11542}or{
11543 find interpretation(problem,interpretation);
11544 find mustInstanceOfVertex_class(problem,interpretation,root);
11545 find mustExist(problem, interpretation, root);
11546}or{
11547 find interpretation(problem,interpretation);
11548 find mustInstanceOfCompositeElement_class(problem,interpretation,root);
11549 find mustExist(problem, interpretation, root);
11550}or{
11551 find interpretation(problem,interpretation);
11552 find mustInstanceOfFinalState_class(problem,interpretation,root);
11553 find mustExist(problem, interpretation, root);
11554}or{
11555 find interpretation(problem,interpretation);
11556 find mustInstanceOfTransition_class(problem,interpretation,root);
11557 find mustExist(problem, interpretation, root);
11558}or{
11559 find interpretation(problem,interpretation);
11560 find mustInstanceOfRegion_class(problem,interpretation,root);
11561 find mustExist(problem, interpretation, root);
11562}or{
11563 find interpretation(problem,interpretation);
11564 find mustInstanceOfStatechart_class(problem,interpretation,root);
11565 find mustExist(problem, interpretation, root);
11566}or{
11567 find interpretation(problem,interpretation);
11568 find mustInstanceOfExit_class(problem,interpretation,root);
11569 find mustExist(problem, interpretation, root);
11570}or{
11571 find interpretation(problem,interpretation);
11572 find mustInstanceOfChoice_class(problem,interpretation,root);
11573 find mustExist(problem, interpretation, root);
11574}or{
11575 find interpretation(problem,interpretation);
11576 find mustInstanceOfRegularState_class(problem,interpretation,root);
11577 find mustExist(problem, interpretation, root);
11578}or{
11579 find interpretation(problem,interpretation);
11580 find mustInstanceOfSynchronization_class(problem,interpretation,root);
11581 find mustExist(problem, interpretation, root);
11582}or{
11583 find interpretation(problem,interpretation);
11584 find mustInstanceOfEntry_class(problem,interpretation,root);
11585 find mustExist(problem, interpretation, root);
11586}or{
11587 find interpretation(problem,interpretation);
11588 find mustInstanceOfState_class(problem,interpretation,root);
11589 find mustExist(problem, interpretation, root);
11590}or{
11591 find interpretation(problem,interpretation);
11592 find mustInstanceOfStatechart_class_DefinedPart(problem,interpretation,root);
11593 find mustExist(problem, interpretation, root);
11594}or{
11595 find interpretation(problem,interpretation);
11596 find mustInstanceOfStatechart_class_UndefinedPart(problem,interpretation,root);
11597 find mustExist(problem, interpretation, root);
11598}or{
11599 find interpretation(problem,interpretation);
11600 find mustInstanceOfCompositeElement_class_DefinedPart(problem,interpretation,root);
11601 find mustExist(problem, interpretation, root);
11602}or{
11603 find interpretation(problem,interpretation);
11604 find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,root);
11605 find mustExist(problem, interpretation, root);
11606}
11607pattern createObject_Entry_class_by_vertices_reference_Region(
11608 problem:LogicProblem, interpretation:PartialInterpretation,
11609 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
11610 container:DefinedElement)
11611{
11612 find interpretation(problem,interpretation);
11613 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
11614 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Entry class");
11615 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
11616 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region");
11617 find mustInstanceOfRegion_class(problem,interpretation,container);
11618 find mayInstanceOfEntry_class(problem,interpretation,newObject);
11619 find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject);
11620 find mustExist(problem, interpretation, container);
11621 neg find mustExist(problem, interpretation, newObject);
11622}
11623pattern createObject_Entry_class(
11624 problem:LogicProblem, interpretation:PartialInterpretation,
11625 typeInterpretation:PartialComplexTypeInterpretation)
11626{
11627 find interpretation(problem,interpretation);
11628 neg find hasElementInContainment(problem,interpretation);
11629 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
11630 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Entry class");
11631 find mayInstanceOfEntry_class(problem,interpretation,newObject);
11632 find mayExist(problem, interpretation, newObject);
11633 neg find mustExist(problem, interpretation, newObject);
11634}
11635pattern createObject_FinalState_class_by_vertices_reference_Region(
11636 problem:LogicProblem, interpretation:PartialInterpretation,
11637 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
11638 container:DefinedElement)
11639{
11640 find interpretation(problem,interpretation);
11641 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
11642 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FinalState class");
11643 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
11644 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region");
11645 find mustInstanceOfRegion_class(problem,interpretation,container);
11646 find mayInstanceOfFinalState_class(problem,interpretation,newObject);
11647 find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject);
11648 find mustExist(problem, interpretation, container);
11649 neg find mustExist(problem, interpretation, newObject);
11650}
11651pattern createObject_FinalState_class(
11652 problem:LogicProblem, interpretation:PartialInterpretation,
11653 typeInterpretation:PartialComplexTypeInterpretation)
11654{
11655 find interpretation(problem,interpretation);
11656 neg find hasElementInContainment(problem,interpretation);
11657 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
11658 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FinalState class");
11659 find mayInstanceOfFinalState_class(problem,interpretation,newObject);
11660 find mayExist(problem, interpretation, newObject);
11661 neg find mustExist(problem, interpretation, newObject);
11662}
11663pattern createObject_Synchronization_class_by_vertices_reference_Region(
11664 problem:LogicProblem, interpretation:PartialInterpretation,
11665 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
11666 container:DefinedElement)
11667{
11668 find interpretation(problem,interpretation);
11669 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
11670 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Synchronization class");
11671 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
11672 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region");
11673 find mustInstanceOfRegion_class(problem,interpretation,container);
11674 find mayInstanceOfSynchronization_class(problem,interpretation,newObject);
11675 find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject);
11676 find mustExist(problem, interpretation, container);
11677 neg find mustExist(problem, interpretation, newObject);
11678}
11679pattern createObject_Synchronization_class(
11680 problem:LogicProblem, interpretation:PartialInterpretation,
11681 typeInterpretation:PartialComplexTypeInterpretation)
11682{
11683 find interpretation(problem,interpretation);
11684 neg find hasElementInContainment(problem,interpretation);
11685 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
11686 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Synchronization class");
11687 find mayInstanceOfSynchronization_class(problem,interpretation,newObject);
11688 find mayExist(problem, interpretation, newObject);
11689 neg find mustExist(problem, interpretation, newObject);
11690}
11691pattern createObject_Transition_class_by_outgoingTransitions_reference_Vertex_with_source_reference_Transition(
11692 problem:LogicProblem, interpretation:PartialInterpretation,
11693 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
11694 container:DefinedElement)
11695{
11696 find interpretation(problem,interpretation);
11697 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
11698 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Transition class");
11699 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
11700 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingTransitions reference Vertex");
11701 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
11702 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"source reference Transition");
11703 find mustInstanceOfVertex_class(problem,interpretation,container);
11704 find mayInstanceOfTransition_class(problem,interpretation,newObject);
11705 find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,container,newObject);
11706 find mustExist(problem, interpretation, container);
11707 neg find mustExist(problem, interpretation, newObject);
11708}
11709pattern createObject_Transition_class(
11710 problem:LogicProblem, interpretation:PartialInterpretation,
11711 typeInterpretation:PartialComplexTypeInterpretation)
11712{
11713 find interpretation(problem,interpretation);
11714 neg find hasElementInContainment(problem,interpretation);
11715 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
11716 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Transition class");
11717 find mayInstanceOfTransition_class(problem,interpretation,newObject);
11718 find mayExist(problem, interpretation, newObject);
11719 neg find mustExist(problem, interpretation, newObject);
11720}
11721pattern createObject_Choice_class_by_vertices_reference_Region(
11722 problem:LogicProblem, interpretation:PartialInterpretation,
11723 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
11724 container:DefinedElement)
11725{
11726 find interpretation(problem,interpretation);
11727 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
11728 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Choice class");
11729 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
11730 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region");
11731 find mustInstanceOfRegion_class(problem,interpretation,container);
11732 find mayInstanceOfChoice_class(problem,interpretation,newObject);
11733 find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject);
11734 find mustExist(problem, interpretation, container);
11735 neg find mustExist(problem, interpretation, newObject);
11736}
11737pattern createObject_Choice_class(
11738 problem:LogicProblem, interpretation:PartialInterpretation,
11739 typeInterpretation:PartialComplexTypeInterpretation)
11740{
11741 find interpretation(problem,interpretation);
11742 neg find hasElementInContainment(problem,interpretation);
11743 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
11744 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Choice class");
11745 find mayInstanceOfChoice_class(problem,interpretation,newObject);
11746 find mayExist(problem, interpretation, newObject);
11747 neg find mustExist(problem, interpretation, newObject);
11748}
11749pattern createObject_Statechart_class_UndefinedPart(
11750 problem:LogicProblem, interpretation:PartialInterpretation,
11751 typeInterpretation:PartialComplexTypeInterpretation)
11752{
11753 find interpretation(problem,interpretation);
11754 neg find hasElementInContainment(problem,interpretation);
11755 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
11756 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Statechart class UndefinedPart");
11757 find mayInstanceOfStatechart_class_UndefinedPart(problem,interpretation,newObject);
11758 find mayExist(problem, interpretation, newObject);
11759 neg find mustExist(problem, interpretation, newObject);
11760}
11761pattern createObject_Region_class_by_regions_reference_CompositeElement(
11762 problem:LogicProblem, interpretation:PartialInterpretation,
11763 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
11764 container:DefinedElement)
11765{
11766 find interpretation(problem,interpretation);
11767 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
11768 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Region class");
11769 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
11770 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"regions reference CompositeElement");
11771 find mustInstanceOfCompositeElement_class(problem,interpretation,container);
11772 find mayInstanceOfRegion_class(problem,interpretation,newObject);
11773 find mayInRelationregions_reference_CompositeElement(problem,interpretation,container,newObject);
11774 find mustExist(problem, interpretation, container);
11775 neg find mustExist(problem, interpretation, newObject);
11776}
11777pattern createObject_Region_class(
11778 problem:LogicProblem, interpretation:PartialInterpretation,
11779 typeInterpretation:PartialComplexTypeInterpretation)
11780{
11781 find interpretation(problem,interpretation);
11782 neg find hasElementInContainment(problem,interpretation);
11783 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
11784 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Region class");
11785 find mayInstanceOfRegion_class(problem,interpretation,newObject);
11786 find mayExist(problem, interpretation, newObject);
11787 neg find mustExist(problem, interpretation, newObject);
11788}
11789pattern createObject_State_class_by_vertices_reference_Region(
11790 problem:LogicProblem, interpretation:PartialInterpretation,
11791 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
11792 container:DefinedElement)
11793{
11794 find interpretation(problem,interpretation);
11795 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
11796 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"State class");
11797 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
11798 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region");
11799 find mustInstanceOfRegion_class(problem,interpretation,container);
11800 find mayInstanceOfState_class(problem,interpretation,newObject);
11801 find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject);
11802 find mustExist(problem, interpretation, container);
11803 neg find mustExist(problem, interpretation, newObject);
11804}
11805pattern createObject_State_class(
11806 problem:LogicProblem, interpretation:PartialInterpretation,
11807 typeInterpretation:PartialComplexTypeInterpretation)
11808{
11809 find interpretation(problem,interpretation);
11810 neg find hasElementInContainment(problem,interpretation);
11811 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
11812 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"State class");
11813 find mayInstanceOfState_class(problem,interpretation,newObject);
11814 find mayExist(problem, interpretation, newObject);
11815 neg find mustExist(problem, interpretation, newObject);
11816}
11817pattern createObject_Exit_class_by_vertices_reference_Region(
11818 problem:LogicProblem, interpretation:PartialInterpretation,
11819 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
11820 container:DefinedElement)
11821{
11822 find interpretation(problem,interpretation);
11823 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
11824 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Exit class");
11825 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
11826 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region");
11827 find mustInstanceOfRegion_class(problem,interpretation,container);
11828 find mayInstanceOfExit_class(problem,interpretation,newObject);
11829 find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject);
11830 find mustExist(problem, interpretation, container);
11831 neg find mustExist(problem, interpretation, newObject);
11832}
11833pattern createObject_Exit_class(
11834 problem:LogicProblem, interpretation:PartialInterpretation,
11835 typeInterpretation:PartialComplexTypeInterpretation)
11836{
11837 find interpretation(problem,interpretation);
11838 neg find hasElementInContainment(problem,interpretation);
11839 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
11840 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Exit class");
11841 find mayInstanceOfExit_class(problem,interpretation,newObject);
11842 find mayExist(problem, interpretation, newObject);
11843 neg find mustExist(problem, interpretation, newObject);
11844}
11845
11846//////////
11847// 4.2 Type refinement
11848//////////
11849pattern refineTypeTo_Entry_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
11850 find interpretation(problem,interpretation);
11851 PartialInterpretation.newElements(interpretation,element);
11852 find mayInstanceOfEntry_class(problem,interpretation,element);
11853 neg find mustInstanceOfEntry_class(problem,interpretation,element);
11854 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
11855 neg find mustInstanceOfSynchronization_class(problem,interpretation,element);
11856 neg find mustInstanceOfChoice_class(problem,interpretation,element);
11857 neg find mustInstanceOfTransition_class(problem,interpretation,element);
11858 neg find mustInstanceOfRegion_class(problem,interpretation,element);
11859 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
11860 neg find mustInstanceOfExit_class(problem,interpretation,element);
11861}
11862pattern refineTypeTo_FinalState_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
11863 find interpretation(problem,interpretation);
11864 PartialInterpretation.newElements(interpretation,element);
11865 find mayInstanceOfFinalState_class(problem,interpretation,element);
11866 neg find mustInstanceOfFinalState_class(problem,interpretation,element);
11867 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
11868 neg find mustInstanceOfTransition_class(problem,interpretation,element);
11869 neg find mustInstanceOfRegion_class(problem,interpretation,element);
11870 neg find mustInstanceOfPseudostate_class(problem,interpretation,element);
11871}
11872pattern refineTypeTo_Synchronization_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
11873 find interpretation(problem,interpretation);
11874 PartialInterpretation.newElements(interpretation,element);
11875 find mayInstanceOfSynchronization_class(problem,interpretation,element);
11876 neg find mustInstanceOfEntry_class(problem,interpretation,element);
11877 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
11878 neg find mustInstanceOfSynchronization_class(problem,interpretation,element);
11879 neg find mustInstanceOfChoice_class(problem,interpretation,element);
11880 neg find mustInstanceOfTransition_class(problem,interpretation,element);
11881 neg find mustInstanceOfRegion_class(problem,interpretation,element);
11882 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
11883 neg find mustInstanceOfExit_class(problem,interpretation,element);
11884}
11885pattern refineTypeTo_Transition_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
11886 find interpretation(problem,interpretation);
11887 PartialInterpretation.newElements(interpretation,element);
11888 find mayInstanceOfTransition_class(problem,interpretation,element);
11889 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
11890 neg find mustInstanceOfVertex_class(problem,interpretation,element);
11891 neg find mustInstanceOfTransition_class(problem,interpretation,element);
11892 neg find mustInstanceOfRegion_class(problem,interpretation,element);
11893}
11894pattern refineTypeTo_Choice_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
11895 find interpretation(problem,interpretation);
11896 PartialInterpretation.newElements(interpretation,element);
11897 find mayInstanceOfChoice_class(problem,interpretation,element);
11898 neg find mustInstanceOfEntry_class(problem,interpretation,element);
11899 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
11900 neg find mustInstanceOfSynchronization_class(problem,interpretation,element);
11901 neg find mustInstanceOfTransition_class(problem,interpretation,element);
11902 neg find mustInstanceOfChoice_class(problem,interpretation,element);
11903 neg find mustInstanceOfRegion_class(problem,interpretation,element);
11904 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
11905 neg find mustInstanceOfExit_class(problem,interpretation,element);
11906}
11907pattern refineTypeTo_Statechart_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
11908 find interpretation(problem,interpretation);
11909 PartialInterpretation.newElements(interpretation,element);
11910 find mayInstanceOfStatechart_class_UndefinedPart(problem,interpretation,element);
11911 neg find mustInstanceOfVertex_class(problem,interpretation,element);
11912 neg find mustInstanceOfTransition_class(problem,interpretation,element);
11913 neg find mustInstanceOfStatechart_class_UndefinedPart(problem,interpretation,element);
11914 neg find mustInstanceOfRegion_class(problem,interpretation,element);
11915}
11916pattern refineTypeTo_Region_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
11917 find interpretation(problem,interpretation);
11918 PartialInterpretation.newElements(interpretation,element);
11919 find mayInstanceOfRegion_class(problem,interpretation,element);
11920 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
11921 neg find mustInstanceOfVertex_class(problem,interpretation,element);
11922 neg find mustInstanceOfTransition_class(problem,interpretation,element);
11923 neg find mustInstanceOfRegion_class(problem,interpretation,element);
11924}
11925pattern refineTypeTo_State_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
11926 find interpretation(problem,interpretation);
11927 PartialInterpretation.newElements(interpretation,element);
11928 find mayInstanceOfState_class(problem,interpretation,element);
11929 neg find mustInstanceOfStatechart_class(problem,interpretation,element);
11930 neg find mustInstanceOfFinalState_class(problem,interpretation,element);
11931 neg find mustInstanceOfTransition_class(problem,interpretation,element);
11932 neg find mustInstanceOfRegion_class(problem,interpretation,element);
11933 neg find mustInstanceOfPseudostate_class(problem,interpretation,element);
11934 neg find mustInstanceOfState_class(problem,interpretation,element);
11935}
11936pattern refineTypeTo_Exit_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
11937 find interpretation(problem,interpretation);
11938 PartialInterpretation.newElements(interpretation,element);
11939 find mayInstanceOfExit_class(problem,interpretation,element);
11940 neg find mustInstanceOfEntry_class(problem,interpretation,element);
11941 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
11942 neg find mustInstanceOfSynchronization_class(problem,interpretation,element);
11943 neg find mustInstanceOfTransition_class(problem,interpretation,element);
11944 neg find mustInstanceOfChoice_class(problem,interpretation,element);
11945 neg find mustInstanceOfRegion_class(problem,interpretation,element);
11946 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
11947 neg find mustInstanceOfExit_class(problem,interpretation,element);
11948}
11949
11950//////////
11951// 4.3 Relation refinement
11952//////////
11953pattern refineRelation_incomingTransitions_reference_Vertex_and_target_reference_Transition(
11954 problem:LogicProblem, interpretation:PartialInterpretation,
11955 relationIterpretation:PartialRelationInterpretation, oppositeInterpretation:PartialRelationInterpretation,
11956 from: DefinedElement, to: DefinedElement)
11957{
11958 find interpretation(problem,interpretation);
11959 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
11960 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"incomingTransitions reference Vertex");
11961 PartialInterpretation.partialrelationinterpretation(interpretation,oppositeInterpretation);
11962 PartialRelationInterpretation.interpretationOf.name(oppositeInterpretation,"target reference Transition");
11963 find mustExist(problem, interpretation, from);
11964 find mustExist(problem, interpretation, to);
11965 find mustInstanceOfVertex_class(problem,interpretation,from);
11966 find mustInstanceOfTransition_class(problem,interpretation,to);
11967 find mayInRelationincomingTransitions_reference_Vertex(problem,interpretation,from,to);
11968 neg find mustInRelationincomingTransitions_reference_Vertex(problem,interpretation,from,to);
11969}
11970import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage"
11971import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem"
11972import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language"
11973
11974//////////
11975// 0. Util
11976//////////
11977private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) {
11978 PartialInterpretation.problem(interpretation,problem);
11979}
11980
11981/////////////////////////
11982// 0.1 Existence
11983/////////////////////////
11984private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
11985 find interpretation(problem,interpretation);
11986 LogicProblem.elements(problem,element);
11987} or {
11988 find interpretation(problem,interpretation);
11989 PartialInterpretation.newElements(interpretation,element);
11990}
11991
11992private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
11993 find mustExist(problem,interpretation,element);
11994} or {
11995 find interpretation(problem,interpretation);
11996 neg find elementCloseWorld(element);
11997 PartialInterpretation.openWorldElements(interpretation,element);
11998}
11999
12000private pattern elementCloseWorld(element:DefinedElement) {
12001 PartialInterpretation.openWorldElements(i,element);
12002 PartialInterpretation.maxNewElements(i,0);
12003} or {
12004 Scope.targetTypeInterpretation(scope,interpretation);
12005 PartialTypeInterpratation.elements(interpretation,element);
12006 Scope.maxNewElements(scope,0);
12007}
12008
12009////////////////////////
12010// 0.2 Equivalence
12011////////////////////////
12012pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) {
12013 find mayExist(problem,interpretation,a);
12014 find mayExist(problem,interpretation,b);
12015 a == b;
12016}
12017
12018////////////////////////
12019// 0.3 Required Patterns by TypeIndexer
12020////////////////////////
12021private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) {
12022 find interpretation(problem,interpretation);
12023 LogicProblem.types(problem,type);
12024 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
12025 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
12026}
12027
12028private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) {
12029 find interpretation(problem,interpretation);
12030 LogicProblem.types(problem,type);
12031 TypeDefinition.elements(type,element);
12032} or {
12033 find interpretation(problem,interpretation);
12034 find typeInterpretation(problem,interpretation,type,typeInterpretation);
12035 PartialComplexTypeInterpretation.elements(typeInterpretation,element);
12036}
12037
12038private pattern isPrimitive(element: PrimitiveElement) {
12039 PrimitiveElement(element);
12040}
12041
12042//////////
12043// 1. Problem-Specific Base Indexers
12044//////////
12045// 1.1 Type Indexers
12046//////////
12047// 1.1.1 primitive Type Indexers
12048//////////
12049
12050//////////
12051// 1.1.2 domain-specific Type Indexers
12052//////////
12053/**
12054 * An element must be an instance of type "Pseudostate class".
12055 */
12056private pattern mustInstanceOfPseudostate_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
12057 Type.name(type,"Pseudostate class");
12058 find directInstanceOf(problem,interpretation,element,type);
12059}
12060private pattern scopeDisallowsNewPseudostate_class(problem:LogicProblem, interpretation:PartialInterpretation) {
12061 find interpretation(problem,interpretation);
12062 PartialInterpretation.scopes(interpretation,scope);
12063 Scope.targetTypeInterpretation(scope,typeInterpretation);
12064 Scope.maxNewElements(scope,0);
12065 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
12066 Type.name(type,"Pseudostate class");
12067}
12068
12069/**
12070 * An element may be an instance of type "Pseudostate class".
12071 */
12072private pattern mayInstanceOfPseudostate_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
12073{
12074 find interpretation(problem,interpretation);
12075 PartialInterpretation.newElements(interpretation,element);
12076 neg find mustInstanceOfTransition_class(problem,interpretation,element);
12077 neg find mustInstanceOfSynchronization_class(problem,interpretation,element);
12078 neg find mustInstanceOfExit_class(problem,interpretation,element);
12079 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
12080 neg find mustInstanceOfChoice_class(problem,interpretation,element);
12081 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
12082 neg find mustInstanceOfEntry_class(problem,interpretation,element);
12083 neg find mustInstanceOfRegion_class(problem,interpretation,element);
12084 neg find scopeDisallowsNewPseudostate_class(problem, interpretation);
12085 neg find isPrimitive(element);
12086} or {
12087 find interpretation(problem,interpretation);
12088 PartialInterpretation.openWorldElements(interpretation,element);
12089 neg find mustInstanceOfTransition_class(problem,interpretation,element);
12090 neg find mustInstanceOfSynchronization_class(problem,interpretation,element);
12091 neg find mustInstanceOfExit_class(problem,interpretation,element);
12092 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
12093 neg find mustInstanceOfChoice_class(problem,interpretation,element);
12094 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
12095 neg find mustInstanceOfEntry_class(problem,interpretation,element);
12096 neg find mustInstanceOfRegion_class(problem,interpretation,element);
12097 neg find scopeDisallowsNewPseudostate_class(problem, interpretation);
12098 neg find isPrimitive(element);
12099} or
12100{ find mustInstanceOfPseudostate_class(problem,interpretation,element); }
12101/**
12102 * An element must be an instance of type "Vertex class".
12103 */
12104private pattern mustInstanceOfVertex_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
12105 Type.name(type,"Vertex class");
12106 find directInstanceOf(problem,interpretation,element,type);
12107}
12108private pattern scopeDisallowsNewVertex_class(problem:LogicProblem, interpretation:PartialInterpretation) {
12109 find interpretation(problem,interpretation);
12110 PartialInterpretation.scopes(interpretation,scope);
12111 Scope.targetTypeInterpretation(scope,typeInterpretation);
12112 Scope.maxNewElements(scope,0);
12113 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
12114 Type.name(type,"Vertex class");
12115}
12116
12117/**
12118 * An element may be an instance of type "Vertex class".
12119 */
12120private pattern mayInstanceOfVertex_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
12121{
12122 find interpretation(problem,interpretation);
12123 PartialInterpretation.newElements(interpretation,element);
12124 neg find mustInstanceOfTransition_class(problem,interpretation,element);
12125 neg find mustInstanceOfPseudostate_class(problem,interpretation,element);
12126 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
12127 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
12128 neg find mustInstanceOfRegion_class(problem,interpretation,element);
12129 neg find scopeDisallowsNewVertex_class(problem, interpretation);
12130 neg find isPrimitive(element);
12131} or {
12132 find interpretation(problem,interpretation);
12133 PartialInterpretation.openWorldElements(interpretation,element);
12134 neg find mustInstanceOfTransition_class(problem,interpretation,element);
12135 neg find mustInstanceOfPseudostate_class(problem,interpretation,element);
12136 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
12137 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
12138 neg find mustInstanceOfRegion_class(problem,interpretation,element);
12139 neg find scopeDisallowsNewVertex_class(problem, interpretation);
12140 neg find isPrimitive(element);
12141} or
12142{ find mustInstanceOfVertex_class(problem,interpretation,element); }
12143/**
12144 * An element must be an instance of type "Region class".
12145 */
12146private pattern mustInstanceOfRegion_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
12147 Type.name(type,"Region class");
12148 find directInstanceOf(problem,interpretation,element,type);
12149}
12150private pattern scopeDisallowsNewRegion_class(problem:LogicProblem, interpretation:PartialInterpretation) {
12151 find interpretation(problem,interpretation);
12152 PartialInterpretation.scopes(interpretation,scope);
12153 Scope.targetTypeInterpretation(scope,typeInterpretation);
12154 Scope.maxNewElements(scope,0);
12155 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
12156 Type.name(type,"Region class");
12157}
12158
12159/**
12160 * An element may be an instance of type "Region class".
12161 */
12162private pattern mayInstanceOfRegion_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
12163{
12164 find interpretation(problem,interpretation);
12165 PartialInterpretation.newElements(interpretation,element);
12166 neg find mustInstanceOfTransition_class(problem,interpretation,element);
12167 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
12168 neg find mustInstanceOfVertex_class(problem,interpretation,element);
12169 neg find scopeDisallowsNewRegion_class(problem, interpretation);
12170 neg find isPrimitive(element);
12171} or {
12172 find interpretation(problem,interpretation);
12173 PartialInterpretation.openWorldElements(interpretation,element);
12174 neg find mustInstanceOfTransition_class(problem,interpretation,element);
12175 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
12176 neg find mustInstanceOfVertex_class(problem,interpretation,element);
12177 neg find scopeDisallowsNewRegion_class(problem, interpretation);
12178 neg find isPrimitive(element);
12179} or
12180{ find mustInstanceOfRegion_class(problem,interpretation,element); }
12181/**
12182 * An element must be an instance of type "Transition class".
12183 */
12184private pattern mustInstanceOfTransition_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
12185 Type.name(type,"Transition class");
12186 find directInstanceOf(problem,interpretation,element,type);
12187}
12188private pattern scopeDisallowsNewTransition_class(problem:LogicProblem, interpretation:PartialInterpretation) {
12189 find interpretation(problem,interpretation);
12190 PartialInterpretation.scopes(interpretation,scope);
12191 Scope.targetTypeInterpretation(scope,typeInterpretation);
12192 Scope.maxNewElements(scope,0);
12193 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
12194 Type.name(type,"Transition class");
12195}
12196
12197/**
12198 * An element may be an instance of type "Transition class".
12199 */
12200private pattern mayInstanceOfTransition_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
12201{
12202 find interpretation(problem,interpretation);
12203 PartialInterpretation.newElements(interpretation,element);
12204 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
12205 neg find mustInstanceOfVertex_class(problem,interpretation,element);
12206 neg find mustInstanceOfRegion_class(problem,interpretation,element);
12207 neg find scopeDisallowsNewTransition_class(problem, interpretation);
12208 neg find isPrimitive(element);
12209} or {
12210 find interpretation(problem,interpretation);
12211 PartialInterpretation.openWorldElements(interpretation,element);
12212 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
12213 neg find mustInstanceOfVertex_class(problem,interpretation,element);
12214 neg find mustInstanceOfRegion_class(problem,interpretation,element);
12215 neg find scopeDisallowsNewTransition_class(problem, interpretation);
12216 neg find isPrimitive(element);
12217} or
12218{ find mustInstanceOfTransition_class(problem,interpretation,element); }
12219/**
12220 * An element must be an instance of type "Statechart class".
12221 */
12222private pattern mustInstanceOfStatechart_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
12223 Type.name(type,"Statechart class");
12224 find directInstanceOf(problem,interpretation,element,type);
12225}
12226private pattern scopeDisallowsNewStatechart_class(problem:LogicProblem, interpretation:PartialInterpretation) {
12227 find interpretation(problem,interpretation);
12228 PartialInterpretation.scopes(interpretation,scope);
12229 Scope.targetTypeInterpretation(scope,typeInterpretation);
12230 Scope.maxNewElements(scope,0);
12231 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
12232 Type.name(type,"Statechart class");
12233}
12234
12235/**
12236 * An element may be an instance of type "Statechart class".
12237 */
12238private pattern mayInstanceOfStatechart_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
12239{
12240 find interpretation(problem,interpretation);
12241 PartialInterpretation.newElements(interpretation,element);
12242 neg find mustInstanceOfTransition_class(problem,interpretation,element);
12243 neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element);
12244 neg find mustInstanceOfVertex_class(problem,interpretation,element);
12245 neg find mustInstanceOfRegion_class(problem,interpretation,element);
12246 neg find scopeDisallowsNewStatechart_class(problem, interpretation);
12247 neg find isPrimitive(element);
12248} or {
12249 find interpretation(problem,interpretation);
12250 PartialInterpretation.openWorldElements(interpretation,element);
12251 neg find mustInstanceOfTransition_class(problem,interpretation,element);
12252 neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element);
12253 neg find mustInstanceOfVertex_class(problem,interpretation,element);
12254 neg find mustInstanceOfRegion_class(problem,interpretation,element);
12255 neg find scopeDisallowsNewStatechart_class(problem, interpretation);
12256 neg find isPrimitive(element);
12257} or
12258{ find mustInstanceOfStatechart_class(problem,interpretation,element); }
12259/**
12260 * An element must be an instance of type "Entry class".
12261 */
12262private pattern mustInstanceOfEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
12263 Type.name(type,"Entry class");
12264 find directInstanceOf(problem,interpretation,element,type);
12265}
12266private pattern scopeDisallowsNewEntry_class(problem:LogicProblem, interpretation:PartialInterpretation) {
12267 find interpretation(problem,interpretation);
12268 PartialInterpretation.scopes(interpretation,scope);
12269 Scope.targetTypeInterpretation(scope,typeInterpretation);
12270 Scope.maxNewElements(scope,0);
12271 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
12272 Type.name(type,"Entry class");
12273}
12274
12275/**
12276 * An element may be an instance of type "Entry class".
12277 */
12278private pattern mayInstanceOfEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
12279{
12280 find interpretation(problem,interpretation);
12281 PartialInterpretation.newElements(interpretation,element);
12282 neg find mustInstanceOfTransition_class(problem,interpretation,element);
12283 neg find mustInstanceOfSynchronization_class(problem,interpretation,element);
12284 neg find mustInstanceOfExit_class(problem,interpretation,element);
12285 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
12286 neg find mustInstanceOfChoice_class(problem,interpretation,element);
12287 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
12288 neg find mustInstanceOfRegion_class(problem,interpretation,element);
12289 neg find scopeDisallowsNewEntry_class(problem, interpretation);
12290 neg find isPrimitive(element);
12291} or {
12292 find interpretation(problem,interpretation);
12293 PartialInterpretation.openWorldElements(interpretation,element);
12294 neg find mustInstanceOfTransition_class(problem,interpretation,element);
12295 neg find mustInstanceOfSynchronization_class(problem,interpretation,element);
12296 neg find mustInstanceOfExit_class(problem,interpretation,element);
12297 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
12298 neg find mustInstanceOfChoice_class(problem,interpretation,element);
12299 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
12300 neg find mustInstanceOfRegion_class(problem,interpretation,element);
12301 neg find scopeDisallowsNewEntry_class(problem, interpretation);
12302 neg find isPrimitive(element);
12303} or
12304{ find mustInstanceOfEntry_class(problem,interpretation,element); }
12305/**
12306 * An element must be an instance of type "Synchronization class".
12307 */
12308private pattern mustInstanceOfSynchronization_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
12309 Type.name(type,"Synchronization class");
12310 find directInstanceOf(problem,interpretation,element,type);
12311}
12312private pattern scopeDisallowsNewSynchronization_class(problem:LogicProblem, interpretation:PartialInterpretation) {
12313 find interpretation(problem,interpretation);
12314 PartialInterpretation.scopes(interpretation,scope);
12315 Scope.targetTypeInterpretation(scope,typeInterpretation);
12316 Scope.maxNewElements(scope,0);
12317 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
12318 Type.name(type,"Synchronization class");
12319}
12320
12321/**
12322 * An element may be an instance of type "Synchronization class".
12323 */
12324private pattern mayInstanceOfSynchronization_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
12325{
12326 find interpretation(problem,interpretation);
12327 PartialInterpretation.newElements(interpretation,element);
12328 neg find mustInstanceOfTransition_class(problem,interpretation,element);
12329 neg find mustInstanceOfExit_class(problem,interpretation,element);
12330 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
12331 neg find mustInstanceOfChoice_class(problem,interpretation,element);
12332 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
12333 neg find mustInstanceOfEntry_class(problem,interpretation,element);
12334 neg find mustInstanceOfRegion_class(problem,interpretation,element);
12335 neg find scopeDisallowsNewSynchronization_class(problem, interpretation);
12336 neg find isPrimitive(element);
12337} or {
12338 find interpretation(problem,interpretation);
12339 PartialInterpretation.openWorldElements(interpretation,element);
12340 neg find mustInstanceOfTransition_class(problem,interpretation,element);
12341 neg find mustInstanceOfExit_class(problem,interpretation,element);
12342 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
12343 neg find mustInstanceOfChoice_class(problem,interpretation,element);
12344 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
12345 neg find mustInstanceOfEntry_class(problem,interpretation,element);
12346 neg find mustInstanceOfRegion_class(problem,interpretation,element);
12347 neg find scopeDisallowsNewSynchronization_class(problem, interpretation);
12348 neg find isPrimitive(element);
12349} or
12350{ find mustInstanceOfSynchronization_class(problem,interpretation,element); }
12351/**
12352 * An element must be an instance of type "State class".
12353 */
12354private pattern mustInstanceOfState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
12355 Type.name(type,"State class");
12356 find directInstanceOf(problem,interpretation,element,type);
12357}
12358private pattern scopeDisallowsNewState_class(problem:LogicProblem, interpretation:PartialInterpretation) {
12359 find interpretation(problem,interpretation);
12360 PartialInterpretation.scopes(interpretation,scope);
12361 Scope.targetTypeInterpretation(scope,typeInterpretation);
12362 Scope.maxNewElements(scope,0);
12363 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
12364 Type.name(type,"State class");
12365}
12366
12367/**
12368 * An element may be an instance of type "State class".
12369 */
12370private pattern mayInstanceOfState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
12371{
12372 find interpretation(problem,interpretation);
12373 PartialInterpretation.newElements(interpretation,element);
12374 neg find mustInstanceOfTransition_class(problem,interpretation,element);
12375 neg find mustInstanceOfStatechart_class(problem,interpretation,element);
12376 neg find mustInstanceOfPseudostate_class(problem,interpretation,element);
12377 neg find mustInstanceOfFinalState_class(problem,interpretation,element);
12378 neg find mustInstanceOfRegion_class(problem,interpretation,element);
12379 neg find scopeDisallowsNewState_class(problem, interpretation);
12380 neg find isPrimitive(element);
12381} or {
12382 find interpretation(problem,interpretation);
12383 PartialInterpretation.openWorldElements(interpretation,element);
12384 neg find mustInstanceOfTransition_class(problem,interpretation,element);
12385 neg find mustInstanceOfStatechart_class(problem,interpretation,element);
12386 neg find mustInstanceOfPseudostate_class(problem,interpretation,element);
12387 neg find mustInstanceOfFinalState_class(problem,interpretation,element);
12388 neg find mustInstanceOfRegion_class(problem,interpretation,element);
12389 neg find scopeDisallowsNewState_class(problem, interpretation);
12390 neg find isPrimitive(element);
12391} or
12392{ find mustInstanceOfState_class(problem,interpretation,element); }
12393/**
12394 * An element must be an instance of type "RegularState class".
12395 */
12396private pattern mustInstanceOfRegularState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
12397 Type.name(type,"RegularState class");
12398 find directInstanceOf(problem,interpretation,element,type);
12399}
12400private pattern scopeDisallowsNewRegularState_class(problem:LogicProblem, interpretation:PartialInterpretation) {
12401 find interpretation(problem,interpretation);
12402 PartialInterpretation.scopes(interpretation,scope);
12403 Scope.targetTypeInterpretation(scope,typeInterpretation);
12404 Scope.maxNewElements(scope,0);
12405 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
12406 Type.name(type,"RegularState class");
12407}
12408
12409/**
12410 * An element may be an instance of type "RegularState class".
12411 */
12412private pattern mayInstanceOfRegularState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
12413{
12414 find interpretation(problem,interpretation);
12415 PartialInterpretation.newElements(interpretation,element);
12416 neg find mustInstanceOfTransition_class(problem,interpretation,element);
12417 neg find mustInstanceOfPseudostate_class(problem,interpretation,element);
12418 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
12419 neg find mustInstanceOfFinalState_class(problem,interpretation,element);
12420 neg find mustInstanceOfRegion_class(problem,interpretation,element);
12421 neg find scopeDisallowsNewRegularState_class(problem, interpretation);
12422 neg find isPrimitive(element);
12423} or {
12424 find interpretation(problem,interpretation);
12425 PartialInterpretation.openWorldElements(interpretation,element);
12426 neg find mustInstanceOfTransition_class(problem,interpretation,element);
12427 neg find mustInstanceOfPseudostate_class(problem,interpretation,element);
12428 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
12429 neg find mustInstanceOfFinalState_class(problem,interpretation,element);
12430 neg find mustInstanceOfRegion_class(problem,interpretation,element);
12431 neg find scopeDisallowsNewRegularState_class(problem, interpretation);
12432 neg find isPrimitive(element);
12433} or
12434{ find mustInstanceOfRegularState_class(problem,interpretation,element); }
12435/**
12436 * An element must be an instance of type "CompositeElement class".
12437 */
12438private pattern mustInstanceOfCompositeElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
12439 Type.name(type,"CompositeElement class");
12440 find directInstanceOf(problem,interpretation,element,type);
12441}
12442private pattern scopeDisallowsNewCompositeElement_class(problem:LogicProblem, interpretation:PartialInterpretation) {
12443 find interpretation(problem,interpretation);
12444 PartialInterpretation.scopes(interpretation,scope);
12445 Scope.targetTypeInterpretation(scope,typeInterpretation);
12446 Scope.maxNewElements(scope,0);
12447 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
12448 Type.name(type,"CompositeElement class");
12449}
12450
12451/**
12452 * An element may be an instance of type "CompositeElement class".
12453 */
12454private pattern mayInstanceOfCompositeElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
12455{
12456 find interpretation(problem,interpretation);
12457 PartialInterpretation.newElements(interpretation,element);
12458 neg find mustInstanceOfTransition_class(problem,interpretation,element);
12459 neg find mustInstanceOfStatechart_class(problem,interpretation,element);
12460 neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element);
12461 neg find mustInstanceOfRegion_class(problem,interpretation,element);
12462 neg find mustInstanceOfVertex_class(problem,interpretation,element);
12463 neg find scopeDisallowsNewCompositeElement_class(problem, interpretation);
12464 neg find isPrimitive(element);
12465} or {
12466 find interpretation(problem,interpretation);
12467 PartialInterpretation.openWorldElements(interpretation,element);
12468 neg find mustInstanceOfTransition_class(problem,interpretation,element);
12469 neg find mustInstanceOfStatechart_class(problem,interpretation,element);
12470 neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element);
12471 neg find mustInstanceOfRegion_class(problem,interpretation,element);
12472 neg find mustInstanceOfVertex_class(problem,interpretation,element);
12473 neg find scopeDisallowsNewCompositeElement_class(problem, interpretation);
12474 neg find isPrimitive(element);
12475} or
12476{ find mustInstanceOfCompositeElement_class(problem,interpretation,element); }
12477/**
12478 * An element must be an instance of type "Choice class".
12479 */
12480private pattern mustInstanceOfChoice_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
12481 Type.name(type,"Choice class");
12482 find directInstanceOf(problem,interpretation,element,type);
12483}
12484private pattern scopeDisallowsNewChoice_class(problem:LogicProblem, interpretation:PartialInterpretation) {
12485 find interpretation(problem,interpretation);
12486 PartialInterpretation.scopes(interpretation,scope);
12487 Scope.targetTypeInterpretation(scope,typeInterpretation);
12488 Scope.maxNewElements(scope,0);
12489 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
12490 Type.name(type,"Choice class");
12491}
12492
12493/**
12494 * An element may be an instance of type "Choice class".
12495 */
12496private pattern mayInstanceOfChoice_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
12497{
12498 find interpretation(problem,interpretation);
12499 PartialInterpretation.newElements(interpretation,element);
12500 neg find mustInstanceOfTransition_class(problem,interpretation,element);
12501 neg find mustInstanceOfSynchronization_class(problem,interpretation,element);
12502 neg find mustInstanceOfExit_class(problem,interpretation,element);
12503 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
12504 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
12505 neg find mustInstanceOfRegion_class(problem,interpretation,element);
12506 neg find mustInstanceOfEntry_class(problem,interpretation,element);
12507 neg find scopeDisallowsNewChoice_class(problem, interpretation);
12508 neg find isPrimitive(element);
12509} or {
12510 find interpretation(problem,interpretation);
12511 PartialInterpretation.openWorldElements(interpretation,element);
12512 neg find mustInstanceOfTransition_class(problem,interpretation,element);
12513 neg find mustInstanceOfSynchronization_class(problem,interpretation,element);
12514 neg find mustInstanceOfExit_class(problem,interpretation,element);
12515 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
12516 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
12517 neg find mustInstanceOfRegion_class(problem,interpretation,element);
12518 neg find mustInstanceOfEntry_class(problem,interpretation,element);
12519 neg find scopeDisallowsNewChoice_class(problem, interpretation);
12520 neg find isPrimitive(element);
12521} or
12522{ find mustInstanceOfChoice_class(problem,interpretation,element); }
12523/**
12524 * An element must be an instance of type "Exit class".
12525 */
12526private pattern mustInstanceOfExit_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
12527 Type.name(type,"Exit class");
12528 find directInstanceOf(problem,interpretation,element,type);
12529}
12530private pattern scopeDisallowsNewExit_class(problem:LogicProblem, interpretation:PartialInterpretation) {
12531 find interpretation(problem,interpretation);
12532 PartialInterpretation.scopes(interpretation,scope);
12533 Scope.targetTypeInterpretation(scope,typeInterpretation);
12534 Scope.maxNewElements(scope,0);
12535 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
12536 Type.name(type,"Exit class");
12537}
12538
12539/**
12540 * An element may be an instance of type "Exit class".
12541 */
12542private pattern mayInstanceOfExit_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
12543{
12544 find interpretation(problem,interpretation);
12545 PartialInterpretation.newElements(interpretation,element);
12546 neg find mustInstanceOfTransition_class(problem,interpretation,element);
12547 neg find mustInstanceOfSynchronization_class(problem,interpretation,element);
12548 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
12549 neg find mustInstanceOfChoice_class(problem,interpretation,element);
12550 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
12551 neg find mustInstanceOfRegion_class(problem,interpretation,element);
12552 neg find mustInstanceOfEntry_class(problem,interpretation,element);
12553 neg find scopeDisallowsNewExit_class(problem, interpretation);
12554 neg find isPrimitive(element);
12555} or {
12556 find interpretation(problem,interpretation);
12557 PartialInterpretation.openWorldElements(interpretation,element);
12558 neg find mustInstanceOfTransition_class(problem,interpretation,element);
12559 neg find mustInstanceOfSynchronization_class(problem,interpretation,element);
12560 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
12561 neg find mustInstanceOfChoice_class(problem,interpretation,element);
12562 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
12563 neg find mustInstanceOfRegion_class(problem,interpretation,element);
12564 neg find mustInstanceOfEntry_class(problem,interpretation,element);
12565 neg find scopeDisallowsNewExit_class(problem, interpretation);
12566 neg find isPrimitive(element);
12567} or
12568{ find mustInstanceOfExit_class(problem,interpretation,element); }
12569/**
12570 * An element must be an instance of type "FinalState class".
12571 */
12572private pattern mustInstanceOfFinalState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
12573 Type.name(type,"FinalState class");
12574 find directInstanceOf(problem,interpretation,element,type);
12575}
12576private pattern scopeDisallowsNewFinalState_class(problem:LogicProblem, interpretation:PartialInterpretation) {
12577 find interpretation(problem,interpretation);
12578 PartialInterpretation.scopes(interpretation,scope);
12579 Scope.targetTypeInterpretation(scope,typeInterpretation);
12580 Scope.maxNewElements(scope,0);
12581 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
12582 Type.name(type,"FinalState class");
12583}
12584
12585/**
12586 * An element may be an instance of type "FinalState class".
12587 */
12588private pattern mayInstanceOfFinalState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
12589{
12590 find interpretation(problem,interpretation);
12591 PartialInterpretation.newElements(interpretation,element);
12592 neg find mustInstanceOfTransition_class(problem,interpretation,element);
12593 neg find mustInstanceOfPseudostate_class(problem,interpretation,element);
12594 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
12595 neg find mustInstanceOfRegion_class(problem,interpretation,element);
12596 neg find scopeDisallowsNewFinalState_class(problem, interpretation);
12597 neg find isPrimitive(element);
12598} or {
12599 find interpretation(problem,interpretation);
12600 PartialInterpretation.openWorldElements(interpretation,element);
12601 neg find mustInstanceOfTransition_class(problem,interpretation,element);
12602 neg find mustInstanceOfPseudostate_class(problem,interpretation,element);
12603 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
12604 neg find mustInstanceOfRegion_class(problem,interpretation,element);
12605 neg find scopeDisallowsNewFinalState_class(problem, interpretation);
12606 neg find isPrimitive(element);
12607} or
12608{ find mustInstanceOfFinalState_class(problem,interpretation,element); }
12609/**
12610 * An element must be an instance of type "Statechart class DefinedPart".
12611 */
12612private pattern mustInstanceOfStatechart_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
12613 Type.name(type,"Statechart class DefinedPart");
12614 find directInstanceOf(problem,interpretation,element,type);
12615}
12616private pattern scopeDisallowsNewStatechart_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
12617 find interpretation(problem,interpretation);
12618 PartialInterpretation.scopes(interpretation,scope);
12619 Scope.targetTypeInterpretation(scope,typeInterpretation);
12620 Scope.maxNewElements(scope,0);
12621 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
12622 Type.name(type,"Statechart class DefinedPart");
12623}
12624
12625/**
12626 * An element may be an instance of type "Statechart class DefinedPart".
12627 */
12628private pattern mayInstanceOfStatechart_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
12629{ find mustInstanceOfStatechart_class_DefinedPart(problem,interpretation,element); }
12630/**
12631 * An element must be an instance of type "Statechart class UndefinedPart".
12632 */
12633private pattern mustInstanceOfStatechart_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
12634 Type.name(type,"Statechart class UndefinedPart");
12635 find directInstanceOf(problem,interpretation,element,type);
12636}
12637private pattern scopeDisallowsNewStatechart_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
12638 find interpretation(problem,interpretation);
12639 PartialInterpretation.scopes(interpretation,scope);
12640 Scope.targetTypeInterpretation(scope,typeInterpretation);
12641 Scope.maxNewElements(scope,0);
12642 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
12643 Type.name(type,"Statechart class UndefinedPart");
12644}
12645
12646/**
12647 * An element may be an instance of type "Statechart class UndefinedPart".
12648 */
12649private pattern mayInstanceOfStatechart_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
12650{
12651 find interpretation(problem,interpretation);
12652 PartialInterpretation.newElements(interpretation,element);
12653 neg find mustInstanceOfTransition_class(problem,interpretation,element);
12654 neg find mustInstanceOfVertex_class(problem,interpretation,element);
12655 neg find mustInstanceOfRegion_class(problem,interpretation,element);
12656 neg find scopeDisallowsNewStatechart_class_UndefinedPart(problem, interpretation);
12657 neg find isPrimitive(element);
12658} or {
12659 find interpretation(problem,interpretation);
12660 PartialInterpretation.openWorldElements(interpretation,element);
12661 neg find mustInstanceOfTransition_class(problem,interpretation,element);
12662 neg find mustInstanceOfVertex_class(problem,interpretation,element);
12663 neg find mustInstanceOfRegion_class(problem,interpretation,element);
12664 neg find scopeDisallowsNewStatechart_class_UndefinedPart(problem, interpretation);
12665 neg find isPrimitive(element);
12666} or
12667{ find mustInstanceOfStatechart_class_UndefinedPart(problem,interpretation,element); }
12668/**
12669 * An element must be an instance of type "CompositeElement class DefinedPart".
12670 */
12671private pattern mustInstanceOfCompositeElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
12672 Type.name(type,"CompositeElement class DefinedPart");
12673 find directInstanceOf(problem,interpretation,element,type);
12674}
12675private pattern scopeDisallowsNewCompositeElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
12676 find interpretation(problem,interpretation);
12677 PartialInterpretation.scopes(interpretation,scope);
12678 Scope.targetTypeInterpretation(scope,typeInterpretation);
12679 Scope.maxNewElements(scope,0);
12680 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
12681 Type.name(type,"CompositeElement class DefinedPart");
12682}
12683
12684/**
12685 * An element may be an instance of type "CompositeElement class DefinedPart".
12686 */
12687private pattern mayInstanceOfCompositeElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
12688{ find mustInstanceOfCompositeElement_class_DefinedPart(problem,interpretation,element); }
12689/**
12690 * An element must be an instance of type "CompositeElement class UndefinedPart".
12691 */
12692private pattern mustInstanceOfCompositeElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
12693 Type.name(type,"CompositeElement class UndefinedPart");
12694 find directInstanceOf(problem,interpretation,element,type);
12695}
12696private pattern scopeDisallowsNewCompositeElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
12697 find interpretation(problem,interpretation);
12698 PartialInterpretation.scopes(interpretation,scope);
12699 Scope.targetTypeInterpretation(scope,typeInterpretation);
12700 Scope.maxNewElements(scope,0);
12701 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
12702 Type.name(type,"CompositeElement class UndefinedPart");
12703}
12704
12705/**
12706 * An element may be an instance of type "CompositeElement class UndefinedPart".
12707 */
12708private pattern mayInstanceOfCompositeElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
12709{
12710 find interpretation(problem,interpretation);
12711 PartialInterpretation.newElements(interpretation,element);
12712 neg find mustInstanceOfTransition_class(problem,interpretation,element);
12713 neg find mustInstanceOfStatechart_class(problem,interpretation,element);
12714 neg find mustInstanceOfRegion_class(problem,interpretation,element);
12715 neg find mustInstanceOfVertex_class(problem,interpretation,element);
12716 neg find scopeDisallowsNewCompositeElement_class_UndefinedPart(problem, interpretation);
12717 neg find isPrimitive(element);
12718} or {
12719 find interpretation(problem,interpretation);
12720 PartialInterpretation.openWorldElements(interpretation,element);
12721 neg find mustInstanceOfTransition_class(problem,interpretation,element);
12722 neg find mustInstanceOfStatechart_class(problem,interpretation,element);
12723 neg find mustInstanceOfRegion_class(problem,interpretation,element);
12724 neg find mustInstanceOfVertex_class(problem,interpretation,element);
12725 neg find scopeDisallowsNewCompositeElement_class_UndefinedPart(problem, interpretation);
12726 neg find isPrimitive(element);
12727} or
12728{ find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); }
12729
12730//////////
12731// 1.2 Relation Declaration Indexers
12732//////////
12733/**
12734 * Matcher for detecting tuples t where []incomingTransitions reference Vertex(source,target)
12735 */
12736private pattern mustInRelationincomingTransitions_reference_Vertex(
12737 problem:LogicProblem, interpretation:PartialInterpretation,
12738 source: DefinedElement, target:DefinedElement)
12739{
12740 find interpretation(problem,interpretation);
12741 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
12742 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"incomingTransitions reference Vertex");
12743 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
12744 BinaryElementRelationLink.param1(link,source);
12745 BinaryElementRelationLink.param2(link,target);
12746}
12747/**
12748 * Matcher for detecting tuples t where <>incomingTransitions reference Vertex(source,target)
12749 */
12750private pattern mayInRelationincomingTransitions_reference_Vertex(
12751 problem:LogicProblem, interpretation:PartialInterpretation,
12752 source: DefinedElement, target:DefinedElement)
12753{
12754 find interpretation(problem,interpretation);
12755 // The two endpoint of the link have to exist
12756 find mayExist(problem, interpretation, source);
12757 find mayExist(problem, interpretation, target);
12758 // Type consistency
12759 find mayInstanceOfVertex_class(problem,interpretation,source);
12760 find mayInstanceOfTransition_class(problem,interpretation,target);
12761 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
12762 // the upper bound of the opposite reference multiplicity should be considered.
12763 numberOfExistingOppositeReferences == count find mustInRelationtarget_reference_Transition(problem,interpretation,target,_);
12764 check(numberOfExistingOppositeReferences < 1);
12765} or {
12766 find mustInRelationincomingTransitions_reference_Vertex(problem,interpretation,source,target);
12767}
12768/**
12769 * Matcher for detecting tuples t where []outgoingTransitions reference Vertex(source,target)
12770 */
12771private pattern mustInRelationoutgoingTransitions_reference_Vertex(
12772 problem:LogicProblem, interpretation:PartialInterpretation,
12773 source: DefinedElement, target:DefinedElement)
12774{
12775 find interpretation(problem,interpretation);
12776 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
12777 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"outgoingTransitions reference Vertex");
12778 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
12779 BinaryElementRelationLink.param1(link,source);
12780 BinaryElementRelationLink.param2(link,target);
12781}
12782/**
12783 * Matcher for detecting tuples t where <>outgoingTransitions reference Vertex(source,target)
12784 */
12785private pattern mayInRelationoutgoingTransitions_reference_Vertex(
12786 problem:LogicProblem, interpretation:PartialInterpretation,
12787 source: DefinedElement, target:DefinedElement)
12788{
12789 find interpretation(problem,interpretation);
12790 // The two endpoint of the link have to exist
12791 find mayExist(problem, interpretation, source);
12792 find mayExist(problem, interpretation, target);
12793 // Type consistency
12794 find mayInstanceOfVertex_class(problem,interpretation,source);
12795 find mayInstanceOfTransition_class(problem,interpretation,target);
12796 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
12797 // the upper bound of the opposite reference multiplicity should be considered.
12798 numberOfExistingOppositeReferences == count find mustInRelationsource_reference_Transition(problem,interpretation,target,_);
12799 check(numberOfExistingOppositeReferences < 1);
12800 // The reference is containment, then a new reference cannot be create if:
12801 // 1. Multiple parents
12802 neg find mustContains4(problem,interpretation,_,target);
12803 // 2. Circle in the containment hierarchy
12804 neg find mustTransitiveContains(source,target);
12805} or {
12806 find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,source,target);
12807}
12808/**
12809 * Matcher for detecting tuples t where []vertices reference Region(source,target)
12810 */
12811private pattern mustInRelationvertices_reference_Region(
12812 problem:LogicProblem, interpretation:PartialInterpretation,
12813 source: DefinedElement, target:DefinedElement)
12814{
12815 find interpretation(problem,interpretation);
12816 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
12817 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"vertices reference Region");
12818 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
12819 BinaryElementRelationLink.param1(link,source);
12820 BinaryElementRelationLink.param2(link,target);
12821}
12822/**
12823 * Matcher for detecting tuples t where <>vertices reference Region(source,target)
12824 */
12825private pattern mayInRelationvertices_reference_Region(
12826 problem:LogicProblem, interpretation:PartialInterpretation,
12827 source: DefinedElement, target:DefinedElement)
12828{
12829 find interpretation(problem,interpretation);
12830 // The two endpoint of the link have to exist
12831 find mayExist(problem, interpretation, source);
12832 find mayExist(problem, interpretation, target);
12833 // Type consistency
12834 find mayInstanceOfRegion_class(problem,interpretation,source);
12835 find mayInstanceOfVertex_class(problem,interpretation,target);
12836 // The reference is containment, then a new reference cannot be create if:
12837 // 1. Multiple parents
12838 neg find mustContains4(problem,interpretation,_,target);
12839 // 2. Circle in the containment hierarchy
12840 neg find mustTransitiveContains(source,target);
12841} or {
12842 find mustInRelationvertices_reference_Region(problem,interpretation,source,target);
12843}
12844/**
12845 * Matcher for detecting tuples t where []target reference Transition(source,target)
12846 */
12847private pattern mustInRelationtarget_reference_Transition(
12848 problem:LogicProblem, interpretation:PartialInterpretation,
12849 source: DefinedElement, target:DefinedElement)
12850{
12851 find interpretation(problem,interpretation);
12852 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
12853 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"target reference Transition");
12854 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
12855 BinaryElementRelationLink.param1(link,source);
12856 BinaryElementRelationLink.param2(link,target);
12857}
12858/**
12859 * Matcher for detecting tuples t where <>target reference Transition(source,target)
12860 */
12861private pattern mayInRelationtarget_reference_Transition(
12862 problem:LogicProblem, interpretation:PartialInterpretation,
12863 source: DefinedElement, target:DefinedElement)
12864{
12865 find interpretation(problem,interpretation);
12866 // The two endpoint of the link have to exist
12867 find mayExist(problem, interpretation, source);
12868 find mayExist(problem, interpretation, target);
12869 // Type consistency
12870 find mayInstanceOfTransition_class(problem,interpretation,source);
12871 find mayInstanceOfVertex_class(problem,interpretation,target);
12872 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
12873 // the upper bound of the multiplicity should be considered.
12874 numberOfExistingReferences == count find mustInRelationtarget_reference_Transition(problem,interpretation,source,_);
12875 check(numberOfExistingReferences < 1);
12876} or {
12877 find mustInRelationtarget_reference_Transition(problem,interpretation,source,target);
12878}
12879/**
12880 * Matcher for detecting tuples t where []source reference Transition(source,target)
12881 */
12882private pattern mustInRelationsource_reference_Transition(
12883 problem:LogicProblem, interpretation:PartialInterpretation,
12884 source: DefinedElement, target:DefinedElement)
12885{
12886 find interpretation(problem,interpretation);
12887 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
12888 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"source reference Transition");
12889 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
12890 BinaryElementRelationLink.param1(link,source);
12891 BinaryElementRelationLink.param2(link,target);
12892}
12893/**
12894 * Matcher for detecting tuples t where <>source reference Transition(source,target)
12895 */
12896private pattern mayInRelationsource_reference_Transition(
12897 problem:LogicProblem, interpretation:PartialInterpretation,
12898 source: DefinedElement, target:DefinedElement)
12899{
12900 find interpretation(problem,interpretation);
12901 // The two endpoint of the link have to exist
12902 find mayExist(problem, interpretation, source);
12903 find mayExist(problem, interpretation, target);
12904 // Type consistency
12905 find mayInstanceOfTransition_class(problem,interpretation,source);
12906 find mayInstanceOfVertex_class(problem,interpretation,target);
12907 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
12908 // the upper bound of the multiplicity should be considered.
12909 numberOfExistingReferences == count find mustInRelationsource_reference_Transition(problem,interpretation,source,_);
12910 check(numberOfExistingReferences < 1);
12911 // The eOpposite of the reference is containment, then a referene cannot be created if
12912 // 1. Multiple parents
12913 neg find mustContains4(problem,interpretation,source,_);
12914 // 2. Circle in the containment hierarchy
12915 neg find mustTransitiveContains(source,target);
12916} or {
12917 find mustInRelationsource_reference_Transition(problem,interpretation,source,target);
12918}
12919/**
12920 * Matcher for detecting tuples t where []regions reference CompositeElement(source,target)
12921 */
12922private pattern mustInRelationregions_reference_CompositeElement(
12923 problem:LogicProblem, interpretation:PartialInterpretation,
12924 source: DefinedElement, target:DefinedElement)
12925{
12926 find interpretation(problem,interpretation);
12927 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
12928 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"regions reference CompositeElement");
12929 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
12930 BinaryElementRelationLink.param1(link,source);
12931 BinaryElementRelationLink.param2(link,target);
12932}
12933/**
12934 * Matcher for detecting tuples t where <>regions reference CompositeElement(source,target)
12935 */
12936private pattern mayInRelationregions_reference_CompositeElement(
12937 problem:LogicProblem, interpretation:PartialInterpretation,
12938 source: DefinedElement, target:DefinedElement)
12939{
12940 find interpretation(problem,interpretation);
12941 // The two endpoint of the link have to exist
12942 find mayExist(problem, interpretation, source);
12943 find mayExist(problem, interpretation, target);
12944 // Type consistency
12945 find mayInstanceOfCompositeElement_class(problem,interpretation,source);
12946 find mayInstanceOfRegion_class(problem,interpretation,target);
12947 // The reference is containment, then a new reference cannot be create if:
12948 // 1. Multiple parents
12949 neg find mustContains4(problem,interpretation,_,target);
12950 // 2. Circle in the containment hierarchy
12951 neg find mustTransitiveContains(source,target);
12952} or {
12953 find mustInRelationregions_reference_CompositeElement(problem,interpretation,source,target);
12954}
12955
12956//////////
12957// 1.3 Relation Definition Indexers
12958//////////
12959// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries entryInRegion
12960private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(
12961 problem:LogicProblem, interpretation:PartialInterpretation,
12962 var_r1, var_e1)
12963{
12964 find interpretation(problem,interpretation);
12965 find mustInstanceOfRegion_class(problem,interpretation,var_r1);
12966 find mustInstanceOfEntry_class(problem,interpretation,var_e1);
12967 // r1 is exported
12968 // e1 is exported
12969 find mustInstanceOfRegion_class(problem,interpretation,var_r1);
12970 find mustInRelationvertices_reference_Region(problem,interpretation,var_r1,var_virtual0);
12971 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
12972 var_virtual0 == var_e1;
12973}
12974private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(
12975 problem:LogicProblem, interpretation:PartialInterpretation,
12976 var_r1, var_e1)
12977{
12978 find interpretation(problem,interpretation);
12979 find mayInstanceOfRegion_class(problem,interpretation,var_r1);
12980 find mayInstanceOfEntry_class(problem,interpretation,var_e1);
12981 // r1 is exported
12982 // e1 is exported
12983 find mayInstanceOfRegion_class(problem,interpretation,var_r1);
12984 find mayInRelationvertices_reference_Region(problem,interpretation,var_r1,var_virtual0);
12985 find mayInstanceOfVertex_class(problem,interpretation,var_virtual0);
12986 find mayEquivalent(problem, interpretation, var_virtual0, var_e1);
12987}
12988private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(
12989 problem:LogicProblem, interpretation:PartialInterpretation,
12990 var_r1, var_e1)
12991{
12992 find interpretation(problem,interpretation);
12993 find mustInstanceOfRegion_class(problem,interpretation,var_r1);
12994 find mustInstanceOfEntry_class(problem,interpretation,var_e1);
12995 // r1 is exported
12996 // e1 is exported
12997 find mustInstanceOfRegion_class(problem,interpretation,var_r1);
12998 find mustInRelationvertices_reference_Region(problem,interpretation,var_r1,var_virtual0);
12999 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
13000 var_virtual0 == var_e1;
13001}
13002// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries noEntryInRegion
13003private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(
13004 problem:LogicProblem, interpretation:PartialInterpretation,
13005 var_r1)
13006{
13007 find interpretation(problem,interpretation);
13008 find mustInstanceOfRegion_class(problem,interpretation,var_r1);
13009 // r1 is exported
13010 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r1,_var__0);
13011}
13012private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(
13013 problem:LogicProblem, interpretation:PartialInterpretation,
13014 var_r1)
13015{
13016 find interpretation(problem,interpretation);
13017 find mayInstanceOfRegion_class(problem,interpretation,var_r1);
13018 // r1 is exported
13019 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r1,_var__0);
13020}
13021private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(
13022 problem:LogicProblem, interpretation:PartialInterpretation,
13023 var_r1)
13024{
13025 find interpretation(problem,interpretation);
13026 find mustInstanceOfRegion_class(problem,interpretation,var_r1);
13027 // r1 is exported
13028 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r1,_var__0);
13029}
13030// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries multipleEntryInRegion
13031private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(
13032 problem:LogicProblem, interpretation:PartialInterpretation,
13033 var_r)
13034{
13035 find interpretation(problem,interpretation);
13036 find mustInstanceOfRegion_class(problem,interpretation,var_r);
13037 // r is exported
13038 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e1);
13039 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e2);
13040 neg find mayEquivalent(problem, interpretation, var_e1, var_e2);
13041}
13042private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(
13043 problem:LogicProblem, interpretation:PartialInterpretation,
13044 var_r)
13045{
13046 find interpretation(problem,interpretation);
13047 find mayInstanceOfRegion_class(problem,interpretation,var_r);
13048 // r is exported
13049 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e1);
13050 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e2);
13051 var_e1 != var_e2;
13052}
13053private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(
13054 problem:LogicProblem, interpretation:PartialInterpretation,
13055 var_r)
13056{
13057 find interpretation(problem,interpretation);
13058 find mustInstanceOfRegion_class(problem,interpretation,var_r);
13059 // r is exported
13060 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e1);
13061 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e2);
13062 var_e1 != var_e2;
13063}
13064// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries transition
13065private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(
13066 problem:LogicProblem, interpretation:PartialInterpretation,
13067 var_t, var_src, var_trg)
13068{
13069 find interpretation(problem,interpretation);
13070 find mustInstanceOfTransition_class(problem,interpretation,var_t);
13071 find mustInstanceOfVertex_class(problem,interpretation,var_src);
13072 find mustInstanceOfVertex_class(problem,interpretation,var_trg);
13073 // t is exported
13074 // src is exported
13075 // trg is exported
13076 find mustInstanceOfTransition_class(problem,interpretation,var_t);
13077 find mustInRelationsource_reference_Transition(problem,interpretation,var_t,var_virtual0);
13078 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
13079 var_virtual0 == var_src;
13080 find mustInstanceOfTransition_class(problem,interpretation,var_t);
13081 find mustInRelationtarget_reference_Transition(problem,interpretation,var_t,var_virtual1);
13082 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
13083 var_virtual1 == var_trg;
13084}
13085private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(
13086 problem:LogicProblem, interpretation:PartialInterpretation,
13087 var_t, var_src, var_trg)
13088{
13089 find interpretation(problem,interpretation);
13090 find mayInstanceOfTransition_class(problem,interpretation,var_t);
13091 find mayInstanceOfVertex_class(problem,interpretation,var_src);
13092 find mayInstanceOfVertex_class(problem,interpretation,var_trg);
13093 // t is exported
13094 // src is exported
13095 // trg is exported
13096 find mayInstanceOfTransition_class(problem,interpretation,var_t);
13097 find mayInRelationsource_reference_Transition(problem,interpretation,var_t,var_virtual0);
13098 find mayInstanceOfVertex_class(problem,interpretation,var_virtual0);
13099 find mayEquivalent(problem, interpretation, var_virtual0, var_src);
13100 find mayInstanceOfTransition_class(problem,interpretation,var_t);
13101 find mayInRelationtarget_reference_Transition(problem,interpretation,var_t,var_virtual1);
13102 find mayInstanceOfVertex_class(problem,interpretation,var_virtual1);
13103 find mayEquivalent(problem, interpretation, var_virtual1, var_trg);
13104}
13105private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(
13106 problem:LogicProblem, interpretation:PartialInterpretation,
13107 var_t, var_src, var_trg)
13108{
13109 find interpretation(problem,interpretation);
13110 find mustInstanceOfTransition_class(problem,interpretation,var_t);
13111 find mustInstanceOfVertex_class(problem,interpretation,var_src);
13112 find mustInstanceOfVertex_class(problem,interpretation,var_trg);
13113 // t is exported
13114 // src is exported
13115 // trg is exported
13116 find mustInstanceOfTransition_class(problem,interpretation,var_t);
13117 find mustInRelationsource_reference_Transition(problem,interpretation,var_t,var_virtual0);
13118 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
13119 var_virtual0 == var_src;
13120 find mustInstanceOfTransition_class(problem,interpretation,var_t);
13121 find mustInRelationtarget_reference_Transition(problem,interpretation,var_t,var_virtual1);
13122 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
13123 var_virtual1 == var_trg;
13124}
13125// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries incomingToEntry
13126private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(
13127 problem:LogicProblem, interpretation:PartialInterpretation,
13128 var_t, var_e)
13129{
13130 find interpretation(problem,interpretation);
13131 find mustInstanceOfTransition_class(problem,interpretation,var_t);
13132 find mustInstanceOfEntry_class(problem,interpretation,var_e);
13133 // t is exported
13134 // e is exported
13135 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t,_var__0,var_e);
13136}
13137private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(
13138 problem:LogicProblem, interpretation:PartialInterpretation,
13139 var_t, var_e)
13140{
13141 find interpretation(problem,interpretation);
13142 find mayInstanceOfTransition_class(problem,interpretation,var_t);
13143 find mayInstanceOfEntry_class(problem,interpretation,var_e);
13144 // t is exported
13145 // e is exported
13146 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t,_var__0,var_e);
13147}
13148private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(
13149 problem:LogicProblem, interpretation:PartialInterpretation,
13150 var_t, var_e)
13151{
13152 find interpretation(problem,interpretation);
13153 find mustInstanceOfTransition_class(problem,interpretation,var_t);
13154 find mustInstanceOfEntry_class(problem,interpretation,var_e);
13155 // t is exported
13156 // e is exported
13157 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t,_var__0,var_e);
13158}
13159// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries noOutgoingTransitionFromEntry
13160private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(
13161 problem:LogicProblem, interpretation:PartialInterpretation,
13162 var_e)
13163{
13164 find interpretation(problem,interpretation);
13165 find mustInstanceOfEntry_class(problem,interpretation,var_e);
13166 // e is exported
13167 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_e,_var__1);
13168}
13169private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(
13170 problem:LogicProblem, interpretation:PartialInterpretation,
13171 var_e)
13172{
13173 find interpretation(problem,interpretation);
13174 find mayInstanceOfEntry_class(problem,interpretation,var_e);
13175 // e is exported
13176 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_e,_var__1);
13177}
13178private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(
13179 problem:LogicProblem, interpretation:PartialInterpretation,
13180 var_e)
13181{
13182 find interpretation(problem,interpretation);
13183 find mustInstanceOfEntry_class(problem,interpretation,var_e);
13184 // e is exported
13185 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_e,_var__1);
13186}
13187// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries multipleTransitionFromEntry
13188private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(
13189 problem:LogicProblem, interpretation:PartialInterpretation,
13190 var_e, var_t1, var_t2)
13191{
13192 find interpretation(problem,interpretation);
13193 find mustInstanceOfEntry_class(problem,interpretation,var_e);
13194 find mustInstanceOfTransition_class(problem,interpretation,var_t1);
13195 find mustInstanceOfTransition_class(problem,interpretation,var_t2);
13196 // e is exported
13197 // t1 is exported
13198 // t2 is exported
13199 find mustInstanceOfEntry_class(problem,interpretation,var_e);
13200 find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0);
13201 find mustInstanceOfTransition_class(problem,interpretation,var_virtual0);
13202 var_virtual0 == var_t1;
13203 find mustInstanceOfEntry_class(problem,interpretation,var_e);
13204 find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual1);
13205 find mustInstanceOfTransition_class(problem,interpretation,var_virtual1);
13206 var_virtual1 == var_t2;
13207 neg find mayEquivalent(problem, interpretation, var_t1, var_t2);
13208}
13209private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(
13210 problem:LogicProblem, interpretation:PartialInterpretation,
13211 var_e, var_t1, var_t2)
13212{
13213 find interpretation(problem,interpretation);
13214 find mayInstanceOfEntry_class(problem,interpretation,var_e);
13215 find mayInstanceOfTransition_class(problem,interpretation,var_t1);
13216 find mayInstanceOfTransition_class(problem,interpretation,var_t2);
13217 // e is exported
13218 // t1 is exported
13219 // t2 is exported
13220 find mayInstanceOfEntry_class(problem,interpretation,var_e);
13221 find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0);
13222 find mayInstanceOfTransition_class(problem,interpretation,var_virtual0);
13223 find mayEquivalent(problem, interpretation, var_virtual0, var_t1);
13224 find mayInstanceOfEntry_class(problem,interpretation,var_e);
13225 find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual1);
13226 find mayInstanceOfTransition_class(problem,interpretation,var_virtual1);
13227 find mayEquivalent(problem, interpretation, var_virtual1, var_t2);
13228 var_t1 != var_t2;
13229}
13230private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(
13231 problem:LogicProblem, interpretation:PartialInterpretation,
13232 var_e, var_t1, var_t2)
13233{
13234 find interpretation(problem,interpretation);
13235 find mustInstanceOfEntry_class(problem,interpretation,var_e);
13236 find mustInstanceOfTransition_class(problem,interpretation,var_t1);
13237 find mustInstanceOfTransition_class(problem,interpretation,var_t2);
13238 // e is exported
13239 // t1 is exported
13240 // t2 is exported
13241 find mustInstanceOfEntry_class(problem,interpretation,var_e);
13242 find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0);
13243 find mustInstanceOfTransition_class(problem,interpretation,var_virtual0);
13244 var_virtual0 == var_t1;
13245 find mustInstanceOfEntry_class(problem,interpretation,var_e);
13246 find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual1);
13247 find mustInstanceOfTransition_class(problem,interpretation,var_virtual1);
13248 var_virtual1 == var_t2;
13249 var_t1 != var_t2;
13250}
13251// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries outgoingFromExit
13252private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(
13253 problem:LogicProblem, interpretation:PartialInterpretation,
13254 var_t, var_e)
13255{
13256 find interpretation(problem,interpretation);
13257 find mustInstanceOfTransition_class(problem,interpretation,var_t);
13258 find mustInstanceOfExit_class(problem,interpretation,var_e);
13259 // t is exported
13260 // e is exported
13261 find mustInstanceOfExit_class(problem,interpretation,var_e);
13262 find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0);
13263 find mustInstanceOfTransition_class(problem,interpretation,var_virtual0);
13264 var_virtual0 == var_t;
13265}
13266private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(
13267 problem:LogicProblem, interpretation:PartialInterpretation,
13268 var_t, var_e)
13269{
13270 find interpretation(problem,interpretation);
13271 find mayInstanceOfTransition_class(problem,interpretation,var_t);
13272 find mayInstanceOfExit_class(problem,interpretation,var_e);
13273 // t is exported
13274 // e is exported
13275 find mayInstanceOfExit_class(problem,interpretation,var_e);
13276 find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0);
13277 find mayInstanceOfTransition_class(problem,interpretation,var_virtual0);
13278 find mayEquivalent(problem, interpretation, var_virtual0, var_t);
13279}
13280private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(
13281 problem:LogicProblem, interpretation:PartialInterpretation,
13282 var_t, var_e)
13283{
13284 find interpretation(problem,interpretation);
13285 find mustInstanceOfTransition_class(problem,interpretation,var_t);
13286 find mustInstanceOfExit_class(problem,interpretation,var_e);
13287 // t is exported
13288 // e is exported
13289 find mustInstanceOfExit_class(problem,interpretation,var_e);
13290 find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0);
13291 find mustInstanceOfTransition_class(problem,interpretation,var_virtual0);
13292 var_virtual0 == var_t;
13293}
13294// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries outgoingFromFinal
13295private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(
13296 problem:LogicProblem, interpretation:PartialInterpretation,
13297 var_t, var_f)
13298{
13299 find interpretation(problem,interpretation);
13300 find mustInstanceOfTransition_class(problem,interpretation,var_t);
13301 find mustInstanceOfFinalState_class(problem,interpretation,var_f);
13302 // t is exported
13303 // f is exported
13304 find mustInstanceOfFinalState_class(problem,interpretation,var_f);
13305 find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_f,var_virtual0);
13306 find mustInstanceOfTransition_class(problem,interpretation,var_virtual0);
13307 var_virtual0 == var_t;
13308}
13309private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(
13310 problem:LogicProblem, interpretation:PartialInterpretation,
13311 var_t, var_f)
13312{
13313 find interpretation(problem,interpretation);
13314 find mayInstanceOfTransition_class(problem,interpretation,var_t);
13315 find mayInstanceOfFinalState_class(problem,interpretation,var_f);
13316 // t is exported
13317 // f is exported
13318 find mayInstanceOfFinalState_class(problem,interpretation,var_f);
13319 find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_f,var_virtual0);
13320 find mayInstanceOfTransition_class(problem,interpretation,var_virtual0);
13321 find mayEquivalent(problem, interpretation, var_virtual0, var_t);
13322}
13323private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(
13324 problem:LogicProblem, interpretation:PartialInterpretation,
13325 var_t, var_f)
13326{
13327 find interpretation(problem,interpretation);
13328 find mustInstanceOfTransition_class(problem,interpretation,var_t);
13329 find mustInstanceOfFinalState_class(problem,interpretation,var_f);
13330 // t is exported
13331 // f is exported
13332 find mustInstanceOfFinalState_class(problem,interpretation,var_f);
13333 find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_f,var_virtual0);
13334 find mustInstanceOfTransition_class(problem,interpretation,var_virtual0);
13335 var_virtual0 == var_t;
13336}
13337// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries noStateInRegion
13338private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(
13339 problem:LogicProblem, interpretation:PartialInterpretation,
13340 var_region)
13341{
13342 find interpretation(problem,interpretation);
13343 find mustInstanceOfRegion_class(problem,interpretation,var_region);
13344 // region is exported
13345 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion(problem,interpretation,var_region,_var__0);
13346}
13347private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(
13348 problem:LogicProblem, interpretation:PartialInterpretation,
13349 var_region)
13350{
13351 find interpretation(problem,interpretation);
13352 find mayInstanceOfRegion_class(problem,interpretation,var_region);
13353 // region is exported
13354 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion(problem,interpretation,var_region,_var__0);
13355}
13356private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(
13357 problem:LogicProblem, interpretation:PartialInterpretation,
13358 var_region)
13359{
13360 find interpretation(problem,interpretation);
13361 find mustInstanceOfRegion_class(problem,interpretation,var_region);
13362 // region is exported
13363 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion(problem,interpretation,var_region,_var__0);
13364}
13365// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries StateInRegion
13366private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion(
13367 problem:LogicProblem, interpretation:PartialInterpretation,
13368 var_region, var_state)
13369{
13370 find interpretation(problem,interpretation);
13371 find mustInstanceOfRegion_class(problem,interpretation,var_region);
13372 find mustInstanceOfState_class(problem,interpretation,var_state);
13373 // region is exported
13374 // state is exported
13375 find mustInstanceOfRegion_class(problem,interpretation,var_region);
13376 find mustInRelationvertices_reference_Region(problem,interpretation,var_region,var_virtual0);
13377 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
13378 var_virtual0 == var_state;
13379}
13380private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion(
13381 problem:LogicProblem, interpretation:PartialInterpretation,
13382 var_region, var_state)
13383{
13384 find interpretation(problem,interpretation);
13385 find mayInstanceOfRegion_class(problem,interpretation,var_region);
13386 find mayInstanceOfState_class(problem,interpretation,var_state);
13387 // region is exported
13388 // state is exported
13389 find mayInstanceOfRegion_class(problem,interpretation,var_region);
13390 find mayInRelationvertices_reference_Region(problem,interpretation,var_region,var_virtual0);
13391 find mayInstanceOfVertex_class(problem,interpretation,var_virtual0);
13392 find mayEquivalent(problem, interpretation, var_virtual0, var_state);
13393}
13394private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion(
13395 problem:LogicProblem, interpretation:PartialInterpretation,
13396 var_region, var_state)
13397{
13398 find interpretation(problem,interpretation);
13399 find mustInstanceOfRegion_class(problem,interpretation,var_region);
13400 find mustInstanceOfState_class(problem,interpretation,var_state);
13401 // region is exported
13402 // state is exported
13403 find mustInstanceOfRegion_class(problem,interpretation,var_region);
13404 find mustInRelationvertices_reference_Region(problem,interpretation,var_region,var_virtual0);
13405 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
13406 var_virtual0 == var_state;
13407}
13408// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries choiceHasNoOutgoing
13409private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(
13410 problem:LogicProblem, interpretation:PartialInterpretation,
13411 var_c)
13412{
13413 find interpretation(problem,interpretation);
13414 find mustInstanceOfChoice_class(problem,interpretation,var_c);
13415 // c is exported
13416 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_c,_var__1);
13417}
13418private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(
13419 problem:LogicProblem, interpretation:PartialInterpretation,
13420 var_c)
13421{
13422 find interpretation(problem,interpretation);
13423 find mayInstanceOfChoice_class(problem,interpretation,var_c);
13424 // c is exported
13425 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_c,_var__1);
13426}
13427private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(
13428 problem:LogicProblem, interpretation:PartialInterpretation,
13429 var_c)
13430{
13431 find interpretation(problem,interpretation);
13432 find mustInstanceOfChoice_class(problem,interpretation,var_c);
13433 // c is exported
13434 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_c,_var__1);
13435}
13436// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries choiceHasNoIncoming
13437private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(
13438 problem:LogicProblem, interpretation:PartialInterpretation,
13439 var_c)
13440{
13441 find interpretation(problem,interpretation);
13442 find mustInstanceOfChoice_class(problem,interpretation,var_c);
13443 // c is exported
13444 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_c);
13445}
13446private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(
13447 problem:LogicProblem, interpretation:PartialInterpretation,
13448 var_c)
13449{
13450 find interpretation(problem,interpretation);
13451 find mayInstanceOfChoice_class(problem,interpretation,var_c);
13452 // c is exported
13453 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_c);
13454}
13455private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(
13456 problem:LogicProblem, interpretation:PartialInterpretation,
13457 var_c)
13458{
13459 find interpretation(problem,interpretation);
13460 find mustInstanceOfChoice_class(problem,interpretation,var_c);
13461 // c is exported
13462 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_c);
13463}
13464// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries synchHasNoOutgoing
13465private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(
13466 problem:LogicProblem, interpretation:PartialInterpretation,
13467 var_s)
13468{
13469 find interpretation(problem,interpretation);
13470 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
13471 // s is exported
13472 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,_var__1);
13473}
13474private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(
13475 problem:LogicProblem, interpretation:PartialInterpretation,
13476 var_s)
13477{
13478 find interpretation(problem,interpretation);
13479 find mayInstanceOfSynchronization_class(problem,interpretation,var_s);
13480 // s is exported
13481 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,_var__1);
13482}
13483private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(
13484 problem:LogicProblem, interpretation:PartialInterpretation,
13485 var_s)
13486{
13487 find interpretation(problem,interpretation);
13488 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
13489 // s is exported
13490 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,_var__1);
13491}
13492// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries synchHasNoIncoming
13493private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(
13494 problem:LogicProblem, interpretation:PartialInterpretation,
13495 var_s)
13496{
13497 find interpretation(problem,interpretation);
13498 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
13499 // s is exported
13500 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_s);
13501}
13502private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(
13503 problem:LogicProblem, interpretation:PartialInterpretation,
13504 var_s)
13505{
13506 find interpretation(problem,interpretation);
13507 find mayInstanceOfSynchronization_class(problem,interpretation,var_s);
13508 // s is exported
13509 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_s);
13510}
13511private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(
13512 problem:LogicProblem, interpretation:PartialInterpretation,
13513 var_s)
13514{
13515 find interpretation(problem,interpretation);
13516 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
13517 // s is exported
13518 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_s);
13519}
13520// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries SynchronizedIncomingInSameRegion
13521private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(
13522 problem:LogicProblem, interpretation:PartialInterpretation,
13523 var_s, var_v1, var_v2)
13524{
13525 find interpretation(problem,interpretation);
13526 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
13527 find mustInstanceOfVertex_class(problem,interpretation,var_v1);
13528 find mustInstanceOfVertex_class(problem,interpretation,var_v2);
13529 // s is exported
13530 // v1 is exported
13531 // v2 is exported
13532 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_v1,var_s);
13533 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_v2,var_s);
13534 neg find mayEquivalent(problem, interpretation, var_t1, var_t2);
13535 find mustInstanceOfRegion_class(problem,interpretation,var_r);
13536 find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0);
13537 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
13538 var_virtual0 == var_v1;
13539 find mustInstanceOfRegion_class(problem,interpretation,var_r);
13540 find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1);
13541 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
13542 var_virtual1 == var_v2;
13543}or{
13544 find interpretation(problem,interpretation);
13545 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
13546 find mustInstanceOfVertex_class(problem,interpretation,var_v1);
13547 find mustInstanceOfVertex_class(problem,interpretation,var_v2);
13548 // s is exported
13549 // v1 is exported
13550 // v2 is exported
13551 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_s,var_v1);
13552 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_s,var_v2);
13553 neg find mayEquivalent(problem, interpretation, var_t1, var_t2);
13554 find mustInstanceOfRegion_class(problem,interpretation,var_r);
13555 find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0);
13556 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
13557 var_virtual0 == var_v1;
13558 find mustInstanceOfRegion_class(problem,interpretation,var_r);
13559 find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1);
13560 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
13561 var_virtual1 == var_v2;
13562}
13563private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(
13564 problem:LogicProblem, interpretation:PartialInterpretation,
13565 var_s, var_v1, var_v2)
13566{
13567 find interpretation(problem,interpretation);
13568 find mayInstanceOfSynchronization_class(problem,interpretation,var_s);
13569 find mayInstanceOfVertex_class(problem,interpretation,var_v1);
13570 find mayInstanceOfVertex_class(problem,interpretation,var_v2);
13571 // s is exported
13572 // v1 is exported
13573 // v2 is exported
13574 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_v1,var_s);
13575 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_v2,var_s);
13576 var_t1 != var_t2;
13577 find mayInstanceOfRegion_class(problem,interpretation,var_r);
13578 find mayInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0);
13579 find mayInstanceOfVertex_class(problem,interpretation,var_virtual0);
13580 find mayEquivalent(problem, interpretation, var_virtual0, var_v1);
13581 find mayInstanceOfRegion_class(problem,interpretation,var_r);
13582 find mayInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1);
13583 find mayInstanceOfVertex_class(problem,interpretation,var_virtual1);
13584 find mayEquivalent(problem, interpretation, var_virtual1, var_v2);
13585}or{
13586 find interpretation(problem,interpretation);
13587 find mayInstanceOfSynchronization_class(problem,interpretation,var_s);
13588 find mayInstanceOfVertex_class(problem,interpretation,var_v1);
13589 find mayInstanceOfVertex_class(problem,interpretation,var_v2);
13590 // s is exported
13591 // v1 is exported
13592 // v2 is exported
13593 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_s,var_v1);
13594 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_s,var_v2);
13595 var_t1 != var_t2;
13596 find mayInstanceOfRegion_class(problem,interpretation,var_r);
13597 find mayInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0);
13598 find mayInstanceOfVertex_class(problem,interpretation,var_virtual0);
13599 find mayEquivalent(problem, interpretation, var_virtual0, var_v1);
13600 find mayInstanceOfRegion_class(problem,interpretation,var_r);
13601 find mayInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1);
13602 find mayInstanceOfVertex_class(problem,interpretation,var_virtual1);
13603 find mayEquivalent(problem, interpretation, var_virtual1, var_v2);
13604}
13605private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(
13606 problem:LogicProblem, interpretation:PartialInterpretation,
13607 var_s, var_v1, var_v2)
13608{
13609 find interpretation(problem,interpretation);
13610 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
13611 find mustInstanceOfVertex_class(problem,interpretation,var_v1);
13612 find mustInstanceOfVertex_class(problem,interpretation,var_v2);
13613 // s is exported
13614 // v1 is exported
13615 // v2 is exported
13616 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_v1,var_s);
13617 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_v2,var_s);
13618 var_t1 != var_t2;
13619 find mustInstanceOfRegion_class(problem,interpretation,var_r);
13620 find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0);
13621 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
13622 var_virtual0 == var_v1;
13623 find mustInstanceOfRegion_class(problem,interpretation,var_r);
13624 find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1);
13625 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
13626 var_virtual1 == var_v2;
13627}or{
13628 find interpretation(problem,interpretation);
13629 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
13630 find mustInstanceOfVertex_class(problem,interpretation,var_v1);
13631 find mustInstanceOfVertex_class(problem,interpretation,var_v2);
13632 // s is exported
13633 // v1 is exported
13634 // v2 is exported
13635 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_s,var_v1);
13636 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_s,var_v2);
13637 var_t1 != var_t2;
13638 find mustInstanceOfRegion_class(problem,interpretation,var_r);
13639 find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0);
13640 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
13641 var_virtual0 == var_v1;
13642 find mustInstanceOfRegion_class(problem,interpretation,var_r);
13643 find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1);
13644 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
13645 var_virtual1 == var_v2;
13646}
13647// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries notSynchronizingStates
13648private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(
13649 problem:LogicProblem, interpretation:PartialInterpretation,
13650 var_s)
13651{
13652 find interpretation(problem,interpretation);
13653 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
13654 // s is exported
13655 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition(problem,interpretation,var_s);
13656 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition(problem,interpretation,var_s);
13657}
13658private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(
13659 problem:LogicProblem, interpretation:PartialInterpretation,
13660 var_s)
13661{
13662 find interpretation(problem,interpretation);
13663 find mayInstanceOfSynchronization_class(problem,interpretation,var_s);
13664 // s is exported
13665 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition(problem,interpretation,var_s);
13666 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition(problem,interpretation,var_s);
13667}
13668private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(
13669 problem:LogicProblem, interpretation:PartialInterpretation,
13670 var_s)
13671{
13672 find interpretation(problem,interpretation);
13673 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
13674 // s is exported
13675 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition(problem,interpretation,var_s);
13676 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition(problem,interpretation,var_s);
13677}
13678// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries hasMultipleOutgoingTrainsition
13679private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition(
13680 problem:LogicProblem, interpretation:PartialInterpretation,
13681 var_v)
13682{
13683 find interpretation(problem,interpretation);
13684 find mustInstanceOfSynchronization_class(problem,interpretation,var_v);
13685 // v is exported
13686 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_trg1);
13687 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v,var_trg2);
13688 neg find mayEquivalent(problem, interpretation, var_trg1, var_trg2);
13689}
13690private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition(
13691 problem:LogicProblem, interpretation:PartialInterpretation,
13692 var_v)
13693{
13694 find interpretation(problem,interpretation);
13695 find mayInstanceOfSynchronization_class(problem,interpretation,var_v);
13696 // v is exported
13697 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_trg1);
13698 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v,var_trg2);
13699 var_trg1 != var_trg2;
13700}
13701private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition(
13702 problem:LogicProblem, interpretation:PartialInterpretation,
13703 var_v)
13704{
13705 find interpretation(problem,interpretation);
13706 find mustInstanceOfSynchronization_class(problem,interpretation,var_v);
13707 // v is exported
13708 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_trg1);
13709 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v,var_trg2);
13710 var_trg1 != var_trg2;
13711}
13712// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries hasMultipleIncomingTrainsition
13713private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition(
13714 problem:LogicProblem, interpretation:PartialInterpretation,
13715 var_v)
13716{
13717 find interpretation(problem,interpretation);
13718 find mustInstanceOfSynchronization_class(problem,interpretation,var_v);
13719 // v is exported
13720 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_src1,var_v);
13721 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_src2,var_v);
13722 neg find mayEquivalent(problem, interpretation, var_src1, var_src2);
13723}
13724private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition(
13725 problem:LogicProblem, interpretation:PartialInterpretation,
13726 var_v)
13727{
13728 find interpretation(problem,interpretation);
13729 find mayInstanceOfSynchronization_class(problem,interpretation,var_v);
13730 // v is exported
13731 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_src1,var_v);
13732 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_src2,var_v);
13733 var_src1 != var_src2;
13734}
13735private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition(
13736 problem:LogicProblem, interpretation:PartialInterpretation,
13737 var_v)
13738{
13739 find interpretation(problem,interpretation);
13740 find mustInstanceOfSynchronization_class(problem,interpretation,var_v);
13741 // v is exported
13742 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_src1,var_v);
13743 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_src2,var_v);
13744 var_src1 != var_src2;
13745}
13746// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries SynchronizedRegionsAreNotSiblings
13747private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(
13748 problem:LogicProblem, interpretation:PartialInterpretation,
13749 var_s, var_v1, var_v2)
13750{
13751 find interpretation(problem,interpretation);
13752 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
13753 find mustInstanceOfVertex_class(problem,interpretation,var_v1);
13754 find mustInstanceOfVertex_class(problem,interpretation,var_v2);
13755 // s is exported
13756 // v1 is exported
13757 // v2 is exported
13758 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v1,var_s);
13759 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v2,var_s);
13760 find mustInstanceOfCompositeElement_class(problem,interpretation,var_r1);
13761 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0);
13762 find mustInstanceOfRegion_class(problem,interpretation,var_virtual0);
13763 find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1);
13764 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
13765 var_virtual1 == var_v1;
13766 find mustInstanceOfCompositeElement_class(problem,interpretation,var_r2);
13767 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2);
13768 find mustInstanceOfRegion_class(problem,interpretation,var_virtual2);
13769 find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3);
13770 find mustInstanceOfVertex_class(problem,interpretation,var_virtual3);
13771 var_virtual3 == var_v2;
13772 neg find mayEquivalent(problem, interpretation, var_r1, var_r2);
13773}or{
13774 find interpretation(problem,interpretation);
13775 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
13776 find mustInstanceOfVertex_class(problem,interpretation,var_v1);
13777 find mustInstanceOfVertex_class(problem,interpretation,var_v2);
13778 // s is exported
13779 // v1 is exported
13780 // v2 is exported
13781 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v1);
13782 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_s,var_v2);
13783 find mustInstanceOfCompositeElement_class(problem,interpretation,var_r1);
13784 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0);
13785 find mustInstanceOfRegion_class(problem,interpretation,var_virtual0);
13786 find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1);
13787 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
13788 var_virtual1 == var_v1;
13789 find mustInstanceOfCompositeElement_class(problem,interpretation,var_r2);
13790 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2);
13791 find mustInstanceOfRegion_class(problem,interpretation,var_virtual2);
13792 find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3);
13793 find mustInstanceOfVertex_class(problem,interpretation,var_virtual3);
13794 var_virtual3 == var_v2;
13795 neg find mayEquivalent(problem, interpretation, var_r1, var_r2);
13796}
13797private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(
13798 problem:LogicProblem, interpretation:PartialInterpretation,
13799 var_s, var_v1, var_v2)
13800{
13801 find interpretation(problem,interpretation);
13802 find mayInstanceOfSynchronization_class(problem,interpretation,var_s);
13803 find mayInstanceOfVertex_class(problem,interpretation,var_v1);
13804 find mayInstanceOfVertex_class(problem,interpretation,var_v2);
13805 // s is exported
13806 // v1 is exported
13807 // v2 is exported
13808 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v1,var_s);
13809 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v2,var_s);
13810 find mayInstanceOfCompositeElement_class(problem,interpretation,var_r1);
13811 find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0);
13812 find mayInstanceOfRegion_class(problem,interpretation,var_virtual0);
13813 find mayInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1);
13814 find mayInstanceOfVertex_class(problem,interpretation,var_virtual1);
13815 find mayEquivalent(problem, interpretation, var_virtual1, var_v1);
13816 find mayInstanceOfCompositeElement_class(problem,interpretation,var_r2);
13817 find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2);
13818 find mayInstanceOfRegion_class(problem,interpretation,var_virtual2);
13819 find mayInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3);
13820 find mayInstanceOfVertex_class(problem,interpretation,var_virtual3);
13821 find mayEquivalent(problem, interpretation, var_virtual3, var_v2);
13822 var_r1 != var_r2;
13823}or{
13824 find interpretation(problem,interpretation);
13825 find mayInstanceOfSynchronization_class(problem,interpretation,var_s);
13826 find mayInstanceOfVertex_class(problem,interpretation,var_v1);
13827 find mayInstanceOfVertex_class(problem,interpretation,var_v2);
13828 // s is exported
13829 // v1 is exported
13830 // v2 is exported
13831 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v1);
13832 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_s,var_v2);
13833 find mayInstanceOfCompositeElement_class(problem,interpretation,var_r1);
13834 find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0);
13835 find mayInstanceOfRegion_class(problem,interpretation,var_virtual0);
13836 find mayInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1);
13837 find mayInstanceOfVertex_class(problem,interpretation,var_virtual1);
13838 find mayEquivalent(problem, interpretation, var_virtual1, var_v1);
13839 find mayInstanceOfCompositeElement_class(problem,interpretation,var_r2);
13840 find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2);
13841 find mayInstanceOfRegion_class(problem,interpretation,var_virtual2);
13842 find mayInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3);
13843 find mayInstanceOfVertex_class(problem,interpretation,var_virtual3);
13844 find mayEquivalent(problem, interpretation, var_virtual3, var_v2);
13845 var_r1 != var_r2;
13846}
13847private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(
13848 problem:LogicProblem, interpretation:PartialInterpretation,
13849 var_s, var_v1, var_v2)
13850{
13851 find interpretation(problem,interpretation);
13852 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
13853 find mustInstanceOfVertex_class(problem,interpretation,var_v1);
13854 find mustInstanceOfVertex_class(problem,interpretation,var_v2);
13855 // s is exported
13856 // v1 is exported
13857 // v2 is exported
13858 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v1,var_s);
13859 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v2,var_s);
13860 find mustInstanceOfCompositeElement_class(problem,interpretation,var_r1);
13861 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0);
13862 find mustInstanceOfRegion_class(problem,interpretation,var_virtual0);
13863 find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1);
13864 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
13865 var_virtual1 == var_v1;
13866 find mustInstanceOfCompositeElement_class(problem,interpretation,var_r2);
13867 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2);
13868 find mustInstanceOfRegion_class(problem,interpretation,var_virtual2);
13869 find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3);
13870 find mustInstanceOfVertex_class(problem,interpretation,var_virtual3);
13871 var_virtual3 == var_v2;
13872 var_r1 != var_r2;
13873}or{
13874 find interpretation(problem,interpretation);
13875 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
13876 find mustInstanceOfVertex_class(problem,interpretation,var_v1);
13877 find mustInstanceOfVertex_class(problem,interpretation,var_v2);
13878 // s is exported
13879 // v1 is exported
13880 // v2 is exported
13881 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v1);
13882 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_s,var_v2);
13883 find mustInstanceOfCompositeElement_class(problem,interpretation,var_r1);
13884 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0);
13885 find mustInstanceOfRegion_class(problem,interpretation,var_virtual0);
13886 find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1);
13887 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
13888 var_virtual1 == var_v1;
13889 find mustInstanceOfCompositeElement_class(problem,interpretation,var_r2);
13890 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2);
13891 find mustInstanceOfRegion_class(problem,interpretation,var_virtual2);
13892 find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3);
13893 find mustInstanceOfVertex_class(problem,interpretation,var_virtual3);
13894 var_virtual3 == var_v2;
13895 var_r1 != var_r2;
13896}
13897// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries child
13898private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(
13899 problem:LogicProblem, interpretation:PartialInterpretation,
13900 var_parent, var_child)
13901{
13902 find interpretation(problem,interpretation);
13903 find mustInstanceOfCompositeElement_class(problem,interpretation,var_parent);
13904 find mustInstanceOfVertex_class(problem,interpretation,var_child);
13905 // parent is exported
13906 // child is exported
13907 find mustInstanceOfCompositeElement_class(problem,interpretation,var_parent);
13908 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_parent,var_virtual0);
13909 find mustInstanceOfRegion_class(problem,interpretation,var_virtual0);
13910 find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1);
13911 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
13912 var_virtual1 == var_child;
13913}
13914private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(
13915 problem:LogicProblem, interpretation:PartialInterpretation,
13916 var_parent, var_child)
13917{
13918 find interpretation(problem,interpretation);
13919 find mayInstanceOfCompositeElement_class(problem,interpretation,var_parent);
13920 find mayInstanceOfVertex_class(problem,interpretation,var_child);
13921 // parent is exported
13922 // child is exported
13923 find mayInstanceOfCompositeElement_class(problem,interpretation,var_parent);
13924 find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_parent,var_virtual0);
13925 find mayInstanceOfRegion_class(problem,interpretation,var_virtual0);
13926 find mayInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1);
13927 find mayInstanceOfVertex_class(problem,interpretation,var_virtual1);
13928 find mayEquivalent(problem, interpretation, var_virtual1, var_child);
13929}
13930private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(
13931 problem:LogicProblem, interpretation:PartialInterpretation,
13932 var_parent, var_child)
13933{
13934 find interpretation(problem,interpretation);
13935 find mustInstanceOfCompositeElement_class(problem,interpretation,var_parent);
13936 find mustInstanceOfVertex_class(problem,interpretation,var_child);
13937 // parent is exported
13938 // child is exported
13939 find mustInstanceOfCompositeElement_class(problem,interpretation,var_parent);
13940 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_parent,var_virtual0);
13941 find mustInstanceOfRegion_class(problem,interpretation,var_virtual0);
13942 find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1);
13943 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
13944 var_virtual1 == var_child;
13945}
13946// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries SynchronizedRegionDoesNotHaveMultipleRegions
13947private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(
13948 problem:LogicProblem, interpretation:PartialInterpretation,
13949 var_s, var_v)
13950{
13951 find interpretation(problem,interpretation);
13952 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
13953 find mustInstanceOfVertex_class(problem,interpretation,var_v);
13954 // s is exported
13955 // v is exported
13956 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_s);
13957 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v);
13958 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c);
13959}or{
13960 find interpretation(problem,interpretation);
13961 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
13962 find mustInstanceOfVertex_class(problem,interpretation,var_v);
13963 // s is exported
13964 // v is exported
13965 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v);
13966 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v);
13967 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c);
13968}
13969private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(
13970 problem:LogicProblem, interpretation:PartialInterpretation,
13971 var_s, var_v)
13972{
13973 find interpretation(problem,interpretation);
13974 find mayInstanceOfSynchronization_class(problem,interpretation,var_s);
13975 find mayInstanceOfVertex_class(problem,interpretation,var_v);
13976 // s is exported
13977 // v is exported
13978 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_s);
13979 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v);
13980 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c);
13981}or{
13982 find interpretation(problem,interpretation);
13983 find mayInstanceOfSynchronization_class(problem,interpretation,var_s);
13984 find mayInstanceOfVertex_class(problem,interpretation,var_v);
13985 // s is exported
13986 // v is exported
13987 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v);
13988 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v);
13989 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c);
13990}
13991private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(
13992 problem:LogicProblem, interpretation:PartialInterpretation,
13993 var_s, var_v)
13994{
13995 find interpretation(problem,interpretation);
13996 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
13997 find mustInstanceOfVertex_class(problem,interpretation,var_v);
13998 // s is exported
13999 // v is exported
14000 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_s);
14001 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v);
14002 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c);
14003}or{
14004 find interpretation(problem,interpretation);
14005 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
14006 find mustInstanceOfVertex_class(problem,interpretation,var_v);
14007 // s is exported
14008 // v is exported
14009 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v);
14010 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v);
14011 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c);
14012}
14013// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries hasMultipleRegions
14014private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(
14015 problem:LogicProblem, interpretation:PartialInterpretation,
14016 var_composite)
14017{
14018 find interpretation(problem,interpretation);
14019 find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite);
14020 // composite is exported
14021 find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite);
14022 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual0);
14023 find mustInstanceOfRegion_class(problem,interpretation,var_virtual0);
14024 var_virtual0 == var_region1;
14025 find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite);
14026 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual1);
14027 find mustInstanceOfRegion_class(problem,interpretation,var_virtual1);
14028 var_virtual1 == var_region2;
14029 neg find mayEquivalent(problem, interpretation, var_region1, var_region2);
14030}
14031private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(
14032 problem:LogicProblem, interpretation:PartialInterpretation,
14033 var_composite)
14034{
14035 find interpretation(problem,interpretation);
14036 find mayInstanceOfCompositeElement_class(problem,interpretation,var_composite);
14037 // composite is exported
14038 find mayInstanceOfCompositeElement_class(problem,interpretation,var_composite);
14039 find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual0);
14040 find mayInstanceOfRegion_class(problem,interpretation,var_virtual0);
14041 find mayEquivalent(problem, interpretation, var_virtual0, var_region1);
14042 find mayInstanceOfCompositeElement_class(problem,interpretation,var_composite);
14043 find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual1);
14044 find mayInstanceOfRegion_class(problem,interpretation,var_virtual1);
14045 find mayEquivalent(problem, interpretation, var_virtual1, var_region2);
14046 var_region1 != var_region2;
14047}
14048private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(
14049 problem:LogicProblem, interpretation:PartialInterpretation,
14050 var_composite)
14051{
14052 find interpretation(problem,interpretation);
14053 find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite);
14054 // composite is exported
14055 find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite);
14056 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual0);
14057 find mustInstanceOfRegion_class(problem,interpretation,var_virtual0);
14058 var_virtual0 == var_region1;
14059 find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite);
14060 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual1);
14061 find mustInstanceOfRegion_class(problem,interpretation,var_virtual1);
14062 var_virtual1 == var_region2;
14063 var_region1 != var_region2;
14064}
14065// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries synchThree
14066private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(
14067 problem:LogicProblem, interpretation:PartialInterpretation,
14068 var_s)
14069{
14070 find interpretation(problem,interpretation);
14071 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
14072 // s is exported
14073 find mustInstanceOfTransition_class(problem,interpretation,var_t1);
14074 find mustInRelationtarget_reference_Transition(problem,interpretation,var_t1,var_virtual0);
14075 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
14076 var_virtual0 == var_s;
14077 find mustInstanceOfTransition_class(problem,interpretation,var_t2);
14078 find mustInRelationtarget_reference_Transition(problem,interpretation,var_t2,var_virtual1);
14079 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
14080 var_virtual1 == var_s;
14081 find mustInstanceOfTransition_class(problem,interpretation,var_t3);
14082 find mustInRelationtarget_reference_Transition(problem,interpretation,var_t3,var_virtual2);
14083 find mustInstanceOfVertex_class(problem,interpretation,var_virtual2);
14084 var_virtual2 == var_s;
14085 neg find mayEquivalent(problem, interpretation, var_t1, var_t2);
14086 neg find mayEquivalent(problem, interpretation, var_t2, var_t3);
14087 neg find mayEquivalent(problem, interpretation, var_t1, var_t3);
14088}or{
14089 find interpretation(problem,interpretation);
14090 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
14091 // s is exported
14092 find mustInstanceOfTransition_class(problem,interpretation,var_t1);
14093 find mustInRelationsource_reference_Transition(problem,interpretation,var_t1,var_virtual0);
14094 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
14095 var_virtual0 == var_s;
14096 find mustInstanceOfTransition_class(problem,interpretation,var_t2);
14097 find mustInRelationsource_reference_Transition(problem,interpretation,var_t2,var_virtual1);
14098 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
14099 var_virtual1 == var_s;
14100 find mustInstanceOfTransition_class(problem,interpretation,var_t3);
14101 find mustInRelationsource_reference_Transition(problem,interpretation,var_t3,var_virtual2);
14102 find mustInstanceOfVertex_class(problem,interpretation,var_virtual2);
14103 var_virtual2 == var_s;
14104 neg find mayEquivalent(problem, interpretation, var_t1, var_t2);
14105 neg find mayEquivalent(problem, interpretation, var_t2, var_t3);
14106 neg find mayEquivalent(problem, interpretation, var_t1, var_t3);
14107}
14108private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(
14109 problem:LogicProblem, interpretation:PartialInterpretation,
14110 var_s)
14111{
14112 find interpretation(problem,interpretation);
14113 find mayInstanceOfSynchronization_class(problem,interpretation,var_s);
14114 // s is exported
14115 find mayInstanceOfTransition_class(problem,interpretation,var_t1);
14116 find mayInRelationtarget_reference_Transition(problem,interpretation,var_t1,var_virtual0);
14117 find mayInstanceOfVertex_class(problem,interpretation,var_virtual0);
14118 find mayEquivalent(problem, interpretation, var_virtual0, var_s);
14119 find mayInstanceOfTransition_class(problem,interpretation,var_t2);
14120 find mayInRelationtarget_reference_Transition(problem,interpretation,var_t2,var_virtual1);
14121 find mayInstanceOfVertex_class(problem,interpretation,var_virtual1);
14122 find mayEquivalent(problem, interpretation, var_virtual1, var_s);
14123 find mayInstanceOfTransition_class(problem,interpretation,var_t3);
14124 find mayInRelationtarget_reference_Transition(problem,interpretation,var_t3,var_virtual2);
14125 find mayInstanceOfVertex_class(problem,interpretation,var_virtual2);
14126 find mayEquivalent(problem, interpretation, var_virtual2, var_s);
14127 var_t1 != var_t2;
14128 var_t2 != var_t3;
14129 var_t1 != var_t3;
14130}or{
14131 find interpretation(problem,interpretation);
14132 find mayInstanceOfSynchronization_class(problem,interpretation,var_s);
14133 // s is exported
14134 find mayInstanceOfTransition_class(problem,interpretation,var_t1);
14135 find mayInRelationsource_reference_Transition(problem,interpretation,var_t1,var_virtual0);
14136 find mayInstanceOfVertex_class(problem,interpretation,var_virtual0);
14137 find mayEquivalent(problem, interpretation, var_virtual0, var_s);
14138 find mayInstanceOfTransition_class(problem,interpretation,var_t2);
14139 find mayInRelationsource_reference_Transition(problem,interpretation,var_t2,var_virtual1);
14140 find mayInstanceOfVertex_class(problem,interpretation,var_virtual1);
14141 find mayEquivalent(problem, interpretation, var_virtual1, var_s);
14142 find mayInstanceOfTransition_class(problem,interpretation,var_t3);
14143 find mayInRelationsource_reference_Transition(problem,interpretation,var_t3,var_virtual2);
14144 find mayInstanceOfVertex_class(problem,interpretation,var_virtual2);
14145 find mayEquivalent(problem, interpretation, var_virtual2, var_s);
14146 var_t1 != var_t2;
14147 var_t2 != var_t3;
14148 var_t1 != var_t3;
14149}
14150private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(
14151 problem:LogicProblem, interpretation:PartialInterpretation,
14152 var_s)
14153{
14154 find interpretation(problem,interpretation);
14155 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
14156 // s is exported
14157 find mustInstanceOfTransition_class(problem,interpretation,var_t1);
14158 find mustInRelationtarget_reference_Transition(problem,interpretation,var_t1,var_virtual0);
14159 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
14160 var_virtual0 == var_s;
14161 find mustInstanceOfTransition_class(problem,interpretation,var_t2);
14162 find mustInRelationtarget_reference_Transition(problem,interpretation,var_t2,var_virtual1);
14163 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
14164 var_virtual1 == var_s;
14165 find mustInstanceOfTransition_class(problem,interpretation,var_t3);
14166 find mustInRelationtarget_reference_Transition(problem,interpretation,var_t3,var_virtual2);
14167 find mustInstanceOfVertex_class(problem,interpretation,var_virtual2);
14168 var_virtual2 == var_s;
14169 var_t1 != var_t2;
14170 var_t2 != var_t3;
14171 var_t1 != var_t3;
14172}or{
14173 find interpretation(problem,interpretation);
14174 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
14175 // s is exported
14176 find mustInstanceOfTransition_class(problem,interpretation,var_t1);
14177 find mustInRelationsource_reference_Transition(problem,interpretation,var_t1,var_virtual0);
14178 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
14179 var_virtual0 == var_s;
14180 find mustInstanceOfTransition_class(problem,interpretation,var_t2);
14181 find mustInRelationsource_reference_Transition(problem,interpretation,var_t2,var_virtual1);
14182 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
14183 var_virtual1 == var_s;
14184 find mustInstanceOfTransition_class(problem,interpretation,var_t3);
14185 find mustInRelationsource_reference_Transition(problem,interpretation,var_t3,var_virtual2);
14186 find mustInstanceOfVertex_class(problem,interpretation,var_virtual2);
14187 var_virtual2 == var_s;
14188 var_t1 != var_t2;
14189 var_t2 != var_t3;
14190 var_t1 != var_t3;
14191}
14192// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries twoSynch
14193private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(
14194 problem:LogicProblem, interpretation:PartialInterpretation,
14195 var_s1, var_s2)
14196{
14197 find interpretation(problem,interpretation);
14198 find mustInstanceOfSynchronization_class(problem,interpretation,var_s1);
14199 find mustInstanceOfSynchronization_class(problem,interpretation,var_s2);
14200 // s1 is exported
14201 // s2 is exported
14202 find mustInstanceOfSynchronization_class(problem,interpretation,var_s1);
14203 find mustInstanceOfSynchronization_class(problem,interpretation,var_s2);
14204 neg find mayEquivalent(problem, interpretation, var_s1, var_s2);
14205}
14206private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(
14207 problem:LogicProblem, interpretation:PartialInterpretation,
14208 var_s1, var_s2)
14209{
14210 find interpretation(problem,interpretation);
14211 find mayInstanceOfSynchronization_class(problem,interpretation,var_s1);
14212 find mayInstanceOfSynchronization_class(problem,interpretation,var_s2);
14213 // s1 is exported
14214 // s2 is exported
14215 find mayInstanceOfSynchronization_class(problem,interpretation,var_s1);
14216 find mayInstanceOfSynchronization_class(problem,interpretation,var_s2);
14217 var_s1 != var_s2;
14218}
14219private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(
14220 problem:LogicProblem, interpretation:PartialInterpretation,
14221 var_s1, var_s2)
14222{
14223 find interpretation(problem,interpretation);
14224 find mustInstanceOfSynchronization_class(problem,interpretation,var_s1);
14225 find mustInstanceOfSynchronization_class(problem,interpretation,var_s2);
14226 // s1 is exported
14227 // s2 is exported
14228 find mustInstanceOfSynchronization_class(problem,interpretation,var_s1);
14229 find mustInstanceOfSynchronization_class(problem,interpretation,var_s2);
14230 var_s1 != var_s2;
14231}
14232
14233//////////
14234// 1.4 Containment Indexer
14235//////////
14236private pattern mustContains2(source: DefinedElement, target: DefinedElement) {
14237 find mustContains4(_,_,source,target);
14238}
14239
14240private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation,
14241 source: DefinedElement, target: DefinedElement)
14242 { find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,source,target); }or
14243
14244 { find mustInRelationvertices_reference_Region(problem,interpretation,source,target); }or
14245
14246 { find mustInRelationregions_reference_CompositeElement(problem,interpretation,source,target); }
14247
14248private pattern mustTransitiveContains(source,target) {
14249 find mustContains2+(source,target);
14250}
14251
14252//////////
14253// 2. Invalidation Indexers
14254//////////
14255// 2.1 Invalidated by WF Queries
14256//////////
14257pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(problem:LogicProblem, interpretation:PartialInterpretation,
14258 var_r1)
14259{
14260 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(problem,interpretation,var_r1);
14261}
14262pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(problem:LogicProblem, interpretation:PartialInterpretation,
14263 var_r)
14264{
14265 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(problem,interpretation,var_r);
14266}
14267pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(problem:LogicProblem, interpretation:PartialInterpretation,
14268 var_t, var_e)
14269{
14270 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(problem,interpretation,var_t,var_e);
14271}
14272pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(problem:LogicProblem, interpretation:PartialInterpretation,
14273 var_e)
14274{
14275 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(problem,interpretation,var_e);
14276}
14277pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(problem:LogicProblem, interpretation:PartialInterpretation,
14278 var_e, var_t1, var_t2)
14279{
14280 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(problem,interpretation,var_e,var_t1,var_t2);
14281}
14282pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(problem:LogicProblem, interpretation:PartialInterpretation,
14283 var_t, var_e)
14284{
14285 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(problem,interpretation,var_t,var_e);
14286}
14287pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(problem:LogicProblem, interpretation:PartialInterpretation,
14288 var_t, var_f)
14289{
14290 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(problem,interpretation,var_t,var_f);
14291}
14292pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(problem:LogicProblem, interpretation:PartialInterpretation,
14293 var_region)
14294{
14295 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(problem,interpretation,var_region);
14296}
14297pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(problem:LogicProblem, interpretation:PartialInterpretation,
14298 var_c)
14299{
14300 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(problem,interpretation,var_c);
14301}
14302pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(problem:LogicProblem, interpretation:PartialInterpretation,
14303 var_c)
14304{
14305 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(problem,interpretation,var_c);
14306}
14307pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(problem:LogicProblem, interpretation:PartialInterpretation,
14308 var_s)
14309{
14310 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(problem,interpretation,var_s);
14311}
14312pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(problem:LogicProblem, interpretation:PartialInterpretation,
14313 var_s)
14314{
14315 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(problem,interpretation,var_s);
14316}
14317pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(problem:LogicProblem, interpretation:PartialInterpretation,
14318 var_s, var_v1, var_v2)
14319{
14320 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(problem,interpretation,var_s,var_v1,var_v2);
14321}
14322pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(problem:LogicProblem, interpretation:PartialInterpretation,
14323 var_s)
14324{
14325 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(problem,interpretation,var_s);
14326}
14327pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(problem:LogicProblem, interpretation:PartialInterpretation,
14328 var_s, var_v1, var_v2)
14329{
14330 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(problem,interpretation,var_s,var_v1,var_v2);
14331}
14332pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(problem:LogicProblem, interpretation:PartialInterpretation,
14333 var_s, var_v)
14334{
14335 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(problem,interpretation,var_s,var_v);
14336}
14337pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(problem:LogicProblem, interpretation:PartialInterpretation,
14338 var_s)
14339{
14340 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(problem,interpretation,var_s);
14341}
14342pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(problem:LogicProblem, interpretation:PartialInterpretation,
14343 var_s1, var_s2)
14344{
14345 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(problem,interpretation,var_s1,var_s2);
14346}
14347
14348//////////
14349// 3. Unfinishedness Indexers
14350//////////
14351// 3.1 Unfinishedness Measured by Multiplicity
14352//////////
14353pattern unfinishedLowerMultiplicity_target_reference_Transition(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) {
14354 find interpretation(problem,interpretation);
14355 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
14356 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"target reference Transition");
14357 find mustInstanceOfTransition_class(problem,interpretation,object);
14358 numberOfExistingReferences == count find mustInRelationtarget_reference_Transition(problem,interpretation,object,_);
14359 check(numberOfExistingReferences < 1);
14360 missingMultiplicity == eval(1-numberOfExistingReferences);
14361}
14362
14363//////////
14364// 3.2 Unfinishedness Measured by WF Queries
14365//////////
14366pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(problem:LogicProblem, interpretation:PartialInterpretation,
14367 var_r1)
14368{
14369 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(problem,interpretation,var_r1);
14370}
14371pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(problem:LogicProblem, interpretation:PartialInterpretation,
14372 var_r)
14373{
14374 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(problem,interpretation,var_r);
14375}
14376pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(problem:LogicProblem, interpretation:PartialInterpretation,
14377 var_t, var_e)
14378{
14379 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(problem,interpretation,var_t,var_e);
14380}
14381pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(problem:LogicProblem, interpretation:PartialInterpretation,
14382 var_e)
14383{
14384 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(problem,interpretation,var_e);
14385}
14386pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(problem:LogicProblem, interpretation:PartialInterpretation,
14387 var_e, var_t1, var_t2)
14388{
14389 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(problem,interpretation,var_e,var_t1,var_t2);
14390}
14391pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(problem:LogicProblem, interpretation:PartialInterpretation,
14392 var_t, var_e)
14393{
14394 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(problem,interpretation,var_t,var_e);
14395}
14396pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(problem:LogicProblem, interpretation:PartialInterpretation,
14397 var_t, var_f)
14398{
14399 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(problem,interpretation,var_t,var_f);
14400}
14401pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(problem:LogicProblem, interpretation:PartialInterpretation,
14402 var_region)
14403{
14404 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(problem,interpretation,var_region);
14405}
14406pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(problem:LogicProblem, interpretation:PartialInterpretation,
14407 var_c)
14408{
14409 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(problem,interpretation,var_c);
14410}
14411pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(problem:LogicProblem, interpretation:PartialInterpretation,
14412 var_c)
14413{
14414 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(problem,interpretation,var_c);
14415}
14416pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(problem:LogicProblem, interpretation:PartialInterpretation,
14417 var_s)
14418{
14419 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(problem,interpretation,var_s);
14420}
14421pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(problem:LogicProblem, interpretation:PartialInterpretation,
14422 var_s)
14423{
14424 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(problem,interpretation,var_s);
14425}
14426pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(problem:LogicProblem, interpretation:PartialInterpretation,
14427 var_s, var_v1, var_v2)
14428{
14429 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(problem,interpretation,var_s,var_v1,var_v2);
14430}
14431pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(problem:LogicProblem, interpretation:PartialInterpretation,
14432 var_s)
14433{
14434 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(problem,interpretation,var_s);
14435}
14436pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(problem:LogicProblem, interpretation:PartialInterpretation,
14437 var_s, var_v1, var_v2)
14438{
14439 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(problem,interpretation,var_s,var_v1,var_v2);
14440}
14441pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(problem:LogicProblem, interpretation:PartialInterpretation,
14442 var_s, var_v)
14443{
14444 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(problem,interpretation,var_s,var_v);
14445}
14446pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(problem:LogicProblem, interpretation:PartialInterpretation,
14447 var_s)
14448{
14449 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(problem,interpretation,var_s);
14450}
14451pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(problem:LogicProblem, interpretation:PartialInterpretation,
14452 var_s1, var_s2)
14453{
14454 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(problem,interpretation,var_s1,var_s2);
14455}
14456
14457//////////
14458// 4. Refinement Indexers
14459//////////
14460// 4.1 Object constructors
14461//////////
14462private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation)
14463{
14464 find interpretation(problem,interpretation);
14465 find mustInstanceOfPseudostate_class(problem,interpretation,root);
14466 find mustExist(problem, interpretation, root);
14467}or{
14468 find interpretation(problem,interpretation);
14469 find mustInstanceOfVertex_class(problem,interpretation,root);
14470 find mustExist(problem, interpretation, root);
14471}or{
14472 find interpretation(problem,interpretation);
14473 find mustInstanceOfCompositeElement_class(problem,interpretation,root);
14474 find mustExist(problem, interpretation, root);
14475}or{
14476 find interpretation(problem,interpretation);
14477 find mustInstanceOfFinalState_class(problem,interpretation,root);
14478 find mustExist(problem, interpretation, root);
14479}or{
14480 find interpretation(problem,interpretation);
14481 find mustInstanceOfTransition_class(problem,interpretation,root);
14482 find mustExist(problem, interpretation, root);
14483}or{
14484 find interpretation(problem,interpretation);
14485 find mustInstanceOfRegion_class(problem,interpretation,root);
14486 find mustExist(problem, interpretation, root);
14487}or{
14488 find interpretation(problem,interpretation);
14489 find mustInstanceOfStatechart_class(problem,interpretation,root);
14490 find mustExist(problem, interpretation, root);
14491}or{
14492 find interpretation(problem,interpretation);
14493 find mustInstanceOfExit_class(problem,interpretation,root);
14494 find mustExist(problem, interpretation, root);
14495}or{
14496 find interpretation(problem,interpretation);
14497 find mustInstanceOfChoice_class(problem,interpretation,root);
14498 find mustExist(problem, interpretation, root);
14499}or{
14500 find interpretation(problem,interpretation);
14501 find mustInstanceOfRegularState_class(problem,interpretation,root);
14502 find mustExist(problem, interpretation, root);
14503}or{
14504 find interpretation(problem,interpretation);
14505 find mustInstanceOfSynchronization_class(problem,interpretation,root);
14506 find mustExist(problem, interpretation, root);
14507}or{
14508 find interpretation(problem,interpretation);
14509 find mustInstanceOfEntry_class(problem,interpretation,root);
14510 find mustExist(problem, interpretation, root);
14511}or{
14512 find interpretation(problem,interpretation);
14513 find mustInstanceOfState_class(problem,interpretation,root);
14514 find mustExist(problem, interpretation, root);
14515}or{
14516 find interpretation(problem,interpretation);
14517 find mustInstanceOfStatechart_class_DefinedPart(problem,interpretation,root);
14518 find mustExist(problem, interpretation, root);
14519}or{
14520 find interpretation(problem,interpretation);
14521 find mustInstanceOfStatechart_class_UndefinedPart(problem,interpretation,root);
14522 find mustExist(problem, interpretation, root);
14523}or{
14524 find interpretation(problem,interpretation);
14525 find mustInstanceOfCompositeElement_class_DefinedPart(problem,interpretation,root);
14526 find mustExist(problem, interpretation, root);
14527}or{
14528 find interpretation(problem,interpretation);
14529 find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,root);
14530 find mustExist(problem, interpretation, root);
14531}
14532pattern createObject_Transition_class_by_outgoingTransitions_reference_Vertex_with_source_reference_Transition(
14533 problem:LogicProblem, interpretation:PartialInterpretation,
14534 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
14535 container:DefinedElement)
14536{
14537 find interpretation(problem,interpretation);
14538 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
14539 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Transition class");
14540 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
14541 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingTransitions reference Vertex");
14542 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
14543 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"source reference Transition");
14544 find mustInstanceOfVertex_class(problem,interpretation,container);
14545 find mayInstanceOfTransition_class(problem,interpretation,newObject);
14546 find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,container,newObject);
14547 find mustExist(problem, interpretation, container);
14548 neg find mustExist(problem, interpretation, newObject);
14549}
14550pattern createObject_Transition_class(
14551 problem:LogicProblem, interpretation:PartialInterpretation,
14552 typeInterpretation:PartialComplexTypeInterpretation)
14553{
14554 find interpretation(problem,interpretation);
14555 neg find hasElementInContainment(problem,interpretation);
14556 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
14557 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Transition class");
14558 find mayInstanceOfTransition_class(problem,interpretation,newObject);
14559 find mayExist(problem, interpretation, newObject);
14560 neg find mustExist(problem, interpretation, newObject);
14561}
14562pattern createObject_Synchronization_class_by_vertices_reference_Region(
14563 problem:LogicProblem, interpretation:PartialInterpretation,
14564 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
14565 container:DefinedElement)
14566{
14567 find interpretation(problem,interpretation);
14568 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
14569 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Synchronization class");
14570 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
14571 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region");
14572 find mustInstanceOfRegion_class(problem,interpretation,container);
14573 find mayInstanceOfSynchronization_class(problem,interpretation,newObject);
14574 find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject);
14575 find mustExist(problem, interpretation, container);
14576 neg find mustExist(problem, interpretation, newObject);
14577}
14578pattern createObject_Synchronization_class(
14579 problem:LogicProblem, interpretation:PartialInterpretation,
14580 typeInterpretation:PartialComplexTypeInterpretation)
14581{
14582 find interpretation(problem,interpretation);
14583 neg find hasElementInContainment(problem,interpretation);
14584 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
14585 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Synchronization class");
14586 find mayInstanceOfSynchronization_class(problem,interpretation,newObject);
14587 find mayExist(problem, interpretation, newObject);
14588 neg find mustExist(problem, interpretation, newObject);
14589}
14590pattern createObject_State_class_by_vertices_reference_Region(
14591 problem:LogicProblem, interpretation:PartialInterpretation,
14592 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
14593 container:DefinedElement)
14594{
14595 find interpretation(problem,interpretation);
14596 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
14597 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"State class");
14598 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
14599 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region");
14600 find mustInstanceOfRegion_class(problem,interpretation,container);
14601 find mayInstanceOfState_class(problem,interpretation,newObject);
14602 find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject);
14603 find mustExist(problem, interpretation, container);
14604 neg find mustExist(problem, interpretation, newObject);
14605}
14606pattern createObject_State_class(
14607 problem:LogicProblem, interpretation:PartialInterpretation,
14608 typeInterpretation:PartialComplexTypeInterpretation)
14609{
14610 find interpretation(problem,interpretation);
14611 neg find hasElementInContainment(problem,interpretation);
14612 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
14613 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"State class");
14614 find mayInstanceOfState_class(problem,interpretation,newObject);
14615 find mayExist(problem, interpretation, newObject);
14616 neg find mustExist(problem, interpretation, newObject);
14617}
14618pattern createObject_Exit_class_by_vertices_reference_Region(
14619 problem:LogicProblem, interpretation:PartialInterpretation,
14620 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
14621 container:DefinedElement)
14622{
14623 find interpretation(problem,interpretation);
14624 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
14625 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Exit class");
14626 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
14627 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region");
14628 find mustInstanceOfRegion_class(problem,interpretation,container);
14629 find mayInstanceOfExit_class(problem,interpretation,newObject);
14630 find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject);
14631 find mustExist(problem, interpretation, container);
14632 neg find mustExist(problem, interpretation, newObject);
14633}
14634pattern createObject_Exit_class(
14635 problem:LogicProblem, interpretation:PartialInterpretation,
14636 typeInterpretation:PartialComplexTypeInterpretation)
14637{
14638 find interpretation(problem,interpretation);
14639 neg find hasElementInContainment(problem,interpretation);
14640 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
14641 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Exit class");
14642 find mayInstanceOfExit_class(problem,interpretation,newObject);
14643 find mayExist(problem, interpretation, newObject);
14644 neg find mustExist(problem, interpretation, newObject);
14645}
14646pattern createObject_Choice_class_by_vertices_reference_Region(
14647 problem:LogicProblem, interpretation:PartialInterpretation,
14648 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
14649 container:DefinedElement)
14650{
14651 find interpretation(problem,interpretation);
14652 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
14653 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Choice class");
14654 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
14655 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region");
14656 find mustInstanceOfRegion_class(problem,interpretation,container);
14657 find mayInstanceOfChoice_class(problem,interpretation,newObject);
14658 find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject);
14659 find mustExist(problem, interpretation, container);
14660 neg find mustExist(problem, interpretation, newObject);
14661}
14662pattern createObject_Choice_class(
14663 problem:LogicProblem, interpretation:PartialInterpretation,
14664 typeInterpretation:PartialComplexTypeInterpretation)
14665{
14666 find interpretation(problem,interpretation);
14667 neg find hasElementInContainment(problem,interpretation);
14668 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
14669 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Choice class");
14670 find mayInstanceOfChoice_class(problem,interpretation,newObject);
14671 find mayExist(problem, interpretation, newObject);
14672 neg find mustExist(problem, interpretation, newObject);
14673}
14674pattern createObject_FinalState_class_by_vertices_reference_Region(
14675 problem:LogicProblem, interpretation:PartialInterpretation,
14676 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
14677 container:DefinedElement)
14678{
14679 find interpretation(problem,interpretation);
14680 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
14681 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FinalState class");
14682 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
14683 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region");
14684 find mustInstanceOfRegion_class(problem,interpretation,container);
14685 find mayInstanceOfFinalState_class(problem,interpretation,newObject);
14686 find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject);
14687 find mustExist(problem, interpretation, container);
14688 neg find mustExist(problem, interpretation, newObject);
14689}
14690pattern createObject_FinalState_class(
14691 problem:LogicProblem, interpretation:PartialInterpretation,
14692 typeInterpretation:PartialComplexTypeInterpretation)
14693{
14694 find interpretation(problem,interpretation);
14695 neg find hasElementInContainment(problem,interpretation);
14696 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
14697 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FinalState class");
14698 find mayInstanceOfFinalState_class(problem,interpretation,newObject);
14699 find mayExist(problem, interpretation, newObject);
14700 neg find mustExist(problem, interpretation, newObject);
14701}
14702pattern createObject_Region_class_by_regions_reference_CompositeElement(
14703 problem:LogicProblem, interpretation:PartialInterpretation,
14704 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
14705 container:DefinedElement)
14706{
14707 find interpretation(problem,interpretation);
14708 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
14709 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Region class");
14710 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
14711 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"regions reference CompositeElement");
14712 find mustInstanceOfCompositeElement_class(problem,interpretation,container);
14713 find mayInstanceOfRegion_class(problem,interpretation,newObject);
14714 find mayInRelationregions_reference_CompositeElement(problem,interpretation,container,newObject);
14715 find mustExist(problem, interpretation, container);
14716 neg find mustExist(problem, interpretation, newObject);
14717}
14718pattern createObject_Region_class(
14719 problem:LogicProblem, interpretation:PartialInterpretation,
14720 typeInterpretation:PartialComplexTypeInterpretation)
14721{
14722 find interpretation(problem,interpretation);
14723 neg find hasElementInContainment(problem,interpretation);
14724 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
14725 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Region class");
14726 find mayInstanceOfRegion_class(problem,interpretation,newObject);
14727 find mayExist(problem, interpretation, newObject);
14728 neg find mustExist(problem, interpretation, newObject);
14729}
14730pattern createObject_Entry_class_by_vertices_reference_Region(
14731 problem:LogicProblem, interpretation:PartialInterpretation,
14732 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
14733 container:DefinedElement)
14734{
14735 find interpretation(problem,interpretation);
14736 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
14737 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Entry class");
14738 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
14739 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region");
14740 find mustInstanceOfRegion_class(problem,interpretation,container);
14741 find mayInstanceOfEntry_class(problem,interpretation,newObject);
14742 find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject);
14743 find mustExist(problem, interpretation, container);
14744 neg find mustExist(problem, interpretation, newObject);
14745}
14746pattern createObject_Entry_class(
14747 problem:LogicProblem, interpretation:PartialInterpretation,
14748 typeInterpretation:PartialComplexTypeInterpretation)
14749{
14750 find interpretation(problem,interpretation);
14751 neg find hasElementInContainment(problem,interpretation);
14752 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
14753 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Entry class");
14754 find mayInstanceOfEntry_class(problem,interpretation,newObject);
14755 find mayExist(problem, interpretation, newObject);
14756 neg find mustExist(problem, interpretation, newObject);
14757}
14758pattern createObject_Statechart_class_UndefinedPart(
14759 problem:LogicProblem, interpretation:PartialInterpretation,
14760 typeInterpretation:PartialComplexTypeInterpretation)
14761{
14762 find interpretation(problem,interpretation);
14763 neg find hasElementInContainment(problem,interpretation);
14764 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
14765 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Statechart class UndefinedPart");
14766 find mayInstanceOfStatechart_class_UndefinedPart(problem,interpretation,newObject);
14767 find mayExist(problem, interpretation, newObject);
14768 neg find mustExist(problem, interpretation, newObject);
14769}
14770
14771//////////
14772// 4.2 Type refinement
14773//////////
14774pattern refineTypeTo_Transition_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
14775 find interpretation(problem,interpretation);
14776 PartialInterpretation.newElements(interpretation,element);
14777 find mayInstanceOfTransition_class(problem,interpretation,element);
14778 neg find mustInstanceOfTransition_class(problem,interpretation,element);
14779 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
14780 neg find mustInstanceOfVertex_class(problem,interpretation,element);
14781 neg find mustInstanceOfRegion_class(problem,interpretation,element);
14782}
14783pattern refineTypeTo_Synchronization_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
14784 find interpretation(problem,interpretation);
14785 PartialInterpretation.newElements(interpretation,element);
14786 find mayInstanceOfSynchronization_class(problem,interpretation,element);
14787 neg find mustInstanceOfTransition_class(problem,interpretation,element);
14788 neg find mustInstanceOfSynchronization_class(problem,interpretation,element);
14789 neg find mustInstanceOfExit_class(problem,interpretation,element);
14790 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
14791 neg find mustInstanceOfChoice_class(problem,interpretation,element);
14792 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
14793 neg find mustInstanceOfEntry_class(problem,interpretation,element);
14794 neg find mustInstanceOfRegion_class(problem,interpretation,element);
14795}
14796pattern refineTypeTo_State_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
14797 find interpretation(problem,interpretation);
14798 PartialInterpretation.newElements(interpretation,element);
14799 find mayInstanceOfState_class(problem,interpretation,element);
14800 neg find mustInstanceOfTransition_class(problem,interpretation,element);
14801 neg find mustInstanceOfState_class(problem,interpretation,element);
14802 neg find mustInstanceOfStatechart_class(problem,interpretation,element);
14803 neg find mustInstanceOfPseudostate_class(problem,interpretation,element);
14804 neg find mustInstanceOfFinalState_class(problem,interpretation,element);
14805 neg find mustInstanceOfRegion_class(problem,interpretation,element);
14806}
14807pattern refineTypeTo_Exit_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
14808 find interpretation(problem,interpretation);
14809 PartialInterpretation.newElements(interpretation,element);
14810 find mayInstanceOfExit_class(problem,interpretation,element);
14811 neg find mustInstanceOfTransition_class(problem,interpretation,element);
14812 neg find mustInstanceOfSynchronization_class(problem,interpretation,element);
14813 neg find mustInstanceOfExit_class(problem,interpretation,element);
14814 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
14815 neg find mustInstanceOfChoice_class(problem,interpretation,element);
14816 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
14817 neg find mustInstanceOfRegion_class(problem,interpretation,element);
14818 neg find mustInstanceOfEntry_class(problem,interpretation,element);
14819}
14820pattern refineTypeTo_Choice_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
14821 find interpretation(problem,interpretation);
14822 PartialInterpretation.newElements(interpretation,element);
14823 find mayInstanceOfChoice_class(problem,interpretation,element);
14824 neg find mustInstanceOfTransition_class(problem,interpretation,element);
14825 neg find mustInstanceOfSynchronization_class(problem,interpretation,element);
14826 neg find mustInstanceOfExit_class(problem,interpretation,element);
14827 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
14828 neg find mustInstanceOfChoice_class(problem,interpretation,element);
14829 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
14830 neg find mustInstanceOfRegion_class(problem,interpretation,element);
14831 neg find mustInstanceOfEntry_class(problem,interpretation,element);
14832}
14833pattern refineTypeTo_FinalState_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
14834 find interpretation(problem,interpretation);
14835 PartialInterpretation.newElements(interpretation,element);
14836 find mayInstanceOfFinalState_class(problem,interpretation,element);
14837 neg find mustInstanceOfTransition_class(problem,interpretation,element);
14838 neg find mustInstanceOfPseudostate_class(problem,interpretation,element);
14839 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
14840 neg find mustInstanceOfFinalState_class(problem,interpretation,element);
14841 neg find mustInstanceOfRegion_class(problem,interpretation,element);
14842}
14843pattern refineTypeTo_Region_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
14844 find interpretation(problem,interpretation);
14845 PartialInterpretation.newElements(interpretation,element);
14846 find mayInstanceOfRegion_class(problem,interpretation,element);
14847 neg find mustInstanceOfTransition_class(problem,interpretation,element);
14848 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
14849 neg find mustInstanceOfVertex_class(problem,interpretation,element);
14850 neg find mustInstanceOfRegion_class(problem,interpretation,element);
14851}
14852pattern refineTypeTo_Entry_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
14853 find interpretation(problem,interpretation);
14854 PartialInterpretation.newElements(interpretation,element);
14855 find mayInstanceOfEntry_class(problem,interpretation,element);
14856 neg find mustInstanceOfTransition_class(problem,interpretation,element);
14857 neg find mustInstanceOfSynchronization_class(problem,interpretation,element);
14858 neg find mustInstanceOfExit_class(problem,interpretation,element);
14859 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
14860 neg find mustInstanceOfChoice_class(problem,interpretation,element);
14861 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
14862 neg find mustInstanceOfEntry_class(problem,interpretation,element);
14863 neg find mustInstanceOfRegion_class(problem,interpretation,element);
14864}
14865pattern refineTypeTo_Statechart_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
14866 find interpretation(problem,interpretation);
14867 PartialInterpretation.newElements(interpretation,element);
14868 find mayInstanceOfStatechart_class_UndefinedPart(problem,interpretation,element);
14869 neg find mustInstanceOfTransition_class(problem,interpretation,element);
14870 neg find mustInstanceOfStatechart_class_UndefinedPart(problem,interpretation,element);
14871 neg find mustInstanceOfVertex_class(problem,interpretation,element);
14872 neg find mustInstanceOfRegion_class(problem,interpretation,element);
14873}
14874
14875//////////
14876// 4.3 Relation refinement
14877//////////
14878pattern refineRelation_incomingTransitions_reference_Vertex_and_target_reference_Transition(
14879 problem:LogicProblem, interpretation:PartialInterpretation,
14880 relationIterpretation:PartialRelationInterpretation, oppositeInterpretation:PartialRelationInterpretation,
14881 from: DefinedElement, to: DefinedElement)
14882{
14883 find interpretation(problem,interpretation);
14884 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
14885 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"incomingTransitions reference Vertex");
14886 PartialInterpretation.partialrelationinterpretation(interpretation,oppositeInterpretation);
14887 PartialRelationInterpretation.interpretationOf.name(oppositeInterpretation,"target reference Transition");
14888 find mustExist(problem, interpretation, from);
14889 find mustExist(problem, interpretation, to);
14890 find mustInstanceOfVertex_class(problem,interpretation,from);
14891 find mustInstanceOfTransition_class(problem,interpretation,to);
14892 find mayInRelationincomingTransitions_reference_Vertex(problem,interpretation,from,to);
14893 neg find mustInRelationincomingTransitions_reference_Vertex(problem,interpretation,from,to);
14894}
14895import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage"
14896import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem"
14897import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language"
14898
14899//////////
14900// 0. Util
14901//////////
14902private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) {
14903 PartialInterpretation.problem(interpretation,problem);
14904}
14905
14906/////////////////////////
14907// 0.1 Existence
14908/////////////////////////
14909private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
14910 find interpretation(problem,interpretation);
14911 LogicProblem.elements(problem,element);
14912} or {
14913 find interpretation(problem,interpretation);
14914 PartialInterpretation.newElements(interpretation,element);
14915}
14916
14917private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
14918 find mustExist(problem,interpretation,element);
14919} or {
14920 find interpretation(problem,interpretation);
14921 neg find elementCloseWorld(element);
14922 PartialInterpretation.openWorldElements(interpretation,element);
14923}
14924
14925private pattern elementCloseWorld(element:DefinedElement) {
14926 PartialInterpretation.openWorldElements(i,element);
14927 PartialInterpretation.maxNewElements(i,0);
14928} or {
14929 Scope.targetTypeInterpretation(scope,interpretation);
14930 PartialTypeInterpratation.elements(interpretation,element);
14931 Scope.maxNewElements(scope,0);
14932}
14933
14934////////////////////////
14935// 0.2 Equivalence
14936////////////////////////
14937pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) {
14938 find mayExist(problem,interpretation,a);
14939 find mayExist(problem,interpretation,b);
14940 a == b;
14941}
14942
14943////////////////////////
14944// 0.3 Required Patterns by TypeIndexer
14945////////////////////////
14946private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) {
14947 find interpretation(problem,interpretation);
14948 LogicProblem.types(problem,type);
14949 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
14950 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
14951}
14952
14953private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) {
14954 find interpretation(problem,interpretation);
14955 LogicProblem.types(problem,type);
14956 TypeDefinition.elements(type,element);
14957} or {
14958 find interpretation(problem,interpretation);
14959 find typeInterpretation(problem,interpretation,type,typeInterpretation);
14960 PartialComplexTypeInterpretation.elements(typeInterpretation,element);
14961}
14962
14963private pattern isPrimitive(element: PrimitiveElement) {
14964 PrimitiveElement(element);
14965}
14966
14967//////////
14968// 1. Problem-Specific Base Indexers
14969//////////
14970// 1.1 Type Indexers
14971//////////
14972// 1.1.1 primitive Type Indexers
14973//////////
14974
14975//////////
14976// 1.1.2 domain-specific Type Indexers
14977//////////
14978/**
14979 * An element must be an instance of type "Pseudostate class".
14980 */
14981private pattern mustInstanceOfPseudostate_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
14982 Type.name(type,"Pseudostate class");
14983 find directInstanceOf(problem,interpretation,element,type);
14984}
14985private pattern scopeDisallowsNewPseudostate_class(problem:LogicProblem, interpretation:PartialInterpretation) {
14986 find interpretation(problem,interpretation);
14987 PartialInterpretation.scopes(interpretation,scope);
14988 Scope.targetTypeInterpretation(scope,typeInterpretation);
14989 Scope.maxNewElements(scope,0);
14990 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
14991 Type.name(type,"Pseudostate class");
14992}
14993
14994/**
14995 * An element may be an instance of type "Pseudostate class".
14996 */
14997private pattern mayInstanceOfPseudostate_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
14998{
14999 find interpretation(problem,interpretation);
15000 PartialInterpretation.newElements(interpretation,element);
15001 neg find mustInstanceOfSynchronization_class(problem,interpretation,element);
15002 neg find mustInstanceOfRegion_class(problem,interpretation,element);
15003 neg find mustInstanceOfEntry_class(problem,interpretation,element);
15004 neg find mustInstanceOfExit_class(problem,interpretation,element);
15005 neg find mustInstanceOfChoice_class(problem,interpretation,element);
15006 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
15007 neg find mustInstanceOfTransition_class(problem,interpretation,element);
15008 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
15009 neg find scopeDisallowsNewPseudostate_class(problem, interpretation);
15010 neg find isPrimitive(element);
15011} or {
15012 find interpretation(problem,interpretation);
15013 PartialInterpretation.openWorldElements(interpretation,element);
15014 neg find mustInstanceOfSynchronization_class(problem,interpretation,element);
15015 neg find mustInstanceOfRegion_class(problem,interpretation,element);
15016 neg find mustInstanceOfEntry_class(problem,interpretation,element);
15017 neg find mustInstanceOfExit_class(problem,interpretation,element);
15018 neg find mustInstanceOfChoice_class(problem,interpretation,element);
15019 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
15020 neg find mustInstanceOfTransition_class(problem,interpretation,element);
15021 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
15022 neg find scopeDisallowsNewPseudostate_class(problem, interpretation);
15023 neg find isPrimitive(element);
15024} or
15025{ find mustInstanceOfPseudostate_class(problem,interpretation,element); }
15026/**
15027 * An element must be an instance of type "Vertex class".
15028 */
15029private pattern mustInstanceOfVertex_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
15030 Type.name(type,"Vertex class");
15031 find directInstanceOf(problem,interpretation,element,type);
15032}
15033private pattern scopeDisallowsNewVertex_class(problem:LogicProblem, interpretation:PartialInterpretation) {
15034 find interpretation(problem,interpretation);
15035 PartialInterpretation.scopes(interpretation,scope);
15036 Scope.targetTypeInterpretation(scope,typeInterpretation);
15037 Scope.maxNewElements(scope,0);
15038 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
15039 Type.name(type,"Vertex class");
15040}
15041
15042/**
15043 * An element may be an instance of type "Vertex class".
15044 */
15045private pattern mayInstanceOfVertex_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
15046{
15047 find interpretation(problem,interpretation);
15048 PartialInterpretation.newElements(interpretation,element);
15049 neg find mustInstanceOfPseudostate_class(problem,interpretation,element);
15050 neg find mustInstanceOfRegion_class(problem,interpretation,element);
15051 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
15052 neg find mustInstanceOfTransition_class(problem,interpretation,element);
15053 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
15054 neg find scopeDisallowsNewVertex_class(problem, interpretation);
15055 neg find isPrimitive(element);
15056} or {
15057 find interpretation(problem,interpretation);
15058 PartialInterpretation.openWorldElements(interpretation,element);
15059 neg find mustInstanceOfPseudostate_class(problem,interpretation,element);
15060 neg find mustInstanceOfRegion_class(problem,interpretation,element);
15061 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
15062 neg find mustInstanceOfTransition_class(problem,interpretation,element);
15063 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
15064 neg find scopeDisallowsNewVertex_class(problem, interpretation);
15065 neg find isPrimitive(element);
15066} or
15067{ find mustInstanceOfVertex_class(problem,interpretation,element); }
15068/**
15069 * An element must be an instance of type "Region class".
15070 */
15071private pattern mustInstanceOfRegion_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
15072 Type.name(type,"Region class");
15073 find directInstanceOf(problem,interpretation,element,type);
15074}
15075private pattern scopeDisallowsNewRegion_class(problem:LogicProblem, interpretation:PartialInterpretation) {
15076 find interpretation(problem,interpretation);
15077 PartialInterpretation.scopes(interpretation,scope);
15078 Scope.targetTypeInterpretation(scope,typeInterpretation);
15079 Scope.maxNewElements(scope,0);
15080 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
15081 Type.name(type,"Region class");
15082}
15083
15084/**
15085 * An element may be an instance of type "Region class".
15086 */
15087private pattern mayInstanceOfRegion_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
15088{
15089 find interpretation(problem,interpretation);
15090 PartialInterpretation.newElements(interpretation,element);
15091 neg find mustInstanceOfTransition_class(problem,interpretation,element);
15092 neg find mustInstanceOfVertex_class(problem,interpretation,element);
15093 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
15094 neg find scopeDisallowsNewRegion_class(problem, interpretation);
15095 neg find isPrimitive(element);
15096} or {
15097 find interpretation(problem,interpretation);
15098 PartialInterpretation.openWorldElements(interpretation,element);
15099 neg find mustInstanceOfTransition_class(problem,interpretation,element);
15100 neg find mustInstanceOfVertex_class(problem,interpretation,element);
15101 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
15102 neg find scopeDisallowsNewRegion_class(problem, interpretation);
15103 neg find isPrimitive(element);
15104} or
15105{ find mustInstanceOfRegion_class(problem,interpretation,element); }
15106/**
15107 * An element must be an instance of type "Transition class".
15108 */
15109private pattern mustInstanceOfTransition_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
15110 Type.name(type,"Transition class");
15111 find directInstanceOf(problem,interpretation,element,type);
15112}
15113private pattern scopeDisallowsNewTransition_class(problem:LogicProblem, interpretation:PartialInterpretation) {
15114 find interpretation(problem,interpretation);
15115 PartialInterpretation.scopes(interpretation,scope);
15116 Scope.targetTypeInterpretation(scope,typeInterpretation);
15117 Scope.maxNewElements(scope,0);
15118 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
15119 Type.name(type,"Transition class");
15120}
15121
15122/**
15123 * An element may be an instance of type "Transition class".
15124 */
15125private pattern mayInstanceOfTransition_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
15126{
15127 find interpretation(problem,interpretation);
15128 PartialInterpretation.newElements(interpretation,element);
15129 neg find mustInstanceOfRegion_class(problem,interpretation,element);
15130 neg find mustInstanceOfVertex_class(problem,interpretation,element);
15131 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
15132 neg find scopeDisallowsNewTransition_class(problem, interpretation);
15133 neg find isPrimitive(element);
15134} or {
15135 find interpretation(problem,interpretation);
15136 PartialInterpretation.openWorldElements(interpretation,element);
15137 neg find mustInstanceOfRegion_class(problem,interpretation,element);
15138 neg find mustInstanceOfVertex_class(problem,interpretation,element);
15139 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
15140 neg find scopeDisallowsNewTransition_class(problem, interpretation);
15141 neg find isPrimitive(element);
15142} or
15143{ find mustInstanceOfTransition_class(problem,interpretation,element); }
15144/**
15145 * An element must be an instance of type "Statechart class".
15146 */
15147private pattern mustInstanceOfStatechart_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
15148 Type.name(type,"Statechart class");
15149 find directInstanceOf(problem,interpretation,element,type);
15150}
15151private pattern scopeDisallowsNewStatechart_class(problem:LogicProblem, interpretation:PartialInterpretation) {
15152 find interpretation(problem,interpretation);
15153 PartialInterpretation.scopes(interpretation,scope);
15154 Scope.targetTypeInterpretation(scope,typeInterpretation);
15155 Scope.maxNewElements(scope,0);
15156 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
15157 Type.name(type,"Statechart class");
15158}
15159
15160/**
15161 * An element may be an instance of type "Statechart class".
15162 */
15163private pattern mayInstanceOfStatechart_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
15164{
15165 find interpretation(problem,interpretation);
15166 PartialInterpretation.newElements(interpretation,element);
15167 neg find mustInstanceOfRegion_class(problem,interpretation,element);
15168 neg find mustInstanceOfTransition_class(problem,interpretation,element);
15169 neg find mustInstanceOfVertex_class(problem,interpretation,element);
15170 neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element);
15171 neg find scopeDisallowsNewStatechart_class(problem, interpretation);
15172 neg find isPrimitive(element);
15173} or {
15174 find interpretation(problem,interpretation);
15175 PartialInterpretation.openWorldElements(interpretation,element);
15176 neg find mustInstanceOfRegion_class(problem,interpretation,element);
15177 neg find mustInstanceOfTransition_class(problem,interpretation,element);
15178 neg find mustInstanceOfVertex_class(problem,interpretation,element);
15179 neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element);
15180 neg find scopeDisallowsNewStatechart_class(problem, interpretation);
15181 neg find isPrimitive(element);
15182} or
15183{ find mustInstanceOfStatechart_class(problem,interpretation,element); }
15184/**
15185 * An element must be an instance of type "Entry class".
15186 */
15187private pattern mustInstanceOfEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
15188 Type.name(type,"Entry class");
15189 find directInstanceOf(problem,interpretation,element,type);
15190}
15191private pattern scopeDisallowsNewEntry_class(problem:LogicProblem, interpretation:PartialInterpretation) {
15192 find interpretation(problem,interpretation);
15193 PartialInterpretation.scopes(interpretation,scope);
15194 Scope.targetTypeInterpretation(scope,typeInterpretation);
15195 Scope.maxNewElements(scope,0);
15196 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
15197 Type.name(type,"Entry class");
15198}
15199
15200/**
15201 * An element may be an instance of type "Entry class".
15202 */
15203private pattern mayInstanceOfEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
15204{
15205 find interpretation(problem,interpretation);
15206 PartialInterpretation.newElements(interpretation,element);
15207 neg find mustInstanceOfSynchronization_class(problem,interpretation,element);
15208 neg find mustInstanceOfRegion_class(problem,interpretation,element);
15209 neg find mustInstanceOfExit_class(problem,interpretation,element);
15210 neg find mustInstanceOfChoice_class(problem,interpretation,element);
15211 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
15212 neg find mustInstanceOfTransition_class(problem,interpretation,element);
15213 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
15214 neg find scopeDisallowsNewEntry_class(problem, interpretation);
15215 neg find isPrimitive(element);
15216} or {
15217 find interpretation(problem,interpretation);
15218 PartialInterpretation.openWorldElements(interpretation,element);
15219 neg find mustInstanceOfSynchronization_class(problem,interpretation,element);
15220 neg find mustInstanceOfRegion_class(problem,interpretation,element);
15221 neg find mustInstanceOfExit_class(problem,interpretation,element);
15222 neg find mustInstanceOfChoice_class(problem,interpretation,element);
15223 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
15224 neg find mustInstanceOfTransition_class(problem,interpretation,element);
15225 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
15226 neg find scopeDisallowsNewEntry_class(problem, interpretation);
15227 neg find isPrimitive(element);
15228} or
15229{ find mustInstanceOfEntry_class(problem,interpretation,element); }
15230/**
15231 * An element must be an instance of type "Synchronization class".
15232 */
15233private pattern mustInstanceOfSynchronization_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
15234 Type.name(type,"Synchronization class");
15235 find directInstanceOf(problem,interpretation,element,type);
15236}
15237private pattern scopeDisallowsNewSynchronization_class(problem:LogicProblem, interpretation:PartialInterpretation) {
15238 find interpretation(problem,interpretation);
15239 PartialInterpretation.scopes(interpretation,scope);
15240 Scope.targetTypeInterpretation(scope,typeInterpretation);
15241 Scope.maxNewElements(scope,0);
15242 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
15243 Type.name(type,"Synchronization class");
15244}
15245
15246/**
15247 * An element may be an instance of type "Synchronization class".
15248 */
15249private pattern mayInstanceOfSynchronization_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
15250{
15251 find interpretation(problem,interpretation);
15252 PartialInterpretation.newElements(interpretation,element);
15253 neg find mustInstanceOfEntry_class(problem,interpretation,element);
15254 neg find mustInstanceOfRegion_class(problem,interpretation,element);
15255 neg find mustInstanceOfExit_class(problem,interpretation,element);
15256 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
15257 neg find mustInstanceOfChoice_class(problem,interpretation,element);
15258 neg find mustInstanceOfTransition_class(problem,interpretation,element);
15259 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
15260 neg find scopeDisallowsNewSynchronization_class(problem, interpretation);
15261 neg find isPrimitive(element);
15262} or {
15263 find interpretation(problem,interpretation);
15264 PartialInterpretation.openWorldElements(interpretation,element);
15265 neg find mustInstanceOfEntry_class(problem,interpretation,element);
15266 neg find mustInstanceOfRegion_class(problem,interpretation,element);
15267 neg find mustInstanceOfExit_class(problem,interpretation,element);
15268 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
15269 neg find mustInstanceOfChoice_class(problem,interpretation,element);
15270 neg find mustInstanceOfTransition_class(problem,interpretation,element);
15271 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
15272 neg find scopeDisallowsNewSynchronization_class(problem, interpretation);
15273 neg find isPrimitive(element);
15274} or
15275{ find mustInstanceOfSynchronization_class(problem,interpretation,element); }
15276/**
15277 * An element must be an instance of type "State class".
15278 */
15279private pattern mustInstanceOfState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
15280 Type.name(type,"State class");
15281 find directInstanceOf(problem,interpretation,element,type);
15282}
15283private pattern scopeDisallowsNewState_class(problem:LogicProblem, interpretation:PartialInterpretation) {
15284 find interpretation(problem,interpretation);
15285 PartialInterpretation.scopes(interpretation,scope);
15286 Scope.targetTypeInterpretation(scope,typeInterpretation);
15287 Scope.maxNewElements(scope,0);
15288 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
15289 Type.name(type,"State class");
15290}
15291
15292/**
15293 * An element may be an instance of type "State class".
15294 */
15295private pattern mayInstanceOfState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
15296{
15297 find interpretation(problem,interpretation);
15298 PartialInterpretation.newElements(interpretation,element);
15299 neg find mustInstanceOfPseudostate_class(problem,interpretation,element);
15300 neg find mustInstanceOfFinalState_class(problem,interpretation,element);
15301 neg find mustInstanceOfRegion_class(problem,interpretation,element);
15302 neg find mustInstanceOfTransition_class(problem,interpretation,element);
15303 neg find mustInstanceOfStatechart_class(problem,interpretation,element);
15304 neg find scopeDisallowsNewState_class(problem, interpretation);
15305 neg find isPrimitive(element);
15306} or {
15307 find interpretation(problem,interpretation);
15308 PartialInterpretation.openWorldElements(interpretation,element);
15309 neg find mustInstanceOfPseudostate_class(problem,interpretation,element);
15310 neg find mustInstanceOfFinalState_class(problem,interpretation,element);
15311 neg find mustInstanceOfRegion_class(problem,interpretation,element);
15312 neg find mustInstanceOfTransition_class(problem,interpretation,element);
15313 neg find mustInstanceOfStatechart_class(problem,interpretation,element);
15314 neg find scopeDisallowsNewState_class(problem, interpretation);
15315 neg find isPrimitive(element);
15316} or
15317{ find mustInstanceOfState_class(problem,interpretation,element); }
15318/**
15319 * An element must be an instance of type "RegularState class".
15320 */
15321private pattern mustInstanceOfRegularState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
15322 Type.name(type,"RegularState class");
15323 find directInstanceOf(problem,interpretation,element,type);
15324}
15325private pattern scopeDisallowsNewRegularState_class(problem:LogicProblem, interpretation:PartialInterpretation) {
15326 find interpretation(problem,interpretation);
15327 PartialInterpretation.scopes(interpretation,scope);
15328 Scope.targetTypeInterpretation(scope,typeInterpretation);
15329 Scope.maxNewElements(scope,0);
15330 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
15331 Type.name(type,"RegularState class");
15332}
15333
15334/**
15335 * An element may be an instance of type "RegularState class".
15336 */
15337private pattern mayInstanceOfRegularState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
15338{
15339 find interpretation(problem,interpretation);
15340 PartialInterpretation.newElements(interpretation,element);
15341 neg find mustInstanceOfPseudostate_class(problem,interpretation,element);
15342 neg find mustInstanceOfFinalState_class(problem,interpretation,element);
15343 neg find mustInstanceOfRegion_class(problem,interpretation,element);
15344 neg find mustInstanceOfTransition_class(problem,interpretation,element);
15345 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
15346 neg find scopeDisallowsNewRegularState_class(problem, interpretation);
15347 neg find isPrimitive(element);
15348} or {
15349 find interpretation(problem,interpretation);
15350 PartialInterpretation.openWorldElements(interpretation,element);
15351 neg find mustInstanceOfPseudostate_class(problem,interpretation,element);
15352 neg find mustInstanceOfFinalState_class(problem,interpretation,element);
15353 neg find mustInstanceOfRegion_class(problem,interpretation,element);
15354 neg find mustInstanceOfTransition_class(problem,interpretation,element);
15355 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
15356 neg find scopeDisallowsNewRegularState_class(problem, interpretation);
15357 neg find isPrimitive(element);
15358} or
15359{ find mustInstanceOfRegularState_class(problem,interpretation,element); }
15360/**
15361 * An element must be an instance of type "CompositeElement class".
15362 */
15363private pattern mustInstanceOfCompositeElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
15364 Type.name(type,"CompositeElement class");
15365 find directInstanceOf(problem,interpretation,element,type);
15366}
15367private pattern scopeDisallowsNewCompositeElement_class(problem:LogicProblem, interpretation:PartialInterpretation) {
15368 find interpretation(problem,interpretation);
15369 PartialInterpretation.scopes(interpretation,scope);
15370 Scope.targetTypeInterpretation(scope,typeInterpretation);
15371 Scope.maxNewElements(scope,0);
15372 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
15373 Type.name(type,"CompositeElement class");
15374}
15375
15376/**
15377 * An element may be an instance of type "CompositeElement class".
15378 */
15379private pattern mayInstanceOfCompositeElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
15380{
15381 find interpretation(problem,interpretation);
15382 PartialInterpretation.newElements(interpretation,element);
15383 neg find mustInstanceOfRegion_class(problem,interpretation,element);
15384 neg find mustInstanceOfTransition_class(problem,interpretation,element);
15385 neg find mustInstanceOfStatechart_class(problem,interpretation,element);
15386 neg find mustInstanceOfVertex_class(problem,interpretation,element);
15387 neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element);
15388 neg find scopeDisallowsNewCompositeElement_class(problem, interpretation);
15389 neg find isPrimitive(element);
15390} or {
15391 find interpretation(problem,interpretation);
15392 PartialInterpretation.openWorldElements(interpretation,element);
15393 neg find mustInstanceOfRegion_class(problem,interpretation,element);
15394 neg find mustInstanceOfTransition_class(problem,interpretation,element);
15395 neg find mustInstanceOfStatechart_class(problem,interpretation,element);
15396 neg find mustInstanceOfVertex_class(problem,interpretation,element);
15397 neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element);
15398 neg find scopeDisallowsNewCompositeElement_class(problem, interpretation);
15399 neg find isPrimitive(element);
15400} or
15401{ find mustInstanceOfCompositeElement_class(problem,interpretation,element); }
15402/**
15403 * An element must be an instance of type "Choice class".
15404 */
15405private pattern mustInstanceOfChoice_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
15406 Type.name(type,"Choice class");
15407 find directInstanceOf(problem,interpretation,element,type);
15408}
15409private pattern scopeDisallowsNewChoice_class(problem:LogicProblem, interpretation:PartialInterpretation) {
15410 find interpretation(problem,interpretation);
15411 PartialInterpretation.scopes(interpretation,scope);
15412 Scope.targetTypeInterpretation(scope,typeInterpretation);
15413 Scope.maxNewElements(scope,0);
15414 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
15415 Type.name(type,"Choice class");
15416}
15417
15418/**
15419 * An element may be an instance of type "Choice class".
15420 */
15421private pattern mayInstanceOfChoice_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
15422{
15423 find interpretation(problem,interpretation);
15424 PartialInterpretation.newElements(interpretation,element);
15425 neg find mustInstanceOfSynchronization_class(problem,interpretation,element);
15426 neg find mustInstanceOfEntry_class(problem,interpretation,element);
15427 neg find mustInstanceOfRegion_class(problem,interpretation,element);
15428 neg find mustInstanceOfExit_class(problem,interpretation,element);
15429 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
15430 neg find mustInstanceOfTransition_class(problem,interpretation,element);
15431 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
15432 neg find scopeDisallowsNewChoice_class(problem, interpretation);
15433 neg find isPrimitive(element);
15434} or {
15435 find interpretation(problem,interpretation);
15436 PartialInterpretation.openWorldElements(interpretation,element);
15437 neg find mustInstanceOfSynchronization_class(problem,interpretation,element);
15438 neg find mustInstanceOfEntry_class(problem,interpretation,element);
15439 neg find mustInstanceOfRegion_class(problem,interpretation,element);
15440 neg find mustInstanceOfExit_class(problem,interpretation,element);
15441 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
15442 neg find mustInstanceOfTransition_class(problem,interpretation,element);
15443 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
15444 neg find scopeDisallowsNewChoice_class(problem, interpretation);
15445 neg find isPrimitive(element);
15446} or
15447{ find mustInstanceOfChoice_class(problem,interpretation,element); }
15448/**
15449 * An element must be an instance of type "Exit class".
15450 */
15451private pattern mustInstanceOfExit_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
15452 Type.name(type,"Exit class");
15453 find directInstanceOf(problem,interpretation,element,type);
15454}
15455private pattern scopeDisallowsNewExit_class(problem:LogicProblem, interpretation:PartialInterpretation) {
15456 find interpretation(problem,interpretation);
15457 PartialInterpretation.scopes(interpretation,scope);
15458 Scope.targetTypeInterpretation(scope,typeInterpretation);
15459 Scope.maxNewElements(scope,0);
15460 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
15461 Type.name(type,"Exit class");
15462}
15463
15464/**
15465 * An element may be an instance of type "Exit class".
15466 */
15467private pattern mayInstanceOfExit_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
15468{
15469 find interpretation(problem,interpretation);
15470 PartialInterpretation.newElements(interpretation,element);
15471 neg find mustInstanceOfSynchronization_class(problem,interpretation,element);
15472 neg find mustInstanceOfRegion_class(problem,interpretation,element);
15473 neg find mustInstanceOfEntry_class(problem,interpretation,element);
15474 neg find mustInstanceOfChoice_class(problem,interpretation,element);
15475 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
15476 neg find mustInstanceOfTransition_class(problem,interpretation,element);
15477 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
15478 neg find scopeDisallowsNewExit_class(problem, interpretation);
15479 neg find isPrimitive(element);
15480} or {
15481 find interpretation(problem,interpretation);
15482 PartialInterpretation.openWorldElements(interpretation,element);
15483 neg find mustInstanceOfSynchronization_class(problem,interpretation,element);
15484 neg find mustInstanceOfRegion_class(problem,interpretation,element);
15485 neg find mustInstanceOfEntry_class(problem,interpretation,element);
15486 neg find mustInstanceOfChoice_class(problem,interpretation,element);
15487 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
15488 neg find mustInstanceOfTransition_class(problem,interpretation,element);
15489 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
15490 neg find scopeDisallowsNewExit_class(problem, interpretation);
15491 neg find isPrimitive(element);
15492} or
15493{ find mustInstanceOfExit_class(problem,interpretation,element); }
15494/**
15495 * An element must be an instance of type "FinalState class".
15496 */
15497private pattern mustInstanceOfFinalState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
15498 Type.name(type,"FinalState class");
15499 find directInstanceOf(problem,interpretation,element,type);
15500}
15501private pattern scopeDisallowsNewFinalState_class(problem:LogicProblem, interpretation:PartialInterpretation) {
15502 find interpretation(problem,interpretation);
15503 PartialInterpretation.scopes(interpretation,scope);
15504 Scope.targetTypeInterpretation(scope,typeInterpretation);
15505 Scope.maxNewElements(scope,0);
15506 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
15507 Type.name(type,"FinalState class");
15508}
15509
15510/**
15511 * An element may be an instance of type "FinalState class".
15512 */
15513private pattern mayInstanceOfFinalState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
15514{
15515 find interpretation(problem,interpretation);
15516 PartialInterpretation.newElements(interpretation,element);
15517 neg find mustInstanceOfPseudostate_class(problem,interpretation,element);
15518 neg find mustInstanceOfRegion_class(problem,interpretation,element);
15519 neg find mustInstanceOfTransition_class(problem,interpretation,element);
15520 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
15521 neg find scopeDisallowsNewFinalState_class(problem, interpretation);
15522 neg find isPrimitive(element);
15523} or {
15524 find interpretation(problem,interpretation);
15525 PartialInterpretation.openWorldElements(interpretation,element);
15526 neg find mustInstanceOfPseudostate_class(problem,interpretation,element);
15527 neg find mustInstanceOfRegion_class(problem,interpretation,element);
15528 neg find mustInstanceOfTransition_class(problem,interpretation,element);
15529 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
15530 neg find scopeDisallowsNewFinalState_class(problem, interpretation);
15531 neg find isPrimitive(element);
15532} or
15533{ find mustInstanceOfFinalState_class(problem,interpretation,element); }
15534/**
15535 * An element must be an instance of type "Statechart class DefinedPart".
15536 */
15537private pattern mustInstanceOfStatechart_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
15538 Type.name(type,"Statechart class DefinedPart");
15539 find directInstanceOf(problem,interpretation,element,type);
15540}
15541private pattern scopeDisallowsNewStatechart_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
15542 find interpretation(problem,interpretation);
15543 PartialInterpretation.scopes(interpretation,scope);
15544 Scope.targetTypeInterpretation(scope,typeInterpretation);
15545 Scope.maxNewElements(scope,0);
15546 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
15547 Type.name(type,"Statechart class DefinedPart");
15548}
15549
15550/**
15551 * An element may be an instance of type "Statechart class DefinedPart".
15552 */
15553private pattern mayInstanceOfStatechart_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
15554{ find mustInstanceOfStatechart_class_DefinedPart(problem,interpretation,element); }
15555/**
15556 * An element must be an instance of type "Statechart class UndefinedPart".
15557 */
15558private pattern mustInstanceOfStatechart_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
15559 Type.name(type,"Statechart class UndefinedPart");
15560 find directInstanceOf(problem,interpretation,element,type);
15561}
15562private pattern scopeDisallowsNewStatechart_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
15563 find interpretation(problem,interpretation);
15564 PartialInterpretation.scopes(interpretation,scope);
15565 Scope.targetTypeInterpretation(scope,typeInterpretation);
15566 Scope.maxNewElements(scope,0);
15567 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
15568 Type.name(type,"Statechart class UndefinedPart");
15569}
15570
15571/**
15572 * An element may be an instance of type "Statechart class UndefinedPart".
15573 */
15574private pattern mayInstanceOfStatechart_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
15575{
15576 find interpretation(problem,interpretation);
15577 PartialInterpretation.newElements(interpretation,element);
15578 neg find mustInstanceOfRegion_class(problem,interpretation,element);
15579 neg find mustInstanceOfTransition_class(problem,interpretation,element);
15580 neg find mustInstanceOfVertex_class(problem,interpretation,element);
15581 neg find scopeDisallowsNewStatechart_class_UndefinedPart(problem, interpretation);
15582 neg find isPrimitive(element);
15583} or {
15584 find interpretation(problem,interpretation);
15585 PartialInterpretation.openWorldElements(interpretation,element);
15586 neg find mustInstanceOfRegion_class(problem,interpretation,element);
15587 neg find mustInstanceOfTransition_class(problem,interpretation,element);
15588 neg find mustInstanceOfVertex_class(problem,interpretation,element);
15589 neg find scopeDisallowsNewStatechart_class_UndefinedPart(problem, interpretation);
15590 neg find isPrimitive(element);
15591} or
15592{ find mustInstanceOfStatechart_class_UndefinedPart(problem,interpretation,element); }
15593/**
15594 * An element must be an instance of type "CompositeElement class DefinedPart".
15595 */
15596private pattern mustInstanceOfCompositeElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
15597 Type.name(type,"CompositeElement class DefinedPart");
15598 find directInstanceOf(problem,interpretation,element,type);
15599}
15600private pattern scopeDisallowsNewCompositeElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
15601 find interpretation(problem,interpretation);
15602 PartialInterpretation.scopes(interpretation,scope);
15603 Scope.targetTypeInterpretation(scope,typeInterpretation);
15604 Scope.maxNewElements(scope,0);
15605 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
15606 Type.name(type,"CompositeElement class DefinedPart");
15607}
15608
15609/**
15610 * An element may be an instance of type "CompositeElement class DefinedPart".
15611 */
15612private pattern mayInstanceOfCompositeElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
15613{ find mustInstanceOfCompositeElement_class_DefinedPart(problem,interpretation,element); }
15614/**
15615 * An element must be an instance of type "CompositeElement class UndefinedPart".
15616 */
15617private pattern mustInstanceOfCompositeElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
15618 Type.name(type,"CompositeElement class UndefinedPart");
15619 find directInstanceOf(problem,interpretation,element,type);
15620}
15621private pattern scopeDisallowsNewCompositeElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
15622 find interpretation(problem,interpretation);
15623 PartialInterpretation.scopes(interpretation,scope);
15624 Scope.targetTypeInterpretation(scope,typeInterpretation);
15625 Scope.maxNewElements(scope,0);
15626 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
15627 Type.name(type,"CompositeElement class UndefinedPart");
15628}
15629
15630/**
15631 * An element may be an instance of type "CompositeElement class UndefinedPart".
15632 */
15633private pattern mayInstanceOfCompositeElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
15634{
15635 find interpretation(problem,interpretation);
15636 PartialInterpretation.newElements(interpretation,element);
15637 neg find mustInstanceOfRegion_class(problem,interpretation,element);
15638 neg find mustInstanceOfTransition_class(problem,interpretation,element);
15639 neg find mustInstanceOfStatechart_class(problem,interpretation,element);
15640 neg find mustInstanceOfVertex_class(problem,interpretation,element);
15641 neg find scopeDisallowsNewCompositeElement_class_UndefinedPart(problem, interpretation);
15642 neg find isPrimitive(element);
15643} or {
15644 find interpretation(problem,interpretation);
15645 PartialInterpretation.openWorldElements(interpretation,element);
15646 neg find mustInstanceOfRegion_class(problem,interpretation,element);
15647 neg find mustInstanceOfTransition_class(problem,interpretation,element);
15648 neg find mustInstanceOfStatechart_class(problem,interpretation,element);
15649 neg find mustInstanceOfVertex_class(problem,interpretation,element);
15650 neg find scopeDisallowsNewCompositeElement_class_UndefinedPart(problem, interpretation);
15651 neg find isPrimitive(element);
15652} or
15653{ find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); }
15654
15655//////////
15656// 1.2 Relation Declaration Indexers
15657//////////
15658/**
15659 * Matcher for detecting tuples t where []incomingTransitions reference Vertex(source,target)
15660 */
15661private pattern mustInRelationincomingTransitions_reference_Vertex(
15662 problem:LogicProblem, interpretation:PartialInterpretation,
15663 source: DefinedElement, target:DefinedElement)
15664{
15665 find interpretation(problem,interpretation);
15666 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
15667 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"incomingTransitions reference Vertex");
15668 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
15669 BinaryElementRelationLink.param1(link,source);
15670 BinaryElementRelationLink.param2(link,target);
15671}
15672/**
15673 * Matcher for detecting tuples t where <>incomingTransitions reference Vertex(source,target)
15674 */
15675private pattern mayInRelationincomingTransitions_reference_Vertex(
15676 problem:LogicProblem, interpretation:PartialInterpretation,
15677 source: DefinedElement, target:DefinedElement)
15678{
15679 find interpretation(problem,interpretation);
15680 // The two endpoint of the link have to exist
15681 find mayExist(problem, interpretation, source);
15682 find mayExist(problem, interpretation, target);
15683 // Type consistency
15684 find mayInstanceOfVertex_class(problem,interpretation,source);
15685 find mayInstanceOfTransition_class(problem,interpretation,target);
15686 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
15687 // the upper bound of the opposite reference multiplicity should be considered.
15688 numberOfExistingOppositeReferences == count find mustInRelationtarget_reference_Transition(problem,interpretation,target,_);
15689 check(numberOfExistingOppositeReferences < 1);
15690} or {
15691 find mustInRelationincomingTransitions_reference_Vertex(problem,interpretation,source,target);
15692}
15693/**
15694 * Matcher for detecting tuples t where []outgoingTransitions reference Vertex(source,target)
15695 */
15696private pattern mustInRelationoutgoingTransitions_reference_Vertex(
15697 problem:LogicProblem, interpretation:PartialInterpretation,
15698 source: DefinedElement, target:DefinedElement)
15699{
15700 find interpretation(problem,interpretation);
15701 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
15702 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"outgoingTransitions reference Vertex");
15703 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
15704 BinaryElementRelationLink.param1(link,source);
15705 BinaryElementRelationLink.param2(link,target);
15706}
15707/**
15708 * Matcher for detecting tuples t where <>outgoingTransitions reference Vertex(source,target)
15709 */
15710private pattern mayInRelationoutgoingTransitions_reference_Vertex(
15711 problem:LogicProblem, interpretation:PartialInterpretation,
15712 source: DefinedElement, target:DefinedElement)
15713{
15714 find interpretation(problem,interpretation);
15715 // The two endpoint of the link have to exist
15716 find mayExist(problem, interpretation, source);
15717 find mayExist(problem, interpretation, target);
15718 // Type consistency
15719 find mayInstanceOfVertex_class(problem,interpretation,source);
15720 find mayInstanceOfTransition_class(problem,interpretation,target);
15721 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
15722 // the upper bound of the opposite reference multiplicity should be considered.
15723 numberOfExistingOppositeReferences == count find mustInRelationsource_reference_Transition(problem,interpretation,target,_);
15724 check(numberOfExistingOppositeReferences < 1);
15725 // The reference is containment, then a new reference cannot be create if:
15726 // 1. Multiple parents
15727 neg find mustContains4(problem,interpretation,_,target);
15728 // 2. Circle in the containment hierarchy
15729 neg find mustTransitiveContains(source,target);
15730} or {
15731 find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,source,target);
15732}
15733/**
15734 * Matcher for detecting tuples t where []vertices reference Region(source,target)
15735 */
15736private pattern mustInRelationvertices_reference_Region(
15737 problem:LogicProblem, interpretation:PartialInterpretation,
15738 source: DefinedElement, target:DefinedElement)
15739{
15740 find interpretation(problem,interpretation);
15741 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
15742 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"vertices reference Region");
15743 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
15744 BinaryElementRelationLink.param1(link,source);
15745 BinaryElementRelationLink.param2(link,target);
15746}
15747/**
15748 * Matcher for detecting tuples t where <>vertices reference Region(source,target)
15749 */
15750private pattern mayInRelationvertices_reference_Region(
15751 problem:LogicProblem, interpretation:PartialInterpretation,
15752 source: DefinedElement, target:DefinedElement)
15753{
15754 find interpretation(problem,interpretation);
15755 // The two endpoint of the link have to exist
15756 find mayExist(problem, interpretation, source);
15757 find mayExist(problem, interpretation, target);
15758 // Type consistency
15759 find mayInstanceOfRegion_class(problem,interpretation,source);
15760 find mayInstanceOfVertex_class(problem,interpretation,target);
15761 // The reference is containment, then a new reference cannot be create if:
15762 // 1. Multiple parents
15763 neg find mustContains4(problem,interpretation,_,target);
15764 // 2. Circle in the containment hierarchy
15765 neg find mustTransitiveContains(source,target);
15766} or {
15767 find mustInRelationvertices_reference_Region(problem,interpretation,source,target);
15768}
15769/**
15770 * Matcher for detecting tuples t where []target reference Transition(source,target)
15771 */
15772private pattern mustInRelationtarget_reference_Transition(
15773 problem:LogicProblem, interpretation:PartialInterpretation,
15774 source: DefinedElement, target:DefinedElement)
15775{
15776 find interpretation(problem,interpretation);
15777 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
15778 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"target reference Transition");
15779 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
15780 BinaryElementRelationLink.param1(link,source);
15781 BinaryElementRelationLink.param2(link,target);
15782}
15783/**
15784 * Matcher for detecting tuples t where <>target reference Transition(source,target)
15785 */
15786private pattern mayInRelationtarget_reference_Transition(
15787 problem:LogicProblem, interpretation:PartialInterpretation,
15788 source: DefinedElement, target:DefinedElement)
15789{
15790 find interpretation(problem,interpretation);
15791 // The two endpoint of the link have to exist
15792 find mayExist(problem, interpretation, source);
15793 find mayExist(problem, interpretation, target);
15794 // Type consistency
15795 find mayInstanceOfTransition_class(problem,interpretation,source);
15796 find mayInstanceOfVertex_class(problem,interpretation,target);
15797 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
15798 // the upper bound of the multiplicity should be considered.
15799 numberOfExistingReferences == count find mustInRelationtarget_reference_Transition(problem,interpretation,source,_);
15800 check(numberOfExistingReferences < 1);
15801} or {
15802 find mustInRelationtarget_reference_Transition(problem,interpretation,source,target);
15803}
15804/**
15805 * Matcher for detecting tuples t where []source reference Transition(source,target)
15806 */
15807private pattern mustInRelationsource_reference_Transition(
15808 problem:LogicProblem, interpretation:PartialInterpretation,
15809 source: DefinedElement, target:DefinedElement)
15810{
15811 find interpretation(problem,interpretation);
15812 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
15813 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"source reference Transition");
15814 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
15815 BinaryElementRelationLink.param1(link,source);
15816 BinaryElementRelationLink.param2(link,target);
15817}
15818/**
15819 * Matcher for detecting tuples t where <>source reference Transition(source,target)
15820 */
15821private pattern mayInRelationsource_reference_Transition(
15822 problem:LogicProblem, interpretation:PartialInterpretation,
15823 source: DefinedElement, target:DefinedElement)
15824{
15825 find interpretation(problem,interpretation);
15826 // The two endpoint of the link have to exist
15827 find mayExist(problem, interpretation, source);
15828 find mayExist(problem, interpretation, target);
15829 // Type consistency
15830 find mayInstanceOfTransition_class(problem,interpretation,source);
15831 find mayInstanceOfVertex_class(problem,interpretation,target);
15832 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
15833 // the upper bound of the multiplicity should be considered.
15834 numberOfExistingReferences == count find mustInRelationsource_reference_Transition(problem,interpretation,source,_);
15835 check(numberOfExistingReferences < 1);
15836 // The eOpposite of the reference is containment, then a referene cannot be created if
15837 // 1. Multiple parents
15838 neg find mustContains4(problem,interpretation,source,_);
15839 // 2. Circle in the containment hierarchy
15840 neg find mustTransitiveContains(source,target);
15841} or {
15842 find mustInRelationsource_reference_Transition(problem,interpretation,source,target);
15843}
15844/**
15845 * Matcher for detecting tuples t where []regions reference CompositeElement(source,target)
15846 */
15847private pattern mustInRelationregions_reference_CompositeElement(
15848 problem:LogicProblem, interpretation:PartialInterpretation,
15849 source: DefinedElement, target:DefinedElement)
15850{
15851 find interpretation(problem,interpretation);
15852 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
15853 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"regions reference CompositeElement");
15854 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
15855 BinaryElementRelationLink.param1(link,source);
15856 BinaryElementRelationLink.param2(link,target);
15857}
15858/**
15859 * Matcher for detecting tuples t where <>regions reference CompositeElement(source,target)
15860 */
15861private pattern mayInRelationregions_reference_CompositeElement(
15862 problem:LogicProblem, interpretation:PartialInterpretation,
15863 source: DefinedElement, target:DefinedElement)
15864{
15865 find interpretation(problem,interpretation);
15866 // The two endpoint of the link have to exist
15867 find mayExist(problem, interpretation, source);
15868 find mayExist(problem, interpretation, target);
15869 // Type consistency
15870 find mayInstanceOfCompositeElement_class(problem,interpretation,source);
15871 find mayInstanceOfRegion_class(problem,interpretation,target);
15872 // The reference is containment, then a new reference cannot be create if:
15873 // 1. Multiple parents
15874 neg find mustContains4(problem,interpretation,_,target);
15875 // 2. Circle in the containment hierarchy
15876 neg find mustTransitiveContains(source,target);
15877} or {
15878 find mustInRelationregions_reference_CompositeElement(problem,interpretation,source,target);
15879}
15880
15881//////////
15882// 1.3 Relation Definition Indexers
15883//////////
15884// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries entryInRegion
15885private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(
15886 problem:LogicProblem, interpretation:PartialInterpretation,
15887 var_r1, var_e1)
15888{
15889 find interpretation(problem,interpretation);
15890 find mustInstanceOfRegion_class(problem,interpretation,var_r1);
15891 find mustInstanceOfEntry_class(problem,interpretation,var_e1);
15892 // r1 is exported
15893 // e1 is exported
15894 find mustInstanceOfRegion_class(problem,interpretation,var_r1);
15895 find mustInRelationvertices_reference_Region(problem,interpretation,var_r1,var_virtual0);
15896 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
15897 var_virtual0 == var_e1;
15898}
15899private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(
15900 problem:LogicProblem, interpretation:PartialInterpretation,
15901 var_r1, var_e1)
15902{
15903 find interpretation(problem,interpretation);
15904 find mayInstanceOfRegion_class(problem,interpretation,var_r1);
15905 find mayInstanceOfEntry_class(problem,interpretation,var_e1);
15906 // r1 is exported
15907 // e1 is exported
15908 find mayInstanceOfRegion_class(problem,interpretation,var_r1);
15909 find mayInRelationvertices_reference_Region(problem,interpretation,var_r1,var_virtual0);
15910 find mayInstanceOfVertex_class(problem,interpretation,var_virtual0);
15911 find mayEquivalent(problem, interpretation, var_virtual0, var_e1);
15912}
15913private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(
15914 problem:LogicProblem, interpretation:PartialInterpretation,
15915 var_r1, var_e1)
15916{
15917 find interpretation(problem,interpretation);
15918 find mustInstanceOfRegion_class(problem,interpretation,var_r1);
15919 find mustInstanceOfEntry_class(problem,interpretation,var_e1);
15920 // r1 is exported
15921 // e1 is exported
15922 find mustInstanceOfRegion_class(problem,interpretation,var_r1);
15923 find mustInRelationvertices_reference_Region(problem,interpretation,var_r1,var_virtual0);
15924 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
15925 var_virtual0 == var_e1;
15926}
15927// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries noEntryInRegion
15928private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(
15929 problem:LogicProblem, interpretation:PartialInterpretation,
15930 var_r1)
15931{
15932 find interpretation(problem,interpretation);
15933 find mustInstanceOfRegion_class(problem,interpretation,var_r1);
15934 // r1 is exported
15935 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r1,_var__0);
15936}
15937private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(
15938 problem:LogicProblem, interpretation:PartialInterpretation,
15939 var_r1)
15940{
15941 find interpretation(problem,interpretation);
15942 find mayInstanceOfRegion_class(problem,interpretation,var_r1);
15943 // r1 is exported
15944 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r1,_var__0);
15945}
15946private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(
15947 problem:LogicProblem, interpretation:PartialInterpretation,
15948 var_r1)
15949{
15950 find interpretation(problem,interpretation);
15951 find mustInstanceOfRegion_class(problem,interpretation,var_r1);
15952 // r1 is exported
15953 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r1,_var__0);
15954}
15955// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries multipleEntryInRegion
15956private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(
15957 problem:LogicProblem, interpretation:PartialInterpretation,
15958 var_r)
15959{
15960 find interpretation(problem,interpretation);
15961 find mustInstanceOfRegion_class(problem,interpretation,var_r);
15962 // r is exported
15963 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e1);
15964 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e2);
15965 neg find mayEquivalent(problem, interpretation, var_e1, var_e2);
15966}
15967private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(
15968 problem:LogicProblem, interpretation:PartialInterpretation,
15969 var_r)
15970{
15971 find interpretation(problem,interpretation);
15972 find mayInstanceOfRegion_class(problem,interpretation,var_r);
15973 // r is exported
15974 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e1);
15975 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e2);
15976 var_e1 != var_e2;
15977}
15978private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(
15979 problem:LogicProblem, interpretation:PartialInterpretation,
15980 var_r)
15981{
15982 find interpretation(problem,interpretation);
15983 find mustInstanceOfRegion_class(problem,interpretation,var_r);
15984 // r is exported
15985 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e1);
15986 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e2);
15987 var_e1 != var_e2;
15988}
15989// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries transition
15990private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(
15991 problem:LogicProblem, interpretation:PartialInterpretation,
15992 var_t, var_src, var_trg)
15993{
15994 find interpretation(problem,interpretation);
15995 find mustInstanceOfTransition_class(problem,interpretation,var_t);
15996 find mustInstanceOfVertex_class(problem,interpretation,var_src);
15997 find mustInstanceOfVertex_class(problem,interpretation,var_trg);
15998 // t is exported
15999 // src is exported
16000 // trg is exported
16001 find mustInstanceOfTransition_class(problem,interpretation,var_t);
16002 find mustInRelationsource_reference_Transition(problem,interpretation,var_t,var_virtual0);
16003 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
16004 var_virtual0 == var_src;
16005 find mustInstanceOfTransition_class(problem,interpretation,var_t);
16006 find mustInRelationtarget_reference_Transition(problem,interpretation,var_t,var_virtual1);
16007 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
16008 var_virtual1 == var_trg;
16009}
16010private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(
16011 problem:LogicProblem, interpretation:PartialInterpretation,
16012 var_t, var_src, var_trg)
16013{
16014 find interpretation(problem,interpretation);
16015 find mayInstanceOfTransition_class(problem,interpretation,var_t);
16016 find mayInstanceOfVertex_class(problem,interpretation,var_src);
16017 find mayInstanceOfVertex_class(problem,interpretation,var_trg);
16018 // t is exported
16019 // src is exported
16020 // trg is exported
16021 find mayInstanceOfTransition_class(problem,interpretation,var_t);
16022 find mayInRelationsource_reference_Transition(problem,interpretation,var_t,var_virtual0);
16023 find mayInstanceOfVertex_class(problem,interpretation,var_virtual0);
16024 find mayEquivalent(problem, interpretation, var_virtual0, var_src);
16025 find mayInstanceOfTransition_class(problem,interpretation,var_t);
16026 find mayInRelationtarget_reference_Transition(problem,interpretation,var_t,var_virtual1);
16027 find mayInstanceOfVertex_class(problem,interpretation,var_virtual1);
16028 find mayEquivalent(problem, interpretation, var_virtual1, var_trg);
16029}
16030private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(
16031 problem:LogicProblem, interpretation:PartialInterpretation,
16032 var_t, var_src, var_trg)
16033{
16034 find interpretation(problem,interpretation);
16035 find mustInstanceOfTransition_class(problem,interpretation,var_t);
16036 find mustInstanceOfVertex_class(problem,interpretation,var_src);
16037 find mustInstanceOfVertex_class(problem,interpretation,var_trg);
16038 // t is exported
16039 // src is exported
16040 // trg is exported
16041 find mustInstanceOfTransition_class(problem,interpretation,var_t);
16042 find mustInRelationsource_reference_Transition(problem,interpretation,var_t,var_virtual0);
16043 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
16044 var_virtual0 == var_src;
16045 find mustInstanceOfTransition_class(problem,interpretation,var_t);
16046 find mustInRelationtarget_reference_Transition(problem,interpretation,var_t,var_virtual1);
16047 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
16048 var_virtual1 == var_trg;
16049}
16050// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries incomingToEntry
16051private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(
16052 problem:LogicProblem, interpretation:PartialInterpretation,
16053 var_t, var_e)
16054{
16055 find interpretation(problem,interpretation);
16056 find mustInstanceOfTransition_class(problem,interpretation,var_t);
16057 find mustInstanceOfEntry_class(problem,interpretation,var_e);
16058 // t is exported
16059 // e is exported
16060 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t,_var__0,var_e);
16061}
16062private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(
16063 problem:LogicProblem, interpretation:PartialInterpretation,
16064 var_t, var_e)
16065{
16066 find interpretation(problem,interpretation);
16067 find mayInstanceOfTransition_class(problem,interpretation,var_t);
16068 find mayInstanceOfEntry_class(problem,interpretation,var_e);
16069 // t is exported
16070 // e is exported
16071 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t,_var__0,var_e);
16072}
16073private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(
16074 problem:LogicProblem, interpretation:PartialInterpretation,
16075 var_t, var_e)
16076{
16077 find interpretation(problem,interpretation);
16078 find mustInstanceOfTransition_class(problem,interpretation,var_t);
16079 find mustInstanceOfEntry_class(problem,interpretation,var_e);
16080 // t is exported
16081 // e is exported
16082 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t,_var__0,var_e);
16083}
16084// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries noOutgoingTransitionFromEntry
16085private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(
16086 problem:LogicProblem, interpretation:PartialInterpretation,
16087 var_e)
16088{
16089 find interpretation(problem,interpretation);
16090 find mustInstanceOfEntry_class(problem,interpretation,var_e);
16091 // e is exported
16092 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_e,_var__1);
16093}
16094private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(
16095 problem:LogicProblem, interpretation:PartialInterpretation,
16096 var_e)
16097{
16098 find interpretation(problem,interpretation);
16099 find mayInstanceOfEntry_class(problem,interpretation,var_e);
16100 // e is exported
16101 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_e,_var__1);
16102}
16103private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(
16104 problem:LogicProblem, interpretation:PartialInterpretation,
16105 var_e)
16106{
16107 find interpretation(problem,interpretation);
16108 find mustInstanceOfEntry_class(problem,interpretation,var_e);
16109 // e is exported
16110 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_e,_var__1);
16111}
16112// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries multipleTransitionFromEntry
16113private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(
16114 problem:LogicProblem, interpretation:PartialInterpretation,
16115 var_e, var_t1, var_t2)
16116{
16117 find interpretation(problem,interpretation);
16118 find mustInstanceOfEntry_class(problem,interpretation,var_e);
16119 find mustInstanceOfTransition_class(problem,interpretation,var_t1);
16120 find mustInstanceOfTransition_class(problem,interpretation,var_t2);
16121 // e is exported
16122 // t1 is exported
16123 // t2 is exported
16124 find mustInstanceOfEntry_class(problem,interpretation,var_e);
16125 find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0);
16126 find mustInstanceOfTransition_class(problem,interpretation,var_virtual0);
16127 var_virtual0 == var_t1;
16128 find mustInstanceOfEntry_class(problem,interpretation,var_e);
16129 find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual1);
16130 find mustInstanceOfTransition_class(problem,interpretation,var_virtual1);
16131 var_virtual1 == var_t2;
16132 neg find mayEquivalent(problem, interpretation, var_t1, var_t2);
16133}
16134private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(
16135 problem:LogicProblem, interpretation:PartialInterpretation,
16136 var_e, var_t1, var_t2)
16137{
16138 find interpretation(problem,interpretation);
16139 find mayInstanceOfEntry_class(problem,interpretation,var_e);
16140 find mayInstanceOfTransition_class(problem,interpretation,var_t1);
16141 find mayInstanceOfTransition_class(problem,interpretation,var_t2);
16142 // e is exported
16143 // t1 is exported
16144 // t2 is exported
16145 find mayInstanceOfEntry_class(problem,interpretation,var_e);
16146 find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0);
16147 find mayInstanceOfTransition_class(problem,interpretation,var_virtual0);
16148 find mayEquivalent(problem, interpretation, var_virtual0, var_t1);
16149 find mayInstanceOfEntry_class(problem,interpretation,var_e);
16150 find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual1);
16151 find mayInstanceOfTransition_class(problem,interpretation,var_virtual1);
16152 find mayEquivalent(problem, interpretation, var_virtual1, var_t2);
16153 var_t1 != var_t2;
16154}
16155private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(
16156 problem:LogicProblem, interpretation:PartialInterpretation,
16157 var_e, var_t1, var_t2)
16158{
16159 find interpretation(problem,interpretation);
16160 find mustInstanceOfEntry_class(problem,interpretation,var_e);
16161 find mustInstanceOfTransition_class(problem,interpretation,var_t1);
16162 find mustInstanceOfTransition_class(problem,interpretation,var_t2);
16163 // e is exported
16164 // t1 is exported
16165 // t2 is exported
16166 find mustInstanceOfEntry_class(problem,interpretation,var_e);
16167 find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0);
16168 find mustInstanceOfTransition_class(problem,interpretation,var_virtual0);
16169 var_virtual0 == var_t1;
16170 find mustInstanceOfEntry_class(problem,interpretation,var_e);
16171 find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual1);
16172 find mustInstanceOfTransition_class(problem,interpretation,var_virtual1);
16173 var_virtual1 == var_t2;
16174 var_t1 != var_t2;
16175}
16176// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries outgoingFromExit
16177private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(
16178 problem:LogicProblem, interpretation:PartialInterpretation,
16179 var_t, var_e)
16180{
16181 find interpretation(problem,interpretation);
16182 find mustInstanceOfTransition_class(problem,interpretation,var_t);
16183 find mustInstanceOfExit_class(problem,interpretation,var_e);
16184 // t is exported
16185 // e is exported
16186 find mustInstanceOfExit_class(problem,interpretation,var_e);
16187 find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0);
16188 find mustInstanceOfTransition_class(problem,interpretation,var_virtual0);
16189 var_virtual0 == var_t;
16190}
16191private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(
16192 problem:LogicProblem, interpretation:PartialInterpretation,
16193 var_t, var_e)
16194{
16195 find interpretation(problem,interpretation);
16196 find mayInstanceOfTransition_class(problem,interpretation,var_t);
16197 find mayInstanceOfExit_class(problem,interpretation,var_e);
16198 // t is exported
16199 // e is exported
16200 find mayInstanceOfExit_class(problem,interpretation,var_e);
16201 find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0);
16202 find mayInstanceOfTransition_class(problem,interpretation,var_virtual0);
16203 find mayEquivalent(problem, interpretation, var_virtual0, var_t);
16204}
16205private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(
16206 problem:LogicProblem, interpretation:PartialInterpretation,
16207 var_t, var_e)
16208{
16209 find interpretation(problem,interpretation);
16210 find mustInstanceOfTransition_class(problem,interpretation,var_t);
16211 find mustInstanceOfExit_class(problem,interpretation,var_e);
16212 // t is exported
16213 // e is exported
16214 find mustInstanceOfExit_class(problem,interpretation,var_e);
16215 find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0);
16216 find mustInstanceOfTransition_class(problem,interpretation,var_virtual0);
16217 var_virtual0 == var_t;
16218}
16219// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries outgoingFromFinal
16220private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(
16221 problem:LogicProblem, interpretation:PartialInterpretation,
16222 var_t, var_f)
16223{
16224 find interpretation(problem,interpretation);
16225 find mustInstanceOfTransition_class(problem,interpretation,var_t);
16226 find mustInstanceOfFinalState_class(problem,interpretation,var_f);
16227 // t is exported
16228 // f is exported
16229 find mustInstanceOfFinalState_class(problem,interpretation,var_f);
16230 find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_f,var_virtual0);
16231 find mustInstanceOfTransition_class(problem,interpretation,var_virtual0);
16232 var_virtual0 == var_t;
16233}
16234private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(
16235 problem:LogicProblem, interpretation:PartialInterpretation,
16236 var_t, var_f)
16237{
16238 find interpretation(problem,interpretation);
16239 find mayInstanceOfTransition_class(problem,interpretation,var_t);
16240 find mayInstanceOfFinalState_class(problem,interpretation,var_f);
16241 // t is exported
16242 // f is exported
16243 find mayInstanceOfFinalState_class(problem,interpretation,var_f);
16244 find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_f,var_virtual0);
16245 find mayInstanceOfTransition_class(problem,interpretation,var_virtual0);
16246 find mayEquivalent(problem, interpretation, var_virtual0, var_t);
16247}
16248private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(
16249 problem:LogicProblem, interpretation:PartialInterpretation,
16250 var_t, var_f)
16251{
16252 find interpretation(problem,interpretation);
16253 find mustInstanceOfTransition_class(problem,interpretation,var_t);
16254 find mustInstanceOfFinalState_class(problem,interpretation,var_f);
16255 // t is exported
16256 // f is exported
16257 find mustInstanceOfFinalState_class(problem,interpretation,var_f);
16258 find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_f,var_virtual0);
16259 find mustInstanceOfTransition_class(problem,interpretation,var_virtual0);
16260 var_virtual0 == var_t;
16261}
16262// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries noStateInRegion
16263private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(
16264 problem:LogicProblem, interpretation:PartialInterpretation,
16265 var_region)
16266{
16267 find interpretation(problem,interpretation);
16268 find mustInstanceOfRegion_class(problem,interpretation,var_region);
16269 // region is exported
16270 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion(problem,interpretation,var_region,_var__0);
16271}
16272private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(
16273 problem:LogicProblem, interpretation:PartialInterpretation,
16274 var_region)
16275{
16276 find interpretation(problem,interpretation);
16277 find mayInstanceOfRegion_class(problem,interpretation,var_region);
16278 // region is exported
16279 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion(problem,interpretation,var_region,_var__0);
16280}
16281private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(
16282 problem:LogicProblem, interpretation:PartialInterpretation,
16283 var_region)
16284{
16285 find interpretation(problem,interpretation);
16286 find mustInstanceOfRegion_class(problem,interpretation,var_region);
16287 // region is exported
16288 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion(problem,interpretation,var_region,_var__0);
16289}
16290// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries StateInRegion
16291private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion(
16292 problem:LogicProblem, interpretation:PartialInterpretation,
16293 var_region, var_state)
16294{
16295 find interpretation(problem,interpretation);
16296 find mustInstanceOfRegion_class(problem,interpretation,var_region);
16297 find mustInstanceOfState_class(problem,interpretation,var_state);
16298 // region is exported
16299 // state is exported
16300 find mustInstanceOfRegion_class(problem,interpretation,var_region);
16301 find mustInRelationvertices_reference_Region(problem,interpretation,var_region,var_virtual0);
16302 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
16303 var_virtual0 == var_state;
16304}
16305private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion(
16306 problem:LogicProblem, interpretation:PartialInterpretation,
16307 var_region, var_state)
16308{
16309 find interpretation(problem,interpretation);
16310 find mayInstanceOfRegion_class(problem,interpretation,var_region);
16311 find mayInstanceOfState_class(problem,interpretation,var_state);
16312 // region is exported
16313 // state is exported
16314 find mayInstanceOfRegion_class(problem,interpretation,var_region);
16315 find mayInRelationvertices_reference_Region(problem,interpretation,var_region,var_virtual0);
16316 find mayInstanceOfVertex_class(problem,interpretation,var_virtual0);
16317 find mayEquivalent(problem, interpretation, var_virtual0, var_state);
16318}
16319private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion(
16320 problem:LogicProblem, interpretation:PartialInterpretation,
16321 var_region, var_state)
16322{
16323 find interpretation(problem,interpretation);
16324 find mustInstanceOfRegion_class(problem,interpretation,var_region);
16325 find mustInstanceOfState_class(problem,interpretation,var_state);
16326 // region is exported
16327 // state is exported
16328 find mustInstanceOfRegion_class(problem,interpretation,var_region);
16329 find mustInRelationvertices_reference_Region(problem,interpretation,var_region,var_virtual0);
16330 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
16331 var_virtual0 == var_state;
16332}
16333// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries choiceHasNoOutgoing
16334private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(
16335 problem:LogicProblem, interpretation:PartialInterpretation,
16336 var_c)
16337{
16338 find interpretation(problem,interpretation);
16339 find mustInstanceOfChoice_class(problem,interpretation,var_c);
16340 // c is exported
16341 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_c,_var__1);
16342}
16343private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(
16344 problem:LogicProblem, interpretation:PartialInterpretation,
16345 var_c)
16346{
16347 find interpretation(problem,interpretation);
16348 find mayInstanceOfChoice_class(problem,interpretation,var_c);
16349 // c is exported
16350 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_c,_var__1);
16351}
16352private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(
16353 problem:LogicProblem, interpretation:PartialInterpretation,
16354 var_c)
16355{
16356 find interpretation(problem,interpretation);
16357 find mustInstanceOfChoice_class(problem,interpretation,var_c);
16358 // c is exported
16359 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_c,_var__1);
16360}
16361// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries choiceHasNoIncoming
16362private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(
16363 problem:LogicProblem, interpretation:PartialInterpretation,
16364 var_c)
16365{
16366 find interpretation(problem,interpretation);
16367 find mustInstanceOfChoice_class(problem,interpretation,var_c);
16368 // c is exported
16369 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_c);
16370}
16371private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(
16372 problem:LogicProblem, interpretation:PartialInterpretation,
16373 var_c)
16374{
16375 find interpretation(problem,interpretation);
16376 find mayInstanceOfChoice_class(problem,interpretation,var_c);
16377 // c is exported
16378 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_c);
16379}
16380private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(
16381 problem:LogicProblem, interpretation:PartialInterpretation,
16382 var_c)
16383{
16384 find interpretation(problem,interpretation);
16385 find mustInstanceOfChoice_class(problem,interpretation,var_c);
16386 // c is exported
16387 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_c);
16388}
16389// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries synchHasNoOutgoing
16390private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(
16391 problem:LogicProblem, interpretation:PartialInterpretation,
16392 var_s)
16393{
16394 find interpretation(problem,interpretation);
16395 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
16396 // s is exported
16397 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,_var__1);
16398}
16399private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(
16400 problem:LogicProblem, interpretation:PartialInterpretation,
16401 var_s)
16402{
16403 find interpretation(problem,interpretation);
16404 find mayInstanceOfSynchronization_class(problem,interpretation,var_s);
16405 // s is exported
16406 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,_var__1);
16407}
16408private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(
16409 problem:LogicProblem, interpretation:PartialInterpretation,
16410 var_s)
16411{
16412 find interpretation(problem,interpretation);
16413 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
16414 // s is exported
16415 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,_var__1);
16416}
16417// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries synchHasNoIncoming
16418private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(
16419 problem:LogicProblem, interpretation:PartialInterpretation,
16420 var_s)
16421{
16422 find interpretation(problem,interpretation);
16423 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
16424 // s is exported
16425 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_s);
16426}
16427private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(
16428 problem:LogicProblem, interpretation:PartialInterpretation,
16429 var_s)
16430{
16431 find interpretation(problem,interpretation);
16432 find mayInstanceOfSynchronization_class(problem,interpretation,var_s);
16433 // s is exported
16434 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_s);
16435}
16436private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(
16437 problem:LogicProblem, interpretation:PartialInterpretation,
16438 var_s)
16439{
16440 find interpretation(problem,interpretation);
16441 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
16442 // s is exported
16443 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_s);
16444}
16445// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries SynchronizedIncomingInSameRegion
16446private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(
16447 problem:LogicProblem, interpretation:PartialInterpretation,
16448 var_s, var_v1, var_v2)
16449{
16450 find interpretation(problem,interpretation);
16451 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
16452 find mustInstanceOfVertex_class(problem,interpretation,var_v1);
16453 find mustInstanceOfVertex_class(problem,interpretation,var_v2);
16454 // s is exported
16455 // v1 is exported
16456 // v2 is exported
16457 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_v1,var_s);
16458 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_v2,var_s);
16459 neg find mayEquivalent(problem, interpretation, var_t1, var_t2);
16460 find mustInstanceOfRegion_class(problem,interpretation,var_r);
16461 find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0);
16462 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
16463 var_virtual0 == var_v1;
16464 find mustInstanceOfRegion_class(problem,interpretation,var_r);
16465 find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1);
16466 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
16467 var_virtual1 == var_v2;
16468}or{
16469 find interpretation(problem,interpretation);
16470 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
16471 find mustInstanceOfVertex_class(problem,interpretation,var_v1);
16472 find mustInstanceOfVertex_class(problem,interpretation,var_v2);
16473 // s is exported
16474 // v1 is exported
16475 // v2 is exported
16476 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_s,var_v1);
16477 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_s,var_v2);
16478 neg find mayEquivalent(problem, interpretation, var_t1, var_t2);
16479 find mustInstanceOfRegion_class(problem,interpretation,var_r);
16480 find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0);
16481 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
16482 var_virtual0 == var_v1;
16483 find mustInstanceOfRegion_class(problem,interpretation,var_r);
16484 find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1);
16485 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
16486 var_virtual1 == var_v2;
16487}
16488private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(
16489 problem:LogicProblem, interpretation:PartialInterpretation,
16490 var_s, var_v1, var_v2)
16491{
16492 find interpretation(problem,interpretation);
16493 find mayInstanceOfSynchronization_class(problem,interpretation,var_s);
16494 find mayInstanceOfVertex_class(problem,interpretation,var_v1);
16495 find mayInstanceOfVertex_class(problem,interpretation,var_v2);
16496 // s is exported
16497 // v1 is exported
16498 // v2 is exported
16499 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_v1,var_s);
16500 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_v2,var_s);
16501 var_t1 != var_t2;
16502 find mayInstanceOfRegion_class(problem,interpretation,var_r);
16503 find mayInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0);
16504 find mayInstanceOfVertex_class(problem,interpretation,var_virtual0);
16505 find mayEquivalent(problem, interpretation, var_virtual0, var_v1);
16506 find mayInstanceOfRegion_class(problem,interpretation,var_r);
16507 find mayInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1);
16508 find mayInstanceOfVertex_class(problem,interpretation,var_virtual1);
16509 find mayEquivalent(problem, interpretation, var_virtual1, var_v2);
16510}or{
16511 find interpretation(problem,interpretation);
16512 find mayInstanceOfSynchronization_class(problem,interpretation,var_s);
16513 find mayInstanceOfVertex_class(problem,interpretation,var_v1);
16514 find mayInstanceOfVertex_class(problem,interpretation,var_v2);
16515 // s is exported
16516 // v1 is exported
16517 // v2 is exported
16518 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_s,var_v1);
16519 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_s,var_v2);
16520 var_t1 != var_t2;
16521 find mayInstanceOfRegion_class(problem,interpretation,var_r);
16522 find mayInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0);
16523 find mayInstanceOfVertex_class(problem,interpretation,var_virtual0);
16524 find mayEquivalent(problem, interpretation, var_virtual0, var_v1);
16525 find mayInstanceOfRegion_class(problem,interpretation,var_r);
16526 find mayInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1);
16527 find mayInstanceOfVertex_class(problem,interpretation,var_virtual1);
16528 find mayEquivalent(problem, interpretation, var_virtual1, var_v2);
16529}
16530private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(
16531 problem:LogicProblem, interpretation:PartialInterpretation,
16532 var_s, var_v1, var_v2)
16533{
16534 find interpretation(problem,interpretation);
16535 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
16536 find mustInstanceOfVertex_class(problem,interpretation,var_v1);
16537 find mustInstanceOfVertex_class(problem,interpretation,var_v2);
16538 // s is exported
16539 // v1 is exported
16540 // v2 is exported
16541 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_v1,var_s);
16542 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_v2,var_s);
16543 var_t1 != var_t2;
16544 find mustInstanceOfRegion_class(problem,interpretation,var_r);
16545 find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0);
16546 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
16547 var_virtual0 == var_v1;
16548 find mustInstanceOfRegion_class(problem,interpretation,var_r);
16549 find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1);
16550 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
16551 var_virtual1 == var_v2;
16552}or{
16553 find interpretation(problem,interpretation);
16554 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
16555 find mustInstanceOfVertex_class(problem,interpretation,var_v1);
16556 find mustInstanceOfVertex_class(problem,interpretation,var_v2);
16557 // s is exported
16558 // v1 is exported
16559 // v2 is exported
16560 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_s,var_v1);
16561 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_s,var_v2);
16562 var_t1 != var_t2;
16563 find mustInstanceOfRegion_class(problem,interpretation,var_r);
16564 find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0);
16565 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
16566 var_virtual0 == var_v1;
16567 find mustInstanceOfRegion_class(problem,interpretation,var_r);
16568 find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1);
16569 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
16570 var_virtual1 == var_v2;
16571}
16572// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries notSynchronizingStates
16573private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(
16574 problem:LogicProblem, interpretation:PartialInterpretation,
16575 var_s)
16576{
16577 find interpretation(problem,interpretation);
16578 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
16579 // s is exported
16580 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition(problem,interpretation,var_s);
16581 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition(problem,interpretation,var_s);
16582}
16583private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(
16584 problem:LogicProblem, interpretation:PartialInterpretation,
16585 var_s)
16586{
16587 find interpretation(problem,interpretation);
16588 find mayInstanceOfSynchronization_class(problem,interpretation,var_s);
16589 // s is exported
16590 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition(problem,interpretation,var_s);
16591 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition(problem,interpretation,var_s);
16592}
16593private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(
16594 problem:LogicProblem, interpretation:PartialInterpretation,
16595 var_s)
16596{
16597 find interpretation(problem,interpretation);
16598 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
16599 // s is exported
16600 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition(problem,interpretation,var_s);
16601 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition(problem,interpretation,var_s);
16602}
16603// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries hasMultipleOutgoingTrainsition
16604private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition(
16605 problem:LogicProblem, interpretation:PartialInterpretation,
16606 var_v)
16607{
16608 find interpretation(problem,interpretation);
16609 find mustInstanceOfSynchronization_class(problem,interpretation,var_v);
16610 // v is exported
16611 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_trg1);
16612 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v,var_trg2);
16613 neg find mayEquivalent(problem, interpretation, var_trg1, var_trg2);
16614}
16615private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition(
16616 problem:LogicProblem, interpretation:PartialInterpretation,
16617 var_v)
16618{
16619 find interpretation(problem,interpretation);
16620 find mayInstanceOfSynchronization_class(problem,interpretation,var_v);
16621 // v is exported
16622 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_trg1);
16623 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v,var_trg2);
16624 var_trg1 != var_trg2;
16625}
16626private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition(
16627 problem:LogicProblem, interpretation:PartialInterpretation,
16628 var_v)
16629{
16630 find interpretation(problem,interpretation);
16631 find mustInstanceOfSynchronization_class(problem,interpretation,var_v);
16632 // v is exported
16633 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_trg1);
16634 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v,var_trg2);
16635 var_trg1 != var_trg2;
16636}
16637// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries hasMultipleIncomingTrainsition
16638private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition(
16639 problem:LogicProblem, interpretation:PartialInterpretation,
16640 var_v)
16641{
16642 find interpretation(problem,interpretation);
16643 find mustInstanceOfSynchronization_class(problem,interpretation,var_v);
16644 // v is exported
16645 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_src1,var_v);
16646 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_src2,var_v);
16647 neg find mayEquivalent(problem, interpretation, var_src1, var_src2);
16648}
16649private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition(
16650 problem:LogicProblem, interpretation:PartialInterpretation,
16651 var_v)
16652{
16653 find interpretation(problem,interpretation);
16654 find mayInstanceOfSynchronization_class(problem,interpretation,var_v);
16655 // v is exported
16656 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_src1,var_v);
16657 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_src2,var_v);
16658 var_src1 != var_src2;
16659}
16660private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition(
16661 problem:LogicProblem, interpretation:PartialInterpretation,
16662 var_v)
16663{
16664 find interpretation(problem,interpretation);
16665 find mustInstanceOfSynchronization_class(problem,interpretation,var_v);
16666 // v is exported
16667 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_src1,var_v);
16668 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_src2,var_v);
16669 var_src1 != var_src2;
16670}
16671// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries SynchronizedRegionsAreNotSiblings
16672private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(
16673 problem:LogicProblem, interpretation:PartialInterpretation,
16674 var_s, var_v1, var_v2)
16675{
16676 find interpretation(problem,interpretation);
16677 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
16678 find mustInstanceOfVertex_class(problem,interpretation,var_v1);
16679 find mustInstanceOfVertex_class(problem,interpretation,var_v2);
16680 // s is exported
16681 // v1 is exported
16682 // v2 is exported
16683 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v1,var_s);
16684 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v2,var_s);
16685 find mustInstanceOfCompositeElement_class(problem,interpretation,var_r1);
16686 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0);
16687 find mustInstanceOfRegion_class(problem,interpretation,var_virtual0);
16688 find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1);
16689 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
16690 var_virtual1 == var_v1;
16691 find mustInstanceOfCompositeElement_class(problem,interpretation,var_r2);
16692 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2);
16693 find mustInstanceOfRegion_class(problem,interpretation,var_virtual2);
16694 find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3);
16695 find mustInstanceOfVertex_class(problem,interpretation,var_virtual3);
16696 var_virtual3 == var_v2;
16697 neg find mayEquivalent(problem, interpretation, var_r1, var_r2);
16698}or{
16699 find interpretation(problem,interpretation);
16700 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
16701 find mustInstanceOfVertex_class(problem,interpretation,var_v1);
16702 find mustInstanceOfVertex_class(problem,interpretation,var_v2);
16703 // s is exported
16704 // v1 is exported
16705 // v2 is exported
16706 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v1);
16707 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_s,var_v2);
16708 find mustInstanceOfCompositeElement_class(problem,interpretation,var_r1);
16709 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0);
16710 find mustInstanceOfRegion_class(problem,interpretation,var_virtual0);
16711 find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1);
16712 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
16713 var_virtual1 == var_v1;
16714 find mustInstanceOfCompositeElement_class(problem,interpretation,var_r2);
16715 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2);
16716 find mustInstanceOfRegion_class(problem,interpretation,var_virtual2);
16717 find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3);
16718 find mustInstanceOfVertex_class(problem,interpretation,var_virtual3);
16719 var_virtual3 == var_v2;
16720 neg find mayEquivalent(problem, interpretation, var_r1, var_r2);
16721}
16722private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(
16723 problem:LogicProblem, interpretation:PartialInterpretation,
16724 var_s, var_v1, var_v2)
16725{
16726 find interpretation(problem,interpretation);
16727 find mayInstanceOfSynchronization_class(problem,interpretation,var_s);
16728 find mayInstanceOfVertex_class(problem,interpretation,var_v1);
16729 find mayInstanceOfVertex_class(problem,interpretation,var_v2);
16730 // s is exported
16731 // v1 is exported
16732 // v2 is exported
16733 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v1,var_s);
16734 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v2,var_s);
16735 find mayInstanceOfCompositeElement_class(problem,interpretation,var_r1);
16736 find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0);
16737 find mayInstanceOfRegion_class(problem,interpretation,var_virtual0);
16738 find mayInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1);
16739 find mayInstanceOfVertex_class(problem,interpretation,var_virtual1);
16740 find mayEquivalent(problem, interpretation, var_virtual1, var_v1);
16741 find mayInstanceOfCompositeElement_class(problem,interpretation,var_r2);
16742 find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2);
16743 find mayInstanceOfRegion_class(problem,interpretation,var_virtual2);
16744 find mayInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3);
16745 find mayInstanceOfVertex_class(problem,interpretation,var_virtual3);
16746 find mayEquivalent(problem, interpretation, var_virtual3, var_v2);
16747 var_r1 != var_r2;
16748}or{
16749 find interpretation(problem,interpretation);
16750 find mayInstanceOfSynchronization_class(problem,interpretation,var_s);
16751 find mayInstanceOfVertex_class(problem,interpretation,var_v1);
16752 find mayInstanceOfVertex_class(problem,interpretation,var_v2);
16753 // s is exported
16754 // v1 is exported
16755 // v2 is exported
16756 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v1);
16757 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_s,var_v2);
16758 find mayInstanceOfCompositeElement_class(problem,interpretation,var_r1);
16759 find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0);
16760 find mayInstanceOfRegion_class(problem,interpretation,var_virtual0);
16761 find mayInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1);
16762 find mayInstanceOfVertex_class(problem,interpretation,var_virtual1);
16763 find mayEquivalent(problem, interpretation, var_virtual1, var_v1);
16764 find mayInstanceOfCompositeElement_class(problem,interpretation,var_r2);
16765 find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2);
16766 find mayInstanceOfRegion_class(problem,interpretation,var_virtual2);
16767 find mayInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3);
16768 find mayInstanceOfVertex_class(problem,interpretation,var_virtual3);
16769 find mayEquivalent(problem, interpretation, var_virtual3, var_v2);
16770 var_r1 != var_r2;
16771}
16772private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(
16773 problem:LogicProblem, interpretation:PartialInterpretation,
16774 var_s, var_v1, var_v2)
16775{
16776 find interpretation(problem,interpretation);
16777 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
16778 find mustInstanceOfVertex_class(problem,interpretation,var_v1);
16779 find mustInstanceOfVertex_class(problem,interpretation,var_v2);
16780 // s is exported
16781 // v1 is exported
16782 // v2 is exported
16783 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v1,var_s);
16784 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v2,var_s);
16785 find mustInstanceOfCompositeElement_class(problem,interpretation,var_r1);
16786 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0);
16787 find mustInstanceOfRegion_class(problem,interpretation,var_virtual0);
16788 find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1);
16789 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
16790 var_virtual1 == var_v1;
16791 find mustInstanceOfCompositeElement_class(problem,interpretation,var_r2);
16792 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2);
16793 find mustInstanceOfRegion_class(problem,interpretation,var_virtual2);
16794 find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3);
16795 find mustInstanceOfVertex_class(problem,interpretation,var_virtual3);
16796 var_virtual3 == var_v2;
16797 var_r1 != var_r2;
16798}or{
16799 find interpretation(problem,interpretation);
16800 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
16801 find mustInstanceOfVertex_class(problem,interpretation,var_v1);
16802 find mustInstanceOfVertex_class(problem,interpretation,var_v2);
16803 // s is exported
16804 // v1 is exported
16805 // v2 is exported
16806 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v1);
16807 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_s,var_v2);
16808 find mustInstanceOfCompositeElement_class(problem,interpretation,var_r1);
16809 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0);
16810 find mustInstanceOfRegion_class(problem,interpretation,var_virtual0);
16811 find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1);
16812 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
16813 var_virtual1 == var_v1;
16814 find mustInstanceOfCompositeElement_class(problem,interpretation,var_r2);
16815 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2);
16816 find mustInstanceOfRegion_class(problem,interpretation,var_virtual2);
16817 find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3);
16818 find mustInstanceOfVertex_class(problem,interpretation,var_virtual3);
16819 var_virtual3 == var_v2;
16820 var_r1 != var_r2;
16821}
16822// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries child
16823private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(
16824 problem:LogicProblem, interpretation:PartialInterpretation,
16825 var_parent, var_child)
16826{
16827 find interpretation(problem,interpretation);
16828 find mustInstanceOfCompositeElement_class(problem,interpretation,var_parent);
16829 find mustInstanceOfVertex_class(problem,interpretation,var_child);
16830 // parent is exported
16831 // child is exported
16832 find mustInstanceOfCompositeElement_class(problem,interpretation,var_parent);
16833 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_parent,var_virtual0);
16834 find mustInstanceOfRegion_class(problem,interpretation,var_virtual0);
16835 find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1);
16836 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
16837 var_virtual1 == var_child;
16838}
16839private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(
16840 problem:LogicProblem, interpretation:PartialInterpretation,
16841 var_parent, var_child)
16842{
16843 find interpretation(problem,interpretation);
16844 find mayInstanceOfCompositeElement_class(problem,interpretation,var_parent);
16845 find mayInstanceOfVertex_class(problem,interpretation,var_child);
16846 // parent is exported
16847 // child is exported
16848 find mayInstanceOfCompositeElement_class(problem,interpretation,var_parent);
16849 find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_parent,var_virtual0);
16850 find mayInstanceOfRegion_class(problem,interpretation,var_virtual0);
16851 find mayInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1);
16852 find mayInstanceOfVertex_class(problem,interpretation,var_virtual1);
16853 find mayEquivalent(problem, interpretation, var_virtual1, var_child);
16854}
16855private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(
16856 problem:LogicProblem, interpretation:PartialInterpretation,
16857 var_parent, var_child)
16858{
16859 find interpretation(problem,interpretation);
16860 find mustInstanceOfCompositeElement_class(problem,interpretation,var_parent);
16861 find mustInstanceOfVertex_class(problem,interpretation,var_child);
16862 // parent is exported
16863 // child is exported
16864 find mustInstanceOfCompositeElement_class(problem,interpretation,var_parent);
16865 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_parent,var_virtual0);
16866 find mustInstanceOfRegion_class(problem,interpretation,var_virtual0);
16867 find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1);
16868 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
16869 var_virtual1 == var_child;
16870}
16871// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries SynchronizedRegionDoesNotHaveMultipleRegions
16872private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(
16873 problem:LogicProblem, interpretation:PartialInterpretation,
16874 var_s, var_v)
16875{
16876 find interpretation(problem,interpretation);
16877 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
16878 find mustInstanceOfVertex_class(problem,interpretation,var_v);
16879 // s is exported
16880 // v is exported
16881 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_s);
16882 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v);
16883 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c);
16884}or{
16885 find interpretation(problem,interpretation);
16886 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
16887 find mustInstanceOfVertex_class(problem,interpretation,var_v);
16888 // s is exported
16889 // v is exported
16890 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v);
16891 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v);
16892 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c);
16893}
16894private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(
16895 problem:LogicProblem, interpretation:PartialInterpretation,
16896 var_s, var_v)
16897{
16898 find interpretation(problem,interpretation);
16899 find mayInstanceOfSynchronization_class(problem,interpretation,var_s);
16900 find mayInstanceOfVertex_class(problem,interpretation,var_v);
16901 // s is exported
16902 // v is exported
16903 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_s);
16904 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v);
16905 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c);
16906}or{
16907 find interpretation(problem,interpretation);
16908 find mayInstanceOfSynchronization_class(problem,interpretation,var_s);
16909 find mayInstanceOfVertex_class(problem,interpretation,var_v);
16910 // s is exported
16911 // v is exported
16912 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v);
16913 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v);
16914 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c);
16915}
16916private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(
16917 problem:LogicProblem, interpretation:PartialInterpretation,
16918 var_s, var_v)
16919{
16920 find interpretation(problem,interpretation);
16921 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
16922 find mustInstanceOfVertex_class(problem,interpretation,var_v);
16923 // s is exported
16924 // v is exported
16925 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_s);
16926 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v);
16927 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c);
16928}or{
16929 find interpretation(problem,interpretation);
16930 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
16931 find mustInstanceOfVertex_class(problem,interpretation,var_v);
16932 // s is exported
16933 // v is exported
16934 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v);
16935 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v);
16936 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c);
16937}
16938// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries hasMultipleRegions
16939private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(
16940 problem:LogicProblem, interpretation:PartialInterpretation,
16941 var_composite)
16942{
16943 find interpretation(problem,interpretation);
16944 find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite);
16945 // composite is exported
16946 find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite);
16947 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual0);
16948 find mustInstanceOfRegion_class(problem,interpretation,var_virtual0);
16949 var_virtual0 == var_region1;
16950 find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite);
16951 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual1);
16952 find mustInstanceOfRegion_class(problem,interpretation,var_virtual1);
16953 var_virtual1 == var_region2;
16954 neg find mayEquivalent(problem, interpretation, var_region1, var_region2);
16955}
16956private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(
16957 problem:LogicProblem, interpretation:PartialInterpretation,
16958 var_composite)
16959{
16960 find interpretation(problem,interpretation);
16961 find mayInstanceOfCompositeElement_class(problem,interpretation,var_composite);
16962 // composite is exported
16963 find mayInstanceOfCompositeElement_class(problem,interpretation,var_composite);
16964 find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual0);
16965 find mayInstanceOfRegion_class(problem,interpretation,var_virtual0);
16966 find mayEquivalent(problem, interpretation, var_virtual0, var_region1);
16967 find mayInstanceOfCompositeElement_class(problem,interpretation,var_composite);
16968 find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual1);
16969 find mayInstanceOfRegion_class(problem,interpretation,var_virtual1);
16970 find mayEquivalent(problem, interpretation, var_virtual1, var_region2);
16971 var_region1 != var_region2;
16972}
16973private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(
16974 problem:LogicProblem, interpretation:PartialInterpretation,
16975 var_composite)
16976{
16977 find interpretation(problem,interpretation);
16978 find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite);
16979 // composite is exported
16980 find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite);
16981 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual0);
16982 find mustInstanceOfRegion_class(problem,interpretation,var_virtual0);
16983 var_virtual0 == var_region1;
16984 find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite);
16985 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual1);
16986 find mustInstanceOfRegion_class(problem,interpretation,var_virtual1);
16987 var_virtual1 == var_region2;
16988 var_region1 != var_region2;
16989}
16990// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries synchThree
16991private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(
16992 problem:LogicProblem, interpretation:PartialInterpretation,
16993 var_s)
16994{
16995 find interpretation(problem,interpretation);
16996 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
16997 // s is exported
16998 find mustInstanceOfTransition_class(problem,interpretation,var_t1);
16999 find mustInRelationtarget_reference_Transition(problem,interpretation,var_t1,var_virtual0);
17000 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
17001 var_virtual0 == var_s;
17002 find mustInstanceOfTransition_class(problem,interpretation,var_t2);
17003 find mustInRelationtarget_reference_Transition(problem,interpretation,var_t2,var_virtual1);
17004 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
17005 var_virtual1 == var_s;
17006 find mustInstanceOfTransition_class(problem,interpretation,var_t3);
17007 find mustInRelationtarget_reference_Transition(problem,interpretation,var_t3,var_virtual2);
17008 find mustInstanceOfVertex_class(problem,interpretation,var_virtual2);
17009 var_virtual2 == var_s;
17010 neg find mayEquivalent(problem, interpretation, var_t1, var_t2);
17011 neg find mayEquivalent(problem, interpretation, var_t2, var_t3);
17012 neg find mayEquivalent(problem, interpretation, var_t1, var_t3);
17013}or{
17014 find interpretation(problem,interpretation);
17015 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
17016 // s is exported
17017 find mustInstanceOfTransition_class(problem,interpretation,var_t1);
17018 find mustInRelationsource_reference_Transition(problem,interpretation,var_t1,var_virtual0);
17019 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
17020 var_virtual0 == var_s;
17021 find mustInstanceOfTransition_class(problem,interpretation,var_t2);
17022 find mustInRelationsource_reference_Transition(problem,interpretation,var_t2,var_virtual1);
17023 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
17024 var_virtual1 == var_s;
17025 find mustInstanceOfTransition_class(problem,interpretation,var_t3);
17026 find mustInRelationsource_reference_Transition(problem,interpretation,var_t3,var_virtual2);
17027 find mustInstanceOfVertex_class(problem,interpretation,var_virtual2);
17028 var_virtual2 == var_s;
17029 neg find mayEquivalent(problem, interpretation, var_t1, var_t2);
17030 neg find mayEquivalent(problem, interpretation, var_t2, var_t3);
17031 neg find mayEquivalent(problem, interpretation, var_t1, var_t3);
17032}
17033private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(
17034 problem:LogicProblem, interpretation:PartialInterpretation,
17035 var_s)
17036{
17037 find interpretation(problem,interpretation);
17038 find mayInstanceOfSynchronization_class(problem,interpretation,var_s);
17039 // s is exported
17040 find mayInstanceOfTransition_class(problem,interpretation,var_t1);
17041 find mayInRelationtarget_reference_Transition(problem,interpretation,var_t1,var_virtual0);
17042 find mayInstanceOfVertex_class(problem,interpretation,var_virtual0);
17043 find mayEquivalent(problem, interpretation, var_virtual0, var_s);
17044 find mayInstanceOfTransition_class(problem,interpretation,var_t2);
17045 find mayInRelationtarget_reference_Transition(problem,interpretation,var_t2,var_virtual1);
17046 find mayInstanceOfVertex_class(problem,interpretation,var_virtual1);
17047 find mayEquivalent(problem, interpretation, var_virtual1, var_s);
17048 find mayInstanceOfTransition_class(problem,interpretation,var_t3);
17049 find mayInRelationtarget_reference_Transition(problem,interpretation,var_t3,var_virtual2);
17050 find mayInstanceOfVertex_class(problem,interpretation,var_virtual2);
17051 find mayEquivalent(problem, interpretation, var_virtual2, var_s);
17052 var_t1 != var_t2;
17053 var_t2 != var_t3;
17054 var_t1 != var_t3;
17055}or{
17056 find interpretation(problem,interpretation);
17057 find mayInstanceOfSynchronization_class(problem,interpretation,var_s);
17058 // s is exported
17059 find mayInstanceOfTransition_class(problem,interpretation,var_t1);
17060 find mayInRelationsource_reference_Transition(problem,interpretation,var_t1,var_virtual0);
17061 find mayInstanceOfVertex_class(problem,interpretation,var_virtual0);
17062 find mayEquivalent(problem, interpretation, var_virtual0, var_s);
17063 find mayInstanceOfTransition_class(problem,interpretation,var_t2);
17064 find mayInRelationsource_reference_Transition(problem,interpretation,var_t2,var_virtual1);
17065 find mayInstanceOfVertex_class(problem,interpretation,var_virtual1);
17066 find mayEquivalent(problem, interpretation, var_virtual1, var_s);
17067 find mayInstanceOfTransition_class(problem,interpretation,var_t3);
17068 find mayInRelationsource_reference_Transition(problem,interpretation,var_t3,var_virtual2);
17069 find mayInstanceOfVertex_class(problem,interpretation,var_virtual2);
17070 find mayEquivalent(problem, interpretation, var_virtual2, var_s);
17071 var_t1 != var_t2;
17072 var_t2 != var_t3;
17073 var_t1 != var_t3;
17074}
17075private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(
17076 problem:LogicProblem, interpretation:PartialInterpretation,
17077 var_s)
17078{
17079 find interpretation(problem,interpretation);
17080 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
17081 // s is exported
17082 find mustInstanceOfTransition_class(problem,interpretation,var_t1);
17083 find mustInRelationtarget_reference_Transition(problem,interpretation,var_t1,var_virtual0);
17084 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
17085 var_virtual0 == var_s;
17086 find mustInstanceOfTransition_class(problem,interpretation,var_t2);
17087 find mustInRelationtarget_reference_Transition(problem,interpretation,var_t2,var_virtual1);
17088 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
17089 var_virtual1 == var_s;
17090 find mustInstanceOfTransition_class(problem,interpretation,var_t3);
17091 find mustInRelationtarget_reference_Transition(problem,interpretation,var_t3,var_virtual2);
17092 find mustInstanceOfVertex_class(problem,interpretation,var_virtual2);
17093 var_virtual2 == var_s;
17094 var_t1 != var_t2;
17095 var_t2 != var_t3;
17096 var_t1 != var_t3;
17097}or{
17098 find interpretation(problem,interpretation);
17099 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
17100 // s is exported
17101 find mustInstanceOfTransition_class(problem,interpretation,var_t1);
17102 find mustInRelationsource_reference_Transition(problem,interpretation,var_t1,var_virtual0);
17103 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
17104 var_virtual0 == var_s;
17105 find mustInstanceOfTransition_class(problem,interpretation,var_t2);
17106 find mustInRelationsource_reference_Transition(problem,interpretation,var_t2,var_virtual1);
17107 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
17108 var_virtual1 == var_s;
17109 find mustInstanceOfTransition_class(problem,interpretation,var_t3);
17110 find mustInRelationsource_reference_Transition(problem,interpretation,var_t3,var_virtual2);
17111 find mustInstanceOfVertex_class(problem,interpretation,var_virtual2);
17112 var_virtual2 == var_s;
17113 var_t1 != var_t2;
17114 var_t2 != var_t3;
17115 var_t1 != var_t3;
17116}
17117// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries twoSynch
17118private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(
17119 problem:LogicProblem, interpretation:PartialInterpretation,
17120 var_s1, var_s2)
17121{
17122 find interpretation(problem,interpretation);
17123 find mustInstanceOfSynchronization_class(problem,interpretation,var_s1);
17124 find mustInstanceOfSynchronization_class(problem,interpretation,var_s2);
17125 // s1 is exported
17126 // s2 is exported
17127 find mustInstanceOfSynchronization_class(problem,interpretation,var_s1);
17128 find mustInstanceOfSynchronization_class(problem,interpretation,var_s2);
17129 neg find mayEquivalent(problem, interpretation, var_s1, var_s2);
17130}
17131private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(
17132 problem:LogicProblem, interpretation:PartialInterpretation,
17133 var_s1, var_s2)
17134{
17135 find interpretation(problem,interpretation);
17136 find mayInstanceOfSynchronization_class(problem,interpretation,var_s1);
17137 find mayInstanceOfSynchronization_class(problem,interpretation,var_s2);
17138 // s1 is exported
17139 // s2 is exported
17140 find mayInstanceOfSynchronization_class(problem,interpretation,var_s1);
17141 find mayInstanceOfSynchronization_class(problem,interpretation,var_s2);
17142 var_s1 != var_s2;
17143}
17144private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(
17145 problem:LogicProblem, interpretation:PartialInterpretation,
17146 var_s1, var_s2)
17147{
17148 find interpretation(problem,interpretation);
17149 find mustInstanceOfSynchronization_class(problem,interpretation,var_s1);
17150 find mustInstanceOfSynchronization_class(problem,interpretation,var_s2);
17151 // s1 is exported
17152 // s2 is exported
17153 find mustInstanceOfSynchronization_class(problem,interpretation,var_s1);
17154 find mustInstanceOfSynchronization_class(problem,interpretation,var_s2);
17155 var_s1 != var_s2;
17156}
17157
17158//////////
17159// 1.4 Containment Indexer
17160//////////
17161private pattern mustContains2(source: DefinedElement, target: DefinedElement) {
17162 find mustContains4(_,_,source,target);
17163}
17164
17165private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation,
17166 source: DefinedElement, target: DefinedElement)
17167 { find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,source,target); }or
17168
17169 { find mustInRelationvertices_reference_Region(problem,interpretation,source,target); }or
17170
17171 { find mustInRelationregions_reference_CompositeElement(problem,interpretation,source,target); }
17172
17173private pattern mustTransitiveContains(source,target) {
17174 find mustContains2+(source,target);
17175}
17176
17177//////////
17178// 2. Invalidation Indexers
17179//////////
17180// 2.1 Invalidated by WF Queries
17181//////////
17182pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(problem:LogicProblem, interpretation:PartialInterpretation,
17183 var_r1)
17184{
17185 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(problem,interpretation,var_r1);
17186}
17187pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(problem:LogicProblem, interpretation:PartialInterpretation,
17188 var_r)
17189{
17190 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(problem,interpretation,var_r);
17191}
17192pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(problem:LogicProblem, interpretation:PartialInterpretation,
17193 var_t, var_e)
17194{
17195 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(problem,interpretation,var_t,var_e);
17196}
17197pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(problem:LogicProblem, interpretation:PartialInterpretation,
17198 var_e)
17199{
17200 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(problem,interpretation,var_e);
17201}
17202pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(problem:LogicProblem, interpretation:PartialInterpretation,
17203 var_e, var_t1, var_t2)
17204{
17205 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(problem,interpretation,var_e,var_t1,var_t2);
17206}
17207pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(problem:LogicProblem, interpretation:PartialInterpretation,
17208 var_t, var_e)
17209{
17210 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(problem,interpretation,var_t,var_e);
17211}
17212pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(problem:LogicProblem, interpretation:PartialInterpretation,
17213 var_t, var_f)
17214{
17215 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(problem,interpretation,var_t,var_f);
17216}
17217pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(problem:LogicProblem, interpretation:PartialInterpretation,
17218 var_region)
17219{
17220 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(problem,interpretation,var_region);
17221}
17222pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(problem:LogicProblem, interpretation:PartialInterpretation,
17223 var_c)
17224{
17225 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(problem,interpretation,var_c);
17226}
17227pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(problem:LogicProblem, interpretation:PartialInterpretation,
17228 var_c)
17229{
17230 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(problem,interpretation,var_c);
17231}
17232pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(problem:LogicProblem, interpretation:PartialInterpretation,
17233 var_s)
17234{
17235 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(problem,interpretation,var_s);
17236}
17237pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(problem:LogicProblem, interpretation:PartialInterpretation,
17238 var_s)
17239{
17240 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(problem,interpretation,var_s);
17241}
17242pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(problem:LogicProblem, interpretation:PartialInterpretation,
17243 var_s, var_v1, var_v2)
17244{
17245 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(problem,interpretation,var_s,var_v1,var_v2);
17246}
17247pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(problem:LogicProblem, interpretation:PartialInterpretation,
17248 var_s)
17249{
17250 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(problem,interpretation,var_s);
17251}
17252pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(problem:LogicProblem, interpretation:PartialInterpretation,
17253 var_s, var_v1, var_v2)
17254{
17255 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(problem,interpretation,var_s,var_v1,var_v2);
17256}
17257pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(problem:LogicProblem, interpretation:PartialInterpretation,
17258 var_s, var_v)
17259{
17260 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(problem,interpretation,var_s,var_v);
17261}
17262pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(problem:LogicProblem, interpretation:PartialInterpretation,
17263 var_s)
17264{
17265 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(problem,interpretation,var_s);
17266}
17267pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(problem:LogicProblem, interpretation:PartialInterpretation,
17268 var_s1, var_s2)
17269{
17270 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(problem,interpretation,var_s1,var_s2);
17271}
17272
17273//////////
17274// 3. Unfinishedness Indexers
17275//////////
17276// 3.1 Unfinishedness Measured by Multiplicity
17277//////////
17278pattern unfinishedLowerMultiplicity_target_reference_Transition(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) {
17279 find interpretation(problem,interpretation);
17280 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
17281 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"target reference Transition");
17282 find mustInstanceOfTransition_class(problem,interpretation,object);
17283 numberOfExistingReferences == count find mustInRelationtarget_reference_Transition(problem,interpretation,object,_);
17284 check(numberOfExistingReferences < 1);
17285 missingMultiplicity == eval(1-numberOfExistingReferences);
17286}
17287
17288//////////
17289// 3.2 Unfinishedness Measured by WF Queries
17290//////////
17291pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(problem:LogicProblem, interpretation:PartialInterpretation,
17292 var_r1)
17293{
17294 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(problem,interpretation,var_r1);
17295}
17296pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(problem:LogicProblem, interpretation:PartialInterpretation,
17297 var_r)
17298{
17299 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(problem,interpretation,var_r);
17300}
17301pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(problem:LogicProblem, interpretation:PartialInterpretation,
17302 var_t, var_e)
17303{
17304 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(problem,interpretation,var_t,var_e);
17305}
17306pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(problem:LogicProblem, interpretation:PartialInterpretation,
17307 var_e)
17308{
17309 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(problem,interpretation,var_e);
17310}
17311pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(problem:LogicProblem, interpretation:PartialInterpretation,
17312 var_e, var_t1, var_t2)
17313{
17314 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(problem,interpretation,var_e,var_t1,var_t2);
17315}
17316pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(problem:LogicProblem, interpretation:PartialInterpretation,
17317 var_t, var_e)
17318{
17319 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(problem,interpretation,var_t,var_e);
17320}
17321pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(problem:LogicProblem, interpretation:PartialInterpretation,
17322 var_t, var_f)
17323{
17324 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(problem,interpretation,var_t,var_f);
17325}
17326pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(problem:LogicProblem, interpretation:PartialInterpretation,
17327 var_region)
17328{
17329 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(problem,interpretation,var_region);
17330}
17331pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(problem:LogicProblem, interpretation:PartialInterpretation,
17332 var_c)
17333{
17334 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(problem,interpretation,var_c);
17335}
17336pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(problem:LogicProblem, interpretation:PartialInterpretation,
17337 var_c)
17338{
17339 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(problem,interpretation,var_c);
17340}
17341pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(problem:LogicProblem, interpretation:PartialInterpretation,
17342 var_s)
17343{
17344 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(problem,interpretation,var_s);
17345}
17346pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(problem:LogicProblem, interpretation:PartialInterpretation,
17347 var_s)
17348{
17349 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(problem,interpretation,var_s);
17350}
17351pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(problem:LogicProblem, interpretation:PartialInterpretation,
17352 var_s, var_v1, var_v2)
17353{
17354 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(problem,interpretation,var_s,var_v1,var_v2);
17355}
17356pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(problem:LogicProblem, interpretation:PartialInterpretation,
17357 var_s)
17358{
17359 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(problem,interpretation,var_s);
17360}
17361pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(problem:LogicProblem, interpretation:PartialInterpretation,
17362 var_s, var_v1, var_v2)
17363{
17364 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(problem,interpretation,var_s,var_v1,var_v2);
17365}
17366pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(problem:LogicProblem, interpretation:PartialInterpretation,
17367 var_s, var_v)
17368{
17369 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(problem,interpretation,var_s,var_v);
17370}
17371pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(problem:LogicProblem, interpretation:PartialInterpretation,
17372 var_s)
17373{
17374 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(problem,interpretation,var_s);
17375}
17376pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(problem:LogicProblem, interpretation:PartialInterpretation,
17377 var_s1, var_s2)
17378{
17379 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(problem,interpretation,var_s1,var_s2);
17380}
17381
17382//////////
17383// 4. Refinement Indexers
17384//////////
17385// 4.1 Object constructors
17386//////////
17387private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation)
17388{
17389 find interpretation(problem,interpretation);
17390 find mustInstanceOfPseudostate_class(problem,interpretation,root);
17391 find mustExist(problem, interpretation, root);
17392}or{
17393 find interpretation(problem,interpretation);
17394 find mustInstanceOfEntry_class(problem,interpretation,root);
17395 find mustExist(problem, interpretation, root);
17396}or{
17397 find interpretation(problem,interpretation);
17398 find mustInstanceOfTransition_class(problem,interpretation,root);
17399 find mustExist(problem, interpretation, root);
17400}or{
17401 find interpretation(problem,interpretation);
17402 find mustInstanceOfCompositeElement_class(problem,interpretation,root);
17403 find mustExist(problem, interpretation, root);
17404}or{
17405 find interpretation(problem,interpretation);
17406 find mustInstanceOfState_class(problem,interpretation,root);
17407 find mustExist(problem, interpretation, root);
17408}or{
17409 find interpretation(problem,interpretation);
17410 find mustInstanceOfChoice_class(problem,interpretation,root);
17411 find mustExist(problem, interpretation, root);
17412}or{
17413 find interpretation(problem,interpretation);
17414 find mustInstanceOfRegularState_class(problem,interpretation,root);
17415 find mustExist(problem, interpretation, root);
17416}or{
17417 find interpretation(problem,interpretation);
17418 find mustInstanceOfRegion_class(problem,interpretation,root);
17419 find mustExist(problem, interpretation, root);
17420}or{
17421 find interpretation(problem,interpretation);
17422 find mustInstanceOfVertex_class(problem,interpretation,root);
17423 find mustExist(problem, interpretation, root);
17424}or{
17425 find interpretation(problem,interpretation);
17426 find mustInstanceOfExit_class(problem,interpretation,root);
17427 find mustExist(problem, interpretation, root);
17428}or{
17429 find interpretation(problem,interpretation);
17430 find mustInstanceOfFinalState_class(problem,interpretation,root);
17431 find mustExist(problem, interpretation, root);
17432}or{
17433 find interpretation(problem,interpretation);
17434 find mustInstanceOfSynchronization_class(problem,interpretation,root);
17435 find mustExist(problem, interpretation, root);
17436}or{
17437 find interpretation(problem,interpretation);
17438 find mustInstanceOfStatechart_class(problem,interpretation,root);
17439 find mustExist(problem, interpretation, root);
17440}or{
17441 find interpretation(problem,interpretation);
17442 find mustInstanceOfStatechart_class_DefinedPart(problem,interpretation,root);
17443 find mustExist(problem, interpretation, root);
17444}or{
17445 find interpretation(problem,interpretation);
17446 find mustInstanceOfStatechart_class_UndefinedPart(problem,interpretation,root);
17447 find mustExist(problem, interpretation, root);
17448}or{
17449 find interpretation(problem,interpretation);
17450 find mustInstanceOfCompositeElement_class_DefinedPart(problem,interpretation,root);
17451 find mustExist(problem, interpretation, root);
17452}or{
17453 find interpretation(problem,interpretation);
17454 find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,root);
17455 find mustExist(problem, interpretation, root);
17456}
17457pattern createObject_State_class_by_vertices_reference_Region(
17458 problem:LogicProblem, interpretation:PartialInterpretation,
17459 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
17460 container:DefinedElement)
17461{
17462 find interpretation(problem,interpretation);
17463 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
17464 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"State class");
17465 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
17466 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region");
17467 find mustInstanceOfRegion_class(problem,interpretation,container);
17468 find mayInstanceOfState_class(problem,interpretation,newObject);
17469 find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject);
17470 find mustExist(problem, interpretation, container);
17471 neg find mustExist(problem, interpretation, newObject);
17472}
17473pattern createObject_State_class(
17474 problem:LogicProblem, interpretation:PartialInterpretation,
17475 typeInterpretation:PartialComplexTypeInterpretation)
17476{
17477 find interpretation(problem,interpretation);
17478 neg find hasElementInContainment(problem,interpretation);
17479 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
17480 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"State class");
17481 find mayInstanceOfState_class(problem,interpretation,newObject);
17482 find mayExist(problem, interpretation, newObject);
17483 neg find mustExist(problem, interpretation, newObject);
17484}
17485pattern createObject_FinalState_class_by_vertices_reference_Region(
17486 problem:LogicProblem, interpretation:PartialInterpretation,
17487 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
17488 container:DefinedElement)
17489{
17490 find interpretation(problem,interpretation);
17491 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
17492 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FinalState class");
17493 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
17494 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region");
17495 find mustInstanceOfRegion_class(problem,interpretation,container);
17496 find mayInstanceOfFinalState_class(problem,interpretation,newObject);
17497 find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject);
17498 find mustExist(problem, interpretation, container);
17499 neg find mustExist(problem, interpretation, newObject);
17500}
17501pattern createObject_FinalState_class(
17502 problem:LogicProblem, interpretation:PartialInterpretation,
17503 typeInterpretation:PartialComplexTypeInterpretation)
17504{
17505 find interpretation(problem,interpretation);
17506 neg find hasElementInContainment(problem,interpretation);
17507 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
17508 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FinalState class");
17509 find mayInstanceOfFinalState_class(problem,interpretation,newObject);
17510 find mayExist(problem, interpretation, newObject);
17511 neg find mustExist(problem, interpretation, newObject);
17512}
17513pattern createObject_Synchronization_class_by_vertices_reference_Region(
17514 problem:LogicProblem, interpretation:PartialInterpretation,
17515 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
17516 container:DefinedElement)
17517{
17518 find interpretation(problem,interpretation);
17519 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
17520 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Synchronization class");
17521 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
17522 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region");
17523 find mustInstanceOfRegion_class(problem,interpretation,container);
17524 find mayInstanceOfSynchronization_class(problem,interpretation,newObject);
17525 find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject);
17526 find mustExist(problem, interpretation, container);
17527 neg find mustExist(problem, interpretation, newObject);
17528}
17529pattern createObject_Synchronization_class(
17530 problem:LogicProblem, interpretation:PartialInterpretation,
17531 typeInterpretation:PartialComplexTypeInterpretation)
17532{
17533 find interpretation(problem,interpretation);
17534 neg find hasElementInContainment(problem,interpretation);
17535 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
17536 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Synchronization class");
17537 find mayInstanceOfSynchronization_class(problem,interpretation,newObject);
17538 find mayExist(problem, interpretation, newObject);
17539 neg find mustExist(problem, interpretation, newObject);
17540}
17541pattern createObject_Region_class_by_regions_reference_CompositeElement(
17542 problem:LogicProblem, interpretation:PartialInterpretation,
17543 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
17544 container:DefinedElement)
17545{
17546 find interpretation(problem,interpretation);
17547 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
17548 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Region class");
17549 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
17550 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"regions reference CompositeElement");
17551 find mustInstanceOfCompositeElement_class(problem,interpretation,container);
17552 find mayInstanceOfRegion_class(problem,interpretation,newObject);
17553 find mayInRelationregions_reference_CompositeElement(problem,interpretation,container,newObject);
17554 find mustExist(problem, interpretation, container);
17555 neg find mustExist(problem, interpretation, newObject);
17556}
17557pattern createObject_Region_class(
17558 problem:LogicProblem, interpretation:PartialInterpretation,
17559 typeInterpretation:PartialComplexTypeInterpretation)
17560{
17561 find interpretation(problem,interpretation);
17562 neg find hasElementInContainment(problem,interpretation);
17563 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
17564 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Region class");
17565 find mayInstanceOfRegion_class(problem,interpretation,newObject);
17566 find mayExist(problem, interpretation, newObject);
17567 neg find mustExist(problem, interpretation, newObject);
17568}
17569pattern createObject_Entry_class_by_vertices_reference_Region(
17570 problem:LogicProblem, interpretation:PartialInterpretation,
17571 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
17572 container:DefinedElement)
17573{
17574 find interpretation(problem,interpretation);
17575 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
17576 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Entry class");
17577 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
17578 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region");
17579 find mustInstanceOfRegion_class(problem,interpretation,container);
17580 find mayInstanceOfEntry_class(problem,interpretation,newObject);
17581 find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject);
17582 find mustExist(problem, interpretation, container);
17583 neg find mustExist(problem, interpretation, newObject);
17584}
17585pattern createObject_Entry_class(
17586 problem:LogicProblem, interpretation:PartialInterpretation,
17587 typeInterpretation:PartialComplexTypeInterpretation)
17588{
17589 find interpretation(problem,interpretation);
17590 neg find hasElementInContainment(problem,interpretation);
17591 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
17592 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Entry class");
17593 find mayInstanceOfEntry_class(problem,interpretation,newObject);
17594 find mayExist(problem, interpretation, newObject);
17595 neg find mustExist(problem, interpretation, newObject);
17596}
17597pattern createObject_Exit_class_by_vertices_reference_Region(
17598 problem:LogicProblem, interpretation:PartialInterpretation,
17599 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
17600 container:DefinedElement)
17601{
17602 find interpretation(problem,interpretation);
17603 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
17604 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Exit class");
17605 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
17606 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region");
17607 find mustInstanceOfRegion_class(problem,interpretation,container);
17608 find mayInstanceOfExit_class(problem,interpretation,newObject);
17609 find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject);
17610 find mustExist(problem, interpretation, container);
17611 neg find mustExist(problem, interpretation, newObject);
17612}
17613pattern createObject_Exit_class(
17614 problem:LogicProblem, interpretation:PartialInterpretation,
17615 typeInterpretation:PartialComplexTypeInterpretation)
17616{
17617 find interpretation(problem,interpretation);
17618 neg find hasElementInContainment(problem,interpretation);
17619 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
17620 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Exit class");
17621 find mayInstanceOfExit_class(problem,interpretation,newObject);
17622 find mayExist(problem, interpretation, newObject);
17623 neg find mustExist(problem, interpretation, newObject);
17624}
17625pattern createObject_Choice_class_by_vertices_reference_Region(
17626 problem:LogicProblem, interpretation:PartialInterpretation,
17627 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
17628 container:DefinedElement)
17629{
17630 find interpretation(problem,interpretation);
17631 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
17632 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Choice class");
17633 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
17634 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region");
17635 find mustInstanceOfRegion_class(problem,interpretation,container);
17636 find mayInstanceOfChoice_class(problem,interpretation,newObject);
17637 find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject);
17638 find mustExist(problem, interpretation, container);
17639 neg find mustExist(problem, interpretation, newObject);
17640}
17641pattern createObject_Choice_class(
17642 problem:LogicProblem, interpretation:PartialInterpretation,
17643 typeInterpretation:PartialComplexTypeInterpretation)
17644{
17645 find interpretation(problem,interpretation);
17646 neg find hasElementInContainment(problem,interpretation);
17647 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
17648 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Choice class");
17649 find mayInstanceOfChoice_class(problem,interpretation,newObject);
17650 find mayExist(problem, interpretation, newObject);
17651 neg find mustExist(problem, interpretation, newObject);
17652}
17653pattern createObject_Transition_class_by_outgoingTransitions_reference_Vertex_with_source_reference_Transition(
17654 problem:LogicProblem, interpretation:PartialInterpretation,
17655 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
17656 container:DefinedElement)
17657{
17658 find interpretation(problem,interpretation);
17659 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
17660 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Transition class");
17661 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
17662 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingTransitions reference Vertex");
17663 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
17664 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"source reference Transition");
17665 find mustInstanceOfVertex_class(problem,interpretation,container);
17666 find mayInstanceOfTransition_class(problem,interpretation,newObject);
17667 find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,container,newObject);
17668 find mustExist(problem, interpretation, container);
17669 neg find mustExist(problem, interpretation, newObject);
17670}
17671pattern createObject_Transition_class(
17672 problem:LogicProblem, interpretation:PartialInterpretation,
17673 typeInterpretation:PartialComplexTypeInterpretation)
17674{
17675 find interpretation(problem,interpretation);
17676 neg find hasElementInContainment(problem,interpretation);
17677 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
17678 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Transition class");
17679 find mayInstanceOfTransition_class(problem,interpretation,newObject);
17680 find mayExist(problem, interpretation, newObject);
17681 neg find mustExist(problem, interpretation, newObject);
17682}
17683pattern createObject_Statechart_class_UndefinedPart(
17684 problem:LogicProblem, interpretation:PartialInterpretation,
17685 typeInterpretation:PartialComplexTypeInterpretation)
17686{
17687 find interpretation(problem,interpretation);
17688 neg find hasElementInContainment(problem,interpretation);
17689 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
17690 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Statechart class UndefinedPart");
17691 find mayInstanceOfStatechart_class_UndefinedPart(problem,interpretation,newObject);
17692 find mayExist(problem, interpretation, newObject);
17693 neg find mustExist(problem, interpretation, newObject);
17694}
17695
17696//////////
17697// 4.2 Type refinement
17698//////////
17699pattern refineTypeTo_State_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
17700 find interpretation(problem,interpretation);
17701 PartialInterpretation.newElements(interpretation,element);
17702 find mayInstanceOfState_class(problem,interpretation,element);
17703 neg find mustInstanceOfPseudostate_class(problem,interpretation,element);
17704 neg find mustInstanceOfState_class(problem,interpretation,element);
17705 neg find mustInstanceOfFinalState_class(problem,interpretation,element);
17706 neg find mustInstanceOfRegion_class(problem,interpretation,element);
17707 neg find mustInstanceOfTransition_class(problem,interpretation,element);
17708 neg find mustInstanceOfStatechart_class(problem,interpretation,element);
17709}
17710pattern refineTypeTo_FinalState_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
17711 find interpretation(problem,interpretation);
17712 PartialInterpretation.newElements(interpretation,element);
17713 find mayInstanceOfFinalState_class(problem,interpretation,element);
17714 neg find mustInstanceOfPseudostate_class(problem,interpretation,element);
17715 neg find mustInstanceOfFinalState_class(problem,interpretation,element);
17716 neg find mustInstanceOfRegion_class(problem,interpretation,element);
17717 neg find mustInstanceOfTransition_class(problem,interpretation,element);
17718 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
17719}
17720pattern refineTypeTo_Synchronization_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
17721 find interpretation(problem,interpretation);
17722 PartialInterpretation.newElements(interpretation,element);
17723 find mayInstanceOfSynchronization_class(problem,interpretation,element);
17724 neg find mustInstanceOfSynchronization_class(problem,interpretation,element);
17725 neg find mustInstanceOfEntry_class(problem,interpretation,element);
17726 neg find mustInstanceOfRegion_class(problem,interpretation,element);
17727 neg find mustInstanceOfExit_class(problem,interpretation,element);
17728 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
17729 neg find mustInstanceOfChoice_class(problem,interpretation,element);
17730 neg find mustInstanceOfTransition_class(problem,interpretation,element);
17731 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
17732}
17733pattern refineTypeTo_Region_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
17734 find interpretation(problem,interpretation);
17735 PartialInterpretation.newElements(interpretation,element);
17736 find mayInstanceOfRegion_class(problem,interpretation,element);
17737 neg find mustInstanceOfRegion_class(problem,interpretation,element);
17738 neg find mustInstanceOfTransition_class(problem,interpretation,element);
17739 neg find mustInstanceOfVertex_class(problem,interpretation,element);
17740 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
17741}
17742pattern refineTypeTo_Entry_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
17743 find interpretation(problem,interpretation);
17744 PartialInterpretation.newElements(interpretation,element);
17745 find mayInstanceOfEntry_class(problem,interpretation,element);
17746 neg find mustInstanceOfSynchronization_class(problem,interpretation,element);
17747 neg find mustInstanceOfRegion_class(problem,interpretation,element);
17748 neg find mustInstanceOfEntry_class(problem,interpretation,element);
17749 neg find mustInstanceOfExit_class(problem,interpretation,element);
17750 neg find mustInstanceOfChoice_class(problem,interpretation,element);
17751 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
17752 neg find mustInstanceOfTransition_class(problem,interpretation,element);
17753 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
17754}
17755pattern refineTypeTo_Exit_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
17756 find interpretation(problem,interpretation);
17757 PartialInterpretation.newElements(interpretation,element);
17758 find mayInstanceOfExit_class(problem,interpretation,element);
17759 neg find mustInstanceOfSynchronization_class(problem,interpretation,element);
17760 neg find mustInstanceOfRegion_class(problem,interpretation,element);
17761 neg find mustInstanceOfEntry_class(problem,interpretation,element);
17762 neg find mustInstanceOfExit_class(problem,interpretation,element);
17763 neg find mustInstanceOfChoice_class(problem,interpretation,element);
17764 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
17765 neg find mustInstanceOfTransition_class(problem,interpretation,element);
17766 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
17767}
17768pattern refineTypeTo_Choice_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
17769 find interpretation(problem,interpretation);
17770 PartialInterpretation.newElements(interpretation,element);
17771 find mayInstanceOfChoice_class(problem,interpretation,element);
17772 neg find mustInstanceOfSynchronization_class(problem,interpretation,element);
17773 neg find mustInstanceOfEntry_class(problem,interpretation,element);
17774 neg find mustInstanceOfRegion_class(problem,interpretation,element);
17775 neg find mustInstanceOfExit_class(problem,interpretation,element);
17776 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
17777 neg find mustInstanceOfChoice_class(problem,interpretation,element);
17778 neg find mustInstanceOfTransition_class(problem,interpretation,element);
17779 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
17780}
17781pattern refineTypeTo_Transition_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
17782 find interpretation(problem,interpretation);
17783 PartialInterpretation.newElements(interpretation,element);
17784 find mayInstanceOfTransition_class(problem,interpretation,element);
17785 neg find mustInstanceOfRegion_class(problem,interpretation,element);
17786 neg find mustInstanceOfTransition_class(problem,interpretation,element);
17787 neg find mustInstanceOfVertex_class(problem,interpretation,element);
17788 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
17789}
17790pattern refineTypeTo_Statechart_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
17791 find interpretation(problem,interpretation);
17792 PartialInterpretation.newElements(interpretation,element);
17793 find mayInstanceOfStatechart_class_UndefinedPart(problem,interpretation,element);
17794 neg find mustInstanceOfRegion_class(problem,interpretation,element);
17795 neg find mustInstanceOfTransition_class(problem,interpretation,element);
17796 neg find mustInstanceOfStatechart_class_UndefinedPart(problem,interpretation,element);
17797 neg find mustInstanceOfVertex_class(problem,interpretation,element);
17798}
17799
17800//////////
17801// 4.3 Relation refinement
17802//////////
17803pattern refineRelation_incomingTransitions_reference_Vertex_and_target_reference_Transition(
17804 problem:LogicProblem, interpretation:PartialInterpretation,
17805 relationIterpretation:PartialRelationInterpretation, oppositeInterpretation:PartialRelationInterpretation,
17806 from: DefinedElement, to: DefinedElement)
17807{
17808 find interpretation(problem,interpretation);
17809 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
17810 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"incomingTransitions reference Vertex");
17811 PartialInterpretation.partialrelationinterpretation(interpretation,oppositeInterpretation);
17812 PartialRelationInterpretation.interpretationOf.name(oppositeInterpretation,"target reference Transition");
17813 find mustExist(problem, interpretation, from);
17814 find mustExist(problem, interpretation, to);
17815 find mustInstanceOfVertex_class(problem,interpretation,from);
17816 find mustInstanceOfTransition_class(problem,interpretation,to);
17817 find mayInRelationincomingTransitions_reference_Vertex(problem,interpretation,from,to);
17818 neg find mustInRelationincomingTransitions_reference_Vertex(problem,interpretation,from,to);
17819}
17820import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage"
17821import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem"
17822import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language"
17823
17824//////////
17825// 0. Util
17826//////////
17827private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) {
17828 PartialInterpretation.problem(interpretation,problem);
17829}
17830
17831/////////////////////////
17832// 0.1 Existence
17833/////////////////////////
17834private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
17835 find interpretation(problem,interpretation);
17836 LogicProblem.elements(problem,element);
17837} or {
17838 find interpretation(problem,interpretation);
17839 PartialInterpretation.newElements(interpretation,element);
17840}
17841
17842private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
17843 find mustExist(problem,interpretation,element);
17844} or {
17845 find interpretation(problem,interpretation);
17846 neg find elementCloseWorld(element);
17847 PartialInterpretation.openWorldElements(interpretation,element);
17848}
17849
17850private pattern elementCloseWorld(element:DefinedElement) {
17851 PartialInterpretation.openWorldElements(i,element);
17852 PartialInterpretation.maxNewElements(i,0);
17853} or {
17854 Scope.targetTypeInterpretation(scope,interpretation);
17855 PartialTypeInterpratation.elements(interpretation,element);
17856 Scope.maxNewElements(scope,0);
17857}
17858
17859////////////////////////
17860// 0.2 Equivalence
17861////////////////////////
17862pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) {
17863 find mayExist(problem,interpretation,a);
17864 find mayExist(problem,interpretation,b);
17865 a == b;
17866}
17867
17868////////////////////////
17869// 0.3 Required Patterns by TypeIndexer
17870////////////////////////
17871private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) {
17872 find interpretation(problem,interpretation);
17873 LogicProblem.types(problem,type);
17874 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
17875 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
17876}
17877
17878private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) {
17879 find interpretation(problem,interpretation);
17880 LogicProblem.types(problem,type);
17881 TypeDefinition.elements(type,element);
17882} or {
17883 find interpretation(problem,interpretation);
17884 find typeInterpretation(problem,interpretation,type,typeInterpretation);
17885 PartialComplexTypeInterpretation.elements(typeInterpretation,element);
17886}
17887
17888private pattern isPrimitive(element: PrimitiveElement) {
17889 PrimitiveElement(element);
17890}
17891
17892//////////
17893// 1. Problem-Specific Base Indexers
17894//////////
17895// 1.1 Type Indexers
17896//////////
17897// 1.1.1 primitive Type Indexers
17898//////////
17899
17900//////////
17901// 1.1.2 domain-specific Type Indexers
17902//////////
17903/**
17904 * An element must be an instance of type "Pseudostate class".
17905 */
17906private pattern mustInstanceOfPseudostate_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
17907 Type.name(type,"Pseudostate class");
17908 find directInstanceOf(problem,interpretation,element,type);
17909}
17910private pattern scopeDisallowsNewPseudostate_class(problem:LogicProblem, interpretation:PartialInterpretation) {
17911 find interpretation(problem,interpretation);
17912 PartialInterpretation.scopes(interpretation,scope);
17913 Scope.targetTypeInterpretation(scope,typeInterpretation);
17914 Scope.maxNewElements(scope,0);
17915 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
17916 Type.name(type,"Pseudostate class");
17917}
17918
17919/**
17920 * An element may be an instance of type "Pseudostate class".
17921 */
17922private pattern mayInstanceOfPseudostate_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
17923{
17924 find interpretation(problem,interpretation);
17925 PartialInterpretation.newElements(interpretation,element);
17926 neg find mustInstanceOfChoice_class(problem,interpretation,element);
17927 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
17928 neg find mustInstanceOfRegion_class(problem,interpretation,element);
17929 neg find mustInstanceOfEntry_class(problem,interpretation,element);
17930 neg find mustInstanceOfExit_class(problem,interpretation,element);
17931 neg find mustInstanceOfTransition_class(problem,interpretation,element);
17932 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
17933 neg find mustInstanceOfSynchronization_class(problem,interpretation,element);
17934 neg find scopeDisallowsNewPseudostate_class(problem, interpretation);
17935 neg find isPrimitive(element);
17936} or {
17937 find interpretation(problem,interpretation);
17938 PartialInterpretation.openWorldElements(interpretation,element);
17939 neg find mustInstanceOfChoice_class(problem,interpretation,element);
17940 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
17941 neg find mustInstanceOfRegion_class(problem,interpretation,element);
17942 neg find mustInstanceOfEntry_class(problem,interpretation,element);
17943 neg find mustInstanceOfExit_class(problem,interpretation,element);
17944 neg find mustInstanceOfTransition_class(problem,interpretation,element);
17945 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
17946 neg find mustInstanceOfSynchronization_class(problem,interpretation,element);
17947 neg find scopeDisallowsNewPseudostate_class(problem, interpretation);
17948 neg find isPrimitive(element);
17949} or
17950{ find mustInstanceOfPseudostate_class(problem,interpretation,element); }
17951/**
17952 * An element must be an instance of type "Vertex class".
17953 */
17954private pattern mustInstanceOfVertex_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
17955 Type.name(type,"Vertex class");
17956 find directInstanceOf(problem,interpretation,element,type);
17957}
17958private pattern scopeDisallowsNewVertex_class(problem:LogicProblem, interpretation:PartialInterpretation) {
17959 find interpretation(problem,interpretation);
17960 PartialInterpretation.scopes(interpretation,scope);
17961 Scope.targetTypeInterpretation(scope,typeInterpretation);
17962 Scope.maxNewElements(scope,0);
17963 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
17964 Type.name(type,"Vertex class");
17965}
17966
17967/**
17968 * An element may be an instance of type "Vertex class".
17969 */
17970private pattern mayInstanceOfVertex_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
17971{
17972 find interpretation(problem,interpretation);
17973 PartialInterpretation.newElements(interpretation,element);
17974 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
17975 neg find mustInstanceOfRegion_class(problem,interpretation,element);
17976 neg find mustInstanceOfTransition_class(problem,interpretation,element);
17977 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
17978 neg find mustInstanceOfPseudostate_class(problem,interpretation,element);
17979 neg find scopeDisallowsNewVertex_class(problem, interpretation);
17980 neg find isPrimitive(element);
17981} or {
17982 find interpretation(problem,interpretation);
17983 PartialInterpretation.openWorldElements(interpretation,element);
17984 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
17985 neg find mustInstanceOfRegion_class(problem,interpretation,element);
17986 neg find mustInstanceOfTransition_class(problem,interpretation,element);
17987 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
17988 neg find mustInstanceOfPseudostate_class(problem,interpretation,element);
17989 neg find scopeDisallowsNewVertex_class(problem, interpretation);
17990 neg find isPrimitive(element);
17991} or
17992{ find mustInstanceOfVertex_class(problem,interpretation,element); }
17993/**
17994 * An element must be an instance of type "Region class".
17995 */
17996private pattern mustInstanceOfRegion_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
17997 Type.name(type,"Region class");
17998 find directInstanceOf(problem,interpretation,element,type);
17999}
18000private pattern scopeDisallowsNewRegion_class(problem:LogicProblem, interpretation:PartialInterpretation) {
18001 find interpretation(problem,interpretation);
18002 PartialInterpretation.scopes(interpretation,scope);
18003 Scope.targetTypeInterpretation(scope,typeInterpretation);
18004 Scope.maxNewElements(scope,0);
18005 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
18006 Type.name(type,"Region class");
18007}
18008
18009/**
18010 * An element may be an instance of type "Region class".
18011 */
18012private pattern mayInstanceOfRegion_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
18013{
18014 find interpretation(problem,interpretation);
18015 PartialInterpretation.newElements(interpretation,element);
18016 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
18017 neg find mustInstanceOfVertex_class(problem,interpretation,element);
18018 neg find mustInstanceOfTransition_class(problem,interpretation,element);
18019 neg find scopeDisallowsNewRegion_class(problem, interpretation);
18020 neg find isPrimitive(element);
18021} or {
18022 find interpretation(problem,interpretation);
18023 PartialInterpretation.openWorldElements(interpretation,element);
18024 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
18025 neg find mustInstanceOfVertex_class(problem,interpretation,element);
18026 neg find mustInstanceOfTransition_class(problem,interpretation,element);
18027 neg find scopeDisallowsNewRegion_class(problem, interpretation);
18028 neg find isPrimitive(element);
18029} or
18030{ find mustInstanceOfRegion_class(problem,interpretation,element); }
18031/**
18032 * An element must be an instance of type "Transition class".
18033 */
18034private pattern mustInstanceOfTransition_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
18035 Type.name(type,"Transition class");
18036 find directInstanceOf(problem,interpretation,element,type);
18037}
18038private pattern scopeDisallowsNewTransition_class(problem:LogicProblem, interpretation:PartialInterpretation) {
18039 find interpretation(problem,interpretation);
18040 PartialInterpretation.scopes(interpretation,scope);
18041 Scope.targetTypeInterpretation(scope,typeInterpretation);
18042 Scope.maxNewElements(scope,0);
18043 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
18044 Type.name(type,"Transition class");
18045}
18046
18047/**
18048 * An element may be an instance of type "Transition class".
18049 */
18050private pattern mayInstanceOfTransition_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
18051{
18052 find interpretation(problem,interpretation);
18053 PartialInterpretation.newElements(interpretation,element);
18054 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
18055 neg find mustInstanceOfRegion_class(problem,interpretation,element);
18056 neg find mustInstanceOfVertex_class(problem,interpretation,element);
18057 neg find scopeDisallowsNewTransition_class(problem, interpretation);
18058 neg find isPrimitive(element);
18059} or {
18060 find interpretation(problem,interpretation);
18061 PartialInterpretation.openWorldElements(interpretation,element);
18062 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
18063 neg find mustInstanceOfRegion_class(problem,interpretation,element);
18064 neg find mustInstanceOfVertex_class(problem,interpretation,element);
18065 neg find scopeDisallowsNewTransition_class(problem, interpretation);
18066 neg find isPrimitive(element);
18067} or
18068{ find mustInstanceOfTransition_class(problem,interpretation,element); }
18069/**
18070 * An element must be an instance of type "Statechart class".
18071 */
18072private pattern mustInstanceOfStatechart_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
18073 Type.name(type,"Statechart class");
18074 find directInstanceOf(problem,interpretation,element,type);
18075}
18076private pattern scopeDisallowsNewStatechart_class(problem:LogicProblem, interpretation:PartialInterpretation) {
18077 find interpretation(problem,interpretation);
18078 PartialInterpretation.scopes(interpretation,scope);
18079 Scope.targetTypeInterpretation(scope,typeInterpretation);
18080 Scope.maxNewElements(scope,0);
18081 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
18082 Type.name(type,"Statechart class");
18083}
18084
18085/**
18086 * An element may be an instance of type "Statechart class".
18087 */
18088private pattern mayInstanceOfStatechart_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
18089{
18090 find interpretation(problem,interpretation);
18091 PartialInterpretation.newElements(interpretation,element);
18092 neg find mustInstanceOfRegion_class(problem,interpretation,element);
18093 neg find mustInstanceOfVertex_class(problem,interpretation,element);
18094 neg find mustInstanceOfTransition_class(problem,interpretation,element);
18095 neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element);
18096 neg find scopeDisallowsNewStatechart_class(problem, interpretation);
18097 neg find isPrimitive(element);
18098} or {
18099 find interpretation(problem,interpretation);
18100 PartialInterpretation.openWorldElements(interpretation,element);
18101 neg find mustInstanceOfRegion_class(problem,interpretation,element);
18102 neg find mustInstanceOfVertex_class(problem,interpretation,element);
18103 neg find mustInstanceOfTransition_class(problem,interpretation,element);
18104 neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element);
18105 neg find scopeDisallowsNewStatechart_class(problem, interpretation);
18106 neg find isPrimitive(element);
18107} or
18108{ find mustInstanceOfStatechart_class(problem,interpretation,element); }
18109/**
18110 * An element must be an instance of type "Entry class".
18111 */
18112private pattern mustInstanceOfEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
18113 Type.name(type,"Entry class");
18114 find directInstanceOf(problem,interpretation,element,type);
18115}
18116private pattern scopeDisallowsNewEntry_class(problem:LogicProblem, interpretation:PartialInterpretation) {
18117 find interpretation(problem,interpretation);
18118 PartialInterpretation.scopes(interpretation,scope);
18119 Scope.targetTypeInterpretation(scope,typeInterpretation);
18120 Scope.maxNewElements(scope,0);
18121 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
18122 Type.name(type,"Entry class");
18123}
18124
18125/**
18126 * An element may be an instance of type "Entry class".
18127 */
18128private pattern mayInstanceOfEntry_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
18129{
18130 find interpretation(problem,interpretation);
18131 PartialInterpretation.newElements(interpretation,element);
18132 neg find mustInstanceOfChoice_class(problem,interpretation,element);
18133 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
18134 neg find mustInstanceOfRegion_class(problem,interpretation,element);
18135 neg find mustInstanceOfExit_class(problem,interpretation,element);
18136 neg find mustInstanceOfTransition_class(problem,interpretation,element);
18137 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
18138 neg find mustInstanceOfSynchronization_class(problem,interpretation,element);
18139 neg find scopeDisallowsNewEntry_class(problem, interpretation);
18140 neg find isPrimitive(element);
18141} or {
18142 find interpretation(problem,interpretation);
18143 PartialInterpretation.openWorldElements(interpretation,element);
18144 neg find mustInstanceOfChoice_class(problem,interpretation,element);
18145 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
18146 neg find mustInstanceOfRegion_class(problem,interpretation,element);
18147 neg find mustInstanceOfExit_class(problem,interpretation,element);
18148 neg find mustInstanceOfTransition_class(problem,interpretation,element);
18149 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
18150 neg find mustInstanceOfSynchronization_class(problem,interpretation,element);
18151 neg find scopeDisallowsNewEntry_class(problem, interpretation);
18152 neg find isPrimitive(element);
18153} or
18154{ find mustInstanceOfEntry_class(problem,interpretation,element); }
18155/**
18156 * An element must be an instance of type "Synchronization class".
18157 */
18158private pattern mustInstanceOfSynchronization_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
18159 Type.name(type,"Synchronization class");
18160 find directInstanceOf(problem,interpretation,element,type);
18161}
18162private pattern scopeDisallowsNewSynchronization_class(problem:LogicProblem, interpretation:PartialInterpretation) {
18163 find interpretation(problem,interpretation);
18164 PartialInterpretation.scopes(interpretation,scope);
18165 Scope.targetTypeInterpretation(scope,typeInterpretation);
18166 Scope.maxNewElements(scope,0);
18167 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
18168 Type.name(type,"Synchronization class");
18169}
18170
18171/**
18172 * An element may be an instance of type "Synchronization class".
18173 */
18174private pattern mayInstanceOfSynchronization_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
18175{
18176 find interpretation(problem,interpretation);
18177 PartialInterpretation.newElements(interpretation,element);
18178 neg find mustInstanceOfChoice_class(problem,interpretation,element);
18179 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
18180 neg find mustInstanceOfRegion_class(problem,interpretation,element);
18181 neg find mustInstanceOfEntry_class(problem,interpretation,element);
18182 neg find mustInstanceOfExit_class(problem,interpretation,element);
18183 neg find mustInstanceOfTransition_class(problem,interpretation,element);
18184 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
18185 neg find scopeDisallowsNewSynchronization_class(problem, interpretation);
18186 neg find isPrimitive(element);
18187} or {
18188 find interpretation(problem,interpretation);
18189 PartialInterpretation.openWorldElements(interpretation,element);
18190 neg find mustInstanceOfChoice_class(problem,interpretation,element);
18191 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
18192 neg find mustInstanceOfRegion_class(problem,interpretation,element);
18193 neg find mustInstanceOfEntry_class(problem,interpretation,element);
18194 neg find mustInstanceOfExit_class(problem,interpretation,element);
18195 neg find mustInstanceOfTransition_class(problem,interpretation,element);
18196 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
18197 neg find scopeDisallowsNewSynchronization_class(problem, interpretation);
18198 neg find isPrimitive(element);
18199} or
18200{ find mustInstanceOfSynchronization_class(problem,interpretation,element); }
18201/**
18202 * An element must be an instance of type "State class".
18203 */
18204private pattern mustInstanceOfState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
18205 Type.name(type,"State class");
18206 find directInstanceOf(problem,interpretation,element,type);
18207}
18208private pattern scopeDisallowsNewState_class(problem:LogicProblem, interpretation:PartialInterpretation) {
18209 find interpretation(problem,interpretation);
18210 PartialInterpretation.scopes(interpretation,scope);
18211 Scope.targetTypeInterpretation(scope,typeInterpretation);
18212 Scope.maxNewElements(scope,0);
18213 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
18214 Type.name(type,"State class");
18215}
18216
18217/**
18218 * An element may be an instance of type "State class".
18219 */
18220private pattern mayInstanceOfState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
18221{
18222 find interpretation(problem,interpretation);
18223 PartialInterpretation.newElements(interpretation,element);
18224 neg find mustInstanceOfFinalState_class(problem,interpretation,element);
18225 neg find mustInstanceOfRegion_class(problem,interpretation,element);
18226 neg find mustInstanceOfTransition_class(problem,interpretation,element);
18227 neg find mustInstanceOfStatechart_class(problem,interpretation,element);
18228 neg find mustInstanceOfPseudostate_class(problem,interpretation,element);
18229 neg find scopeDisallowsNewState_class(problem, interpretation);
18230 neg find isPrimitive(element);
18231} or {
18232 find interpretation(problem,interpretation);
18233 PartialInterpretation.openWorldElements(interpretation,element);
18234 neg find mustInstanceOfFinalState_class(problem,interpretation,element);
18235 neg find mustInstanceOfRegion_class(problem,interpretation,element);
18236 neg find mustInstanceOfTransition_class(problem,interpretation,element);
18237 neg find mustInstanceOfStatechart_class(problem,interpretation,element);
18238 neg find mustInstanceOfPseudostate_class(problem,interpretation,element);
18239 neg find scopeDisallowsNewState_class(problem, interpretation);
18240 neg find isPrimitive(element);
18241} or
18242{ find mustInstanceOfState_class(problem,interpretation,element); }
18243/**
18244 * An element must be an instance of type "RegularState class".
18245 */
18246private pattern mustInstanceOfRegularState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
18247 Type.name(type,"RegularState class");
18248 find directInstanceOf(problem,interpretation,element,type);
18249}
18250private pattern scopeDisallowsNewRegularState_class(problem:LogicProblem, interpretation:PartialInterpretation) {
18251 find interpretation(problem,interpretation);
18252 PartialInterpretation.scopes(interpretation,scope);
18253 Scope.targetTypeInterpretation(scope,typeInterpretation);
18254 Scope.maxNewElements(scope,0);
18255 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
18256 Type.name(type,"RegularState class");
18257}
18258
18259/**
18260 * An element may be an instance of type "RegularState class".
18261 */
18262private pattern mayInstanceOfRegularState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
18263{
18264 find interpretation(problem,interpretation);
18265 PartialInterpretation.newElements(interpretation,element);
18266 neg find mustInstanceOfFinalState_class(problem,interpretation,element);
18267 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
18268 neg find mustInstanceOfRegion_class(problem,interpretation,element);
18269 neg find mustInstanceOfTransition_class(problem,interpretation,element);
18270 neg find mustInstanceOfPseudostate_class(problem,interpretation,element);
18271 neg find scopeDisallowsNewRegularState_class(problem, interpretation);
18272 neg find isPrimitive(element);
18273} or {
18274 find interpretation(problem,interpretation);
18275 PartialInterpretation.openWorldElements(interpretation,element);
18276 neg find mustInstanceOfFinalState_class(problem,interpretation,element);
18277 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
18278 neg find mustInstanceOfRegion_class(problem,interpretation,element);
18279 neg find mustInstanceOfTransition_class(problem,interpretation,element);
18280 neg find mustInstanceOfPseudostate_class(problem,interpretation,element);
18281 neg find scopeDisallowsNewRegularState_class(problem, interpretation);
18282 neg find isPrimitive(element);
18283} or
18284{ find mustInstanceOfRegularState_class(problem,interpretation,element); }
18285/**
18286 * An element must be an instance of type "CompositeElement class".
18287 */
18288private pattern mustInstanceOfCompositeElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
18289 Type.name(type,"CompositeElement class");
18290 find directInstanceOf(problem,interpretation,element,type);
18291}
18292private pattern scopeDisallowsNewCompositeElement_class(problem:LogicProblem, interpretation:PartialInterpretation) {
18293 find interpretation(problem,interpretation);
18294 PartialInterpretation.scopes(interpretation,scope);
18295 Scope.targetTypeInterpretation(scope,typeInterpretation);
18296 Scope.maxNewElements(scope,0);
18297 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
18298 Type.name(type,"CompositeElement class");
18299}
18300
18301/**
18302 * An element may be an instance of type "CompositeElement class".
18303 */
18304private pattern mayInstanceOfCompositeElement_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
18305{
18306 find interpretation(problem,interpretation);
18307 PartialInterpretation.newElements(interpretation,element);
18308 neg find mustInstanceOfRegion_class(problem,interpretation,element);
18309 neg find mustInstanceOfVertex_class(problem,interpretation,element);
18310 neg find mustInstanceOfTransition_class(problem,interpretation,element);
18311 neg find mustInstanceOfStatechart_class(problem,interpretation,element);
18312 neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element);
18313 neg find scopeDisallowsNewCompositeElement_class(problem, interpretation);
18314 neg find isPrimitive(element);
18315} or {
18316 find interpretation(problem,interpretation);
18317 PartialInterpretation.openWorldElements(interpretation,element);
18318 neg find mustInstanceOfRegion_class(problem,interpretation,element);
18319 neg find mustInstanceOfVertex_class(problem,interpretation,element);
18320 neg find mustInstanceOfTransition_class(problem,interpretation,element);
18321 neg find mustInstanceOfStatechart_class(problem,interpretation,element);
18322 neg find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element);
18323 neg find scopeDisallowsNewCompositeElement_class(problem, interpretation);
18324 neg find isPrimitive(element);
18325} or
18326{ find mustInstanceOfCompositeElement_class(problem,interpretation,element); }
18327/**
18328 * An element must be an instance of type "Choice class".
18329 */
18330private pattern mustInstanceOfChoice_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
18331 Type.name(type,"Choice class");
18332 find directInstanceOf(problem,interpretation,element,type);
18333}
18334private pattern scopeDisallowsNewChoice_class(problem:LogicProblem, interpretation:PartialInterpretation) {
18335 find interpretation(problem,interpretation);
18336 PartialInterpretation.scopes(interpretation,scope);
18337 Scope.targetTypeInterpretation(scope,typeInterpretation);
18338 Scope.maxNewElements(scope,0);
18339 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
18340 Type.name(type,"Choice class");
18341}
18342
18343/**
18344 * An element may be an instance of type "Choice class".
18345 */
18346private pattern mayInstanceOfChoice_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
18347{
18348 find interpretation(problem,interpretation);
18349 PartialInterpretation.newElements(interpretation,element);
18350 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
18351 neg find mustInstanceOfRegion_class(problem,interpretation,element);
18352 neg find mustInstanceOfEntry_class(problem,interpretation,element);
18353 neg find mustInstanceOfExit_class(problem,interpretation,element);
18354 neg find mustInstanceOfTransition_class(problem,interpretation,element);
18355 neg find mustInstanceOfSynchronization_class(problem,interpretation,element);
18356 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
18357 neg find scopeDisallowsNewChoice_class(problem, interpretation);
18358 neg find isPrimitive(element);
18359} or {
18360 find interpretation(problem,interpretation);
18361 PartialInterpretation.openWorldElements(interpretation,element);
18362 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
18363 neg find mustInstanceOfRegion_class(problem,interpretation,element);
18364 neg find mustInstanceOfEntry_class(problem,interpretation,element);
18365 neg find mustInstanceOfExit_class(problem,interpretation,element);
18366 neg find mustInstanceOfTransition_class(problem,interpretation,element);
18367 neg find mustInstanceOfSynchronization_class(problem,interpretation,element);
18368 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
18369 neg find scopeDisallowsNewChoice_class(problem, interpretation);
18370 neg find isPrimitive(element);
18371} or
18372{ find mustInstanceOfChoice_class(problem,interpretation,element); }
18373/**
18374 * An element must be an instance of type "Exit class".
18375 */
18376private pattern mustInstanceOfExit_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
18377 Type.name(type,"Exit class");
18378 find directInstanceOf(problem,interpretation,element,type);
18379}
18380private pattern scopeDisallowsNewExit_class(problem:LogicProblem, interpretation:PartialInterpretation) {
18381 find interpretation(problem,interpretation);
18382 PartialInterpretation.scopes(interpretation,scope);
18383 Scope.targetTypeInterpretation(scope,typeInterpretation);
18384 Scope.maxNewElements(scope,0);
18385 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
18386 Type.name(type,"Exit class");
18387}
18388
18389/**
18390 * An element may be an instance of type "Exit class".
18391 */
18392private pattern mayInstanceOfExit_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
18393{
18394 find interpretation(problem,interpretation);
18395 PartialInterpretation.newElements(interpretation,element);
18396 neg find mustInstanceOfChoice_class(problem,interpretation,element);
18397 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
18398 neg find mustInstanceOfRegion_class(problem,interpretation,element);
18399 neg find mustInstanceOfEntry_class(problem,interpretation,element);
18400 neg find mustInstanceOfTransition_class(problem,interpretation,element);
18401 neg find mustInstanceOfSynchronization_class(problem,interpretation,element);
18402 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
18403 neg find scopeDisallowsNewExit_class(problem, interpretation);
18404 neg find isPrimitive(element);
18405} or {
18406 find interpretation(problem,interpretation);
18407 PartialInterpretation.openWorldElements(interpretation,element);
18408 neg find mustInstanceOfChoice_class(problem,interpretation,element);
18409 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
18410 neg find mustInstanceOfRegion_class(problem,interpretation,element);
18411 neg find mustInstanceOfEntry_class(problem,interpretation,element);
18412 neg find mustInstanceOfTransition_class(problem,interpretation,element);
18413 neg find mustInstanceOfSynchronization_class(problem,interpretation,element);
18414 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
18415 neg find scopeDisallowsNewExit_class(problem, interpretation);
18416 neg find isPrimitive(element);
18417} or
18418{ find mustInstanceOfExit_class(problem,interpretation,element); }
18419/**
18420 * An element must be an instance of type "FinalState class".
18421 */
18422private pattern mustInstanceOfFinalState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
18423 Type.name(type,"FinalState class");
18424 find directInstanceOf(problem,interpretation,element,type);
18425}
18426private pattern scopeDisallowsNewFinalState_class(problem:LogicProblem, interpretation:PartialInterpretation) {
18427 find interpretation(problem,interpretation);
18428 PartialInterpretation.scopes(interpretation,scope);
18429 Scope.targetTypeInterpretation(scope,typeInterpretation);
18430 Scope.maxNewElements(scope,0);
18431 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
18432 Type.name(type,"FinalState class");
18433}
18434
18435/**
18436 * An element may be an instance of type "FinalState class".
18437 */
18438private pattern mayInstanceOfFinalState_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
18439{
18440 find interpretation(problem,interpretation);
18441 PartialInterpretation.newElements(interpretation,element);
18442 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
18443 neg find mustInstanceOfRegion_class(problem,interpretation,element);
18444 neg find mustInstanceOfTransition_class(problem,interpretation,element);
18445 neg find mustInstanceOfPseudostate_class(problem,interpretation,element);
18446 neg find scopeDisallowsNewFinalState_class(problem, interpretation);
18447 neg find isPrimitive(element);
18448} or {
18449 find interpretation(problem,interpretation);
18450 PartialInterpretation.openWorldElements(interpretation,element);
18451 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
18452 neg find mustInstanceOfRegion_class(problem,interpretation,element);
18453 neg find mustInstanceOfTransition_class(problem,interpretation,element);
18454 neg find mustInstanceOfPseudostate_class(problem,interpretation,element);
18455 neg find scopeDisallowsNewFinalState_class(problem, interpretation);
18456 neg find isPrimitive(element);
18457} or
18458{ find mustInstanceOfFinalState_class(problem,interpretation,element); }
18459/**
18460 * An element must be an instance of type "Statechart class DefinedPart".
18461 */
18462private pattern mustInstanceOfStatechart_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
18463 Type.name(type,"Statechart class DefinedPart");
18464 find directInstanceOf(problem,interpretation,element,type);
18465}
18466private pattern scopeDisallowsNewStatechart_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
18467 find interpretation(problem,interpretation);
18468 PartialInterpretation.scopes(interpretation,scope);
18469 Scope.targetTypeInterpretation(scope,typeInterpretation);
18470 Scope.maxNewElements(scope,0);
18471 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
18472 Type.name(type,"Statechart class DefinedPart");
18473}
18474
18475/**
18476 * An element may be an instance of type "Statechart class DefinedPart".
18477 */
18478private pattern mayInstanceOfStatechart_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
18479{ find mustInstanceOfStatechart_class_DefinedPart(problem,interpretation,element); }
18480/**
18481 * An element must be an instance of type "Statechart class UndefinedPart".
18482 */
18483private pattern mustInstanceOfStatechart_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
18484 Type.name(type,"Statechart class UndefinedPart");
18485 find directInstanceOf(problem,interpretation,element,type);
18486}
18487private pattern scopeDisallowsNewStatechart_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
18488 find interpretation(problem,interpretation);
18489 PartialInterpretation.scopes(interpretation,scope);
18490 Scope.targetTypeInterpretation(scope,typeInterpretation);
18491 Scope.maxNewElements(scope,0);
18492 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
18493 Type.name(type,"Statechart class UndefinedPart");
18494}
18495
18496/**
18497 * An element may be an instance of type "Statechart class UndefinedPart".
18498 */
18499private pattern mayInstanceOfStatechart_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
18500{
18501 find interpretation(problem,interpretation);
18502 PartialInterpretation.newElements(interpretation,element);
18503 neg find mustInstanceOfRegion_class(problem,interpretation,element);
18504 neg find mustInstanceOfVertex_class(problem,interpretation,element);
18505 neg find mustInstanceOfTransition_class(problem,interpretation,element);
18506 neg find scopeDisallowsNewStatechart_class_UndefinedPart(problem, interpretation);
18507 neg find isPrimitive(element);
18508} or {
18509 find interpretation(problem,interpretation);
18510 PartialInterpretation.openWorldElements(interpretation,element);
18511 neg find mustInstanceOfRegion_class(problem,interpretation,element);
18512 neg find mustInstanceOfVertex_class(problem,interpretation,element);
18513 neg find mustInstanceOfTransition_class(problem,interpretation,element);
18514 neg find scopeDisallowsNewStatechart_class_UndefinedPart(problem, interpretation);
18515 neg find isPrimitive(element);
18516} or
18517{ find mustInstanceOfStatechart_class_UndefinedPart(problem,interpretation,element); }
18518/**
18519 * An element must be an instance of type "CompositeElement class DefinedPart".
18520 */
18521private pattern mustInstanceOfCompositeElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
18522 Type.name(type,"CompositeElement class DefinedPart");
18523 find directInstanceOf(problem,interpretation,element,type);
18524}
18525private pattern scopeDisallowsNewCompositeElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
18526 find interpretation(problem,interpretation);
18527 PartialInterpretation.scopes(interpretation,scope);
18528 Scope.targetTypeInterpretation(scope,typeInterpretation);
18529 Scope.maxNewElements(scope,0);
18530 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
18531 Type.name(type,"CompositeElement class DefinedPart");
18532}
18533
18534/**
18535 * An element may be an instance of type "CompositeElement class DefinedPart".
18536 */
18537private pattern mayInstanceOfCompositeElement_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
18538{ find mustInstanceOfCompositeElement_class_DefinedPart(problem,interpretation,element); }
18539/**
18540 * An element must be an instance of type "CompositeElement class UndefinedPart".
18541 */
18542private pattern mustInstanceOfCompositeElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
18543 Type.name(type,"CompositeElement class UndefinedPart");
18544 find directInstanceOf(problem,interpretation,element,type);
18545}
18546private pattern scopeDisallowsNewCompositeElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
18547 find interpretation(problem,interpretation);
18548 PartialInterpretation.scopes(interpretation,scope);
18549 Scope.targetTypeInterpretation(scope,typeInterpretation);
18550 Scope.maxNewElements(scope,0);
18551 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
18552 Type.name(type,"CompositeElement class UndefinedPart");
18553}
18554
18555/**
18556 * An element may be an instance of type "CompositeElement class UndefinedPart".
18557 */
18558private pattern mayInstanceOfCompositeElement_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
18559{
18560 find interpretation(problem,interpretation);
18561 PartialInterpretation.newElements(interpretation,element);
18562 neg find mustInstanceOfRegion_class(problem,interpretation,element);
18563 neg find mustInstanceOfVertex_class(problem,interpretation,element);
18564 neg find mustInstanceOfTransition_class(problem,interpretation,element);
18565 neg find mustInstanceOfStatechart_class(problem,interpretation,element);
18566 neg find scopeDisallowsNewCompositeElement_class_UndefinedPart(problem, interpretation);
18567 neg find isPrimitive(element);
18568} or {
18569 find interpretation(problem,interpretation);
18570 PartialInterpretation.openWorldElements(interpretation,element);
18571 neg find mustInstanceOfRegion_class(problem,interpretation,element);
18572 neg find mustInstanceOfVertex_class(problem,interpretation,element);
18573 neg find mustInstanceOfTransition_class(problem,interpretation,element);
18574 neg find mustInstanceOfStatechart_class(problem,interpretation,element);
18575 neg find scopeDisallowsNewCompositeElement_class_UndefinedPart(problem, interpretation);
18576 neg find isPrimitive(element);
18577} or
18578{ find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,element); }
18579
18580//////////
18581// 1.2 Relation Declaration Indexers
18582//////////
18583/**
18584 * Matcher for detecting tuples t where []incomingTransitions reference Vertex(source,target)
18585 */
18586private pattern mustInRelationincomingTransitions_reference_Vertex(
18587 problem:LogicProblem, interpretation:PartialInterpretation,
18588 source: DefinedElement, target:DefinedElement)
18589{
18590 find interpretation(problem,interpretation);
18591 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
18592 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"incomingTransitions reference Vertex");
18593 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
18594 BinaryElementRelationLink.param1(link,source);
18595 BinaryElementRelationLink.param2(link,target);
18596}
18597/**
18598 * Matcher for detecting tuples t where <>incomingTransitions reference Vertex(source,target)
18599 */
18600private pattern mayInRelationincomingTransitions_reference_Vertex(
18601 problem:LogicProblem, interpretation:PartialInterpretation,
18602 source: DefinedElement, target:DefinedElement)
18603{
18604 find interpretation(problem,interpretation);
18605 // The two endpoint of the link have to exist
18606 find mayExist(problem, interpretation, source);
18607 find mayExist(problem, interpretation, target);
18608 // Type consistency
18609 find mayInstanceOfVertex_class(problem,interpretation,source);
18610 find mayInstanceOfTransition_class(problem,interpretation,target);
18611 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
18612 // the upper bound of the opposite reference multiplicity should be considered.
18613 numberOfExistingOppositeReferences == count find mustInRelationtarget_reference_Transition(problem,interpretation,target,_);
18614 check(numberOfExistingOppositeReferences < 1);
18615} or {
18616 find mustInRelationincomingTransitions_reference_Vertex(problem,interpretation,source,target);
18617}
18618/**
18619 * Matcher for detecting tuples t where []outgoingTransitions reference Vertex(source,target)
18620 */
18621private pattern mustInRelationoutgoingTransitions_reference_Vertex(
18622 problem:LogicProblem, interpretation:PartialInterpretation,
18623 source: DefinedElement, target:DefinedElement)
18624{
18625 find interpretation(problem,interpretation);
18626 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
18627 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"outgoingTransitions reference Vertex");
18628 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
18629 BinaryElementRelationLink.param1(link,source);
18630 BinaryElementRelationLink.param2(link,target);
18631}
18632/**
18633 * Matcher for detecting tuples t where <>outgoingTransitions reference Vertex(source,target)
18634 */
18635private pattern mayInRelationoutgoingTransitions_reference_Vertex(
18636 problem:LogicProblem, interpretation:PartialInterpretation,
18637 source: DefinedElement, target:DefinedElement)
18638{
18639 find interpretation(problem,interpretation);
18640 // The two endpoint of the link have to exist
18641 find mayExist(problem, interpretation, source);
18642 find mayExist(problem, interpretation, target);
18643 // Type consistency
18644 find mayInstanceOfVertex_class(problem,interpretation,source);
18645 find mayInstanceOfTransition_class(problem,interpretation,target);
18646 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
18647 // the upper bound of the opposite reference multiplicity should be considered.
18648 numberOfExistingOppositeReferences == count find mustInRelationsource_reference_Transition(problem,interpretation,target,_);
18649 check(numberOfExistingOppositeReferences < 1);
18650 // The reference is containment, then a new reference cannot be create if:
18651 // 1. Multiple parents
18652 neg find mustContains4(problem,interpretation,_,target);
18653 // 2. Circle in the containment hierarchy
18654 neg find mustTransitiveContains(source,target);
18655} or {
18656 find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,source,target);
18657}
18658/**
18659 * Matcher for detecting tuples t where []vertices reference Region(source,target)
18660 */
18661private pattern mustInRelationvertices_reference_Region(
18662 problem:LogicProblem, interpretation:PartialInterpretation,
18663 source: DefinedElement, target:DefinedElement)
18664{
18665 find interpretation(problem,interpretation);
18666 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
18667 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"vertices reference Region");
18668 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
18669 BinaryElementRelationLink.param1(link,source);
18670 BinaryElementRelationLink.param2(link,target);
18671}
18672/**
18673 * Matcher for detecting tuples t where <>vertices reference Region(source,target)
18674 */
18675private pattern mayInRelationvertices_reference_Region(
18676 problem:LogicProblem, interpretation:PartialInterpretation,
18677 source: DefinedElement, target:DefinedElement)
18678{
18679 find interpretation(problem,interpretation);
18680 // The two endpoint of the link have to exist
18681 find mayExist(problem, interpretation, source);
18682 find mayExist(problem, interpretation, target);
18683 // Type consistency
18684 find mayInstanceOfRegion_class(problem,interpretation,source);
18685 find mayInstanceOfVertex_class(problem,interpretation,target);
18686 // The reference is containment, then a new reference cannot be create if:
18687 // 1. Multiple parents
18688 neg find mustContains4(problem,interpretation,_,target);
18689 // 2. Circle in the containment hierarchy
18690 neg find mustTransitiveContains(source,target);
18691} or {
18692 find mustInRelationvertices_reference_Region(problem,interpretation,source,target);
18693}
18694/**
18695 * Matcher for detecting tuples t where []target reference Transition(source,target)
18696 */
18697private pattern mustInRelationtarget_reference_Transition(
18698 problem:LogicProblem, interpretation:PartialInterpretation,
18699 source: DefinedElement, target:DefinedElement)
18700{
18701 find interpretation(problem,interpretation);
18702 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
18703 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"target reference Transition");
18704 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
18705 BinaryElementRelationLink.param1(link,source);
18706 BinaryElementRelationLink.param2(link,target);
18707}
18708/**
18709 * Matcher for detecting tuples t where <>target reference Transition(source,target)
18710 */
18711private pattern mayInRelationtarget_reference_Transition(
18712 problem:LogicProblem, interpretation:PartialInterpretation,
18713 source: DefinedElement, target:DefinedElement)
18714{
18715 find interpretation(problem,interpretation);
18716 // The two endpoint of the link have to exist
18717 find mayExist(problem, interpretation, source);
18718 find mayExist(problem, interpretation, target);
18719 // Type consistency
18720 find mayInstanceOfTransition_class(problem,interpretation,source);
18721 find mayInstanceOfVertex_class(problem,interpretation,target);
18722 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
18723 // the upper bound of the multiplicity should be considered.
18724 numberOfExistingReferences == count find mustInRelationtarget_reference_Transition(problem,interpretation,source,_);
18725 check(numberOfExistingReferences < 1);
18726} or {
18727 find mustInRelationtarget_reference_Transition(problem,interpretation,source,target);
18728}
18729/**
18730 * Matcher for detecting tuples t where []source reference Transition(source,target)
18731 */
18732private pattern mustInRelationsource_reference_Transition(
18733 problem:LogicProblem, interpretation:PartialInterpretation,
18734 source: DefinedElement, target:DefinedElement)
18735{
18736 find interpretation(problem,interpretation);
18737 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
18738 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"source reference Transition");
18739 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
18740 BinaryElementRelationLink.param1(link,source);
18741 BinaryElementRelationLink.param2(link,target);
18742}
18743/**
18744 * Matcher for detecting tuples t where <>source reference Transition(source,target)
18745 */
18746private pattern mayInRelationsource_reference_Transition(
18747 problem:LogicProblem, interpretation:PartialInterpretation,
18748 source: DefinedElement, target:DefinedElement)
18749{
18750 find interpretation(problem,interpretation);
18751 // The two endpoint of the link have to exist
18752 find mayExist(problem, interpretation, source);
18753 find mayExist(problem, interpretation, target);
18754 // Type consistency
18755 find mayInstanceOfTransition_class(problem,interpretation,source);
18756 find mayInstanceOfVertex_class(problem,interpretation,target);
18757 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
18758 // the upper bound of the multiplicity should be considered.
18759 numberOfExistingReferences == count find mustInRelationsource_reference_Transition(problem,interpretation,source,_);
18760 check(numberOfExistingReferences < 1);
18761 // The eOpposite of the reference is containment, then a referene cannot be created if
18762 // 1. Multiple parents
18763 neg find mustContains4(problem,interpretation,source,_);
18764 // 2. Circle in the containment hierarchy
18765 neg find mustTransitiveContains(source,target);
18766} or {
18767 find mustInRelationsource_reference_Transition(problem,interpretation,source,target);
18768}
18769/**
18770 * Matcher for detecting tuples t where []regions reference CompositeElement(source,target)
18771 */
18772private pattern mustInRelationregions_reference_CompositeElement(
18773 problem:LogicProblem, interpretation:PartialInterpretation,
18774 source: DefinedElement, target:DefinedElement)
18775{
18776 find interpretation(problem,interpretation);
18777 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
18778 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"regions reference CompositeElement");
18779 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
18780 BinaryElementRelationLink.param1(link,source);
18781 BinaryElementRelationLink.param2(link,target);
18782}
18783/**
18784 * Matcher for detecting tuples t where <>regions reference CompositeElement(source,target)
18785 */
18786private pattern mayInRelationregions_reference_CompositeElement(
18787 problem:LogicProblem, interpretation:PartialInterpretation,
18788 source: DefinedElement, target:DefinedElement)
18789{
18790 find interpretation(problem,interpretation);
18791 // The two endpoint of the link have to exist
18792 find mayExist(problem, interpretation, source);
18793 find mayExist(problem, interpretation, target);
18794 // Type consistency
18795 find mayInstanceOfCompositeElement_class(problem,interpretation,source);
18796 find mayInstanceOfRegion_class(problem,interpretation,target);
18797 // The reference is containment, then a new reference cannot be create if:
18798 // 1. Multiple parents
18799 neg find mustContains4(problem,interpretation,_,target);
18800 // 2. Circle in the containment hierarchy
18801 neg find mustTransitiveContains(source,target);
18802} or {
18803 find mustInRelationregions_reference_CompositeElement(problem,interpretation,source,target);
18804}
18805
18806//////////
18807// 1.3 Relation Definition Indexers
18808//////////
18809// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries entryInRegion
18810private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(
18811 problem:LogicProblem, interpretation:PartialInterpretation,
18812 var_r1, var_e1)
18813{
18814 find interpretation(problem,interpretation);
18815 find mustInstanceOfRegion_class(problem,interpretation,var_r1);
18816 find mustInstanceOfEntry_class(problem,interpretation,var_e1);
18817 // r1 is exported
18818 // e1 is exported
18819 find mustInstanceOfRegion_class(problem,interpretation,var_r1);
18820 find mustInRelationvertices_reference_Region(problem,interpretation,var_r1,var_virtual0);
18821 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
18822 var_virtual0 == var_e1;
18823}
18824private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(
18825 problem:LogicProblem, interpretation:PartialInterpretation,
18826 var_r1, var_e1)
18827{
18828 find interpretation(problem,interpretation);
18829 find mayInstanceOfRegion_class(problem,interpretation,var_r1);
18830 find mayInstanceOfEntry_class(problem,interpretation,var_e1);
18831 // r1 is exported
18832 // e1 is exported
18833 find mayInstanceOfRegion_class(problem,interpretation,var_r1);
18834 find mayInRelationvertices_reference_Region(problem,interpretation,var_r1,var_virtual0);
18835 find mayInstanceOfVertex_class(problem,interpretation,var_virtual0);
18836 find mayEquivalent(problem, interpretation, var_virtual0, var_e1);
18837}
18838private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(
18839 problem:LogicProblem, interpretation:PartialInterpretation,
18840 var_r1, var_e1)
18841{
18842 find interpretation(problem,interpretation);
18843 find mustInstanceOfRegion_class(problem,interpretation,var_r1);
18844 find mustInstanceOfEntry_class(problem,interpretation,var_e1);
18845 // r1 is exported
18846 // e1 is exported
18847 find mustInstanceOfRegion_class(problem,interpretation,var_r1);
18848 find mustInRelationvertices_reference_Region(problem,interpretation,var_r1,var_virtual0);
18849 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
18850 var_virtual0 == var_e1;
18851}
18852// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries noEntryInRegion
18853private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(
18854 problem:LogicProblem, interpretation:PartialInterpretation,
18855 var_r1)
18856{
18857 find interpretation(problem,interpretation);
18858 find mustInstanceOfRegion_class(problem,interpretation,var_r1);
18859 // r1 is exported
18860 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r1,_var__0);
18861}
18862private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(
18863 problem:LogicProblem, interpretation:PartialInterpretation,
18864 var_r1)
18865{
18866 find interpretation(problem,interpretation);
18867 find mayInstanceOfRegion_class(problem,interpretation,var_r1);
18868 // r1 is exported
18869 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r1,_var__0);
18870}
18871private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(
18872 problem:LogicProblem, interpretation:PartialInterpretation,
18873 var_r1)
18874{
18875 find interpretation(problem,interpretation);
18876 find mustInstanceOfRegion_class(problem,interpretation,var_r1);
18877 // r1 is exported
18878 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r1,_var__0);
18879}
18880// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries multipleEntryInRegion
18881private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(
18882 problem:LogicProblem, interpretation:PartialInterpretation,
18883 var_r)
18884{
18885 find interpretation(problem,interpretation);
18886 find mustInstanceOfRegion_class(problem,interpretation,var_r);
18887 // r is exported
18888 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e1);
18889 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e2);
18890 neg find mayEquivalent(problem, interpretation, var_e1, var_e2);
18891}
18892private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(
18893 problem:LogicProblem, interpretation:PartialInterpretation,
18894 var_r)
18895{
18896 find interpretation(problem,interpretation);
18897 find mayInstanceOfRegion_class(problem,interpretation,var_r);
18898 // r is exported
18899 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e1);
18900 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e2);
18901 var_e1 != var_e2;
18902}
18903private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(
18904 problem:LogicProblem, interpretation:PartialInterpretation,
18905 var_r)
18906{
18907 find interpretation(problem,interpretation);
18908 find mustInstanceOfRegion_class(problem,interpretation,var_r);
18909 // r is exported
18910 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e1);
18911 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_entryInRegion(problem,interpretation,var_r,var_e2);
18912 var_e1 != var_e2;
18913}
18914// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries transition
18915private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(
18916 problem:LogicProblem, interpretation:PartialInterpretation,
18917 var_t, var_src, var_trg)
18918{
18919 find interpretation(problem,interpretation);
18920 find mustInstanceOfTransition_class(problem,interpretation,var_t);
18921 find mustInstanceOfVertex_class(problem,interpretation,var_src);
18922 find mustInstanceOfVertex_class(problem,interpretation,var_trg);
18923 // t is exported
18924 // src is exported
18925 // trg is exported
18926 find mustInstanceOfTransition_class(problem,interpretation,var_t);
18927 find mustInRelationsource_reference_Transition(problem,interpretation,var_t,var_virtual0);
18928 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
18929 var_virtual0 == var_src;
18930 find mustInstanceOfTransition_class(problem,interpretation,var_t);
18931 find mustInRelationtarget_reference_Transition(problem,interpretation,var_t,var_virtual1);
18932 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
18933 var_virtual1 == var_trg;
18934}
18935private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(
18936 problem:LogicProblem, interpretation:PartialInterpretation,
18937 var_t, var_src, var_trg)
18938{
18939 find interpretation(problem,interpretation);
18940 find mayInstanceOfTransition_class(problem,interpretation,var_t);
18941 find mayInstanceOfVertex_class(problem,interpretation,var_src);
18942 find mayInstanceOfVertex_class(problem,interpretation,var_trg);
18943 // t is exported
18944 // src is exported
18945 // trg is exported
18946 find mayInstanceOfTransition_class(problem,interpretation,var_t);
18947 find mayInRelationsource_reference_Transition(problem,interpretation,var_t,var_virtual0);
18948 find mayInstanceOfVertex_class(problem,interpretation,var_virtual0);
18949 find mayEquivalent(problem, interpretation, var_virtual0, var_src);
18950 find mayInstanceOfTransition_class(problem,interpretation,var_t);
18951 find mayInRelationtarget_reference_Transition(problem,interpretation,var_t,var_virtual1);
18952 find mayInstanceOfVertex_class(problem,interpretation,var_virtual1);
18953 find mayEquivalent(problem, interpretation, var_virtual1, var_trg);
18954}
18955private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(
18956 problem:LogicProblem, interpretation:PartialInterpretation,
18957 var_t, var_src, var_trg)
18958{
18959 find interpretation(problem,interpretation);
18960 find mustInstanceOfTransition_class(problem,interpretation,var_t);
18961 find mustInstanceOfVertex_class(problem,interpretation,var_src);
18962 find mustInstanceOfVertex_class(problem,interpretation,var_trg);
18963 // t is exported
18964 // src is exported
18965 // trg is exported
18966 find mustInstanceOfTransition_class(problem,interpretation,var_t);
18967 find mustInRelationsource_reference_Transition(problem,interpretation,var_t,var_virtual0);
18968 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
18969 var_virtual0 == var_src;
18970 find mustInstanceOfTransition_class(problem,interpretation,var_t);
18971 find mustInRelationtarget_reference_Transition(problem,interpretation,var_t,var_virtual1);
18972 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
18973 var_virtual1 == var_trg;
18974}
18975// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries incomingToEntry
18976private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(
18977 problem:LogicProblem, interpretation:PartialInterpretation,
18978 var_t, var_e)
18979{
18980 find interpretation(problem,interpretation);
18981 find mustInstanceOfTransition_class(problem,interpretation,var_t);
18982 find mustInstanceOfEntry_class(problem,interpretation,var_e);
18983 // t is exported
18984 // e is exported
18985 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t,_var__0,var_e);
18986}
18987private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(
18988 problem:LogicProblem, interpretation:PartialInterpretation,
18989 var_t, var_e)
18990{
18991 find interpretation(problem,interpretation);
18992 find mayInstanceOfTransition_class(problem,interpretation,var_t);
18993 find mayInstanceOfEntry_class(problem,interpretation,var_e);
18994 // t is exported
18995 // e is exported
18996 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t,_var__0,var_e);
18997}
18998private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(
18999 problem:LogicProblem, interpretation:PartialInterpretation,
19000 var_t, var_e)
19001{
19002 find interpretation(problem,interpretation);
19003 find mustInstanceOfTransition_class(problem,interpretation,var_t);
19004 find mustInstanceOfEntry_class(problem,interpretation,var_e);
19005 // t is exported
19006 // e is exported
19007 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t,_var__0,var_e);
19008}
19009// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries noOutgoingTransitionFromEntry
19010private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(
19011 problem:LogicProblem, interpretation:PartialInterpretation,
19012 var_e)
19013{
19014 find interpretation(problem,interpretation);
19015 find mustInstanceOfEntry_class(problem,interpretation,var_e);
19016 // e is exported
19017 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_e,_var__1);
19018}
19019private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(
19020 problem:LogicProblem, interpretation:PartialInterpretation,
19021 var_e)
19022{
19023 find interpretation(problem,interpretation);
19024 find mayInstanceOfEntry_class(problem,interpretation,var_e);
19025 // e is exported
19026 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_e,_var__1);
19027}
19028private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(
19029 problem:LogicProblem, interpretation:PartialInterpretation,
19030 var_e)
19031{
19032 find interpretation(problem,interpretation);
19033 find mustInstanceOfEntry_class(problem,interpretation,var_e);
19034 // e is exported
19035 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_e,_var__1);
19036}
19037// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries multipleTransitionFromEntry
19038private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(
19039 problem:LogicProblem, interpretation:PartialInterpretation,
19040 var_e, var_t1, var_t2)
19041{
19042 find interpretation(problem,interpretation);
19043 find mustInstanceOfEntry_class(problem,interpretation,var_e);
19044 find mustInstanceOfTransition_class(problem,interpretation,var_t1);
19045 find mustInstanceOfTransition_class(problem,interpretation,var_t2);
19046 // e is exported
19047 // t1 is exported
19048 // t2 is exported
19049 find mustInstanceOfEntry_class(problem,interpretation,var_e);
19050 find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0);
19051 find mustInstanceOfTransition_class(problem,interpretation,var_virtual0);
19052 var_virtual0 == var_t1;
19053 find mustInstanceOfEntry_class(problem,interpretation,var_e);
19054 find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual1);
19055 find mustInstanceOfTransition_class(problem,interpretation,var_virtual1);
19056 var_virtual1 == var_t2;
19057 neg find mayEquivalent(problem, interpretation, var_t1, var_t2);
19058}
19059private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(
19060 problem:LogicProblem, interpretation:PartialInterpretation,
19061 var_e, var_t1, var_t2)
19062{
19063 find interpretation(problem,interpretation);
19064 find mayInstanceOfEntry_class(problem,interpretation,var_e);
19065 find mayInstanceOfTransition_class(problem,interpretation,var_t1);
19066 find mayInstanceOfTransition_class(problem,interpretation,var_t2);
19067 // e is exported
19068 // t1 is exported
19069 // t2 is exported
19070 find mayInstanceOfEntry_class(problem,interpretation,var_e);
19071 find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0);
19072 find mayInstanceOfTransition_class(problem,interpretation,var_virtual0);
19073 find mayEquivalent(problem, interpretation, var_virtual0, var_t1);
19074 find mayInstanceOfEntry_class(problem,interpretation,var_e);
19075 find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual1);
19076 find mayInstanceOfTransition_class(problem,interpretation,var_virtual1);
19077 find mayEquivalent(problem, interpretation, var_virtual1, var_t2);
19078 var_t1 != var_t2;
19079}
19080private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(
19081 problem:LogicProblem, interpretation:PartialInterpretation,
19082 var_e, var_t1, var_t2)
19083{
19084 find interpretation(problem,interpretation);
19085 find mustInstanceOfEntry_class(problem,interpretation,var_e);
19086 find mustInstanceOfTransition_class(problem,interpretation,var_t1);
19087 find mustInstanceOfTransition_class(problem,interpretation,var_t2);
19088 // e is exported
19089 // t1 is exported
19090 // t2 is exported
19091 find mustInstanceOfEntry_class(problem,interpretation,var_e);
19092 find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0);
19093 find mustInstanceOfTransition_class(problem,interpretation,var_virtual0);
19094 var_virtual0 == var_t1;
19095 find mustInstanceOfEntry_class(problem,interpretation,var_e);
19096 find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual1);
19097 find mustInstanceOfTransition_class(problem,interpretation,var_virtual1);
19098 var_virtual1 == var_t2;
19099 var_t1 != var_t2;
19100}
19101// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries outgoingFromExit
19102private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(
19103 problem:LogicProblem, interpretation:PartialInterpretation,
19104 var_t, var_e)
19105{
19106 find interpretation(problem,interpretation);
19107 find mustInstanceOfTransition_class(problem,interpretation,var_t);
19108 find mustInstanceOfExit_class(problem,interpretation,var_e);
19109 // t is exported
19110 // e is exported
19111 find mustInstanceOfExit_class(problem,interpretation,var_e);
19112 find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0);
19113 find mustInstanceOfTransition_class(problem,interpretation,var_virtual0);
19114 var_virtual0 == var_t;
19115}
19116private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(
19117 problem:LogicProblem, interpretation:PartialInterpretation,
19118 var_t, var_e)
19119{
19120 find interpretation(problem,interpretation);
19121 find mayInstanceOfTransition_class(problem,interpretation,var_t);
19122 find mayInstanceOfExit_class(problem,interpretation,var_e);
19123 // t is exported
19124 // e is exported
19125 find mayInstanceOfExit_class(problem,interpretation,var_e);
19126 find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0);
19127 find mayInstanceOfTransition_class(problem,interpretation,var_virtual0);
19128 find mayEquivalent(problem, interpretation, var_virtual0, var_t);
19129}
19130private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(
19131 problem:LogicProblem, interpretation:PartialInterpretation,
19132 var_t, var_e)
19133{
19134 find interpretation(problem,interpretation);
19135 find mustInstanceOfTransition_class(problem,interpretation,var_t);
19136 find mustInstanceOfExit_class(problem,interpretation,var_e);
19137 // t is exported
19138 // e is exported
19139 find mustInstanceOfExit_class(problem,interpretation,var_e);
19140 find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_e,var_virtual0);
19141 find mustInstanceOfTransition_class(problem,interpretation,var_virtual0);
19142 var_virtual0 == var_t;
19143}
19144// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries outgoingFromFinal
19145private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(
19146 problem:LogicProblem, interpretation:PartialInterpretation,
19147 var_t, var_f)
19148{
19149 find interpretation(problem,interpretation);
19150 find mustInstanceOfTransition_class(problem,interpretation,var_t);
19151 find mustInstanceOfFinalState_class(problem,interpretation,var_f);
19152 // t is exported
19153 // f is exported
19154 find mustInstanceOfFinalState_class(problem,interpretation,var_f);
19155 find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_f,var_virtual0);
19156 find mustInstanceOfTransition_class(problem,interpretation,var_virtual0);
19157 var_virtual0 == var_t;
19158}
19159private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(
19160 problem:LogicProblem, interpretation:PartialInterpretation,
19161 var_t, var_f)
19162{
19163 find interpretation(problem,interpretation);
19164 find mayInstanceOfTransition_class(problem,interpretation,var_t);
19165 find mayInstanceOfFinalState_class(problem,interpretation,var_f);
19166 // t is exported
19167 // f is exported
19168 find mayInstanceOfFinalState_class(problem,interpretation,var_f);
19169 find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_f,var_virtual0);
19170 find mayInstanceOfTransition_class(problem,interpretation,var_virtual0);
19171 find mayEquivalent(problem, interpretation, var_virtual0, var_t);
19172}
19173private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(
19174 problem:LogicProblem, interpretation:PartialInterpretation,
19175 var_t, var_f)
19176{
19177 find interpretation(problem,interpretation);
19178 find mustInstanceOfTransition_class(problem,interpretation,var_t);
19179 find mustInstanceOfFinalState_class(problem,interpretation,var_f);
19180 // t is exported
19181 // f is exported
19182 find mustInstanceOfFinalState_class(problem,interpretation,var_f);
19183 find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,var_f,var_virtual0);
19184 find mustInstanceOfTransition_class(problem,interpretation,var_virtual0);
19185 var_virtual0 == var_t;
19186}
19187// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries noStateInRegion
19188private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(
19189 problem:LogicProblem, interpretation:PartialInterpretation,
19190 var_region)
19191{
19192 find interpretation(problem,interpretation);
19193 find mustInstanceOfRegion_class(problem,interpretation,var_region);
19194 // region is exported
19195 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion(problem,interpretation,var_region,_var__0);
19196}
19197private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(
19198 problem:LogicProblem, interpretation:PartialInterpretation,
19199 var_region)
19200{
19201 find interpretation(problem,interpretation);
19202 find mayInstanceOfRegion_class(problem,interpretation,var_region);
19203 // region is exported
19204 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion(problem,interpretation,var_region,_var__0);
19205}
19206private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(
19207 problem:LogicProblem, interpretation:PartialInterpretation,
19208 var_region)
19209{
19210 find interpretation(problem,interpretation);
19211 find mustInstanceOfRegion_class(problem,interpretation,var_region);
19212 // region is exported
19213 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion(problem,interpretation,var_region,_var__0);
19214}
19215// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries StateInRegion
19216private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion(
19217 problem:LogicProblem, interpretation:PartialInterpretation,
19218 var_region, var_state)
19219{
19220 find interpretation(problem,interpretation);
19221 find mustInstanceOfRegion_class(problem,interpretation,var_region);
19222 find mustInstanceOfState_class(problem,interpretation,var_state);
19223 // region is exported
19224 // state is exported
19225 find mustInstanceOfRegion_class(problem,interpretation,var_region);
19226 find mustInRelationvertices_reference_Region(problem,interpretation,var_region,var_virtual0);
19227 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
19228 var_virtual0 == var_state;
19229}
19230private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion(
19231 problem:LogicProblem, interpretation:PartialInterpretation,
19232 var_region, var_state)
19233{
19234 find interpretation(problem,interpretation);
19235 find mayInstanceOfRegion_class(problem,interpretation,var_region);
19236 find mayInstanceOfState_class(problem,interpretation,var_state);
19237 // region is exported
19238 // state is exported
19239 find mayInstanceOfRegion_class(problem,interpretation,var_region);
19240 find mayInRelationvertices_reference_Region(problem,interpretation,var_region,var_virtual0);
19241 find mayInstanceOfVertex_class(problem,interpretation,var_virtual0);
19242 find mayEquivalent(problem, interpretation, var_virtual0, var_state);
19243}
19244private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_StateInRegion(
19245 problem:LogicProblem, interpretation:PartialInterpretation,
19246 var_region, var_state)
19247{
19248 find interpretation(problem,interpretation);
19249 find mustInstanceOfRegion_class(problem,interpretation,var_region);
19250 find mustInstanceOfState_class(problem,interpretation,var_state);
19251 // region is exported
19252 // state is exported
19253 find mustInstanceOfRegion_class(problem,interpretation,var_region);
19254 find mustInRelationvertices_reference_Region(problem,interpretation,var_region,var_virtual0);
19255 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
19256 var_virtual0 == var_state;
19257}
19258// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries choiceHasNoOutgoing
19259private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(
19260 problem:LogicProblem, interpretation:PartialInterpretation,
19261 var_c)
19262{
19263 find interpretation(problem,interpretation);
19264 find mustInstanceOfChoice_class(problem,interpretation,var_c);
19265 // c is exported
19266 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_c,_var__1);
19267}
19268private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(
19269 problem:LogicProblem, interpretation:PartialInterpretation,
19270 var_c)
19271{
19272 find interpretation(problem,interpretation);
19273 find mayInstanceOfChoice_class(problem,interpretation,var_c);
19274 // c is exported
19275 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_c,_var__1);
19276}
19277private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(
19278 problem:LogicProblem, interpretation:PartialInterpretation,
19279 var_c)
19280{
19281 find interpretation(problem,interpretation);
19282 find mustInstanceOfChoice_class(problem,interpretation,var_c);
19283 // c is exported
19284 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_c,_var__1);
19285}
19286// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries choiceHasNoIncoming
19287private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(
19288 problem:LogicProblem, interpretation:PartialInterpretation,
19289 var_c)
19290{
19291 find interpretation(problem,interpretation);
19292 find mustInstanceOfChoice_class(problem,interpretation,var_c);
19293 // c is exported
19294 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_c);
19295}
19296private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(
19297 problem:LogicProblem, interpretation:PartialInterpretation,
19298 var_c)
19299{
19300 find interpretation(problem,interpretation);
19301 find mayInstanceOfChoice_class(problem,interpretation,var_c);
19302 // c is exported
19303 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_c);
19304}
19305private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(
19306 problem:LogicProblem, interpretation:PartialInterpretation,
19307 var_c)
19308{
19309 find interpretation(problem,interpretation);
19310 find mustInstanceOfChoice_class(problem,interpretation,var_c);
19311 // c is exported
19312 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_c);
19313}
19314// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries synchHasNoOutgoing
19315private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(
19316 problem:LogicProblem, interpretation:PartialInterpretation,
19317 var_s)
19318{
19319 find interpretation(problem,interpretation);
19320 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
19321 // s is exported
19322 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,_var__1);
19323}
19324private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(
19325 problem:LogicProblem, interpretation:PartialInterpretation,
19326 var_s)
19327{
19328 find interpretation(problem,interpretation);
19329 find mayInstanceOfSynchronization_class(problem,interpretation,var_s);
19330 // s is exported
19331 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,_var__1);
19332}
19333private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(
19334 problem:LogicProblem, interpretation:PartialInterpretation,
19335 var_s)
19336{
19337 find interpretation(problem,interpretation);
19338 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
19339 // s is exported
19340 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,_var__1);
19341}
19342// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries synchHasNoIncoming
19343private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(
19344 problem:LogicProblem, interpretation:PartialInterpretation,
19345 var_s)
19346{
19347 find interpretation(problem,interpretation);
19348 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
19349 // s is exported
19350 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_s);
19351}
19352private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(
19353 problem:LogicProblem, interpretation:PartialInterpretation,
19354 var_s)
19355{
19356 find interpretation(problem,interpretation);
19357 find mayInstanceOfSynchronization_class(problem,interpretation,var_s);
19358 // s is exported
19359 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_s);
19360}
19361private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(
19362 problem:LogicProblem, interpretation:PartialInterpretation,
19363 var_s)
19364{
19365 find interpretation(problem,interpretation);
19366 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
19367 // s is exported
19368 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,_var__1,var_s);
19369}
19370// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries SynchronizedIncomingInSameRegion
19371private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(
19372 problem:LogicProblem, interpretation:PartialInterpretation,
19373 var_s, var_v1, var_v2)
19374{
19375 find interpretation(problem,interpretation);
19376 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
19377 find mustInstanceOfVertex_class(problem,interpretation,var_v1);
19378 find mustInstanceOfVertex_class(problem,interpretation,var_v2);
19379 // s is exported
19380 // v1 is exported
19381 // v2 is exported
19382 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_v1,var_s);
19383 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_v2,var_s);
19384 neg find mayEquivalent(problem, interpretation, var_t1, var_t2);
19385 find mustInstanceOfRegion_class(problem,interpretation,var_r);
19386 find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0);
19387 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
19388 var_virtual0 == var_v1;
19389 find mustInstanceOfRegion_class(problem,interpretation,var_r);
19390 find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1);
19391 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
19392 var_virtual1 == var_v2;
19393}or{
19394 find interpretation(problem,interpretation);
19395 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
19396 find mustInstanceOfVertex_class(problem,interpretation,var_v1);
19397 find mustInstanceOfVertex_class(problem,interpretation,var_v2);
19398 // s is exported
19399 // v1 is exported
19400 // v2 is exported
19401 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_s,var_v1);
19402 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_s,var_v2);
19403 neg find mayEquivalent(problem, interpretation, var_t1, var_t2);
19404 find mustInstanceOfRegion_class(problem,interpretation,var_r);
19405 find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0);
19406 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
19407 var_virtual0 == var_v1;
19408 find mustInstanceOfRegion_class(problem,interpretation,var_r);
19409 find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1);
19410 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
19411 var_virtual1 == var_v2;
19412}
19413private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(
19414 problem:LogicProblem, interpretation:PartialInterpretation,
19415 var_s, var_v1, var_v2)
19416{
19417 find interpretation(problem,interpretation);
19418 find mayInstanceOfSynchronization_class(problem,interpretation,var_s);
19419 find mayInstanceOfVertex_class(problem,interpretation,var_v1);
19420 find mayInstanceOfVertex_class(problem,interpretation,var_v2);
19421 // s is exported
19422 // v1 is exported
19423 // v2 is exported
19424 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_v1,var_s);
19425 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_v2,var_s);
19426 var_t1 != var_t2;
19427 find mayInstanceOfRegion_class(problem,interpretation,var_r);
19428 find mayInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0);
19429 find mayInstanceOfVertex_class(problem,interpretation,var_virtual0);
19430 find mayEquivalent(problem, interpretation, var_virtual0, var_v1);
19431 find mayInstanceOfRegion_class(problem,interpretation,var_r);
19432 find mayInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1);
19433 find mayInstanceOfVertex_class(problem,interpretation,var_virtual1);
19434 find mayEquivalent(problem, interpretation, var_virtual1, var_v2);
19435}or{
19436 find interpretation(problem,interpretation);
19437 find mayInstanceOfSynchronization_class(problem,interpretation,var_s);
19438 find mayInstanceOfVertex_class(problem,interpretation,var_v1);
19439 find mayInstanceOfVertex_class(problem,interpretation,var_v2);
19440 // s is exported
19441 // v1 is exported
19442 // v2 is exported
19443 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_s,var_v1);
19444 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_s,var_v2);
19445 var_t1 != var_t2;
19446 find mayInstanceOfRegion_class(problem,interpretation,var_r);
19447 find mayInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0);
19448 find mayInstanceOfVertex_class(problem,interpretation,var_virtual0);
19449 find mayEquivalent(problem, interpretation, var_virtual0, var_v1);
19450 find mayInstanceOfRegion_class(problem,interpretation,var_r);
19451 find mayInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1);
19452 find mayInstanceOfVertex_class(problem,interpretation,var_virtual1);
19453 find mayEquivalent(problem, interpretation, var_virtual1, var_v2);
19454}
19455private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(
19456 problem:LogicProblem, interpretation:PartialInterpretation,
19457 var_s, var_v1, var_v2)
19458{
19459 find interpretation(problem,interpretation);
19460 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
19461 find mustInstanceOfVertex_class(problem,interpretation,var_v1);
19462 find mustInstanceOfVertex_class(problem,interpretation,var_v2);
19463 // s is exported
19464 // v1 is exported
19465 // v2 is exported
19466 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_v1,var_s);
19467 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_v2,var_s);
19468 var_t1 != var_t2;
19469 find mustInstanceOfRegion_class(problem,interpretation,var_r);
19470 find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0);
19471 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
19472 var_virtual0 == var_v1;
19473 find mustInstanceOfRegion_class(problem,interpretation,var_r);
19474 find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1);
19475 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
19476 var_virtual1 == var_v2;
19477}or{
19478 find interpretation(problem,interpretation);
19479 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
19480 find mustInstanceOfVertex_class(problem,interpretation,var_v1);
19481 find mustInstanceOfVertex_class(problem,interpretation,var_v2);
19482 // s is exported
19483 // v1 is exported
19484 // v2 is exported
19485 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t1,var_s,var_v1);
19486 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,var_t2,var_s,var_v2);
19487 var_t1 != var_t2;
19488 find mustInstanceOfRegion_class(problem,interpretation,var_r);
19489 find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual0);
19490 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
19491 var_virtual0 == var_v1;
19492 find mustInstanceOfRegion_class(problem,interpretation,var_r);
19493 find mustInRelationvertices_reference_Region(problem,interpretation,var_r,var_virtual1);
19494 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
19495 var_virtual1 == var_v2;
19496}
19497// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries notSynchronizingStates
19498private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(
19499 problem:LogicProblem, interpretation:PartialInterpretation,
19500 var_s)
19501{
19502 find interpretation(problem,interpretation);
19503 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
19504 // s is exported
19505 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition(problem,interpretation,var_s);
19506 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition(problem,interpretation,var_s);
19507}
19508private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(
19509 problem:LogicProblem, interpretation:PartialInterpretation,
19510 var_s)
19511{
19512 find interpretation(problem,interpretation);
19513 find mayInstanceOfSynchronization_class(problem,interpretation,var_s);
19514 // s is exported
19515 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition(problem,interpretation,var_s);
19516 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition(problem,interpretation,var_s);
19517}
19518private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(
19519 problem:LogicProblem, interpretation:PartialInterpretation,
19520 var_s)
19521{
19522 find interpretation(problem,interpretation);
19523 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
19524 // s is exported
19525 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition(problem,interpretation,var_s);
19526 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition(problem,interpretation,var_s);
19527}
19528// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries hasMultipleOutgoingTrainsition
19529private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition(
19530 problem:LogicProblem, interpretation:PartialInterpretation,
19531 var_v)
19532{
19533 find interpretation(problem,interpretation);
19534 find mustInstanceOfSynchronization_class(problem,interpretation,var_v);
19535 // v is exported
19536 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_trg1);
19537 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v,var_trg2);
19538 neg find mayEquivalent(problem, interpretation, var_trg1, var_trg2);
19539}
19540private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition(
19541 problem:LogicProblem, interpretation:PartialInterpretation,
19542 var_v)
19543{
19544 find interpretation(problem,interpretation);
19545 find mayInstanceOfSynchronization_class(problem,interpretation,var_v);
19546 // v is exported
19547 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_trg1);
19548 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v,var_trg2);
19549 var_trg1 != var_trg2;
19550}
19551private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleOutgoingTrainsition(
19552 problem:LogicProblem, interpretation:PartialInterpretation,
19553 var_v)
19554{
19555 find interpretation(problem,interpretation);
19556 find mustInstanceOfSynchronization_class(problem,interpretation,var_v);
19557 // v is exported
19558 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_trg1);
19559 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v,var_trg2);
19560 var_trg1 != var_trg2;
19561}
19562// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries hasMultipleIncomingTrainsition
19563private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition(
19564 problem:LogicProblem, interpretation:PartialInterpretation,
19565 var_v)
19566{
19567 find interpretation(problem,interpretation);
19568 find mustInstanceOfSynchronization_class(problem,interpretation,var_v);
19569 // v is exported
19570 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_src1,var_v);
19571 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_src2,var_v);
19572 neg find mayEquivalent(problem, interpretation, var_src1, var_src2);
19573}
19574private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition(
19575 problem:LogicProblem, interpretation:PartialInterpretation,
19576 var_v)
19577{
19578 find interpretation(problem,interpretation);
19579 find mayInstanceOfSynchronization_class(problem,interpretation,var_v);
19580 // v is exported
19581 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_src1,var_v);
19582 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_src2,var_v);
19583 var_src1 != var_src2;
19584}
19585private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleIncomingTrainsition(
19586 problem:LogicProblem, interpretation:PartialInterpretation,
19587 var_v)
19588{
19589 find interpretation(problem,interpretation);
19590 find mustInstanceOfSynchronization_class(problem,interpretation,var_v);
19591 // v is exported
19592 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_src1,var_v);
19593 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_src2,var_v);
19594 var_src1 != var_src2;
19595}
19596// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries SynchronizedRegionsAreNotSiblings
19597private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(
19598 problem:LogicProblem, interpretation:PartialInterpretation,
19599 var_s, var_v1, var_v2)
19600{
19601 find interpretation(problem,interpretation);
19602 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
19603 find mustInstanceOfVertex_class(problem,interpretation,var_v1);
19604 find mustInstanceOfVertex_class(problem,interpretation,var_v2);
19605 // s is exported
19606 // v1 is exported
19607 // v2 is exported
19608 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v1,var_s);
19609 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v2,var_s);
19610 find mustInstanceOfCompositeElement_class(problem,interpretation,var_r1);
19611 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0);
19612 find mustInstanceOfRegion_class(problem,interpretation,var_virtual0);
19613 find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1);
19614 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
19615 var_virtual1 == var_v1;
19616 find mustInstanceOfCompositeElement_class(problem,interpretation,var_r2);
19617 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2);
19618 find mustInstanceOfRegion_class(problem,interpretation,var_virtual2);
19619 find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3);
19620 find mustInstanceOfVertex_class(problem,interpretation,var_virtual3);
19621 var_virtual3 == var_v2;
19622 neg find mayEquivalent(problem, interpretation, var_r1, var_r2);
19623}or{
19624 find interpretation(problem,interpretation);
19625 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
19626 find mustInstanceOfVertex_class(problem,interpretation,var_v1);
19627 find mustInstanceOfVertex_class(problem,interpretation,var_v2);
19628 // s is exported
19629 // v1 is exported
19630 // v2 is exported
19631 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v1);
19632 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_s,var_v2);
19633 find mustInstanceOfCompositeElement_class(problem,interpretation,var_r1);
19634 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0);
19635 find mustInstanceOfRegion_class(problem,interpretation,var_virtual0);
19636 find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1);
19637 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
19638 var_virtual1 == var_v1;
19639 find mustInstanceOfCompositeElement_class(problem,interpretation,var_r2);
19640 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2);
19641 find mustInstanceOfRegion_class(problem,interpretation,var_virtual2);
19642 find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3);
19643 find mustInstanceOfVertex_class(problem,interpretation,var_virtual3);
19644 var_virtual3 == var_v2;
19645 neg find mayEquivalent(problem, interpretation, var_r1, var_r2);
19646}
19647private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(
19648 problem:LogicProblem, interpretation:PartialInterpretation,
19649 var_s, var_v1, var_v2)
19650{
19651 find interpretation(problem,interpretation);
19652 find mayInstanceOfSynchronization_class(problem,interpretation,var_s);
19653 find mayInstanceOfVertex_class(problem,interpretation,var_v1);
19654 find mayInstanceOfVertex_class(problem,interpretation,var_v2);
19655 // s is exported
19656 // v1 is exported
19657 // v2 is exported
19658 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v1,var_s);
19659 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v2,var_s);
19660 find mayInstanceOfCompositeElement_class(problem,interpretation,var_r1);
19661 find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0);
19662 find mayInstanceOfRegion_class(problem,interpretation,var_virtual0);
19663 find mayInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1);
19664 find mayInstanceOfVertex_class(problem,interpretation,var_virtual1);
19665 find mayEquivalent(problem, interpretation, var_virtual1, var_v1);
19666 find mayInstanceOfCompositeElement_class(problem,interpretation,var_r2);
19667 find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2);
19668 find mayInstanceOfRegion_class(problem,interpretation,var_virtual2);
19669 find mayInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3);
19670 find mayInstanceOfVertex_class(problem,interpretation,var_virtual3);
19671 find mayEquivalent(problem, interpretation, var_virtual3, var_v2);
19672 var_r1 != var_r2;
19673}or{
19674 find interpretation(problem,interpretation);
19675 find mayInstanceOfSynchronization_class(problem,interpretation,var_s);
19676 find mayInstanceOfVertex_class(problem,interpretation,var_v1);
19677 find mayInstanceOfVertex_class(problem,interpretation,var_v2);
19678 // s is exported
19679 // v1 is exported
19680 // v2 is exported
19681 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v1);
19682 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_s,var_v2);
19683 find mayInstanceOfCompositeElement_class(problem,interpretation,var_r1);
19684 find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0);
19685 find mayInstanceOfRegion_class(problem,interpretation,var_virtual0);
19686 find mayInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1);
19687 find mayInstanceOfVertex_class(problem,interpretation,var_virtual1);
19688 find mayEquivalent(problem, interpretation, var_virtual1, var_v1);
19689 find mayInstanceOfCompositeElement_class(problem,interpretation,var_r2);
19690 find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2);
19691 find mayInstanceOfRegion_class(problem,interpretation,var_virtual2);
19692 find mayInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3);
19693 find mayInstanceOfVertex_class(problem,interpretation,var_virtual3);
19694 find mayEquivalent(problem, interpretation, var_virtual3, var_v2);
19695 var_r1 != var_r2;
19696}
19697private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(
19698 problem:LogicProblem, interpretation:PartialInterpretation,
19699 var_s, var_v1, var_v2)
19700{
19701 find interpretation(problem,interpretation);
19702 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
19703 find mustInstanceOfVertex_class(problem,interpretation,var_v1);
19704 find mustInstanceOfVertex_class(problem,interpretation,var_v2);
19705 // s is exported
19706 // v1 is exported
19707 // v2 is exported
19708 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v1,var_s);
19709 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_v2,var_s);
19710 find mustInstanceOfCompositeElement_class(problem,interpretation,var_r1);
19711 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0);
19712 find mustInstanceOfRegion_class(problem,interpretation,var_virtual0);
19713 find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1);
19714 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
19715 var_virtual1 == var_v1;
19716 find mustInstanceOfCompositeElement_class(problem,interpretation,var_r2);
19717 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2);
19718 find mustInstanceOfRegion_class(problem,interpretation,var_virtual2);
19719 find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3);
19720 find mustInstanceOfVertex_class(problem,interpretation,var_virtual3);
19721 var_virtual3 == var_v2;
19722 var_r1 != var_r2;
19723}or{
19724 find interpretation(problem,interpretation);
19725 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
19726 find mustInstanceOfVertex_class(problem,interpretation,var_v1);
19727 find mustInstanceOfVertex_class(problem,interpretation,var_v2);
19728 // s is exported
19729 // v1 is exported
19730 // v2 is exported
19731 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v1);
19732 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__1,var_s,var_v2);
19733 find mustInstanceOfCompositeElement_class(problem,interpretation,var_r1);
19734 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r1,var_virtual0);
19735 find mustInstanceOfRegion_class(problem,interpretation,var_virtual0);
19736 find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1);
19737 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
19738 var_virtual1 == var_v1;
19739 find mustInstanceOfCompositeElement_class(problem,interpretation,var_r2);
19740 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_r2,var_virtual2);
19741 find mustInstanceOfRegion_class(problem,interpretation,var_virtual2);
19742 find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual2,var_virtual3);
19743 find mustInstanceOfVertex_class(problem,interpretation,var_virtual3);
19744 var_virtual3 == var_v2;
19745 var_r1 != var_r2;
19746}
19747// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries child
19748private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(
19749 problem:LogicProblem, interpretation:PartialInterpretation,
19750 var_parent, var_child)
19751{
19752 find interpretation(problem,interpretation);
19753 find mustInstanceOfCompositeElement_class(problem,interpretation,var_parent);
19754 find mustInstanceOfVertex_class(problem,interpretation,var_child);
19755 // parent is exported
19756 // child is exported
19757 find mustInstanceOfCompositeElement_class(problem,interpretation,var_parent);
19758 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_parent,var_virtual0);
19759 find mustInstanceOfRegion_class(problem,interpretation,var_virtual0);
19760 find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1);
19761 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
19762 var_virtual1 == var_child;
19763}
19764private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(
19765 problem:LogicProblem, interpretation:PartialInterpretation,
19766 var_parent, var_child)
19767{
19768 find interpretation(problem,interpretation);
19769 find mayInstanceOfCompositeElement_class(problem,interpretation,var_parent);
19770 find mayInstanceOfVertex_class(problem,interpretation,var_child);
19771 // parent is exported
19772 // child is exported
19773 find mayInstanceOfCompositeElement_class(problem,interpretation,var_parent);
19774 find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_parent,var_virtual0);
19775 find mayInstanceOfRegion_class(problem,interpretation,var_virtual0);
19776 find mayInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1);
19777 find mayInstanceOfVertex_class(problem,interpretation,var_virtual1);
19778 find mayEquivalent(problem, interpretation, var_virtual1, var_child);
19779}
19780private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(
19781 problem:LogicProblem, interpretation:PartialInterpretation,
19782 var_parent, var_child)
19783{
19784 find interpretation(problem,interpretation);
19785 find mustInstanceOfCompositeElement_class(problem,interpretation,var_parent);
19786 find mustInstanceOfVertex_class(problem,interpretation,var_child);
19787 // parent is exported
19788 // child is exported
19789 find mustInstanceOfCompositeElement_class(problem,interpretation,var_parent);
19790 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_parent,var_virtual0);
19791 find mustInstanceOfRegion_class(problem,interpretation,var_virtual0);
19792 find mustInRelationvertices_reference_Region(problem,interpretation,var_virtual0,var_virtual1);
19793 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
19794 var_virtual1 == var_child;
19795}
19796// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries SynchronizedRegionDoesNotHaveMultipleRegions
19797private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(
19798 problem:LogicProblem, interpretation:PartialInterpretation,
19799 var_s, var_v)
19800{
19801 find interpretation(problem,interpretation);
19802 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
19803 find mustInstanceOfVertex_class(problem,interpretation,var_v);
19804 // s is exported
19805 // v is exported
19806 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_s);
19807 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v);
19808 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c);
19809}or{
19810 find interpretation(problem,interpretation);
19811 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
19812 find mustInstanceOfVertex_class(problem,interpretation,var_v);
19813 // s is exported
19814 // v is exported
19815 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v);
19816 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v);
19817 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c);
19818}
19819private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(
19820 problem:LogicProblem, interpretation:PartialInterpretation,
19821 var_s, var_v)
19822{
19823 find interpretation(problem,interpretation);
19824 find mayInstanceOfSynchronization_class(problem,interpretation,var_s);
19825 find mayInstanceOfVertex_class(problem,interpretation,var_v);
19826 // s is exported
19827 // v is exported
19828 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_s);
19829 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v);
19830 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c);
19831}or{
19832 find interpretation(problem,interpretation);
19833 find mayInstanceOfSynchronization_class(problem,interpretation,var_s);
19834 find mayInstanceOfVertex_class(problem,interpretation,var_v);
19835 // s is exported
19836 // v is exported
19837 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v);
19838 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v);
19839 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c);
19840}
19841private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(
19842 problem:LogicProblem, interpretation:PartialInterpretation,
19843 var_s, var_v)
19844{
19845 find interpretation(problem,interpretation);
19846 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
19847 find mustInstanceOfVertex_class(problem,interpretation,var_v);
19848 // s is exported
19849 // v is exported
19850 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_v,var_s);
19851 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v);
19852 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c);
19853}or{
19854 find interpretation(problem,interpretation);
19855 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
19856 find mustInstanceOfVertex_class(problem,interpretation,var_v);
19857 // s is exported
19858 // v is exported
19859 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_transition(problem,interpretation,_var__0,var_s,var_v);
19860 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_child(problem,interpretation,var_c,var_v);
19861 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(problem,interpretation,var_c);
19862}
19863// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries hasMultipleRegions
19864private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(
19865 problem:LogicProblem, interpretation:PartialInterpretation,
19866 var_composite)
19867{
19868 find interpretation(problem,interpretation);
19869 find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite);
19870 // composite is exported
19871 find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite);
19872 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual0);
19873 find mustInstanceOfRegion_class(problem,interpretation,var_virtual0);
19874 var_virtual0 == var_region1;
19875 find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite);
19876 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual1);
19877 find mustInstanceOfRegion_class(problem,interpretation,var_virtual1);
19878 var_virtual1 == var_region2;
19879 neg find mayEquivalent(problem, interpretation, var_region1, var_region2);
19880}
19881private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(
19882 problem:LogicProblem, interpretation:PartialInterpretation,
19883 var_composite)
19884{
19885 find interpretation(problem,interpretation);
19886 find mayInstanceOfCompositeElement_class(problem,interpretation,var_composite);
19887 // composite is exported
19888 find mayInstanceOfCompositeElement_class(problem,interpretation,var_composite);
19889 find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual0);
19890 find mayInstanceOfRegion_class(problem,interpretation,var_virtual0);
19891 find mayEquivalent(problem, interpretation, var_virtual0, var_region1);
19892 find mayInstanceOfCompositeElement_class(problem,interpretation,var_composite);
19893 find mayInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual1);
19894 find mayInstanceOfRegion_class(problem,interpretation,var_virtual1);
19895 find mayEquivalent(problem, interpretation, var_virtual1, var_region2);
19896 var_region1 != var_region2;
19897}
19898private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_hasMultipleRegions(
19899 problem:LogicProblem, interpretation:PartialInterpretation,
19900 var_composite)
19901{
19902 find interpretation(problem,interpretation);
19903 find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite);
19904 // composite is exported
19905 find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite);
19906 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual0);
19907 find mustInstanceOfRegion_class(problem,interpretation,var_virtual0);
19908 var_virtual0 == var_region1;
19909 find mustInstanceOfCompositeElement_class(problem,interpretation,var_composite);
19910 find mustInRelationregions_reference_CompositeElement(problem,interpretation,var_composite,var_virtual1);
19911 find mustInstanceOfRegion_class(problem,interpretation,var_virtual1);
19912 var_virtual1 == var_region2;
19913 var_region1 != var_region2;
19914}
19915// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries synchThree
19916private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(
19917 problem:LogicProblem, interpretation:PartialInterpretation,
19918 var_s)
19919{
19920 find interpretation(problem,interpretation);
19921 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
19922 // s is exported
19923 find mustInstanceOfTransition_class(problem,interpretation,var_t1);
19924 find mustInRelationtarget_reference_Transition(problem,interpretation,var_t1,var_virtual0);
19925 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
19926 var_virtual0 == var_s;
19927 find mustInstanceOfTransition_class(problem,interpretation,var_t2);
19928 find mustInRelationtarget_reference_Transition(problem,interpretation,var_t2,var_virtual1);
19929 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
19930 var_virtual1 == var_s;
19931 find mustInstanceOfTransition_class(problem,interpretation,var_t3);
19932 find mustInRelationtarget_reference_Transition(problem,interpretation,var_t3,var_virtual2);
19933 find mustInstanceOfVertex_class(problem,interpretation,var_virtual2);
19934 var_virtual2 == var_s;
19935 neg find mayEquivalent(problem, interpretation, var_t1, var_t2);
19936 neg find mayEquivalent(problem, interpretation, var_t2, var_t3);
19937 neg find mayEquivalent(problem, interpretation, var_t1, var_t3);
19938}or{
19939 find interpretation(problem,interpretation);
19940 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
19941 // s is exported
19942 find mustInstanceOfTransition_class(problem,interpretation,var_t1);
19943 find mustInRelationsource_reference_Transition(problem,interpretation,var_t1,var_virtual0);
19944 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
19945 var_virtual0 == var_s;
19946 find mustInstanceOfTransition_class(problem,interpretation,var_t2);
19947 find mustInRelationsource_reference_Transition(problem,interpretation,var_t2,var_virtual1);
19948 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
19949 var_virtual1 == var_s;
19950 find mustInstanceOfTransition_class(problem,interpretation,var_t3);
19951 find mustInRelationsource_reference_Transition(problem,interpretation,var_t3,var_virtual2);
19952 find mustInstanceOfVertex_class(problem,interpretation,var_virtual2);
19953 var_virtual2 == var_s;
19954 neg find mayEquivalent(problem, interpretation, var_t1, var_t2);
19955 neg find mayEquivalent(problem, interpretation, var_t2, var_t3);
19956 neg find mayEquivalent(problem, interpretation, var_t1, var_t3);
19957}
19958private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(
19959 problem:LogicProblem, interpretation:PartialInterpretation,
19960 var_s)
19961{
19962 find interpretation(problem,interpretation);
19963 find mayInstanceOfSynchronization_class(problem,interpretation,var_s);
19964 // s is exported
19965 find mayInstanceOfTransition_class(problem,interpretation,var_t1);
19966 find mayInRelationtarget_reference_Transition(problem,interpretation,var_t1,var_virtual0);
19967 find mayInstanceOfVertex_class(problem,interpretation,var_virtual0);
19968 find mayEquivalent(problem, interpretation, var_virtual0, var_s);
19969 find mayInstanceOfTransition_class(problem,interpretation,var_t2);
19970 find mayInRelationtarget_reference_Transition(problem,interpretation,var_t2,var_virtual1);
19971 find mayInstanceOfVertex_class(problem,interpretation,var_virtual1);
19972 find mayEquivalent(problem, interpretation, var_virtual1, var_s);
19973 find mayInstanceOfTransition_class(problem,interpretation,var_t3);
19974 find mayInRelationtarget_reference_Transition(problem,interpretation,var_t3,var_virtual2);
19975 find mayInstanceOfVertex_class(problem,interpretation,var_virtual2);
19976 find mayEquivalent(problem, interpretation, var_virtual2, var_s);
19977 var_t1 != var_t2;
19978 var_t2 != var_t3;
19979 var_t1 != var_t3;
19980}or{
19981 find interpretation(problem,interpretation);
19982 find mayInstanceOfSynchronization_class(problem,interpretation,var_s);
19983 // s is exported
19984 find mayInstanceOfTransition_class(problem,interpretation,var_t1);
19985 find mayInRelationsource_reference_Transition(problem,interpretation,var_t1,var_virtual0);
19986 find mayInstanceOfVertex_class(problem,interpretation,var_virtual0);
19987 find mayEquivalent(problem, interpretation, var_virtual0, var_s);
19988 find mayInstanceOfTransition_class(problem,interpretation,var_t2);
19989 find mayInRelationsource_reference_Transition(problem,interpretation,var_t2,var_virtual1);
19990 find mayInstanceOfVertex_class(problem,interpretation,var_virtual1);
19991 find mayEquivalent(problem, interpretation, var_virtual1, var_s);
19992 find mayInstanceOfTransition_class(problem,interpretation,var_t3);
19993 find mayInRelationsource_reference_Transition(problem,interpretation,var_t3,var_virtual2);
19994 find mayInstanceOfVertex_class(problem,interpretation,var_virtual2);
19995 find mayEquivalent(problem, interpretation, var_virtual2, var_s);
19996 var_t1 != var_t2;
19997 var_t2 != var_t3;
19998 var_t1 != var_t3;
19999}
20000private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(
20001 problem:LogicProblem, interpretation:PartialInterpretation,
20002 var_s)
20003{
20004 find interpretation(problem,interpretation);
20005 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
20006 // s is exported
20007 find mustInstanceOfTransition_class(problem,interpretation,var_t1);
20008 find mustInRelationtarget_reference_Transition(problem,interpretation,var_t1,var_virtual0);
20009 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
20010 var_virtual0 == var_s;
20011 find mustInstanceOfTransition_class(problem,interpretation,var_t2);
20012 find mustInRelationtarget_reference_Transition(problem,interpretation,var_t2,var_virtual1);
20013 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
20014 var_virtual1 == var_s;
20015 find mustInstanceOfTransition_class(problem,interpretation,var_t3);
20016 find mustInRelationtarget_reference_Transition(problem,interpretation,var_t3,var_virtual2);
20017 find mustInstanceOfVertex_class(problem,interpretation,var_virtual2);
20018 var_virtual2 == var_s;
20019 var_t1 != var_t2;
20020 var_t2 != var_t3;
20021 var_t1 != var_t3;
20022}or{
20023 find interpretation(problem,interpretation);
20024 find mustInstanceOfSynchronization_class(problem,interpretation,var_s);
20025 // s is exported
20026 find mustInstanceOfTransition_class(problem,interpretation,var_t1);
20027 find mustInRelationsource_reference_Transition(problem,interpretation,var_t1,var_virtual0);
20028 find mustInstanceOfVertex_class(problem,interpretation,var_virtual0);
20029 var_virtual0 == var_s;
20030 find mustInstanceOfTransition_class(problem,interpretation,var_t2);
20031 find mustInRelationsource_reference_Transition(problem,interpretation,var_t2,var_virtual1);
20032 find mustInstanceOfVertex_class(problem,interpretation,var_virtual1);
20033 var_virtual1 == var_s;
20034 find mustInstanceOfTransition_class(problem,interpretation,var_t3);
20035 find mustInRelationsource_reference_Transition(problem,interpretation,var_t3,var_virtual2);
20036 find mustInstanceOfVertex_class(problem,interpretation,var_virtual2);
20037 var_virtual2 == var_s;
20038 var_t1 != var_t2;
20039 var_t2 != var_t3;
20040 var_t1 != var_t3;
20041}
20042// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test yakindu queries twoSynch
20043private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(
20044 problem:LogicProblem, interpretation:PartialInterpretation,
20045 var_s1, var_s2)
20046{
20047 find interpretation(problem,interpretation);
20048 find mustInstanceOfSynchronization_class(problem,interpretation,var_s1);
20049 find mustInstanceOfSynchronization_class(problem,interpretation,var_s2);
20050 // s1 is exported
20051 // s2 is exported
20052 find mustInstanceOfSynchronization_class(problem,interpretation,var_s1);
20053 find mustInstanceOfSynchronization_class(problem,interpretation,var_s2);
20054 neg find mayEquivalent(problem, interpretation, var_s1, var_s2);
20055}
20056private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(
20057 problem:LogicProblem, interpretation:PartialInterpretation,
20058 var_s1, var_s2)
20059{
20060 find interpretation(problem,interpretation);
20061 find mayInstanceOfSynchronization_class(problem,interpretation,var_s1);
20062 find mayInstanceOfSynchronization_class(problem,interpretation,var_s2);
20063 // s1 is exported
20064 // s2 is exported
20065 find mayInstanceOfSynchronization_class(problem,interpretation,var_s1);
20066 find mayInstanceOfSynchronization_class(problem,interpretation,var_s2);
20067 var_s1 != var_s2;
20068}
20069private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(
20070 problem:LogicProblem, interpretation:PartialInterpretation,
20071 var_s1, var_s2)
20072{
20073 find interpretation(problem,interpretation);
20074 find mustInstanceOfSynchronization_class(problem,interpretation,var_s1);
20075 find mustInstanceOfSynchronization_class(problem,interpretation,var_s2);
20076 // s1 is exported
20077 // s2 is exported
20078 find mustInstanceOfSynchronization_class(problem,interpretation,var_s1);
20079 find mustInstanceOfSynchronization_class(problem,interpretation,var_s2);
20080 var_s1 != var_s2;
20081}
20082
20083//////////
20084// 1.4 Containment Indexer
20085//////////
20086private pattern mustContains2(source: DefinedElement, target: DefinedElement) {
20087 find mustContains4(_,_,source,target);
20088}
20089
20090private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation,
20091 source: DefinedElement, target: DefinedElement)
20092 { find mustInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,source,target); }or
20093
20094 { find mustInRelationvertices_reference_Region(problem,interpretation,source,target); }or
20095
20096 { find mustInRelationregions_reference_CompositeElement(problem,interpretation,source,target); }
20097
20098private pattern mustTransitiveContains(source,target) {
20099 find mustContains2+(source,target);
20100}
20101
20102//////////
20103// 2. Invalidation Indexers
20104//////////
20105// 2.1 Invalidated by WF Queries
20106//////////
20107pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(problem:LogicProblem, interpretation:PartialInterpretation,
20108 var_r1)
20109{
20110 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(problem,interpretation,var_r1);
20111}
20112pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(problem:LogicProblem, interpretation:PartialInterpretation,
20113 var_r)
20114{
20115 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(problem,interpretation,var_r);
20116}
20117pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(problem:LogicProblem, interpretation:PartialInterpretation,
20118 var_t, var_e)
20119{
20120 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(problem,interpretation,var_t,var_e);
20121}
20122pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(problem:LogicProblem, interpretation:PartialInterpretation,
20123 var_e)
20124{
20125 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(problem,interpretation,var_e);
20126}
20127pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(problem:LogicProblem, interpretation:PartialInterpretation,
20128 var_e, var_t1, var_t2)
20129{
20130 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(problem,interpretation,var_e,var_t1,var_t2);
20131}
20132pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(problem:LogicProblem, interpretation:PartialInterpretation,
20133 var_t, var_e)
20134{
20135 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(problem,interpretation,var_t,var_e);
20136}
20137pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(problem:LogicProblem, interpretation:PartialInterpretation,
20138 var_t, var_f)
20139{
20140 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(problem,interpretation,var_t,var_f);
20141}
20142pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(problem:LogicProblem, interpretation:PartialInterpretation,
20143 var_region)
20144{
20145 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(problem,interpretation,var_region);
20146}
20147pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(problem:LogicProblem, interpretation:PartialInterpretation,
20148 var_c)
20149{
20150 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(problem,interpretation,var_c);
20151}
20152pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(problem:LogicProblem, interpretation:PartialInterpretation,
20153 var_c)
20154{
20155 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(problem,interpretation,var_c);
20156}
20157pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(problem:LogicProblem, interpretation:PartialInterpretation,
20158 var_s)
20159{
20160 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(problem,interpretation,var_s);
20161}
20162pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(problem:LogicProblem, interpretation:PartialInterpretation,
20163 var_s)
20164{
20165 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(problem,interpretation,var_s);
20166}
20167pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(problem:LogicProblem, interpretation:PartialInterpretation,
20168 var_s, var_v1, var_v2)
20169{
20170 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(problem,interpretation,var_s,var_v1,var_v2);
20171}
20172pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(problem:LogicProblem, interpretation:PartialInterpretation,
20173 var_s)
20174{
20175 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(problem,interpretation,var_s);
20176}
20177pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(problem:LogicProblem, interpretation:PartialInterpretation,
20178 var_s, var_v1, var_v2)
20179{
20180 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(problem,interpretation,var_s,var_v1,var_v2);
20181}
20182pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(problem:LogicProblem, interpretation:PartialInterpretation,
20183 var_s, var_v)
20184{
20185 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(problem,interpretation,var_s,var_v);
20186}
20187pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(problem:LogicProblem, interpretation:PartialInterpretation,
20188 var_s)
20189{
20190 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(problem,interpretation,var_s);
20191}
20192pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(problem:LogicProblem, interpretation:PartialInterpretation,
20193 var_s1, var_s2)
20194{
20195 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(problem,interpretation,var_s1,var_s2);
20196}
20197
20198//////////
20199// 3. Unfinishedness Indexers
20200//////////
20201// 3.1 Unfinishedness Measured by Multiplicity
20202//////////
20203pattern unfinishedLowerMultiplicity_target_reference_Transition(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) {
20204 find interpretation(problem,interpretation);
20205 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
20206 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"target reference Transition");
20207 find mustInstanceOfTransition_class(problem,interpretation,object);
20208 numberOfExistingReferences == count find mustInRelationtarget_reference_Transition(problem,interpretation,object,_);
20209 check(numberOfExistingReferences < 1);
20210 missingMultiplicity == eval(1-numberOfExistingReferences);
20211}
20212
20213//////////
20214// 3.2 Unfinishedness Measured by WF Queries
20215//////////
20216pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(problem:LogicProblem, interpretation:PartialInterpretation,
20217 var_r1)
20218{
20219 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noEntryInRegion(problem,interpretation,var_r1);
20220}
20221pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(problem:LogicProblem, interpretation:PartialInterpretation,
20222 var_r)
20223{
20224 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleEntryInRegion(problem,interpretation,var_r);
20225}
20226pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(problem:LogicProblem, interpretation:PartialInterpretation,
20227 var_t, var_e)
20228{
20229 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_incomingToEntry(problem,interpretation,var_t,var_e);
20230}
20231pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(problem:LogicProblem, interpretation:PartialInterpretation,
20232 var_e)
20233{
20234 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noOutgoingTransitionFromEntry(problem,interpretation,var_e);
20235}
20236pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(problem:LogicProblem, interpretation:PartialInterpretation,
20237 var_e, var_t1, var_t2)
20238{
20239 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_multipleTransitionFromEntry(problem,interpretation,var_e,var_t1,var_t2);
20240}
20241pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(problem:LogicProblem, interpretation:PartialInterpretation,
20242 var_t, var_e)
20243{
20244 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromExit(problem,interpretation,var_t,var_e);
20245}
20246pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(problem:LogicProblem, interpretation:PartialInterpretation,
20247 var_t, var_f)
20248{
20249 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_outgoingFromFinal(problem,interpretation,var_t,var_f);
20250}
20251pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(problem:LogicProblem, interpretation:PartialInterpretation,
20252 var_region)
20253{
20254 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_noStateInRegion(problem,interpretation,var_region);
20255}
20256pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(problem:LogicProblem, interpretation:PartialInterpretation,
20257 var_c)
20258{
20259 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoOutgoing(problem,interpretation,var_c);
20260}
20261pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(problem:LogicProblem, interpretation:PartialInterpretation,
20262 var_c)
20263{
20264 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_choiceHasNoIncoming(problem,interpretation,var_c);
20265}
20266pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(problem:LogicProblem, interpretation:PartialInterpretation,
20267 var_s)
20268{
20269 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoOutgoing(problem,interpretation,var_s);
20270}
20271pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(problem:LogicProblem, interpretation:PartialInterpretation,
20272 var_s)
20273{
20274 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchHasNoIncoming(problem,interpretation,var_s);
20275}
20276pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(problem:LogicProblem, interpretation:PartialInterpretation,
20277 var_s, var_v1, var_v2)
20278{
20279 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedIncomingInSameRegion(problem,interpretation,var_s,var_v1,var_v2);
20280}
20281pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(problem:LogicProblem, interpretation:PartialInterpretation,
20282 var_s)
20283{
20284 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_notSynchronizingStates(problem,interpretation,var_s);
20285}
20286pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(problem:LogicProblem, interpretation:PartialInterpretation,
20287 var_s, var_v1, var_v2)
20288{
20289 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionsAreNotSiblings(problem,interpretation,var_s,var_v1,var_v2);
20290}
20291pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(problem:LogicProblem, interpretation:PartialInterpretation,
20292 var_s, var_v)
20293{
20294 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_SynchronizedRegionDoesNotHaveMultipleRegions(problem,interpretation,var_s,var_v);
20295}
20296pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(problem:LogicProblem, interpretation:PartialInterpretation,
20297 var_s)
20298{
20299 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_synchThree(problem,interpretation,var_s);
20300}
20301pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(problem:LogicProblem, interpretation:PartialInterpretation,
20302 var_s1, var_s2)
20303{
20304 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_yakindu_queries_twoSynch(problem,interpretation,var_s1,var_s2);
20305}
20306
20307//////////
20308// 4. Refinement Indexers
20309//////////
20310// 4.1 Object constructors
20311//////////
20312private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation)
20313{
20314 find interpretation(problem,interpretation);
20315 find mustInstanceOfPseudostate_class(problem,interpretation,root);
20316 find mustExist(problem, interpretation, root);
20317}or{
20318 find interpretation(problem,interpretation);
20319 find mustInstanceOfEntry_class(problem,interpretation,root);
20320 find mustExist(problem, interpretation, root);
20321}or{
20322 find interpretation(problem,interpretation);
20323 find mustInstanceOfTransition_class(problem,interpretation,root);
20324 find mustExist(problem, interpretation, root);
20325}or{
20326 find interpretation(problem,interpretation);
20327 find mustInstanceOfCompositeElement_class(problem,interpretation,root);
20328 find mustExist(problem, interpretation, root);
20329}or{
20330 find interpretation(problem,interpretation);
20331 find mustInstanceOfState_class(problem,interpretation,root);
20332 find mustExist(problem, interpretation, root);
20333}or{
20334 find interpretation(problem,interpretation);
20335 find mustInstanceOfChoice_class(problem,interpretation,root);
20336 find mustExist(problem, interpretation, root);
20337}or{
20338 find interpretation(problem,interpretation);
20339 find mustInstanceOfRegularState_class(problem,interpretation,root);
20340 find mustExist(problem, interpretation, root);
20341}or{
20342 find interpretation(problem,interpretation);
20343 find mustInstanceOfRegion_class(problem,interpretation,root);
20344 find mustExist(problem, interpretation, root);
20345}or{
20346 find interpretation(problem,interpretation);
20347 find mustInstanceOfVertex_class(problem,interpretation,root);
20348 find mustExist(problem, interpretation, root);
20349}or{
20350 find interpretation(problem,interpretation);
20351 find mustInstanceOfExit_class(problem,interpretation,root);
20352 find mustExist(problem, interpretation, root);
20353}or{
20354 find interpretation(problem,interpretation);
20355 find mustInstanceOfFinalState_class(problem,interpretation,root);
20356 find mustExist(problem, interpretation, root);
20357}or{
20358 find interpretation(problem,interpretation);
20359 find mustInstanceOfSynchronization_class(problem,interpretation,root);
20360 find mustExist(problem, interpretation, root);
20361}or{
20362 find interpretation(problem,interpretation);
20363 find mustInstanceOfStatechart_class(problem,interpretation,root);
20364 find mustExist(problem, interpretation, root);
20365}or{
20366 find interpretation(problem,interpretation);
20367 find mustInstanceOfStatechart_class_DefinedPart(problem,interpretation,root);
20368 find mustExist(problem, interpretation, root);
20369}or{
20370 find interpretation(problem,interpretation);
20371 find mustInstanceOfStatechart_class_UndefinedPart(problem,interpretation,root);
20372 find mustExist(problem, interpretation, root);
20373}or{
20374 find interpretation(problem,interpretation);
20375 find mustInstanceOfCompositeElement_class_DefinedPart(problem,interpretation,root);
20376 find mustExist(problem, interpretation, root);
20377}or{
20378 find interpretation(problem,interpretation);
20379 find mustInstanceOfCompositeElement_class_UndefinedPart(problem,interpretation,root);
20380 find mustExist(problem, interpretation, root);
20381}
20382pattern createObject_Choice_class_by_vertices_reference_Region(
20383 problem:LogicProblem, interpretation:PartialInterpretation,
20384 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
20385 container:DefinedElement)
20386{
20387 find interpretation(problem,interpretation);
20388 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
20389 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Choice class");
20390 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
20391 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region");
20392 find mustInstanceOfRegion_class(problem,interpretation,container);
20393 find mayInstanceOfChoice_class(problem,interpretation,newObject);
20394 find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject);
20395 find mustExist(problem, interpretation, container);
20396 neg find mustExist(problem, interpretation, newObject);
20397}
20398pattern createObject_Choice_class(
20399 problem:LogicProblem, interpretation:PartialInterpretation,
20400 typeInterpretation:PartialComplexTypeInterpretation)
20401{
20402 find interpretation(problem,interpretation);
20403 neg find hasElementInContainment(problem,interpretation);
20404 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
20405 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Choice class");
20406 find mayInstanceOfChoice_class(problem,interpretation,newObject);
20407 find mayExist(problem, interpretation, newObject);
20408 neg find mustExist(problem, interpretation, newObject);
20409}
20410pattern createObject_Statechart_class_UndefinedPart(
20411 problem:LogicProblem, interpretation:PartialInterpretation,
20412 typeInterpretation:PartialComplexTypeInterpretation)
20413{
20414 find interpretation(problem,interpretation);
20415 neg find hasElementInContainment(problem,interpretation);
20416 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
20417 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Statechart class UndefinedPart");
20418 find mayInstanceOfStatechart_class_UndefinedPart(problem,interpretation,newObject);
20419 find mayExist(problem, interpretation, newObject);
20420 neg find mustExist(problem, interpretation, newObject);
20421}
20422pattern createObject_FinalState_class_by_vertices_reference_Region(
20423 problem:LogicProblem, interpretation:PartialInterpretation,
20424 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
20425 container:DefinedElement)
20426{
20427 find interpretation(problem,interpretation);
20428 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
20429 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FinalState class");
20430 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
20431 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region");
20432 find mustInstanceOfRegion_class(problem,interpretation,container);
20433 find mayInstanceOfFinalState_class(problem,interpretation,newObject);
20434 find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject);
20435 find mustExist(problem, interpretation, container);
20436 neg find mustExist(problem, interpretation, newObject);
20437}
20438pattern createObject_FinalState_class(
20439 problem:LogicProblem, interpretation:PartialInterpretation,
20440 typeInterpretation:PartialComplexTypeInterpretation)
20441{
20442 find interpretation(problem,interpretation);
20443 neg find hasElementInContainment(problem,interpretation);
20444 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
20445 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FinalState class");
20446 find mayInstanceOfFinalState_class(problem,interpretation,newObject);
20447 find mayExist(problem, interpretation, newObject);
20448 neg find mustExist(problem, interpretation, newObject);
20449}
20450pattern createObject_Region_class_by_regions_reference_CompositeElement(
20451 problem:LogicProblem, interpretation:PartialInterpretation,
20452 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
20453 container:DefinedElement)
20454{
20455 find interpretation(problem,interpretation);
20456 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
20457 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Region class");
20458 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
20459 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"regions reference CompositeElement");
20460 find mustInstanceOfCompositeElement_class(problem,interpretation,container);
20461 find mayInstanceOfRegion_class(problem,interpretation,newObject);
20462 find mayInRelationregions_reference_CompositeElement(problem,interpretation,container,newObject);
20463 find mustExist(problem, interpretation, container);
20464 neg find mustExist(problem, interpretation, newObject);
20465}
20466pattern createObject_Region_class(
20467 problem:LogicProblem, interpretation:PartialInterpretation,
20468 typeInterpretation:PartialComplexTypeInterpretation)
20469{
20470 find interpretation(problem,interpretation);
20471 neg find hasElementInContainment(problem,interpretation);
20472 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
20473 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Region class");
20474 find mayInstanceOfRegion_class(problem,interpretation,newObject);
20475 find mayExist(problem, interpretation, newObject);
20476 neg find mustExist(problem, interpretation, newObject);
20477}
20478pattern createObject_Entry_class_by_vertices_reference_Region(
20479 problem:LogicProblem, interpretation:PartialInterpretation,
20480 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
20481 container:DefinedElement)
20482{
20483 find interpretation(problem,interpretation);
20484 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
20485 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Entry class");
20486 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
20487 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region");
20488 find mustInstanceOfRegion_class(problem,interpretation,container);
20489 find mayInstanceOfEntry_class(problem,interpretation,newObject);
20490 find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject);
20491 find mustExist(problem, interpretation, container);
20492 neg find mustExist(problem, interpretation, newObject);
20493}
20494pattern createObject_Entry_class(
20495 problem:LogicProblem, interpretation:PartialInterpretation,
20496 typeInterpretation:PartialComplexTypeInterpretation)
20497{
20498 find interpretation(problem,interpretation);
20499 neg find hasElementInContainment(problem,interpretation);
20500 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
20501 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Entry class");
20502 find mayInstanceOfEntry_class(problem,interpretation,newObject);
20503 find mayExist(problem, interpretation, newObject);
20504 neg find mustExist(problem, interpretation, newObject);
20505}
20506pattern createObject_Exit_class_by_vertices_reference_Region(
20507 problem:LogicProblem, interpretation:PartialInterpretation,
20508 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
20509 container:DefinedElement)
20510{
20511 find interpretation(problem,interpretation);
20512 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
20513 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Exit class");
20514 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
20515 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region");
20516 find mustInstanceOfRegion_class(problem,interpretation,container);
20517 find mayInstanceOfExit_class(problem,interpretation,newObject);
20518 find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject);
20519 find mustExist(problem, interpretation, container);
20520 neg find mustExist(problem, interpretation, newObject);
20521}
20522pattern createObject_Exit_class(
20523 problem:LogicProblem, interpretation:PartialInterpretation,
20524 typeInterpretation:PartialComplexTypeInterpretation)
20525{
20526 find interpretation(problem,interpretation);
20527 neg find hasElementInContainment(problem,interpretation);
20528 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
20529 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Exit class");
20530 find mayInstanceOfExit_class(problem,interpretation,newObject);
20531 find mayExist(problem, interpretation, newObject);
20532 neg find mustExist(problem, interpretation, newObject);
20533}
20534pattern createObject_State_class_by_vertices_reference_Region(
20535 problem:LogicProblem, interpretation:PartialInterpretation,
20536 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
20537 container:DefinedElement)
20538{
20539 find interpretation(problem,interpretation);
20540 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
20541 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"State class");
20542 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
20543 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region");
20544 find mustInstanceOfRegion_class(problem,interpretation,container);
20545 find mayInstanceOfState_class(problem,interpretation,newObject);
20546 find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject);
20547 find mustExist(problem, interpretation, container);
20548 neg find mustExist(problem, interpretation, newObject);
20549}
20550pattern createObject_State_class(
20551 problem:LogicProblem, interpretation:PartialInterpretation,
20552 typeInterpretation:PartialComplexTypeInterpretation)
20553{
20554 find interpretation(problem,interpretation);
20555 neg find hasElementInContainment(problem,interpretation);
20556 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
20557 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"State class");
20558 find mayInstanceOfState_class(problem,interpretation,newObject);
20559 find mayExist(problem, interpretation, newObject);
20560 neg find mustExist(problem, interpretation, newObject);
20561}
20562pattern createObject_Transition_class_by_outgoingTransitions_reference_Vertex_with_source_reference_Transition(
20563 problem:LogicProblem, interpretation:PartialInterpretation,
20564 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
20565 container:DefinedElement)
20566{
20567 find interpretation(problem,interpretation);
20568 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
20569 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Transition class");
20570 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
20571 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"outgoingTransitions reference Vertex");
20572 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
20573 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"source reference Transition");
20574 find mustInstanceOfVertex_class(problem,interpretation,container);
20575 find mayInstanceOfTransition_class(problem,interpretation,newObject);
20576 find mayInRelationoutgoingTransitions_reference_Vertex(problem,interpretation,container,newObject);
20577 find mustExist(problem, interpretation, container);
20578 neg find mustExist(problem, interpretation, newObject);
20579}
20580pattern createObject_Transition_class(
20581 problem:LogicProblem, interpretation:PartialInterpretation,
20582 typeInterpretation:PartialComplexTypeInterpretation)
20583{
20584 find interpretation(problem,interpretation);
20585 neg find hasElementInContainment(problem,interpretation);
20586 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
20587 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Transition class");
20588 find mayInstanceOfTransition_class(problem,interpretation,newObject);
20589 find mayExist(problem, interpretation, newObject);
20590 neg find mustExist(problem, interpretation, newObject);
20591}
20592pattern createObject_Synchronization_class_by_vertices_reference_Region(
20593 problem:LogicProblem, interpretation:PartialInterpretation,
20594 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
20595 container:DefinedElement)
20596{
20597 find interpretation(problem,interpretation);
20598 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
20599 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Synchronization class");
20600 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
20601 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"vertices reference Region");
20602 find mustInstanceOfRegion_class(problem,interpretation,container);
20603 find mayInstanceOfSynchronization_class(problem,interpretation,newObject);
20604 find mayInRelationvertices_reference_Region(problem,interpretation,container,newObject);
20605 find mustExist(problem, interpretation, container);
20606 neg find mustExist(problem, interpretation, newObject);
20607}
20608pattern createObject_Synchronization_class(
20609 problem:LogicProblem, interpretation:PartialInterpretation,
20610 typeInterpretation:PartialComplexTypeInterpretation)
20611{
20612 find interpretation(problem,interpretation);
20613 neg find hasElementInContainment(problem,interpretation);
20614 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
20615 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Synchronization class");
20616 find mayInstanceOfSynchronization_class(problem,interpretation,newObject);
20617 find mayExist(problem, interpretation, newObject);
20618 neg find mustExist(problem, interpretation, newObject);
20619}
20620
20621//////////
20622// 4.2 Type refinement
20623//////////
20624pattern refineTypeTo_Choice_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
20625 find interpretation(problem,interpretation);
20626 PartialInterpretation.newElements(interpretation,element);
20627 find mayInstanceOfChoice_class(problem,interpretation,element);
20628 neg find mustInstanceOfChoice_class(problem,interpretation,element);
20629 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
20630 neg find mustInstanceOfRegion_class(problem,interpretation,element);
20631 neg find mustInstanceOfEntry_class(problem,interpretation,element);
20632 neg find mustInstanceOfExit_class(problem,interpretation,element);
20633 neg find mustInstanceOfTransition_class(problem,interpretation,element);
20634 neg find mustInstanceOfSynchronization_class(problem,interpretation,element);
20635 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
20636}
20637pattern refineTypeTo_Statechart_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
20638 find interpretation(problem,interpretation);
20639 PartialInterpretation.newElements(interpretation,element);
20640 find mayInstanceOfStatechart_class_UndefinedPart(problem,interpretation,element);
20641 neg find mustInstanceOfStatechart_class_UndefinedPart(problem,interpretation,element);
20642 neg find mustInstanceOfRegion_class(problem,interpretation,element);
20643 neg find mustInstanceOfVertex_class(problem,interpretation,element);
20644 neg find mustInstanceOfTransition_class(problem,interpretation,element);
20645}
20646pattern refineTypeTo_FinalState_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
20647 find interpretation(problem,interpretation);
20648 PartialInterpretation.newElements(interpretation,element);
20649 find mayInstanceOfFinalState_class(problem,interpretation,element);
20650 neg find mustInstanceOfFinalState_class(problem,interpretation,element);
20651 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
20652 neg find mustInstanceOfRegion_class(problem,interpretation,element);
20653 neg find mustInstanceOfTransition_class(problem,interpretation,element);
20654 neg find mustInstanceOfPseudostate_class(problem,interpretation,element);
20655}
20656pattern refineTypeTo_Region_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
20657 find interpretation(problem,interpretation);
20658 PartialInterpretation.newElements(interpretation,element);
20659 find mayInstanceOfRegion_class(problem,interpretation,element);
20660 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
20661 neg find mustInstanceOfRegion_class(problem,interpretation,element);
20662 neg find mustInstanceOfVertex_class(problem,interpretation,element);
20663 neg find mustInstanceOfTransition_class(problem,interpretation,element);
20664}
20665pattern refineTypeTo_Entry_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
20666 find interpretation(problem,interpretation);
20667 PartialInterpretation.newElements(interpretation,element);
20668 find mayInstanceOfEntry_class(problem,interpretation,element);
20669 neg find mustInstanceOfChoice_class(problem,interpretation,element);
20670 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
20671 neg find mustInstanceOfRegion_class(problem,interpretation,element);
20672 neg find mustInstanceOfEntry_class(problem,interpretation,element);
20673 neg find mustInstanceOfExit_class(problem,interpretation,element);
20674 neg find mustInstanceOfTransition_class(problem,interpretation,element);
20675 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
20676 neg find mustInstanceOfSynchronization_class(problem,interpretation,element);
20677}
20678pattern refineTypeTo_Exit_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
20679 find interpretation(problem,interpretation);
20680 PartialInterpretation.newElements(interpretation,element);
20681 find mayInstanceOfExit_class(problem,interpretation,element);
20682 neg find mustInstanceOfChoice_class(problem,interpretation,element);
20683 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
20684 neg find mustInstanceOfRegion_class(problem,interpretation,element);
20685 neg find mustInstanceOfEntry_class(problem,interpretation,element);
20686 neg find mustInstanceOfExit_class(problem,interpretation,element);
20687 neg find mustInstanceOfTransition_class(problem,interpretation,element);
20688 neg find mustInstanceOfSynchronization_class(problem,interpretation,element);
20689 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
20690}
20691pattern refineTypeTo_State_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
20692 find interpretation(problem,interpretation);
20693 PartialInterpretation.newElements(interpretation,element);
20694 find mayInstanceOfState_class(problem,interpretation,element);
20695 neg find mustInstanceOfFinalState_class(problem,interpretation,element);
20696 neg find mustInstanceOfRegion_class(problem,interpretation,element);
20697 neg find mustInstanceOfTransition_class(problem,interpretation,element);
20698 neg find mustInstanceOfState_class(problem,interpretation,element);
20699 neg find mustInstanceOfStatechart_class(problem,interpretation,element);
20700 neg find mustInstanceOfPseudostate_class(problem,interpretation,element);
20701}
20702pattern refineTypeTo_Transition_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
20703 find interpretation(problem,interpretation);
20704 PartialInterpretation.newElements(interpretation,element);
20705 find mayInstanceOfTransition_class(problem,interpretation,element);
20706 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
20707 neg find mustInstanceOfRegion_class(problem,interpretation,element);
20708 neg find mustInstanceOfVertex_class(problem,interpretation,element);
20709 neg find mustInstanceOfTransition_class(problem,interpretation,element);
20710}
20711pattern refineTypeTo_Synchronization_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
20712 find interpretation(problem,interpretation);
20713 PartialInterpretation.newElements(interpretation,element);
20714 find mayInstanceOfSynchronization_class(problem,interpretation,element);
20715 neg find mustInstanceOfChoice_class(problem,interpretation,element);
20716 neg find mustInstanceOfCompositeElement_class(problem,interpretation,element);
20717 neg find mustInstanceOfRegion_class(problem,interpretation,element);
20718 neg find mustInstanceOfEntry_class(problem,interpretation,element);
20719 neg find mustInstanceOfExit_class(problem,interpretation,element);
20720 neg find mustInstanceOfTransition_class(problem,interpretation,element);
20721 neg find mustInstanceOfRegularState_class(problem,interpretation,element);
20722 neg find mustInstanceOfSynchronization_class(problem,interpretation,element);
20723}
20724
20725//////////
20726// 4.3 Relation refinement
20727//////////
20728pattern refineRelation_incomingTransitions_reference_Vertex_and_target_reference_Transition(
20729 problem:LogicProblem, interpretation:PartialInterpretation,
20730 relationIterpretation:PartialRelationInterpretation, oppositeInterpretation:PartialRelationInterpretation,
20731 from: DefinedElement, to: DefinedElement)
20732{
20733 find interpretation(problem,interpretation);
20734 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
20735 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"incomingTransitions reference Vertex");
20736 PartialInterpretation.partialrelationinterpretation(interpretation,oppositeInterpretation);
20737 PartialRelationInterpretation.interpretationOf.name(oppositeInterpretation,"target reference Transition");
20738 find mustExist(problem, interpretation, from);
20739 find mustExist(problem, interpretation, to);
20740 find mustInstanceOfVertex_class(problem,interpretation,from);
20741 find mustInstanceOfTransition_class(problem,interpretation,to);
20742 find mayInRelationincomingTransitions_reference_Vertex(problem,interpretation,from,to);
20743 neg find mustInRelationincomingTransitions_reference_Vertex(problem,interpretation,from,to);
20744}
20745import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage"
20746import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem"
20747import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language"
20748
20749//////////
20750// 0. Util
20751//////////
20752private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) {
20753 PartialInterpretation.problem(interpretation,problem);
20754}
20755
20756/////////////////////////
20757// 0.1 Existence
20758/////////////////////////
20759private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
20760 find interpretation(problem,interpretation);
20761 LogicProblem.elements(problem,element);
20762} or {
20763 find interpretation(problem,interpretation);
20764 PartialInterpretation.newElements(interpretation,element);
20765}
20766
20767private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
20768 find mustExist(problem,interpretation,element);
20769} or {
20770 find interpretation(problem,interpretation);
20771 neg find elementCloseWorld(element);
20772 PartialInterpretation.openWorldElements(interpretation,element);
20773}
20774
20775private pattern elementCloseWorld(element:DefinedElement) {
20776 PartialInterpretation.openWorldElements(i,element);
20777 PartialInterpretation.maxNewElements(i,0);
20778} or {
20779 Scope.targetTypeInterpretation(scope,interpretation);
20780 PartialTypeInterpratation.elements(interpretation,element);
20781 Scope.maxNewElements(scope,0);
20782}
20783
20784////////////////////////
20785// 0.2 Equivalence
20786////////////////////////
20787pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) {
20788 find mayExist(problem,interpretation,a);
20789 find mayExist(problem,interpretation,b);
20790 a == b;
20791}
20792
20793////////////////////////
20794// 0.3 Required Patterns by TypeIndexer
20795////////////////////////
20796private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) {
20797 find interpretation(problem,interpretation);
20798 LogicProblem.types(problem,type);
20799 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
20800 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
20801}
20802
20803private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) {
20804 find interpretation(problem,interpretation);
20805 LogicProblem.types(problem,type);
20806 TypeDefinition.elements(type,element);
20807} or {
20808 find interpretation(problem,interpretation);
20809 find typeInterpretation(problem,interpretation,type,typeInterpretation);
20810 PartialComplexTypeInterpretation.elements(typeInterpretation,element);
20811}
20812
20813private pattern isPrimitive(element: PrimitiveElement) {
20814 PrimitiveElement(element);
20815}
20816
20817//////////
20818// 1. Problem-Specific Base Indexers
20819//////////
20820// 1.1 Type Indexers
20821//////////
20822// 1.1.1 primitive Type Indexers
20823//////////
20824
20825//////////
20826// 1.1.2 domain-specific Type Indexers
20827//////////
20828/**
20829 * An element must be an instance of type "FileSystem class".
20830 */
20831private pattern mustInstanceOfFileSystem_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
20832 Type.name(type,"FileSystem class");
20833 find directInstanceOf(problem,interpretation,element,type);
20834}
20835private pattern scopeDisallowsNewFileSystem_class(problem:LogicProblem, interpretation:PartialInterpretation) {
20836 find interpretation(problem,interpretation);
20837 PartialInterpretation.scopes(interpretation,scope);
20838 Scope.targetTypeInterpretation(scope,typeInterpretation);
20839 Scope.maxNewElements(scope,0);
20840 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
20841 Type.name(type,"FileSystem class");
20842}
20843
20844/**
20845 * An element may be an instance of type "FileSystem class".
20846 */
20847private pattern mayInstanceOfFileSystem_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
20848{
20849 find interpretation(problem,interpretation);
20850 PartialInterpretation.newElements(interpretation,element);
20851 neg find mustInstanceOfModel_class(problem,interpretation,element);
20852 neg find mustInstanceOfFSObject_class(problem,interpretation,element);
20853 neg find scopeDisallowsNewFileSystem_class(problem, interpretation);
20854 neg find isPrimitive(element);
20855} or {
20856 find interpretation(problem,interpretation);
20857 PartialInterpretation.openWorldElements(interpretation,element);
20858 neg find mustInstanceOfModel_class(problem,interpretation,element);
20859 neg find mustInstanceOfFSObject_class(problem,interpretation,element);
20860 neg find scopeDisallowsNewFileSystem_class(problem, interpretation);
20861 neg find isPrimitive(element);
20862} or
20863{ find mustInstanceOfFileSystem_class(problem,interpretation,element); }
20864/**
20865 * An element must be an instance of type "FSObject class".
20866 */
20867private pattern mustInstanceOfFSObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
20868 Type.name(type,"FSObject class");
20869 find directInstanceOf(problem,interpretation,element,type);
20870}
20871private pattern scopeDisallowsNewFSObject_class(problem:LogicProblem, interpretation:PartialInterpretation) {
20872 find interpretation(problem,interpretation);
20873 PartialInterpretation.scopes(interpretation,scope);
20874 Scope.targetTypeInterpretation(scope,typeInterpretation);
20875 Scope.maxNewElements(scope,0);
20876 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
20877 Type.name(type,"FSObject class");
20878}
20879
20880/**
20881 * An element may be an instance of type "FSObject class".
20882 */
20883private pattern mayInstanceOfFSObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
20884{
20885 find interpretation(problem,interpretation);
20886 PartialInterpretation.newElements(interpretation,element);
20887 neg find mustInstanceOfModel_class(problem,interpretation,element);
20888 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
20889 neg find mustInstanceOfFile_class(problem,interpretation,element);
20890 neg find mustInstanceOfDir_class(problem,interpretation,element);
20891 neg find scopeDisallowsNewFSObject_class(problem, interpretation);
20892 neg find isPrimitive(element);
20893} or {
20894 find interpretation(problem,interpretation);
20895 PartialInterpretation.openWorldElements(interpretation,element);
20896 neg find mustInstanceOfModel_class(problem,interpretation,element);
20897 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
20898 neg find mustInstanceOfFile_class(problem,interpretation,element);
20899 neg find mustInstanceOfDir_class(problem,interpretation,element);
20900 neg find scopeDisallowsNewFSObject_class(problem, interpretation);
20901 neg find isPrimitive(element);
20902} or
20903{ find mustInstanceOfFSObject_class(problem,interpretation,element); }
20904/**
20905 * An element must be an instance of type "Dir class".
20906 */
20907private pattern mustInstanceOfDir_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
20908 Type.name(type,"Dir class");
20909 find directInstanceOf(problem,interpretation,element,type);
20910}
20911private pattern scopeDisallowsNewDir_class(problem:LogicProblem, interpretation:PartialInterpretation) {
20912 find interpretation(problem,interpretation);
20913 PartialInterpretation.scopes(interpretation,scope);
20914 Scope.targetTypeInterpretation(scope,typeInterpretation);
20915 Scope.maxNewElements(scope,0);
20916 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
20917 Type.name(type,"Dir class");
20918}
20919
20920/**
20921 * An element may be an instance of type "Dir class".
20922 */
20923private pattern mayInstanceOfDir_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
20924{
20925 find interpretation(problem,interpretation);
20926 PartialInterpretation.newElements(interpretation,element);
20927 neg find mustInstanceOfModel_class(problem,interpretation,element);
20928 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
20929 neg find mustInstanceOfFile_class(problem,interpretation,element);
20930 neg find scopeDisallowsNewDir_class(problem, interpretation);
20931 neg find isPrimitive(element);
20932} or {
20933 find interpretation(problem,interpretation);
20934 PartialInterpretation.openWorldElements(interpretation,element);
20935 neg find mustInstanceOfModel_class(problem,interpretation,element);
20936 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
20937 neg find mustInstanceOfFile_class(problem,interpretation,element);
20938 neg find scopeDisallowsNewDir_class(problem, interpretation);
20939 neg find isPrimitive(element);
20940} or
20941{ find mustInstanceOfDir_class(problem,interpretation,element); }
20942/**
20943 * An element must be an instance of type "File class".
20944 */
20945private pattern mustInstanceOfFile_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
20946 Type.name(type,"File class");
20947 find directInstanceOf(problem,interpretation,element,type);
20948}
20949private pattern scopeDisallowsNewFile_class(problem:LogicProblem, interpretation:PartialInterpretation) {
20950 find interpretation(problem,interpretation);
20951 PartialInterpretation.scopes(interpretation,scope);
20952 Scope.targetTypeInterpretation(scope,typeInterpretation);
20953 Scope.maxNewElements(scope,0);
20954 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
20955 Type.name(type,"File class");
20956}
20957
20958/**
20959 * An element may be an instance of type "File class".
20960 */
20961private pattern mayInstanceOfFile_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
20962{
20963 find interpretation(problem,interpretation);
20964 PartialInterpretation.newElements(interpretation,element);
20965 neg find mustInstanceOfModel_class(problem,interpretation,element);
20966 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
20967 neg find mustInstanceOfDir_class(problem,interpretation,element);
20968 neg find scopeDisallowsNewFile_class(problem, interpretation);
20969 neg find isPrimitive(element);
20970} or {
20971 find interpretation(problem,interpretation);
20972 PartialInterpretation.openWorldElements(interpretation,element);
20973 neg find mustInstanceOfModel_class(problem,interpretation,element);
20974 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
20975 neg find mustInstanceOfDir_class(problem,interpretation,element);
20976 neg find scopeDisallowsNewFile_class(problem, interpretation);
20977 neg find isPrimitive(element);
20978} or
20979{ find mustInstanceOfFile_class(problem,interpretation,element); }
20980/**
20981 * An element must be an instance of type "Model class".
20982 */
20983private pattern mustInstanceOfModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
20984 Type.name(type,"Model class");
20985 find directInstanceOf(problem,interpretation,element,type);
20986}
20987private pattern scopeDisallowsNewModel_class(problem:LogicProblem, interpretation:PartialInterpretation) {
20988 find interpretation(problem,interpretation);
20989 PartialInterpretation.scopes(interpretation,scope);
20990 Scope.targetTypeInterpretation(scope,typeInterpretation);
20991 Scope.maxNewElements(scope,0);
20992 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
20993 Type.name(type,"Model class");
20994}
20995
20996/**
20997 * An element may be an instance of type "Model class".
20998 */
20999private pattern mayInstanceOfModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
21000{
21001 find interpretation(problem,interpretation);
21002 PartialInterpretation.newElements(interpretation,element);
21003 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
21004 neg find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,element);
21005 neg find mustInstanceOfFSObject_class(problem,interpretation,element);
21006 neg find scopeDisallowsNewModel_class(problem, interpretation);
21007 neg find isPrimitive(element);
21008} or {
21009 find interpretation(problem,interpretation);
21010 PartialInterpretation.openWorldElements(interpretation,element);
21011 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
21012 neg find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,element);
21013 neg find mustInstanceOfFSObject_class(problem,interpretation,element);
21014 neg find scopeDisallowsNewModel_class(problem, interpretation);
21015 neg find isPrimitive(element);
21016} or
21017{ find mustInstanceOfModel_class(problem,interpretation,element); }
21018/**
21019 * An element must be an instance of type "Model class DefinedPart".
21020 */
21021private pattern mustInstanceOfModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
21022 Type.name(type,"Model class DefinedPart");
21023 find directInstanceOf(problem,interpretation,element,type);
21024}
21025private pattern scopeDisallowsNewModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
21026 find interpretation(problem,interpretation);
21027 PartialInterpretation.scopes(interpretation,scope);
21028 Scope.targetTypeInterpretation(scope,typeInterpretation);
21029 Scope.maxNewElements(scope,0);
21030 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
21031 Type.name(type,"Model class DefinedPart");
21032}
21033
21034/**
21035 * An element may be an instance of type "Model class DefinedPart".
21036 */
21037private pattern mayInstanceOfModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
21038{ find mustInstanceOfModel_class_DefinedPart(problem,interpretation,element); }
21039/**
21040 * An element must be an instance of type "Model class UndefinedPart".
21041 */
21042private pattern mustInstanceOfModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
21043 Type.name(type,"Model class UndefinedPart");
21044 find directInstanceOf(problem,interpretation,element,type);
21045}
21046private pattern scopeDisallowsNewModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
21047 find interpretation(problem,interpretation);
21048 PartialInterpretation.scopes(interpretation,scope);
21049 Scope.targetTypeInterpretation(scope,typeInterpretation);
21050 Scope.maxNewElements(scope,0);
21051 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
21052 Type.name(type,"Model class UndefinedPart");
21053}
21054
21055/**
21056 * An element may be an instance of type "Model class UndefinedPart".
21057 */
21058private pattern mayInstanceOfModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
21059{
21060 find interpretation(problem,interpretation);
21061 PartialInterpretation.newElements(interpretation,element);
21062 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
21063 neg find mustInstanceOfFSObject_class(problem,interpretation,element);
21064 neg find scopeDisallowsNewModel_class_UndefinedPart(problem, interpretation);
21065 neg find isPrimitive(element);
21066} or {
21067 find interpretation(problem,interpretation);
21068 PartialInterpretation.openWorldElements(interpretation,element);
21069 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
21070 neg find mustInstanceOfFSObject_class(problem,interpretation,element);
21071 neg find scopeDisallowsNewModel_class_UndefinedPart(problem, interpretation);
21072 neg find isPrimitive(element);
21073} or
21074{ find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,element); }
21075
21076//////////
21077// 1.2 Relation Declaration Indexers
21078//////////
21079/**
21080 * Matcher for detecting tuples t where []root reference FileSystem(source,target)
21081 */
21082private pattern mustInRelationroot_reference_FileSystem(
21083 problem:LogicProblem, interpretation:PartialInterpretation,
21084 source: DefinedElement, target:DefinedElement)
21085{
21086 find interpretation(problem,interpretation);
21087 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
21088 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"root reference FileSystem");
21089 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
21090 BinaryElementRelationLink.param1(link,source);
21091 BinaryElementRelationLink.param2(link,target);
21092}
21093/**
21094 * Matcher for detecting tuples t where <>root reference FileSystem(source,target)
21095 */
21096private pattern mayInRelationroot_reference_FileSystem(
21097 problem:LogicProblem, interpretation:PartialInterpretation,
21098 source: DefinedElement, target:DefinedElement)
21099{
21100 find interpretation(problem,interpretation);
21101 // The two endpoint of the link have to exist
21102 find mayExist(problem, interpretation, source);
21103 find mayExist(problem, interpretation, target);
21104 // Type consistency
21105 find mayInstanceOfFileSystem_class(problem,interpretation,source);
21106 find mayInstanceOfDir_class(problem,interpretation,target);
21107 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
21108 // the upper bound of the multiplicity should be considered.
21109 numberOfExistingReferences == count find mustInRelationroot_reference_FileSystem(problem,interpretation,source,_);
21110 check(numberOfExistingReferences < 1);
21111 // The reference is containment, then a new reference cannot be create if:
21112 // 1. Multiple parents
21113 neg find mustContains4(problem,interpretation,_,target);
21114 // 2. Circle in the containment hierarchy
21115 neg find mustTransitiveContains(source,target);
21116} or {
21117 find mustInRelationroot_reference_FileSystem(problem,interpretation,source,target);
21118}
21119/**
21120 * Matcher for detecting tuples t where []live reference FileSystem(source,target)
21121 */
21122 private pattern mustInRelationlive_reference_FileSystem(
21123 problem:LogicProblem, interpretation:PartialInterpretation,
21124 source: DefinedElement, target:DefinedElement)
21125 {
21126 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,source,target);
21127 }
21128/**
21129 * Matcher for detecting tuples t where []live reference FileSystem(source,target)
21130 */
21131 private pattern mayInRelationlive_reference_FileSystem(
21132 problem:LogicProblem, interpretation:PartialInterpretation,
21133 source: DefinedElement, target:DefinedElement)
21134 {
21135 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,source,target);
21136 }
21137/**
21138 * Matcher for detecting tuples t where []parent reference FSObject(source,target)
21139 */
21140private pattern mustInRelationparent_reference_FSObject(
21141 problem:LogicProblem, interpretation:PartialInterpretation,
21142 source: DefinedElement, target:DefinedElement)
21143{
21144 find interpretation(problem,interpretation);
21145 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
21146 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"parent reference FSObject");
21147 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
21148 BinaryElementRelationLink.param1(link,source);
21149 BinaryElementRelationLink.param2(link,target);
21150}
21151/**
21152 * Matcher for detecting tuples t where <>parent reference FSObject(source,target)
21153 */
21154private pattern mayInRelationparent_reference_FSObject(
21155 problem:LogicProblem, interpretation:PartialInterpretation,
21156 source: DefinedElement, target:DefinedElement)
21157{
21158 find interpretation(problem,interpretation);
21159 // The two endpoint of the link have to exist
21160 find mayExist(problem, interpretation, source);
21161 find mayExist(problem, interpretation, target);
21162 // Type consistency
21163 find mayInstanceOfFSObject_class(problem,interpretation,source);
21164 find mayInstanceOfDir_class(problem,interpretation,target);
21165 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
21166 // the upper bound of the multiplicity should be considered.
21167 numberOfExistingReferences == count find mustInRelationparent_reference_FSObject(problem,interpretation,source,_);
21168 check(numberOfExistingReferences < 1);
21169 // The eOpposite of the reference is containment, then a referene cannot be created if
21170 // 1. Multiple parents
21171 neg find mustContains4(problem,interpretation,source,_);
21172 // 2. Circle in the containment hierarchy
21173 neg find mustTransitiveContains(source,target);
21174} or {
21175 find mustInRelationparent_reference_FSObject(problem,interpretation,source,target);
21176}
21177/**
21178 * Matcher for detecting tuples t where []contents reference Dir(source,target)
21179 */
21180private pattern mustInRelationcontents_reference_Dir(
21181 problem:LogicProblem, interpretation:PartialInterpretation,
21182 source: DefinedElement, target:DefinedElement)
21183{
21184 find interpretation(problem,interpretation);
21185 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
21186 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"contents reference Dir");
21187 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
21188 BinaryElementRelationLink.param1(link,source);
21189 BinaryElementRelationLink.param2(link,target);
21190}
21191/**
21192 * Matcher for detecting tuples t where <>contents reference Dir(source,target)
21193 */
21194private pattern mayInRelationcontents_reference_Dir(
21195 problem:LogicProblem, interpretation:PartialInterpretation,
21196 source: DefinedElement, target:DefinedElement)
21197{
21198 find interpretation(problem,interpretation);
21199 // The two endpoint of the link have to exist
21200 find mayExist(problem, interpretation, source);
21201 find mayExist(problem, interpretation, target);
21202 // Type consistency
21203 find mayInstanceOfDir_class(problem,interpretation,source);
21204 find mayInstanceOfFSObject_class(problem,interpretation,target);
21205 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
21206 // the upper bound of the opposite reference multiplicity should be considered.
21207 numberOfExistingOppositeReferences == count find mustInRelationparent_reference_FSObject(problem,interpretation,target,_);
21208 check(numberOfExistingOppositeReferences < 1);
21209 // The reference is containment, then a new reference cannot be create if:
21210 // 1. Multiple parents
21211 neg find mustContains4(problem,interpretation,_,target);
21212 // 2. Circle in the containment hierarchy
21213 neg find mustTransitiveContains(source,target);
21214} or {
21215 find mustInRelationcontents_reference_Dir(problem,interpretation,source,target);
21216}
21217/**
21218 * Matcher for detecting tuples t where []filesystems reference Model(source,target)
21219 */
21220private pattern mustInRelationfilesystems_reference_Model(
21221 problem:LogicProblem, interpretation:PartialInterpretation,
21222 source: DefinedElement, target:DefinedElement)
21223{
21224 find interpretation(problem,interpretation);
21225 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
21226 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"filesystems reference Model");
21227 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
21228 BinaryElementRelationLink.param1(link,source);
21229 BinaryElementRelationLink.param2(link,target);
21230}
21231/**
21232 * Matcher for detecting tuples t where <>filesystems reference Model(source,target)
21233 */
21234private pattern mayInRelationfilesystems_reference_Model(
21235 problem:LogicProblem, interpretation:PartialInterpretation,
21236 source: DefinedElement, target:DefinedElement)
21237{
21238 find interpretation(problem,interpretation);
21239 // The two endpoint of the link have to exist
21240 find mayExist(problem, interpretation, source);
21241 find mayExist(problem, interpretation, target);
21242 // Type consistency
21243 find mayInstanceOfModel_class(problem,interpretation,source);
21244 find mayInstanceOfFileSystem_class(problem,interpretation,target);
21245 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
21246 // the upper bound of the multiplicity should be considered.
21247 numberOfExistingReferences == count find mustInRelationfilesystems_reference_Model(problem,interpretation,source,_);
21248 check(numberOfExistingReferences < 1);
21249 // The reference is containment, then a new reference cannot be create if:
21250 // 1. Multiple parents
21251 neg find mustContains4(problem,interpretation,_,target);
21252 // 2. Circle in the containment hierarchy
21253 neg find mustTransitiveContains(source,target);
21254} or {
21255 find mustInRelationfilesystems_reference_Model(problem,interpretation,source,target);
21256}
21257/**
21258 * Matcher for detecting tuples t where []otherFSObjects reference Model(source,target)
21259 */
21260private pattern mustInRelationotherFSObjects_reference_Model(
21261 problem:LogicProblem, interpretation:PartialInterpretation,
21262 source: DefinedElement, target:DefinedElement)
21263{
21264 find interpretation(problem,interpretation);
21265 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
21266 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"otherFSObjects reference Model");
21267 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
21268 BinaryElementRelationLink.param1(link,source);
21269 BinaryElementRelationLink.param2(link,target);
21270}
21271/**
21272 * Matcher for detecting tuples t where <>otherFSObjects reference Model(source,target)
21273 */
21274private pattern mayInRelationotherFSObjects_reference_Model(
21275 problem:LogicProblem, interpretation:PartialInterpretation,
21276 source: DefinedElement, target:DefinedElement)
21277{
21278 find interpretation(problem,interpretation);
21279 // The two endpoint of the link have to exist
21280 find mayExist(problem, interpretation, source);
21281 find mayExist(problem, interpretation, target);
21282 // Type consistency
21283 find mayInstanceOfModel_class(problem,interpretation,source);
21284 find mayInstanceOfFSObject_class(problem,interpretation,target);
21285 // The reference is containment, then a new reference cannot be create if:
21286 // 1. Multiple parents
21287 neg find mustContains4(problem,interpretation,_,target);
21288 // 2. Circle in the containment hierarchy
21289 neg find mustTransitiveContains(source,target);
21290} or {
21291 find mustInRelationotherFSObjects_reference_Model(problem,interpretation,source,target);
21292}
21293
21294//////////
21295// 1.3 Relation Definition Indexers
21296//////////
21297// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test filesystem queries patternContent
21298private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(
21299 problem:LogicProblem, interpretation:PartialInterpretation,
21300 var_o1, var_o2)
21301{
21302 find interpretation(problem,interpretation);
21303 find mustInstanceOfFSObject_class(problem,interpretation,var_o1);
21304 find mustInstanceOfFSObject_class(problem,interpretation,var_o2);
21305 // o1 is exported
21306 // o2 is exported
21307 find mustInstanceOfDir_class(problem,interpretation,var_o1);
21308 find mustInRelationcontents_reference_Dir(problem,interpretation,var_o1,var_virtual0);
21309 find mustInstanceOfFSObject_class(problem,interpretation,var_virtual0);
21310 var_virtual0 == var_o2;
21311}
21312private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(
21313 problem:LogicProblem, interpretation:PartialInterpretation,
21314 var_o1, var_o2)
21315{
21316 find interpretation(problem,interpretation);
21317 find mayInstanceOfFSObject_class(problem,interpretation,var_o1);
21318 find mayInstanceOfFSObject_class(problem,interpretation,var_o2);
21319 // o1 is exported
21320 // o2 is exported
21321 find mayInstanceOfDir_class(problem,interpretation,var_o1);
21322 find mayInRelationcontents_reference_Dir(problem,interpretation,var_o1,var_virtual0);
21323 find mayInstanceOfFSObject_class(problem,interpretation,var_virtual0);
21324 find mayEquivalent(problem, interpretation, var_virtual0, var_o2);
21325}
21326private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(
21327 problem:LogicProblem, interpretation:PartialInterpretation,
21328 var_o1, var_o2)
21329{
21330 find interpretation(problem,interpretation);
21331 find mustInstanceOfFSObject_class(problem,interpretation,var_o1);
21332 find mustInstanceOfFSObject_class(problem,interpretation,var_o2);
21333 // o1 is exported
21334 // o2 is exported
21335 find mustInstanceOfDir_class(problem,interpretation,var_o1);
21336 find mustInRelationcontents_reference_Dir(problem,interpretation,var_o1,var_virtual0);
21337 find mustInstanceOfFSObject_class(problem,interpretation,var_virtual0);
21338 var_virtual0 == var_o2;
21339}
21340private pattern twoParam_mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(var_o1, var_o2) {
21341 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(_,_,var_o1, var_o2);
21342}
21343private pattern twoParam_mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(var_o1, var_o2) {
21344 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(_,_,var_o1, var_o2);
21345}
21346private pattern twoParam_currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(var_o1, var_o2) {
21347 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(_,_,var_o1, var_o2);
21348}
21349// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test filesystem queries live
21350private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(
21351 problem:LogicProblem, interpretation:PartialInterpretation,
21352 var_this, var_l)
21353{
21354 find interpretation(problem,interpretation);
21355 find mustInstanceOfFileSystem_class(problem,interpretation,var_this);
21356 find mustInstanceOfFSObject_class(problem,interpretation,var_l);
21357 // this is exported
21358 // l is exported
21359 find mustInstanceOfFileSystem_class(problem,interpretation,var_this);
21360 find mustInRelationroot_reference_FileSystem(problem,interpretation,var_this,var_virtual0);
21361 find mustInstanceOfDir_class(problem,interpretation,var_virtual0);
21362 var_virtual0 == var_l;
21363}or{
21364 find interpretation(problem,interpretation);
21365 find mustInstanceOfFileSystem_class(problem,interpretation,var_this);
21366 find mustInstanceOfFSObject_class(problem,interpretation,var_l);
21367 // this is exported
21368 // l is exported
21369 find mustInstanceOfFileSystem_class(problem,interpretation,var_this);
21370 find mustInRelationroot_reference_FileSystem(problem,interpretation,var_this,var_virtual0);
21371 find mustInstanceOfDir_class(problem,interpretation,var_virtual0);
21372 var_virtual0 == var_root;
21373 find twoParam_mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent+(var_root,var_l);
21374}
21375private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(
21376 problem:LogicProblem, interpretation:PartialInterpretation,
21377 var_this, var_l)
21378{
21379 find interpretation(problem,interpretation);
21380 find mayInstanceOfFileSystem_class(problem,interpretation,var_this);
21381 find mayInstanceOfFSObject_class(problem,interpretation,var_l);
21382 // this is exported
21383 // l is exported
21384 find mayInstanceOfFileSystem_class(problem,interpretation,var_this);
21385 find mayInRelationroot_reference_FileSystem(problem,interpretation,var_this,var_virtual0);
21386 find mayInstanceOfDir_class(problem,interpretation,var_virtual0);
21387 find mayEquivalent(problem, interpretation, var_virtual0, var_l);
21388}or{
21389 find interpretation(problem,interpretation);
21390 find mayInstanceOfFileSystem_class(problem,interpretation,var_this);
21391 find mayInstanceOfFSObject_class(problem,interpretation,var_l);
21392 // this is exported
21393 // l is exported
21394 find mayInstanceOfFileSystem_class(problem,interpretation,var_this);
21395 find mayInRelationroot_reference_FileSystem(problem,interpretation,var_this,var_virtual0);
21396 find mayInstanceOfDir_class(problem,interpretation,var_virtual0);
21397 find mayEquivalent(problem, interpretation, var_virtual0, var_root);
21398 find twoParam_mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent+(var_root,var_l);
21399}
21400private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(
21401 problem:LogicProblem, interpretation:PartialInterpretation,
21402 var_this, var_l)
21403{
21404 find interpretation(problem,interpretation);
21405 find mustInstanceOfFileSystem_class(problem,interpretation,var_this);
21406 find mustInstanceOfFSObject_class(problem,interpretation,var_l);
21407 // this is exported
21408 // l is exported
21409 find mustInstanceOfFileSystem_class(problem,interpretation,var_this);
21410 find mustInRelationroot_reference_FileSystem(problem,interpretation,var_this,var_virtual0);
21411 find mustInstanceOfDir_class(problem,interpretation,var_virtual0);
21412 var_virtual0 == var_l;
21413}or{
21414 find interpretation(problem,interpretation);
21415 find mustInstanceOfFileSystem_class(problem,interpretation,var_this);
21416 find mustInstanceOfFSObject_class(problem,interpretation,var_l);
21417 // this is exported
21418 // l is exported
21419 find mustInstanceOfFileSystem_class(problem,interpretation,var_this);
21420 find mustInRelationroot_reference_FileSystem(problem,interpretation,var_this,var_virtual0);
21421 find mustInstanceOfDir_class(problem,interpretation,var_virtual0);
21422 var_virtual0 == var_root;
21423 find twoParam_currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent+(var_root,var_l);
21424}
21425// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test filesystem queries contentInNotLive
21426private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive(
21427 problem:LogicProblem, interpretation:PartialInterpretation,
21428 var_parent, var_child)
21429{
21430 find interpretation(problem,interpretation);
21431 find mustInstanceOfDir_class(problem,interpretation,var_parent);
21432 find mustInstanceOfFSObject_class(problem,interpretation,var_child);
21433 // parent is exported
21434 // child is exported
21435 find mustInstanceOfDir_class(problem,interpretation,var_parent);
21436 find mustInRelationcontents_reference_Dir(problem,interpretation,var_parent,var_virtual0);
21437 find mustInstanceOfFSObject_class(problem,interpretation,var_virtual0);
21438 var_virtual0 == var_child;
21439 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,_var__0,var_parent);
21440}or{
21441 find interpretation(problem,interpretation);
21442 find mustInstanceOfDir_class(problem,interpretation,var_parent);
21443 find mustInstanceOfFSObject_class(problem,interpretation,var_child);
21444 // parent is exported
21445 // child is exported
21446 find mustInstanceOfDir_class(problem,interpretation,var_parent);
21447 find mustInRelationcontents_reference_Dir(problem,interpretation,var_parent,var_virtual0);
21448 find mustInstanceOfFSObject_class(problem,interpretation,var_virtual0);
21449 var_virtual0 == var_child;
21450 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,_var__0,var_child);
21451}
21452private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive(
21453 problem:LogicProblem, interpretation:PartialInterpretation,
21454 var_parent, var_child)
21455{
21456 find interpretation(problem,interpretation);
21457 find mayInstanceOfDir_class(problem,interpretation,var_parent);
21458 find mayInstanceOfFSObject_class(problem,interpretation,var_child);
21459 // parent is exported
21460 // child is exported
21461 find mayInstanceOfDir_class(problem,interpretation,var_parent);
21462 find mayInRelationcontents_reference_Dir(problem,interpretation,var_parent,var_virtual0);
21463 find mayInstanceOfFSObject_class(problem,interpretation,var_virtual0);
21464 find mayEquivalent(problem, interpretation, var_virtual0, var_child);
21465 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,_var__0,var_parent);
21466}or{
21467 find interpretation(problem,interpretation);
21468 find mayInstanceOfDir_class(problem,interpretation,var_parent);
21469 find mayInstanceOfFSObject_class(problem,interpretation,var_child);
21470 // parent is exported
21471 // child is exported
21472 find mayInstanceOfDir_class(problem,interpretation,var_parent);
21473 find mayInRelationcontents_reference_Dir(problem,interpretation,var_parent,var_virtual0);
21474 find mayInstanceOfFSObject_class(problem,interpretation,var_virtual0);
21475 find mayEquivalent(problem, interpretation, var_virtual0, var_child);
21476 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,_var__0,var_child);
21477}
21478private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive(
21479 problem:LogicProblem, interpretation:PartialInterpretation,
21480 var_parent, var_child)
21481{
21482 find interpretation(problem,interpretation);
21483 find mustInstanceOfDir_class(problem,interpretation,var_parent);
21484 find mustInstanceOfFSObject_class(problem,interpretation,var_child);
21485 // parent is exported
21486 // child is exported
21487 find mustInstanceOfDir_class(problem,interpretation,var_parent);
21488 find mustInRelationcontents_reference_Dir(problem,interpretation,var_parent,var_virtual0);
21489 find mustInstanceOfFSObject_class(problem,interpretation,var_virtual0);
21490 var_virtual0 == var_child;
21491 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,_var__0,var_parent);
21492}or{
21493 find interpretation(problem,interpretation);
21494 find mustInstanceOfDir_class(problem,interpretation,var_parent);
21495 find mustInstanceOfFSObject_class(problem,interpretation,var_child);
21496 // parent is exported
21497 // child is exported
21498 find mustInstanceOfDir_class(problem,interpretation,var_parent);
21499 find mustInRelationcontents_reference_Dir(problem,interpretation,var_parent,var_virtual0);
21500 find mustInstanceOfFSObject_class(problem,interpretation,var_virtual0);
21501 var_virtual0 == var_child;
21502 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,_var__0,var_child);
21503}
21504
21505//////////
21506// 1.4 Containment Indexer
21507//////////
21508private pattern mustContains2(source: DefinedElement, target: DefinedElement) {
21509 find mustContains4(_,_,source,target);
21510}
21511
21512private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation,
21513 source: DefinedElement, target: DefinedElement)
21514 { find mustInRelationroot_reference_FileSystem(problem,interpretation,source,target); }or
21515
21516 { find mustInRelationcontents_reference_Dir(problem,interpretation,source,target); }or
21517
21518 { find mustInRelationfilesystems_reference_Model(problem,interpretation,source,target); }or
21519
21520 { find mustInRelationotherFSObjects_reference_Model(problem,interpretation,source,target); }
21521
21522private pattern mustTransitiveContains(source,target) {
21523 find mustContains2+(source,target);
21524}
21525
21526//////////
21527// 2. Invalidation Indexers
21528//////////
21529// 2.1 Invalidated by WF Queries
21530//////////
21531pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive(problem:LogicProblem, interpretation:PartialInterpretation,
21532 var_parent, var_child)
21533{
21534 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive(problem,interpretation,var_parent,var_child);
21535}
21536
21537//////////
21538// 3. Unfinishedness Indexers
21539//////////
21540// 3.1 Unfinishedness Measured by Multiplicity
21541//////////
21542pattern unfinishedLowerMultiplicity_root_reference_FileSystem(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) {
21543 find interpretation(problem,interpretation);
21544 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
21545 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"root reference FileSystem");
21546 find mustInstanceOfFileSystem_class(problem,interpretation,object);
21547 numberOfExistingReferences == count find mustInRelationroot_reference_FileSystem(problem,interpretation,object,_);
21548 check(numberOfExistingReferences < 1);
21549 missingMultiplicity == eval(1-numberOfExistingReferences);
21550}
21551pattern unfinishedLowerMultiplicity_filesystems_reference_Model(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) {
21552 find interpretation(problem,interpretation);
21553 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
21554 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"filesystems reference Model");
21555 find mustInstanceOfModel_class(problem,interpretation,object);
21556 numberOfExistingReferences == count find mustInRelationfilesystems_reference_Model(problem,interpretation,object,_);
21557 check(numberOfExistingReferences < 1);
21558 missingMultiplicity == eval(1-numberOfExistingReferences);
21559}
21560
21561//////////
21562// 3.2 Unfinishedness Measured by WF Queries
21563//////////
21564pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive(problem:LogicProblem, interpretation:PartialInterpretation,
21565 var_parent, var_child)
21566{
21567 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive(problem,interpretation,var_parent,var_child);
21568}
21569
21570//////////
21571// 4. Refinement Indexers
21572//////////
21573// 4.1 Object constructors
21574//////////
21575private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation)
21576{
21577 find interpretation(problem,interpretation);
21578 find mustInstanceOfModel_class(problem,interpretation,root);
21579 find mustExist(problem, interpretation, root);
21580}or{
21581 find interpretation(problem,interpretation);
21582 find mustInstanceOfFile_class(problem,interpretation,root);
21583 find mustExist(problem, interpretation, root);
21584}or{
21585 find interpretation(problem,interpretation);
21586 find mustInstanceOfFSObject_class(problem,interpretation,root);
21587 find mustExist(problem, interpretation, root);
21588}or{
21589 find interpretation(problem,interpretation);
21590 find mustInstanceOfFileSystem_class(problem,interpretation,root);
21591 find mustExist(problem, interpretation, root);
21592}or{
21593 find interpretation(problem,interpretation);
21594 find mustInstanceOfDir_class(problem,interpretation,root);
21595 find mustExist(problem, interpretation, root);
21596}or{
21597 find interpretation(problem,interpretation);
21598 find mustInstanceOfModel_class_DefinedPart(problem,interpretation,root);
21599 find mustExist(problem, interpretation, root);
21600}or{
21601 find interpretation(problem,interpretation);
21602 find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,root);
21603 find mustExist(problem, interpretation, root);
21604}
21605pattern createObject_FileSystem_class_by_filesystems_reference_Model(
21606 problem:LogicProblem, interpretation:PartialInterpretation,
21607 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
21608 container:DefinedElement)
21609{
21610 find interpretation(problem,interpretation);
21611 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
21612 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FileSystem class");
21613 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
21614 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"filesystems reference Model");
21615 find mustInstanceOfModel_class(problem,interpretation,container);
21616 find mayInstanceOfFileSystem_class(problem,interpretation,newObject);
21617 find mayInRelationfilesystems_reference_Model(problem,interpretation,container,newObject);
21618 find mustExist(problem, interpretation, container);
21619 neg find mustExist(problem, interpretation, newObject);
21620}
21621pattern createObject_FileSystem_class(
21622 problem:LogicProblem, interpretation:PartialInterpretation,
21623 typeInterpretation:PartialComplexTypeInterpretation)
21624{
21625 find interpretation(problem,interpretation);
21626 neg find hasElementInContainment(problem,interpretation);
21627 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
21628 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FileSystem class");
21629 find mayInstanceOfFileSystem_class(problem,interpretation,newObject);
21630 find mayExist(problem, interpretation, newObject);
21631 neg find mustExist(problem, interpretation, newObject);
21632}
21633pattern createObject_File_class_by_contents_reference_Dir_with_parent_reference_FSObject(
21634 problem:LogicProblem, interpretation:PartialInterpretation,
21635 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
21636 container:DefinedElement)
21637{
21638 find interpretation(problem,interpretation);
21639 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
21640 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"File class");
21641 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
21642 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"contents reference Dir");
21643 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
21644 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FSObject");
21645 find mustInstanceOfDir_class(problem,interpretation,container);
21646 find mayInstanceOfFile_class(problem,interpretation,newObject);
21647 find mayInRelationcontents_reference_Dir(problem,interpretation,container,newObject);
21648 find mustExist(problem, interpretation, container);
21649 neg find mustExist(problem, interpretation, newObject);
21650}
21651pattern createObject_File_class_by_otherFSObjects_reference_Model(
21652 problem:LogicProblem, interpretation:PartialInterpretation,
21653 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
21654 container:DefinedElement)
21655{
21656 find interpretation(problem,interpretation);
21657 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
21658 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"File class");
21659 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
21660 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"otherFSObjects reference Model");
21661 find mustInstanceOfModel_class(problem,interpretation,container);
21662 find mayInstanceOfFile_class(problem,interpretation,newObject);
21663 find mayInRelationotherFSObjects_reference_Model(problem,interpretation,container,newObject);
21664 find mustExist(problem, interpretation, container);
21665 neg find mustExist(problem, interpretation, newObject);
21666}
21667pattern createObject_File_class(
21668 problem:LogicProblem, interpretation:PartialInterpretation,
21669 typeInterpretation:PartialComplexTypeInterpretation)
21670{
21671 find interpretation(problem,interpretation);
21672 neg find hasElementInContainment(problem,interpretation);
21673 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
21674 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"File class");
21675 find mayInstanceOfFile_class(problem,interpretation,newObject);
21676 find mayExist(problem, interpretation, newObject);
21677 neg find mustExist(problem, interpretation, newObject);
21678}
21679pattern createObject_Model_class_UndefinedPart(
21680 problem:LogicProblem, interpretation:PartialInterpretation,
21681 typeInterpretation:PartialComplexTypeInterpretation)
21682{
21683 find interpretation(problem,interpretation);
21684 neg find hasElementInContainment(problem,interpretation);
21685 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
21686 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Model class UndefinedPart");
21687 find mayInstanceOfModel_class_UndefinedPart(problem,interpretation,newObject);
21688 find mayExist(problem, interpretation, newObject);
21689 neg find mustExist(problem, interpretation, newObject);
21690}
21691pattern createObject_Dir_class_by_root_reference_FileSystem(
21692 problem:LogicProblem, interpretation:PartialInterpretation,
21693 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
21694 container:DefinedElement)
21695{
21696 find interpretation(problem,interpretation);
21697 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
21698 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Dir class");
21699 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
21700 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"root reference FileSystem");
21701 find mustInstanceOfFileSystem_class(problem,interpretation,container);
21702 find mayInstanceOfDir_class(problem,interpretation,newObject);
21703 find mayInRelationroot_reference_FileSystem(problem,interpretation,container,newObject);
21704 find mustExist(problem, interpretation, container);
21705 neg find mustExist(problem, interpretation, newObject);
21706}
21707pattern createObject_Dir_class_by_contents_reference_Dir_with_parent_reference_FSObject(
21708 problem:LogicProblem, interpretation:PartialInterpretation,
21709 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
21710 container:DefinedElement)
21711{
21712 find interpretation(problem,interpretation);
21713 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
21714 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Dir class");
21715 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
21716 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"contents reference Dir");
21717 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
21718 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FSObject");
21719 find mustInstanceOfDir_class(problem,interpretation,container);
21720 find mayInstanceOfDir_class(problem,interpretation,newObject);
21721 find mayInRelationcontents_reference_Dir(problem,interpretation,container,newObject);
21722 find mustExist(problem, interpretation, container);
21723 neg find mustExist(problem, interpretation, newObject);
21724}
21725pattern createObject_Dir_class_by_otherFSObjects_reference_Model(
21726 problem:LogicProblem, interpretation:PartialInterpretation,
21727 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
21728 container:DefinedElement)
21729{
21730 find interpretation(problem,interpretation);
21731 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
21732 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Dir class");
21733 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
21734 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"otherFSObjects reference Model");
21735 find mustInstanceOfModel_class(problem,interpretation,container);
21736 find mayInstanceOfDir_class(problem,interpretation,newObject);
21737 find mayInRelationotherFSObjects_reference_Model(problem,interpretation,container,newObject);
21738 find mustExist(problem, interpretation, container);
21739 neg find mustExist(problem, interpretation, newObject);
21740}
21741pattern createObject_Dir_class(
21742 problem:LogicProblem, interpretation:PartialInterpretation,
21743 typeInterpretation:PartialComplexTypeInterpretation)
21744{
21745 find interpretation(problem,interpretation);
21746 neg find hasElementInContainment(problem,interpretation);
21747 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
21748 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Dir class");
21749 find mayInstanceOfDir_class(problem,interpretation,newObject);
21750 find mayExist(problem, interpretation, newObject);
21751 neg find mustExist(problem, interpretation, newObject);
21752}
21753
21754//////////
21755// 4.2 Type refinement
21756//////////
21757pattern refineTypeTo_FileSystem_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
21758 find interpretation(problem,interpretation);
21759 PartialInterpretation.newElements(interpretation,element);
21760 find mayInstanceOfFileSystem_class(problem,interpretation,element);
21761 neg find mustInstanceOfModel_class(problem,interpretation,element);
21762 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
21763 neg find mustInstanceOfFSObject_class(problem,interpretation,element);
21764}
21765pattern refineTypeTo_File_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
21766 find interpretation(problem,interpretation);
21767 PartialInterpretation.newElements(interpretation,element);
21768 find mayInstanceOfFile_class(problem,interpretation,element);
21769 neg find mustInstanceOfModel_class(problem,interpretation,element);
21770 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
21771 neg find mustInstanceOfFile_class(problem,interpretation,element);
21772 neg find mustInstanceOfDir_class(problem,interpretation,element);
21773}
21774pattern refineTypeTo_Model_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
21775 find interpretation(problem,interpretation);
21776 PartialInterpretation.newElements(interpretation,element);
21777 find mayInstanceOfModel_class_UndefinedPart(problem,interpretation,element);
21778 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
21779 neg find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,element);
21780 neg find mustInstanceOfFSObject_class(problem,interpretation,element);
21781}
21782pattern refineTypeTo_Dir_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
21783 find interpretation(problem,interpretation);
21784 PartialInterpretation.newElements(interpretation,element);
21785 find mayInstanceOfDir_class(problem,interpretation,element);
21786 neg find mustInstanceOfModel_class(problem,interpretation,element);
21787 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
21788 neg find mustInstanceOfFile_class(problem,interpretation,element);
21789 neg find mustInstanceOfDir_class(problem,interpretation,element);
21790}
21791
21792//////////
21793// 4.3 Relation refinement
21794//////////
21795pattern refineRelation_live_reference_FileSystem(
21796 problem:LogicProblem, interpretation:PartialInterpretation,
21797 relationIterpretation:PartialRelationInterpretation,
21798 from: DefinedElement, to: DefinedElement)
21799{
21800 find interpretation(problem,interpretation);
21801 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
21802 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"live reference FileSystem");
21803 find mustExist(problem, interpretation, from);
21804 find mustExist(problem, interpretation, to);
21805 find mustInstanceOfFileSystem_class(problem,interpretation,from);
21806 find mustInstanceOfFSObject_class(problem,interpretation,to);
21807 find mayInRelationlive_reference_FileSystem(problem,interpretation,from,to);
21808 neg find mustInRelationlive_reference_FileSystem(problem,interpretation,from,to);
21809}
21810import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage"
21811import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem"
21812import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language"
21813
21814//////////
21815// 0. Util
21816//////////
21817private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) {
21818 PartialInterpretation.problem(interpretation,problem);
21819}
21820
21821/////////////////////////
21822// 0.1 Existence
21823/////////////////////////
21824private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
21825 find interpretation(problem,interpretation);
21826 LogicProblem.elements(problem,element);
21827} or {
21828 find interpretation(problem,interpretation);
21829 PartialInterpretation.newElements(interpretation,element);
21830}
21831
21832private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
21833 find mustExist(problem,interpretation,element);
21834} or {
21835 find interpretation(problem,interpretation);
21836 neg find elementCloseWorld(element);
21837 PartialInterpretation.openWorldElements(interpretation,element);
21838}
21839
21840private pattern elementCloseWorld(element:DefinedElement) {
21841 PartialInterpretation.openWorldElements(i,element);
21842 PartialInterpretation.maxNewElements(i,0);
21843} or {
21844 Scope.targetTypeInterpretation(scope,interpretation);
21845 PartialTypeInterpratation.elements(interpretation,element);
21846 Scope.maxNewElements(scope,0);
21847}
21848
21849////////////////////////
21850// 0.2 Equivalence
21851////////////////////////
21852pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) {
21853 find mayExist(problem,interpretation,a);
21854 find mayExist(problem,interpretation,b);
21855 a == b;
21856}
21857
21858////////////////////////
21859// 0.3 Required Patterns by TypeIndexer
21860////////////////////////
21861private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) {
21862 find interpretation(problem,interpretation);
21863 LogicProblem.types(problem,type);
21864 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
21865 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
21866}
21867
21868private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) {
21869 find interpretation(problem,interpretation);
21870 LogicProblem.types(problem,type);
21871 TypeDefinition.elements(type,element);
21872} or {
21873 find interpretation(problem,interpretation);
21874 find typeInterpretation(problem,interpretation,type,typeInterpretation);
21875 PartialComplexTypeInterpretation.elements(typeInterpretation,element);
21876}
21877
21878private pattern isPrimitive(element: PrimitiveElement) {
21879 PrimitiveElement(element);
21880}
21881
21882//////////
21883// 1. Problem-Specific Base Indexers
21884//////////
21885// 1.1 Type Indexers
21886//////////
21887// 1.1.1 primitive Type Indexers
21888//////////
21889
21890//////////
21891// 1.1.2 domain-specific Type Indexers
21892//////////
21893/**
21894 * An element must be an instance of type "FileSystem class".
21895 */
21896private pattern mustInstanceOfFileSystem_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
21897 Type.name(type,"FileSystem class");
21898 find directInstanceOf(problem,interpretation,element,type);
21899}
21900private pattern scopeDisallowsNewFileSystem_class(problem:LogicProblem, interpretation:PartialInterpretation) {
21901 find interpretation(problem,interpretation);
21902 PartialInterpretation.scopes(interpretation,scope);
21903 Scope.targetTypeInterpretation(scope,typeInterpretation);
21904 Scope.maxNewElements(scope,0);
21905 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
21906 Type.name(type,"FileSystem class");
21907}
21908
21909/**
21910 * An element may be an instance of type "FileSystem class".
21911 */
21912private pattern mayInstanceOfFileSystem_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
21913{
21914 find interpretation(problem,interpretation);
21915 PartialInterpretation.newElements(interpretation,element);
21916 neg find mustInstanceOfFSObject_class(problem,interpretation,element);
21917 neg find mustInstanceOfModel_class(problem,interpretation,element);
21918 neg find scopeDisallowsNewFileSystem_class(problem, interpretation);
21919 neg find isPrimitive(element);
21920} or {
21921 find interpretation(problem,interpretation);
21922 PartialInterpretation.openWorldElements(interpretation,element);
21923 neg find mustInstanceOfFSObject_class(problem,interpretation,element);
21924 neg find mustInstanceOfModel_class(problem,interpretation,element);
21925 neg find scopeDisallowsNewFileSystem_class(problem, interpretation);
21926 neg find isPrimitive(element);
21927} or
21928{ find mustInstanceOfFileSystem_class(problem,interpretation,element); }
21929/**
21930 * An element must be an instance of type "FSObject class".
21931 */
21932private pattern mustInstanceOfFSObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
21933 Type.name(type,"FSObject class");
21934 find directInstanceOf(problem,interpretation,element,type);
21935}
21936private pattern scopeDisallowsNewFSObject_class(problem:LogicProblem, interpretation:PartialInterpretation) {
21937 find interpretation(problem,interpretation);
21938 PartialInterpretation.scopes(interpretation,scope);
21939 Scope.targetTypeInterpretation(scope,typeInterpretation);
21940 Scope.maxNewElements(scope,0);
21941 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
21942 Type.name(type,"FSObject class");
21943}
21944
21945/**
21946 * An element may be an instance of type "FSObject class".
21947 */
21948private pattern mayInstanceOfFSObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
21949{
21950 find interpretation(problem,interpretation);
21951 PartialInterpretation.newElements(interpretation,element);
21952 neg find mustInstanceOfFile_class(problem,interpretation,element);
21953 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
21954 neg find mustInstanceOfDir_class(problem,interpretation,element);
21955 neg find mustInstanceOfModel_class(problem,interpretation,element);
21956 neg find scopeDisallowsNewFSObject_class(problem, interpretation);
21957 neg find isPrimitive(element);
21958} or {
21959 find interpretation(problem,interpretation);
21960 PartialInterpretation.openWorldElements(interpretation,element);
21961 neg find mustInstanceOfFile_class(problem,interpretation,element);
21962 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
21963 neg find mustInstanceOfDir_class(problem,interpretation,element);
21964 neg find mustInstanceOfModel_class(problem,interpretation,element);
21965 neg find scopeDisallowsNewFSObject_class(problem, interpretation);
21966 neg find isPrimitive(element);
21967} or
21968{ find mustInstanceOfFSObject_class(problem,interpretation,element); }
21969/**
21970 * An element must be an instance of type "Dir class".
21971 */
21972private pattern mustInstanceOfDir_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
21973 Type.name(type,"Dir class");
21974 find directInstanceOf(problem,interpretation,element,type);
21975}
21976private pattern scopeDisallowsNewDir_class(problem:LogicProblem, interpretation:PartialInterpretation) {
21977 find interpretation(problem,interpretation);
21978 PartialInterpretation.scopes(interpretation,scope);
21979 Scope.targetTypeInterpretation(scope,typeInterpretation);
21980 Scope.maxNewElements(scope,0);
21981 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
21982 Type.name(type,"Dir class");
21983}
21984
21985/**
21986 * An element may be an instance of type "Dir class".
21987 */
21988private pattern mayInstanceOfDir_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
21989{
21990 find interpretation(problem,interpretation);
21991 PartialInterpretation.newElements(interpretation,element);
21992 neg find mustInstanceOfFile_class(problem,interpretation,element);
21993 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
21994 neg find mustInstanceOfModel_class(problem,interpretation,element);
21995 neg find scopeDisallowsNewDir_class(problem, interpretation);
21996 neg find isPrimitive(element);
21997} or {
21998 find interpretation(problem,interpretation);
21999 PartialInterpretation.openWorldElements(interpretation,element);
22000 neg find mustInstanceOfFile_class(problem,interpretation,element);
22001 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
22002 neg find mustInstanceOfModel_class(problem,interpretation,element);
22003 neg find scopeDisallowsNewDir_class(problem, interpretation);
22004 neg find isPrimitive(element);
22005} or
22006{ find mustInstanceOfDir_class(problem,interpretation,element); }
22007/**
22008 * An element must be an instance of type "File class".
22009 */
22010private pattern mustInstanceOfFile_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
22011 Type.name(type,"File class");
22012 find directInstanceOf(problem,interpretation,element,type);
22013}
22014private pattern scopeDisallowsNewFile_class(problem:LogicProblem, interpretation:PartialInterpretation) {
22015 find interpretation(problem,interpretation);
22016 PartialInterpretation.scopes(interpretation,scope);
22017 Scope.targetTypeInterpretation(scope,typeInterpretation);
22018 Scope.maxNewElements(scope,0);
22019 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
22020 Type.name(type,"File class");
22021}
22022
22023/**
22024 * An element may be an instance of type "File class".
22025 */
22026private pattern mayInstanceOfFile_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
22027{
22028 find interpretation(problem,interpretation);
22029 PartialInterpretation.newElements(interpretation,element);
22030 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
22031 neg find mustInstanceOfModel_class(problem,interpretation,element);
22032 neg find mustInstanceOfDir_class(problem,interpretation,element);
22033 neg find scopeDisallowsNewFile_class(problem, interpretation);
22034 neg find isPrimitive(element);
22035} or {
22036 find interpretation(problem,interpretation);
22037 PartialInterpretation.openWorldElements(interpretation,element);
22038 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
22039 neg find mustInstanceOfModel_class(problem,interpretation,element);
22040 neg find mustInstanceOfDir_class(problem,interpretation,element);
22041 neg find scopeDisallowsNewFile_class(problem, interpretation);
22042 neg find isPrimitive(element);
22043} or
22044{ find mustInstanceOfFile_class(problem,interpretation,element); }
22045/**
22046 * An element must be an instance of type "Model class".
22047 */
22048private pattern mustInstanceOfModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
22049 Type.name(type,"Model class");
22050 find directInstanceOf(problem,interpretation,element,type);
22051}
22052private pattern scopeDisallowsNewModel_class(problem:LogicProblem, interpretation:PartialInterpretation) {
22053 find interpretation(problem,interpretation);
22054 PartialInterpretation.scopes(interpretation,scope);
22055 Scope.targetTypeInterpretation(scope,typeInterpretation);
22056 Scope.maxNewElements(scope,0);
22057 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
22058 Type.name(type,"Model class");
22059}
22060
22061/**
22062 * An element may be an instance of type "Model class".
22063 */
22064private pattern mayInstanceOfModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
22065{
22066 find interpretation(problem,interpretation);
22067 PartialInterpretation.newElements(interpretation,element);
22068 neg find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,element);
22069 neg find mustInstanceOfFSObject_class(problem,interpretation,element);
22070 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
22071 neg find scopeDisallowsNewModel_class(problem, interpretation);
22072 neg find isPrimitive(element);
22073} or {
22074 find interpretation(problem,interpretation);
22075 PartialInterpretation.openWorldElements(interpretation,element);
22076 neg find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,element);
22077 neg find mustInstanceOfFSObject_class(problem,interpretation,element);
22078 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
22079 neg find scopeDisallowsNewModel_class(problem, interpretation);
22080 neg find isPrimitive(element);
22081} or
22082{ find mustInstanceOfModel_class(problem,interpretation,element); }
22083/**
22084 * An element must be an instance of type "Model class DefinedPart".
22085 */
22086private pattern mustInstanceOfModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
22087 Type.name(type,"Model class DefinedPart");
22088 find directInstanceOf(problem,interpretation,element,type);
22089}
22090private pattern scopeDisallowsNewModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
22091 find interpretation(problem,interpretation);
22092 PartialInterpretation.scopes(interpretation,scope);
22093 Scope.targetTypeInterpretation(scope,typeInterpretation);
22094 Scope.maxNewElements(scope,0);
22095 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
22096 Type.name(type,"Model class DefinedPart");
22097}
22098
22099/**
22100 * An element may be an instance of type "Model class DefinedPart".
22101 */
22102private pattern mayInstanceOfModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
22103{ find mustInstanceOfModel_class_DefinedPart(problem,interpretation,element); }
22104/**
22105 * An element must be an instance of type "Model class UndefinedPart".
22106 */
22107private pattern mustInstanceOfModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
22108 Type.name(type,"Model class UndefinedPart");
22109 find directInstanceOf(problem,interpretation,element,type);
22110}
22111private pattern scopeDisallowsNewModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
22112 find interpretation(problem,interpretation);
22113 PartialInterpretation.scopes(interpretation,scope);
22114 Scope.targetTypeInterpretation(scope,typeInterpretation);
22115 Scope.maxNewElements(scope,0);
22116 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
22117 Type.name(type,"Model class UndefinedPart");
22118}
22119
22120/**
22121 * An element may be an instance of type "Model class UndefinedPart".
22122 */
22123private pattern mayInstanceOfModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
22124{
22125 find interpretation(problem,interpretation);
22126 PartialInterpretation.newElements(interpretation,element);
22127 neg find mustInstanceOfFSObject_class(problem,interpretation,element);
22128 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
22129 neg find scopeDisallowsNewModel_class_UndefinedPart(problem, interpretation);
22130 neg find isPrimitive(element);
22131} or {
22132 find interpretation(problem,interpretation);
22133 PartialInterpretation.openWorldElements(interpretation,element);
22134 neg find mustInstanceOfFSObject_class(problem,interpretation,element);
22135 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
22136 neg find scopeDisallowsNewModel_class_UndefinedPart(problem, interpretation);
22137 neg find isPrimitive(element);
22138} or
22139{ find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,element); }
22140
22141//////////
22142// 1.2 Relation Declaration Indexers
22143//////////
22144/**
22145 * Matcher for detecting tuples t where []root reference FileSystem(source,target)
22146 */
22147private pattern mustInRelationroot_reference_FileSystem(
22148 problem:LogicProblem, interpretation:PartialInterpretation,
22149 source: DefinedElement, target:DefinedElement)
22150{
22151 find interpretation(problem,interpretation);
22152 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
22153 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"root reference FileSystem");
22154 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
22155 BinaryElementRelationLink.param1(link,source);
22156 BinaryElementRelationLink.param2(link,target);
22157}
22158/**
22159 * Matcher for detecting tuples t where <>root reference FileSystem(source,target)
22160 */
22161private pattern mayInRelationroot_reference_FileSystem(
22162 problem:LogicProblem, interpretation:PartialInterpretation,
22163 source: DefinedElement, target:DefinedElement)
22164{
22165 find interpretation(problem,interpretation);
22166 // The two endpoint of the link have to exist
22167 find mayExist(problem, interpretation, source);
22168 find mayExist(problem, interpretation, target);
22169 // Type consistency
22170 find mayInstanceOfFileSystem_class(problem,interpretation,source);
22171 find mayInstanceOfDir_class(problem,interpretation,target);
22172 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
22173 // the upper bound of the multiplicity should be considered.
22174 numberOfExistingReferences == count find mustInRelationroot_reference_FileSystem(problem,interpretation,source,_);
22175 check(numberOfExistingReferences < 1);
22176 // The reference is containment, then a new reference cannot be create if:
22177 // 1. Multiple parents
22178 neg find mustContains4(problem,interpretation,_,target);
22179 // 2. Circle in the containment hierarchy
22180 neg find mustTransitiveContains(source,target);
22181} or {
22182 find mustInRelationroot_reference_FileSystem(problem,interpretation,source,target);
22183}
22184/**
22185 * Matcher for detecting tuples t where []live reference FileSystem(source,target)
22186 */
22187 private pattern mustInRelationlive_reference_FileSystem(
22188 problem:LogicProblem, interpretation:PartialInterpretation,
22189 source: DefinedElement, target:DefinedElement)
22190 {
22191 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,source,target);
22192 }
22193/**
22194 * Matcher for detecting tuples t where []live reference FileSystem(source,target)
22195 */
22196 private pattern mayInRelationlive_reference_FileSystem(
22197 problem:LogicProblem, interpretation:PartialInterpretation,
22198 source: DefinedElement, target:DefinedElement)
22199 {
22200 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,source,target);
22201 }
22202/**
22203 * Matcher for detecting tuples t where []parent reference FSObject(source,target)
22204 */
22205private pattern mustInRelationparent_reference_FSObject(
22206 problem:LogicProblem, interpretation:PartialInterpretation,
22207 source: DefinedElement, target:DefinedElement)
22208{
22209 find interpretation(problem,interpretation);
22210 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
22211 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"parent reference FSObject");
22212 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
22213 BinaryElementRelationLink.param1(link,source);
22214 BinaryElementRelationLink.param2(link,target);
22215}
22216/**
22217 * Matcher for detecting tuples t where <>parent reference FSObject(source,target)
22218 */
22219private pattern mayInRelationparent_reference_FSObject(
22220 problem:LogicProblem, interpretation:PartialInterpretation,
22221 source: DefinedElement, target:DefinedElement)
22222{
22223 find interpretation(problem,interpretation);
22224 // The two endpoint of the link have to exist
22225 find mayExist(problem, interpretation, source);
22226 find mayExist(problem, interpretation, target);
22227 // Type consistency
22228 find mayInstanceOfFSObject_class(problem,interpretation,source);
22229 find mayInstanceOfDir_class(problem,interpretation,target);
22230 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
22231 // the upper bound of the multiplicity should be considered.
22232 numberOfExistingReferences == count find mustInRelationparent_reference_FSObject(problem,interpretation,source,_);
22233 check(numberOfExistingReferences < 1);
22234 // The eOpposite of the reference is containment, then a referene cannot be created if
22235 // 1. Multiple parents
22236 neg find mustContains4(problem,interpretation,source,_);
22237 // 2. Circle in the containment hierarchy
22238 neg find mustTransitiveContains(source,target);
22239} or {
22240 find mustInRelationparent_reference_FSObject(problem,interpretation,source,target);
22241}
22242/**
22243 * Matcher for detecting tuples t where []contents reference Dir(source,target)
22244 */
22245private pattern mustInRelationcontents_reference_Dir(
22246 problem:LogicProblem, interpretation:PartialInterpretation,
22247 source: DefinedElement, target:DefinedElement)
22248{
22249 find interpretation(problem,interpretation);
22250 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
22251 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"contents reference Dir");
22252 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
22253 BinaryElementRelationLink.param1(link,source);
22254 BinaryElementRelationLink.param2(link,target);
22255}
22256/**
22257 * Matcher for detecting tuples t where <>contents reference Dir(source,target)
22258 */
22259private pattern mayInRelationcontents_reference_Dir(
22260 problem:LogicProblem, interpretation:PartialInterpretation,
22261 source: DefinedElement, target:DefinedElement)
22262{
22263 find interpretation(problem,interpretation);
22264 // The two endpoint of the link have to exist
22265 find mayExist(problem, interpretation, source);
22266 find mayExist(problem, interpretation, target);
22267 // Type consistency
22268 find mayInstanceOfDir_class(problem,interpretation,source);
22269 find mayInstanceOfFSObject_class(problem,interpretation,target);
22270 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
22271 // the upper bound of the opposite reference multiplicity should be considered.
22272 numberOfExistingOppositeReferences == count find mustInRelationparent_reference_FSObject(problem,interpretation,target,_);
22273 check(numberOfExistingOppositeReferences < 1);
22274 // The reference is containment, then a new reference cannot be create if:
22275 // 1. Multiple parents
22276 neg find mustContains4(problem,interpretation,_,target);
22277 // 2. Circle in the containment hierarchy
22278 neg find mustTransitiveContains(source,target);
22279} or {
22280 find mustInRelationcontents_reference_Dir(problem,interpretation,source,target);
22281}
22282/**
22283 * Matcher for detecting tuples t where []filesystems reference Model(source,target)
22284 */
22285private pattern mustInRelationfilesystems_reference_Model(
22286 problem:LogicProblem, interpretation:PartialInterpretation,
22287 source: DefinedElement, target:DefinedElement)
22288{
22289 find interpretation(problem,interpretation);
22290 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
22291 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"filesystems reference Model");
22292 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
22293 BinaryElementRelationLink.param1(link,source);
22294 BinaryElementRelationLink.param2(link,target);
22295}
22296/**
22297 * Matcher for detecting tuples t where <>filesystems reference Model(source,target)
22298 */
22299private pattern mayInRelationfilesystems_reference_Model(
22300 problem:LogicProblem, interpretation:PartialInterpretation,
22301 source: DefinedElement, target:DefinedElement)
22302{
22303 find interpretation(problem,interpretation);
22304 // The two endpoint of the link have to exist
22305 find mayExist(problem, interpretation, source);
22306 find mayExist(problem, interpretation, target);
22307 // Type consistency
22308 find mayInstanceOfModel_class(problem,interpretation,source);
22309 find mayInstanceOfFileSystem_class(problem,interpretation,target);
22310 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
22311 // the upper bound of the multiplicity should be considered.
22312 numberOfExistingReferences == count find mustInRelationfilesystems_reference_Model(problem,interpretation,source,_);
22313 check(numberOfExistingReferences < 1);
22314 // The reference is containment, then a new reference cannot be create if:
22315 // 1. Multiple parents
22316 neg find mustContains4(problem,interpretation,_,target);
22317 // 2. Circle in the containment hierarchy
22318 neg find mustTransitiveContains(source,target);
22319} or {
22320 find mustInRelationfilesystems_reference_Model(problem,interpretation,source,target);
22321}
22322/**
22323 * Matcher for detecting tuples t where []otherFSObjects reference Model(source,target)
22324 */
22325private pattern mustInRelationotherFSObjects_reference_Model(
22326 problem:LogicProblem, interpretation:PartialInterpretation,
22327 source: DefinedElement, target:DefinedElement)
22328{
22329 find interpretation(problem,interpretation);
22330 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
22331 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"otherFSObjects reference Model");
22332 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
22333 BinaryElementRelationLink.param1(link,source);
22334 BinaryElementRelationLink.param2(link,target);
22335}
22336/**
22337 * Matcher for detecting tuples t where <>otherFSObjects reference Model(source,target)
22338 */
22339private pattern mayInRelationotherFSObjects_reference_Model(
22340 problem:LogicProblem, interpretation:PartialInterpretation,
22341 source: DefinedElement, target:DefinedElement)
22342{
22343 find interpretation(problem,interpretation);
22344 // The two endpoint of the link have to exist
22345 find mayExist(problem, interpretation, source);
22346 find mayExist(problem, interpretation, target);
22347 // Type consistency
22348 find mayInstanceOfModel_class(problem,interpretation,source);
22349 find mayInstanceOfFSObject_class(problem,interpretation,target);
22350 // The reference is containment, then a new reference cannot be create if:
22351 // 1. Multiple parents
22352 neg find mustContains4(problem,interpretation,_,target);
22353 // 2. Circle in the containment hierarchy
22354 neg find mustTransitiveContains(source,target);
22355} or {
22356 find mustInRelationotherFSObjects_reference_Model(problem,interpretation,source,target);
22357}
22358
22359//////////
22360// 1.3 Relation Definition Indexers
22361//////////
22362// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test filesystem queries patternContent
22363private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(
22364 problem:LogicProblem, interpretation:PartialInterpretation,
22365 var_o1, var_o2)
22366{
22367 find interpretation(problem,interpretation);
22368 find mustInstanceOfFSObject_class(problem,interpretation,var_o1);
22369 find mustInstanceOfFSObject_class(problem,interpretation,var_o2);
22370 // o1 is exported
22371 // o2 is exported
22372 find mustInstanceOfDir_class(problem,interpretation,var_o1);
22373 find mustInRelationcontents_reference_Dir(problem,interpretation,var_o1,var_virtual0);
22374 find mustInstanceOfFSObject_class(problem,interpretation,var_virtual0);
22375 var_virtual0 == var_o2;
22376}
22377private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(
22378 problem:LogicProblem, interpretation:PartialInterpretation,
22379 var_o1, var_o2)
22380{
22381 find interpretation(problem,interpretation);
22382 find mayInstanceOfFSObject_class(problem,interpretation,var_o1);
22383 find mayInstanceOfFSObject_class(problem,interpretation,var_o2);
22384 // o1 is exported
22385 // o2 is exported
22386 find mayInstanceOfDir_class(problem,interpretation,var_o1);
22387 find mayInRelationcontents_reference_Dir(problem,interpretation,var_o1,var_virtual0);
22388 find mayInstanceOfFSObject_class(problem,interpretation,var_virtual0);
22389 find mayEquivalent(problem, interpretation, var_virtual0, var_o2);
22390}
22391private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(
22392 problem:LogicProblem, interpretation:PartialInterpretation,
22393 var_o1, var_o2)
22394{
22395 find interpretation(problem,interpretation);
22396 find mustInstanceOfFSObject_class(problem,interpretation,var_o1);
22397 find mustInstanceOfFSObject_class(problem,interpretation,var_o2);
22398 // o1 is exported
22399 // o2 is exported
22400 find mustInstanceOfDir_class(problem,interpretation,var_o1);
22401 find mustInRelationcontents_reference_Dir(problem,interpretation,var_o1,var_virtual0);
22402 find mustInstanceOfFSObject_class(problem,interpretation,var_virtual0);
22403 var_virtual0 == var_o2;
22404}
22405private pattern twoParam_mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(var_o1, var_o2) {
22406 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(_,_,var_o1, var_o2);
22407}
22408private pattern twoParam_mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(var_o1, var_o2) {
22409 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(_,_,var_o1, var_o2);
22410}
22411private pattern twoParam_currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(var_o1, var_o2) {
22412 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(_,_,var_o1, var_o2);
22413}
22414// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test filesystem queries live
22415private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(
22416 problem:LogicProblem, interpretation:PartialInterpretation,
22417 var_this, var_l)
22418{
22419 find interpretation(problem,interpretation);
22420 find mustInstanceOfFileSystem_class(problem,interpretation,var_this);
22421 find mustInstanceOfFSObject_class(problem,interpretation,var_l);
22422 // this is exported
22423 // l is exported
22424 find mustInstanceOfFileSystem_class(problem,interpretation,var_this);
22425 find mustInRelationroot_reference_FileSystem(problem,interpretation,var_this,var_virtual0);
22426 find mustInstanceOfDir_class(problem,interpretation,var_virtual0);
22427 var_virtual0 == var_l;
22428}or{
22429 find interpretation(problem,interpretation);
22430 find mustInstanceOfFileSystem_class(problem,interpretation,var_this);
22431 find mustInstanceOfFSObject_class(problem,interpretation,var_l);
22432 // this is exported
22433 // l is exported
22434 find mustInstanceOfFileSystem_class(problem,interpretation,var_this);
22435 find mustInRelationroot_reference_FileSystem(problem,interpretation,var_this,var_virtual0);
22436 find mustInstanceOfDir_class(problem,interpretation,var_virtual0);
22437 var_virtual0 == var_root;
22438 find twoParam_mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent+(var_root,var_l);
22439}
22440private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(
22441 problem:LogicProblem, interpretation:PartialInterpretation,
22442 var_this, var_l)
22443{
22444 find interpretation(problem,interpretation);
22445 find mayInstanceOfFileSystem_class(problem,interpretation,var_this);
22446 find mayInstanceOfFSObject_class(problem,interpretation,var_l);
22447 // this is exported
22448 // l is exported
22449 find mayInstanceOfFileSystem_class(problem,interpretation,var_this);
22450 find mayInRelationroot_reference_FileSystem(problem,interpretation,var_this,var_virtual0);
22451 find mayInstanceOfDir_class(problem,interpretation,var_virtual0);
22452 find mayEquivalent(problem, interpretation, var_virtual0, var_l);
22453}or{
22454 find interpretation(problem,interpretation);
22455 find mayInstanceOfFileSystem_class(problem,interpretation,var_this);
22456 find mayInstanceOfFSObject_class(problem,interpretation,var_l);
22457 // this is exported
22458 // l is exported
22459 find mayInstanceOfFileSystem_class(problem,interpretation,var_this);
22460 find mayInRelationroot_reference_FileSystem(problem,interpretation,var_this,var_virtual0);
22461 find mayInstanceOfDir_class(problem,interpretation,var_virtual0);
22462 find mayEquivalent(problem, interpretation, var_virtual0, var_root);
22463 find twoParam_mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent+(var_root,var_l);
22464}
22465private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(
22466 problem:LogicProblem, interpretation:PartialInterpretation,
22467 var_this, var_l)
22468{
22469 find interpretation(problem,interpretation);
22470 find mustInstanceOfFileSystem_class(problem,interpretation,var_this);
22471 find mustInstanceOfFSObject_class(problem,interpretation,var_l);
22472 // this is exported
22473 // l is exported
22474 find mustInstanceOfFileSystem_class(problem,interpretation,var_this);
22475 find mustInRelationroot_reference_FileSystem(problem,interpretation,var_this,var_virtual0);
22476 find mustInstanceOfDir_class(problem,interpretation,var_virtual0);
22477 var_virtual0 == var_l;
22478}or{
22479 find interpretation(problem,interpretation);
22480 find mustInstanceOfFileSystem_class(problem,interpretation,var_this);
22481 find mustInstanceOfFSObject_class(problem,interpretation,var_l);
22482 // this is exported
22483 // l is exported
22484 find mustInstanceOfFileSystem_class(problem,interpretation,var_this);
22485 find mustInRelationroot_reference_FileSystem(problem,interpretation,var_this,var_virtual0);
22486 find mustInstanceOfDir_class(problem,interpretation,var_virtual0);
22487 var_virtual0 == var_root;
22488 find twoParam_currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent+(var_root,var_l);
22489}
22490// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test filesystem queries contentInNotLive
22491private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive(
22492 problem:LogicProblem, interpretation:PartialInterpretation,
22493 var_parent, var_child)
22494{
22495 find interpretation(problem,interpretation);
22496 find mustInstanceOfDir_class(problem,interpretation,var_parent);
22497 find mustInstanceOfFSObject_class(problem,interpretation,var_child);
22498 // parent is exported
22499 // child is exported
22500 find mustInstanceOfDir_class(problem,interpretation,var_parent);
22501 find mustInRelationcontents_reference_Dir(problem,interpretation,var_parent,var_virtual0);
22502 find mustInstanceOfFSObject_class(problem,interpretation,var_virtual0);
22503 var_virtual0 == var_child;
22504 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,_var__0,var_parent);
22505}or{
22506 find interpretation(problem,interpretation);
22507 find mustInstanceOfDir_class(problem,interpretation,var_parent);
22508 find mustInstanceOfFSObject_class(problem,interpretation,var_child);
22509 // parent is exported
22510 // child is exported
22511 find mustInstanceOfDir_class(problem,interpretation,var_parent);
22512 find mustInRelationcontents_reference_Dir(problem,interpretation,var_parent,var_virtual0);
22513 find mustInstanceOfFSObject_class(problem,interpretation,var_virtual0);
22514 var_virtual0 == var_child;
22515 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,_var__0,var_child);
22516}
22517private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive(
22518 problem:LogicProblem, interpretation:PartialInterpretation,
22519 var_parent, var_child)
22520{
22521 find interpretation(problem,interpretation);
22522 find mayInstanceOfDir_class(problem,interpretation,var_parent);
22523 find mayInstanceOfFSObject_class(problem,interpretation,var_child);
22524 // parent is exported
22525 // child is exported
22526 find mayInstanceOfDir_class(problem,interpretation,var_parent);
22527 find mayInRelationcontents_reference_Dir(problem,interpretation,var_parent,var_virtual0);
22528 find mayInstanceOfFSObject_class(problem,interpretation,var_virtual0);
22529 find mayEquivalent(problem, interpretation, var_virtual0, var_child);
22530 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,_var__0,var_parent);
22531}or{
22532 find interpretation(problem,interpretation);
22533 find mayInstanceOfDir_class(problem,interpretation,var_parent);
22534 find mayInstanceOfFSObject_class(problem,interpretation,var_child);
22535 // parent is exported
22536 // child is exported
22537 find mayInstanceOfDir_class(problem,interpretation,var_parent);
22538 find mayInRelationcontents_reference_Dir(problem,interpretation,var_parent,var_virtual0);
22539 find mayInstanceOfFSObject_class(problem,interpretation,var_virtual0);
22540 find mayEquivalent(problem, interpretation, var_virtual0, var_child);
22541 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,_var__0,var_child);
22542}
22543private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive(
22544 problem:LogicProblem, interpretation:PartialInterpretation,
22545 var_parent, var_child)
22546{
22547 find interpretation(problem,interpretation);
22548 find mustInstanceOfDir_class(problem,interpretation,var_parent);
22549 find mustInstanceOfFSObject_class(problem,interpretation,var_child);
22550 // parent is exported
22551 // child is exported
22552 find mustInstanceOfDir_class(problem,interpretation,var_parent);
22553 find mustInRelationcontents_reference_Dir(problem,interpretation,var_parent,var_virtual0);
22554 find mustInstanceOfFSObject_class(problem,interpretation,var_virtual0);
22555 var_virtual0 == var_child;
22556 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,_var__0,var_parent);
22557}or{
22558 find interpretation(problem,interpretation);
22559 find mustInstanceOfDir_class(problem,interpretation,var_parent);
22560 find mustInstanceOfFSObject_class(problem,interpretation,var_child);
22561 // parent is exported
22562 // child is exported
22563 find mustInstanceOfDir_class(problem,interpretation,var_parent);
22564 find mustInRelationcontents_reference_Dir(problem,interpretation,var_parent,var_virtual0);
22565 find mustInstanceOfFSObject_class(problem,interpretation,var_virtual0);
22566 var_virtual0 == var_child;
22567 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,_var__0,var_child);
22568}
22569
22570//////////
22571// 1.4 Containment Indexer
22572//////////
22573private pattern mustContains2(source: DefinedElement, target: DefinedElement) {
22574 find mustContains4(_,_,source,target);
22575}
22576
22577private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation,
22578 source: DefinedElement, target: DefinedElement)
22579 { find mustInRelationroot_reference_FileSystem(problem,interpretation,source,target); }or
22580
22581 { find mustInRelationcontents_reference_Dir(problem,interpretation,source,target); }or
22582
22583 { find mustInRelationfilesystems_reference_Model(problem,interpretation,source,target); }or
22584
22585 { find mustInRelationotherFSObjects_reference_Model(problem,interpretation,source,target); }
22586
22587private pattern mustTransitiveContains(source,target) {
22588 find mustContains2+(source,target);
22589}
22590
22591//////////
22592// 2. Invalidation Indexers
22593//////////
22594// 2.1 Invalidated by WF Queries
22595//////////
22596pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive(problem:LogicProblem, interpretation:PartialInterpretation,
22597 var_parent, var_child)
22598{
22599 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive(problem,interpretation,var_parent,var_child);
22600}
22601
22602//////////
22603// 3. Unfinishedness Indexers
22604//////////
22605// 3.1 Unfinishedness Measured by Multiplicity
22606//////////
22607pattern unfinishedLowerMultiplicity_root_reference_FileSystem(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) {
22608 find interpretation(problem,interpretation);
22609 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
22610 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"root reference FileSystem");
22611 find mustInstanceOfFileSystem_class(problem,interpretation,object);
22612 numberOfExistingReferences == count find mustInRelationroot_reference_FileSystem(problem,interpretation,object,_);
22613 check(numberOfExistingReferences < 1);
22614 missingMultiplicity == eval(1-numberOfExistingReferences);
22615}
22616pattern unfinishedLowerMultiplicity_filesystems_reference_Model(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) {
22617 find interpretation(problem,interpretation);
22618 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
22619 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"filesystems reference Model");
22620 find mustInstanceOfModel_class(problem,interpretation,object);
22621 numberOfExistingReferences == count find mustInRelationfilesystems_reference_Model(problem,interpretation,object,_);
22622 check(numberOfExistingReferences < 1);
22623 missingMultiplicity == eval(1-numberOfExistingReferences);
22624}
22625
22626//////////
22627// 3.2 Unfinishedness Measured by WF Queries
22628//////////
22629pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive(problem:LogicProblem, interpretation:PartialInterpretation,
22630 var_parent, var_child)
22631{
22632 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive(problem,interpretation,var_parent,var_child);
22633}
22634
22635//////////
22636// 4. Refinement Indexers
22637//////////
22638// 4.1 Object constructors
22639//////////
22640private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation)
22641{
22642 find interpretation(problem,interpretation);
22643 find mustInstanceOfModel_class(problem,interpretation,root);
22644 find mustExist(problem, interpretation, root);
22645}or{
22646 find interpretation(problem,interpretation);
22647 find mustInstanceOfFile_class(problem,interpretation,root);
22648 find mustExist(problem, interpretation, root);
22649}or{
22650 find interpretation(problem,interpretation);
22651 find mustInstanceOfFSObject_class(problem,interpretation,root);
22652 find mustExist(problem, interpretation, root);
22653}or{
22654 find interpretation(problem,interpretation);
22655 find mustInstanceOfFileSystem_class(problem,interpretation,root);
22656 find mustExist(problem, interpretation, root);
22657}or{
22658 find interpretation(problem,interpretation);
22659 find mustInstanceOfDir_class(problem,interpretation,root);
22660 find mustExist(problem, interpretation, root);
22661}or{
22662 find interpretation(problem,interpretation);
22663 find mustInstanceOfModel_class_DefinedPart(problem,interpretation,root);
22664 find mustExist(problem, interpretation, root);
22665}or{
22666 find interpretation(problem,interpretation);
22667 find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,root);
22668 find mustExist(problem, interpretation, root);
22669}
22670pattern createObject_Model_class_UndefinedPart(
22671 problem:LogicProblem, interpretation:PartialInterpretation,
22672 typeInterpretation:PartialComplexTypeInterpretation)
22673{
22674 find interpretation(problem,interpretation);
22675 neg find hasElementInContainment(problem,interpretation);
22676 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
22677 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Model class UndefinedPart");
22678 find mayInstanceOfModel_class_UndefinedPart(problem,interpretation,newObject);
22679 find mayExist(problem, interpretation, newObject);
22680 neg find mustExist(problem, interpretation, newObject);
22681}
22682pattern createObject_File_class_by_contents_reference_Dir_with_parent_reference_FSObject(
22683 problem:LogicProblem, interpretation:PartialInterpretation,
22684 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
22685 container:DefinedElement)
22686{
22687 find interpretation(problem,interpretation);
22688 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
22689 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"File class");
22690 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
22691 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"contents reference Dir");
22692 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
22693 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FSObject");
22694 find mustInstanceOfDir_class(problem,interpretation,container);
22695 find mayInstanceOfFile_class(problem,interpretation,newObject);
22696 find mayInRelationcontents_reference_Dir(problem,interpretation,container,newObject);
22697 find mustExist(problem, interpretation, container);
22698 neg find mustExist(problem, interpretation, newObject);
22699}
22700pattern createObject_File_class_by_otherFSObjects_reference_Model(
22701 problem:LogicProblem, interpretation:PartialInterpretation,
22702 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
22703 container:DefinedElement)
22704{
22705 find interpretation(problem,interpretation);
22706 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
22707 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"File class");
22708 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
22709 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"otherFSObjects reference Model");
22710 find mustInstanceOfModel_class(problem,interpretation,container);
22711 find mayInstanceOfFile_class(problem,interpretation,newObject);
22712 find mayInRelationotherFSObjects_reference_Model(problem,interpretation,container,newObject);
22713 find mustExist(problem, interpretation, container);
22714 neg find mustExist(problem, interpretation, newObject);
22715}
22716pattern createObject_File_class(
22717 problem:LogicProblem, interpretation:PartialInterpretation,
22718 typeInterpretation:PartialComplexTypeInterpretation)
22719{
22720 find interpretation(problem,interpretation);
22721 neg find hasElementInContainment(problem,interpretation);
22722 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
22723 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"File class");
22724 find mayInstanceOfFile_class(problem,interpretation,newObject);
22725 find mayExist(problem, interpretation, newObject);
22726 neg find mustExist(problem, interpretation, newObject);
22727}
22728pattern createObject_FileSystem_class_by_filesystems_reference_Model(
22729 problem:LogicProblem, interpretation:PartialInterpretation,
22730 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
22731 container:DefinedElement)
22732{
22733 find interpretation(problem,interpretation);
22734 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
22735 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FileSystem class");
22736 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
22737 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"filesystems reference Model");
22738 find mustInstanceOfModel_class(problem,interpretation,container);
22739 find mayInstanceOfFileSystem_class(problem,interpretation,newObject);
22740 find mayInRelationfilesystems_reference_Model(problem,interpretation,container,newObject);
22741 find mustExist(problem, interpretation, container);
22742 neg find mustExist(problem, interpretation, newObject);
22743}
22744pattern createObject_FileSystem_class(
22745 problem:LogicProblem, interpretation:PartialInterpretation,
22746 typeInterpretation:PartialComplexTypeInterpretation)
22747{
22748 find interpretation(problem,interpretation);
22749 neg find hasElementInContainment(problem,interpretation);
22750 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
22751 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FileSystem class");
22752 find mayInstanceOfFileSystem_class(problem,interpretation,newObject);
22753 find mayExist(problem, interpretation, newObject);
22754 neg find mustExist(problem, interpretation, newObject);
22755}
22756pattern createObject_Dir_class_by_root_reference_FileSystem(
22757 problem:LogicProblem, interpretation:PartialInterpretation,
22758 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
22759 container:DefinedElement)
22760{
22761 find interpretation(problem,interpretation);
22762 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
22763 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Dir class");
22764 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
22765 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"root reference FileSystem");
22766 find mustInstanceOfFileSystem_class(problem,interpretation,container);
22767 find mayInstanceOfDir_class(problem,interpretation,newObject);
22768 find mayInRelationroot_reference_FileSystem(problem,interpretation,container,newObject);
22769 find mustExist(problem, interpretation, container);
22770 neg find mustExist(problem, interpretation, newObject);
22771}
22772pattern createObject_Dir_class_by_contents_reference_Dir_with_parent_reference_FSObject(
22773 problem:LogicProblem, interpretation:PartialInterpretation,
22774 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
22775 container:DefinedElement)
22776{
22777 find interpretation(problem,interpretation);
22778 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
22779 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Dir class");
22780 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
22781 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"contents reference Dir");
22782 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
22783 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FSObject");
22784 find mustInstanceOfDir_class(problem,interpretation,container);
22785 find mayInstanceOfDir_class(problem,interpretation,newObject);
22786 find mayInRelationcontents_reference_Dir(problem,interpretation,container,newObject);
22787 find mustExist(problem, interpretation, container);
22788 neg find mustExist(problem, interpretation, newObject);
22789}
22790pattern createObject_Dir_class_by_otherFSObjects_reference_Model(
22791 problem:LogicProblem, interpretation:PartialInterpretation,
22792 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
22793 container:DefinedElement)
22794{
22795 find interpretation(problem,interpretation);
22796 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
22797 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Dir class");
22798 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
22799 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"otherFSObjects reference Model");
22800 find mustInstanceOfModel_class(problem,interpretation,container);
22801 find mayInstanceOfDir_class(problem,interpretation,newObject);
22802 find mayInRelationotherFSObjects_reference_Model(problem,interpretation,container,newObject);
22803 find mustExist(problem, interpretation, container);
22804 neg find mustExist(problem, interpretation, newObject);
22805}
22806pattern createObject_Dir_class(
22807 problem:LogicProblem, interpretation:PartialInterpretation,
22808 typeInterpretation:PartialComplexTypeInterpretation)
22809{
22810 find interpretation(problem,interpretation);
22811 neg find hasElementInContainment(problem,interpretation);
22812 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
22813 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Dir class");
22814 find mayInstanceOfDir_class(problem,interpretation,newObject);
22815 find mayExist(problem, interpretation, newObject);
22816 neg find mustExist(problem, interpretation, newObject);
22817}
22818
22819//////////
22820// 4.2 Type refinement
22821//////////
22822pattern refineTypeTo_Model_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
22823 find interpretation(problem,interpretation);
22824 PartialInterpretation.newElements(interpretation,element);
22825 find mayInstanceOfModel_class_UndefinedPart(problem,interpretation,element);
22826 neg find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,element);
22827 neg find mustInstanceOfFSObject_class(problem,interpretation,element);
22828 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
22829}
22830pattern refineTypeTo_File_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
22831 find interpretation(problem,interpretation);
22832 PartialInterpretation.newElements(interpretation,element);
22833 find mayInstanceOfFile_class(problem,interpretation,element);
22834 neg find mustInstanceOfFile_class(problem,interpretation,element);
22835 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
22836 neg find mustInstanceOfModel_class(problem,interpretation,element);
22837 neg find mustInstanceOfDir_class(problem,interpretation,element);
22838}
22839pattern refineTypeTo_FileSystem_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
22840 find interpretation(problem,interpretation);
22841 PartialInterpretation.newElements(interpretation,element);
22842 find mayInstanceOfFileSystem_class(problem,interpretation,element);
22843 neg find mustInstanceOfFSObject_class(problem,interpretation,element);
22844 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
22845 neg find mustInstanceOfModel_class(problem,interpretation,element);
22846}
22847pattern refineTypeTo_Dir_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
22848 find interpretation(problem,interpretation);
22849 PartialInterpretation.newElements(interpretation,element);
22850 find mayInstanceOfDir_class(problem,interpretation,element);
22851 neg find mustInstanceOfFile_class(problem,interpretation,element);
22852 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
22853 neg find mustInstanceOfDir_class(problem,interpretation,element);
22854 neg find mustInstanceOfModel_class(problem,interpretation,element);
22855}
22856
22857//////////
22858// 4.3 Relation refinement
22859//////////
22860pattern refineRelation_live_reference_FileSystem(
22861 problem:LogicProblem, interpretation:PartialInterpretation,
22862 relationIterpretation:PartialRelationInterpretation,
22863 from: DefinedElement, to: DefinedElement)
22864{
22865 find interpretation(problem,interpretation);
22866 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
22867 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"live reference FileSystem");
22868 find mustExist(problem, interpretation, from);
22869 find mustExist(problem, interpretation, to);
22870 find mustInstanceOfFileSystem_class(problem,interpretation,from);
22871 find mustInstanceOfFSObject_class(problem,interpretation,to);
22872 find mayInRelationlive_reference_FileSystem(problem,interpretation,from,to);
22873 neg find mustInRelationlive_reference_FileSystem(problem,interpretation,from,to);
22874}
22875import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage"
22876import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem"
22877import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language"
22878
22879//////////
22880// 0. Util
22881//////////
22882private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) {
22883 PartialInterpretation.problem(interpretation,problem);
22884}
22885
22886/////////////////////////
22887// 0.1 Existence
22888/////////////////////////
22889private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
22890 find interpretation(problem,interpretation);
22891 LogicProblem.elements(problem,element);
22892} or {
22893 find interpretation(problem,interpretation);
22894 PartialInterpretation.newElements(interpretation,element);
22895}
22896
22897private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
22898 find mustExist(problem,interpretation,element);
22899} or {
22900 find interpretation(problem,interpretation);
22901 neg find elementCloseWorld(element);
22902 PartialInterpretation.openWorldElements(interpretation,element);
22903}
22904
22905private pattern elementCloseWorld(element:DefinedElement) {
22906 PartialInterpretation.openWorldElements(i,element);
22907 PartialInterpretation.maxNewElements(i,0);
22908} or {
22909 Scope.targetTypeInterpretation(scope,interpretation);
22910 PartialTypeInterpratation.elements(interpretation,element);
22911 Scope.maxNewElements(scope,0);
22912}
22913
22914////////////////////////
22915// 0.2 Equivalence
22916////////////////////////
22917pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) {
22918 find mayExist(problem,interpretation,a);
22919 find mayExist(problem,interpretation,b);
22920 a == b;
22921}
22922
22923////////////////////////
22924// 0.3 Required Patterns by TypeIndexer
22925////////////////////////
22926private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) {
22927 find interpretation(problem,interpretation);
22928 LogicProblem.types(problem,type);
22929 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
22930 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
22931}
22932
22933private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) {
22934 find interpretation(problem,interpretation);
22935 LogicProblem.types(problem,type);
22936 TypeDefinition.elements(type,element);
22937} or {
22938 find interpretation(problem,interpretation);
22939 find typeInterpretation(problem,interpretation,type,typeInterpretation);
22940 PartialComplexTypeInterpretation.elements(typeInterpretation,element);
22941}
22942
22943private pattern isPrimitive(element: PrimitiveElement) {
22944 PrimitiveElement(element);
22945}
22946
22947//////////
22948// 1. Problem-Specific Base Indexers
22949//////////
22950// 1.1 Type Indexers
22951//////////
22952// 1.1.1 primitive Type Indexers
22953//////////
22954
22955//////////
22956// 1.1.2 domain-specific Type Indexers
22957//////////
22958/**
22959 * An element must be an instance of type "FileSystem class".
22960 */
22961private pattern mustInstanceOfFileSystem_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
22962 Type.name(type,"FileSystem class");
22963 find directInstanceOf(problem,interpretation,element,type);
22964}
22965private pattern scopeDisallowsNewFileSystem_class(problem:LogicProblem, interpretation:PartialInterpretation) {
22966 find interpretation(problem,interpretation);
22967 PartialInterpretation.scopes(interpretation,scope);
22968 Scope.targetTypeInterpretation(scope,typeInterpretation);
22969 Scope.maxNewElements(scope,0);
22970 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
22971 Type.name(type,"FileSystem class");
22972}
22973
22974/**
22975 * An element may be an instance of type "FileSystem class".
22976 */
22977private pattern mayInstanceOfFileSystem_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
22978{
22979 find interpretation(problem,interpretation);
22980 PartialInterpretation.newElements(interpretation,element);
22981 neg find mustInstanceOfFSObject_class(problem,interpretation,element);
22982 neg find mustInstanceOfModel_class(problem,interpretation,element);
22983 neg find scopeDisallowsNewFileSystem_class(problem, interpretation);
22984 neg find isPrimitive(element);
22985} or {
22986 find interpretation(problem,interpretation);
22987 PartialInterpretation.openWorldElements(interpretation,element);
22988 neg find mustInstanceOfFSObject_class(problem,interpretation,element);
22989 neg find mustInstanceOfModel_class(problem,interpretation,element);
22990 neg find scopeDisallowsNewFileSystem_class(problem, interpretation);
22991 neg find isPrimitive(element);
22992} or
22993{ find mustInstanceOfFileSystem_class(problem,interpretation,element); }
22994/**
22995 * An element must be an instance of type "FSObject class".
22996 */
22997private pattern mustInstanceOfFSObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
22998 Type.name(type,"FSObject class");
22999 find directInstanceOf(problem,interpretation,element,type);
23000}
23001private pattern scopeDisallowsNewFSObject_class(problem:LogicProblem, interpretation:PartialInterpretation) {
23002 find interpretation(problem,interpretation);
23003 PartialInterpretation.scopes(interpretation,scope);
23004 Scope.targetTypeInterpretation(scope,typeInterpretation);
23005 Scope.maxNewElements(scope,0);
23006 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
23007 Type.name(type,"FSObject class");
23008}
23009
23010/**
23011 * An element may be an instance of type "FSObject class".
23012 */
23013private pattern mayInstanceOfFSObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
23014{
23015 find interpretation(problem,interpretation);
23016 PartialInterpretation.newElements(interpretation,element);
23017 neg find mustInstanceOfDir_class(problem,interpretation,element);
23018 neg find mustInstanceOfFile_class(problem,interpretation,element);
23019 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
23020 neg find mustInstanceOfModel_class(problem,interpretation,element);
23021 neg find scopeDisallowsNewFSObject_class(problem, interpretation);
23022 neg find isPrimitive(element);
23023} or {
23024 find interpretation(problem,interpretation);
23025 PartialInterpretation.openWorldElements(interpretation,element);
23026 neg find mustInstanceOfDir_class(problem,interpretation,element);
23027 neg find mustInstanceOfFile_class(problem,interpretation,element);
23028 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
23029 neg find mustInstanceOfModel_class(problem,interpretation,element);
23030 neg find scopeDisallowsNewFSObject_class(problem, interpretation);
23031 neg find isPrimitive(element);
23032} or
23033{ find mustInstanceOfFSObject_class(problem,interpretation,element); }
23034/**
23035 * An element must be an instance of type "Dir class".
23036 */
23037private pattern mustInstanceOfDir_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
23038 Type.name(type,"Dir class");
23039 find directInstanceOf(problem,interpretation,element,type);
23040}
23041private pattern scopeDisallowsNewDir_class(problem:LogicProblem, interpretation:PartialInterpretation) {
23042 find interpretation(problem,interpretation);
23043 PartialInterpretation.scopes(interpretation,scope);
23044 Scope.targetTypeInterpretation(scope,typeInterpretation);
23045 Scope.maxNewElements(scope,0);
23046 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
23047 Type.name(type,"Dir class");
23048}
23049
23050/**
23051 * An element may be an instance of type "Dir class".
23052 */
23053private pattern mayInstanceOfDir_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
23054{
23055 find interpretation(problem,interpretation);
23056 PartialInterpretation.newElements(interpretation,element);
23057 neg find mustInstanceOfFile_class(problem,interpretation,element);
23058 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
23059 neg find mustInstanceOfModel_class(problem,interpretation,element);
23060 neg find scopeDisallowsNewDir_class(problem, interpretation);
23061 neg find isPrimitive(element);
23062} or {
23063 find interpretation(problem,interpretation);
23064 PartialInterpretation.openWorldElements(interpretation,element);
23065 neg find mustInstanceOfFile_class(problem,interpretation,element);
23066 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
23067 neg find mustInstanceOfModel_class(problem,interpretation,element);
23068 neg find scopeDisallowsNewDir_class(problem, interpretation);
23069 neg find isPrimitive(element);
23070} or
23071{ find mustInstanceOfDir_class(problem,interpretation,element); }
23072/**
23073 * An element must be an instance of type "File class".
23074 */
23075private pattern mustInstanceOfFile_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
23076 Type.name(type,"File class");
23077 find directInstanceOf(problem,interpretation,element,type);
23078}
23079private pattern scopeDisallowsNewFile_class(problem:LogicProblem, interpretation:PartialInterpretation) {
23080 find interpretation(problem,interpretation);
23081 PartialInterpretation.scopes(interpretation,scope);
23082 Scope.targetTypeInterpretation(scope,typeInterpretation);
23083 Scope.maxNewElements(scope,0);
23084 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
23085 Type.name(type,"File class");
23086}
23087
23088/**
23089 * An element may be an instance of type "File class".
23090 */
23091private pattern mayInstanceOfFile_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
23092{
23093 find interpretation(problem,interpretation);
23094 PartialInterpretation.newElements(interpretation,element);
23095 neg find mustInstanceOfDir_class(problem,interpretation,element);
23096 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
23097 neg find mustInstanceOfModel_class(problem,interpretation,element);
23098 neg find scopeDisallowsNewFile_class(problem, interpretation);
23099 neg find isPrimitive(element);
23100} or {
23101 find interpretation(problem,interpretation);
23102 PartialInterpretation.openWorldElements(interpretation,element);
23103 neg find mustInstanceOfDir_class(problem,interpretation,element);
23104 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
23105 neg find mustInstanceOfModel_class(problem,interpretation,element);
23106 neg find scopeDisallowsNewFile_class(problem, interpretation);
23107 neg find isPrimitive(element);
23108} or
23109{ find mustInstanceOfFile_class(problem,interpretation,element); }
23110/**
23111 * An element must be an instance of type "Model class".
23112 */
23113private pattern mustInstanceOfModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
23114 Type.name(type,"Model class");
23115 find directInstanceOf(problem,interpretation,element,type);
23116}
23117private pattern scopeDisallowsNewModel_class(problem:LogicProblem, interpretation:PartialInterpretation) {
23118 find interpretation(problem,interpretation);
23119 PartialInterpretation.scopes(interpretation,scope);
23120 Scope.targetTypeInterpretation(scope,typeInterpretation);
23121 Scope.maxNewElements(scope,0);
23122 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
23123 Type.name(type,"Model class");
23124}
23125
23126/**
23127 * An element may be an instance of type "Model class".
23128 */
23129private pattern mayInstanceOfModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
23130{
23131 find interpretation(problem,interpretation);
23132 PartialInterpretation.newElements(interpretation,element);
23133 neg find mustInstanceOfFSObject_class(problem,interpretation,element);
23134 neg find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,element);
23135 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
23136 neg find scopeDisallowsNewModel_class(problem, interpretation);
23137 neg find isPrimitive(element);
23138} or {
23139 find interpretation(problem,interpretation);
23140 PartialInterpretation.openWorldElements(interpretation,element);
23141 neg find mustInstanceOfFSObject_class(problem,interpretation,element);
23142 neg find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,element);
23143 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
23144 neg find scopeDisallowsNewModel_class(problem, interpretation);
23145 neg find isPrimitive(element);
23146} or
23147{ find mustInstanceOfModel_class(problem,interpretation,element); }
23148/**
23149 * An element must be an instance of type "Model class DefinedPart".
23150 */
23151private pattern mustInstanceOfModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
23152 Type.name(type,"Model class DefinedPart");
23153 find directInstanceOf(problem,interpretation,element,type);
23154}
23155private pattern scopeDisallowsNewModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
23156 find interpretation(problem,interpretation);
23157 PartialInterpretation.scopes(interpretation,scope);
23158 Scope.targetTypeInterpretation(scope,typeInterpretation);
23159 Scope.maxNewElements(scope,0);
23160 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
23161 Type.name(type,"Model class DefinedPart");
23162}
23163
23164/**
23165 * An element may be an instance of type "Model class DefinedPart".
23166 */
23167private pattern mayInstanceOfModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
23168{ find mustInstanceOfModel_class_DefinedPart(problem,interpretation,element); }
23169/**
23170 * An element must be an instance of type "Model class UndefinedPart".
23171 */
23172private pattern mustInstanceOfModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
23173 Type.name(type,"Model class UndefinedPart");
23174 find directInstanceOf(problem,interpretation,element,type);
23175}
23176private pattern scopeDisallowsNewModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
23177 find interpretation(problem,interpretation);
23178 PartialInterpretation.scopes(interpretation,scope);
23179 Scope.targetTypeInterpretation(scope,typeInterpretation);
23180 Scope.maxNewElements(scope,0);
23181 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
23182 Type.name(type,"Model class UndefinedPart");
23183}
23184
23185/**
23186 * An element may be an instance of type "Model class UndefinedPart".
23187 */
23188private pattern mayInstanceOfModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
23189{
23190 find interpretation(problem,interpretation);
23191 PartialInterpretation.newElements(interpretation,element);
23192 neg find mustInstanceOfFSObject_class(problem,interpretation,element);
23193 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
23194 neg find scopeDisallowsNewModel_class_UndefinedPart(problem, interpretation);
23195 neg find isPrimitive(element);
23196} or {
23197 find interpretation(problem,interpretation);
23198 PartialInterpretation.openWorldElements(interpretation,element);
23199 neg find mustInstanceOfFSObject_class(problem,interpretation,element);
23200 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
23201 neg find scopeDisallowsNewModel_class_UndefinedPart(problem, interpretation);
23202 neg find isPrimitive(element);
23203} or
23204{ find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,element); }
23205
23206//////////
23207// 1.2 Relation Declaration Indexers
23208//////////
23209/**
23210 * Matcher for detecting tuples t where []root reference FileSystem(source,target)
23211 */
23212private pattern mustInRelationroot_reference_FileSystem(
23213 problem:LogicProblem, interpretation:PartialInterpretation,
23214 source: DefinedElement, target:DefinedElement)
23215{
23216 find interpretation(problem,interpretation);
23217 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
23218 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"root reference FileSystem");
23219 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
23220 BinaryElementRelationLink.param1(link,source);
23221 BinaryElementRelationLink.param2(link,target);
23222}
23223/**
23224 * Matcher for detecting tuples t where <>root reference FileSystem(source,target)
23225 */
23226private pattern mayInRelationroot_reference_FileSystem(
23227 problem:LogicProblem, interpretation:PartialInterpretation,
23228 source: DefinedElement, target:DefinedElement)
23229{
23230 find interpretation(problem,interpretation);
23231 // The two endpoint of the link have to exist
23232 find mayExist(problem, interpretation, source);
23233 find mayExist(problem, interpretation, target);
23234 // Type consistency
23235 find mayInstanceOfFileSystem_class(problem,interpretation,source);
23236 find mayInstanceOfDir_class(problem,interpretation,target);
23237 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
23238 // the upper bound of the multiplicity should be considered.
23239 numberOfExistingReferences == count find mustInRelationroot_reference_FileSystem(problem,interpretation,source,_);
23240 check(numberOfExistingReferences < 1);
23241 // The reference is containment, then a new reference cannot be create if:
23242 // 1. Multiple parents
23243 neg find mustContains4(problem,interpretation,_,target);
23244 // 2. Circle in the containment hierarchy
23245 neg find mustTransitiveContains(source,target);
23246} or {
23247 find mustInRelationroot_reference_FileSystem(problem,interpretation,source,target);
23248}
23249/**
23250 * Matcher for detecting tuples t where []live reference FileSystem(source,target)
23251 */
23252 private pattern mustInRelationlive_reference_FileSystem(
23253 problem:LogicProblem, interpretation:PartialInterpretation,
23254 source: DefinedElement, target:DefinedElement)
23255 {
23256 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,source,target);
23257 }
23258/**
23259 * Matcher for detecting tuples t where []live reference FileSystem(source,target)
23260 */
23261 private pattern mayInRelationlive_reference_FileSystem(
23262 problem:LogicProblem, interpretation:PartialInterpretation,
23263 source: DefinedElement, target:DefinedElement)
23264 {
23265 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,source,target);
23266 }
23267/**
23268 * Matcher for detecting tuples t where []parent reference FSObject(source,target)
23269 */
23270private pattern mustInRelationparent_reference_FSObject(
23271 problem:LogicProblem, interpretation:PartialInterpretation,
23272 source: DefinedElement, target:DefinedElement)
23273{
23274 find interpretation(problem,interpretation);
23275 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
23276 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"parent reference FSObject");
23277 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
23278 BinaryElementRelationLink.param1(link,source);
23279 BinaryElementRelationLink.param2(link,target);
23280}
23281/**
23282 * Matcher for detecting tuples t where <>parent reference FSObject(source,target)
23283 */
23284private pattern mayInRelationparent_reference_FSObject(
23285 problem:LogicProblem, interpretation:PartialInterpretation,
23286 source: DefinedElement, target:DefinedElement)
23287{
23288 find interpretation(problem,interpretation);
23289 // The two endpoint of the link have to exist
23290 find mayExist(problem, interpretation, source);
23291 find mayExist(problem, interpretation, target);
23292 // Type consistency
23293 find mayInstanceOfFSObject_class(problem,interpretation,source);
23294 find mayInstanceOfDir_class(problem,interpretation,target);
23295 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
23296 // the upper bound of the multiplicity should be considered.
23297 numberOfExistingReferences == count find mustInRelationparent_reference_FSObject(problem,interpretation,source,_);
23298 check(numberOfExistingReferences < 1);
23299 // The eOpposite of the reference is containment, then a referene cannot be created if
23300 // 1. Multiple parents
23301 neg find mustContains4(problem,interpretation,source,_);
23302 // 2. Circle in the containment hierarchy
23303 neg find mustTransitiveContains(source,target);
23304} or {
23305 find mustInRelationparent_reference_FSObject(problem,interpretation,source,target);
23306}
23307/**
23308 * Matcher for detecting tuples t where []contents reference Dir(source,target)
23309 */
23310private pattern mustInRelationcontents_reference_Dir(
23311 problem:LogicProblem, interpretation:PartialInterpretation,
23312 source: DefinedElement, target:DefinedElement)
23313{
23314 find interpretation(problem,interpretation);
23315 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
23316 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"contents reference Dir");
23317 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
23318 BinaryElementRelationLink.param1(link,source);
23319 BinaryElementRelationLink.param2(link,target);
23320}
23321/**
23322 * Matcher for detecting tuples t where <>contents reference Dir(source,target)
23323 */
23324private pattern mayInRelationcontents_reference_Dir(
23325 problem:LogicProblem, interpretation:PartialInterpretation,
23326 source: DefinedElement, target:DefinedElement)
23327{
23328 find interpretation(problem,interpretation);
23329 // The two endpoint of the link have to exist
23330 find mayExist(problem, interpretation, source);
23331 find mayExist(problem, interpretation, target);
23332 // Type consistency
23333 find mayInstanceOfDir_class(problem,interpretation,source);
23334 find mayInstanceOfFSObject_class(problem,interpretation,target);
23335 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
23336 // the upper bound of the opposite reference multiplicity should be considered.
23337 numberOfExistingOppositeReferences == count find mustInRelationparent_reference_FSObject(problem,interpretation,target,_);
23338 check(numberOfExistingOppositeReferences < 1);
23339 // The reference is containment, then a new reference cannot be create if:
23340 // 1. Multiple parents
23341 neg find mustContains4(problem,interpretation,_,target);
23342 // 2. Circle in the containment hierarchy
23343 neg find mustTransitiveContains(source,target);
23344} or {
23345 find mustInRelationcontents_reference_Dir(problem,interpretation,source,target);
23346}
23347/**
23348 * Matcher for detecting tuples t where []filesystems reference Model(source,target)
23349 */
23350private pattern mustInRelationfilesystems_reference_Model(
23351 problem:LogicProblem, interpretation:PartialInterpretation,
23352 source: DefinedElement, target:DefinedElement)
23353{
23354 find interpretation(problem,interpretation);
23355 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
23356 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"filesystems reference Model");
23357 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
23358 BinaryElementRelationLink.param1(link,source);
23359 BinaryElementRelationLink.param2(link,target);
23360}
23361/**
23362 * Matcher for detecting tuples t where <>filesystems reference Model(source,target)
23363 */
23364private pattern mayInRelationfilesystems_reference_Model(
23365 problem:LogicProblem, interpretation:PartialInterpretation,
23366 source: DefinedElement, target:DefinedElement)
23367{
23368 find interpretation(problem,interpretation);
23369 // The two endpoint of the link have to exist
23370 find mayExist(problem, interpretation, source);
23371 find mayExist(problem, interpretation, target);
23372 // Type consistency
23373 find mayInstanceOfModel_class(problem,interpretation,source);
23374 find mayInstanceOfFileSystem_class(problem,interpretation,target);
23375 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
23376 // the upper bound of the multiplicity should be considered.
23377 numberOfExistingReferences == count find mustInRelationfilesystems_reference_Model(problem,interpretation,source,_);
23378 check(numberOfExistingReferences < 1);
23379 // The reference is containment, then a new reference cannot be create if:
23380 // 1. Multiple parents
23381 neg find mustContains4(problem,interpretation,_,target);
23382 // 2. Circle in the containment hierarchy
23383 neg find mustTransitiveContains(source,target);
23384} or {
23385 find mustInRelationfilesystems_reference_Model(problem,interpretation,source,target);
23386}
23387/**
23388 * Matcher for detecting tuples t where []otherFSObjects reference Model(source,target)
23389 */
23390private pattern mustInRelationotherFSObjects_reference_Model(
23391 problem:LogicProblem, interpretation:PartialInterpretation,
23392 source: DefinedElement, target:DefinedElement)
23393{
23394 find interpretation(problem,interpretation);
23395 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
23396 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"otherFSObjects reference Model");
23397 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
23398 BinaryElementRelationLink.param1(link,source);
23399 BinaryElementRelationLink.param2(link,target);
23400}
23401/**
23402 * Matcher for detecting tuples t where <>otherFSObjects reference Model(source,target)
23403 */
23404private pattern mayInRelationotherFSObjects_reference_Model(
23405 problem:LogicProblem, interpretation:PartialInterpretation,
23406 source: DefinedElement, target:DefinedElement)
23407{
23408 find interpretation(problem,interpretation);
23409 // The two endpoint of the link have to exist
23410 find mayExist(problem, interpretation, source);
23411 find mayExist(problem, interpretation, target);
23412 // Type consistency
23413 find mayInstanceOfModel_class(problem,interpretation,source);
23414 find mayInstanceOfFSObject_class(problem,interpretation,target);
23415 // The reference is containment, then a new reference cannot be create if:
23416 // 1. Multiple parents
23417 neg find mustContains4(problem,interpretation,_,target);
23418 // 2. Circle in the containment hierarchy
23419 neg find mustTransitiveContains(source,target);
23420} or {
23421 find mustInRelationotherFSObjects_reference_Model(problem,interpretation,source,target);
23422}
23423
23424//////////
23425// 1.3 Relation Definition Indexers
23426//////////
23427// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test filesystem queries patternContent
23428private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(
23429 problem:LogicProblem, interpretation:PartialInterpretation,
23430 var_o1, var_o2)
23431{
23432 find interpretation(problem,interpretation);
23433 find mustInstanceOfFSObject_class(problem,interpretation,var_o1);
23434 find mustInstanceOfFSObject_class(problem,interpretation,var_o2);
23435 // o1 is exported
23436 // o2 is exported
23437 find mustInstanceOfDir_class(problem,interpretation,var_o1);
23438 find mustInRelationcontents_reference_Dir(problem,interpretation,var_o1,var_virtual0);
23439 find mustInstanceOfFSObject_class(problem,interpretation,var_virtual0);
23440 var_virtual0 == var_o2;
23441}
23442private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(
23443 problem:LogicProblem, interpretation:PartialInterpretation,
23444 var_o1, var_o2)
23445{
23446 find interpretation(problem,interpretation);
23447 find mayInstanceOfFSObject_class(problem,interpretation,var_o1);
23448 find mayInstanceOfFSObject_class(problem,interpretation,var_o2);
23449 // o1 is exported
23450 // o2 is exported
23451 find mayInstanceOfDir_class(problem,interpretation,var_o1);
23452 find mayInRelationcontents_reference_Dir(problem,interpretation,var_o1,var_virtual0);
23453 find mayInstanceOfFSObject_class(problem,interpretation,var_virtual0);
23454 find mayEquivalent(problem, interpretation, var_virtual0, var_o2);
23455}
23456private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(
23457 problem:LogicProblem, interpretation:PartialInterpretation,
23458 var_o1, var_o2)
23459{
23460 find interpretation(problem,interpretation);
23461 find mustInstanceOfFSObject_class(problem,interpretation,var_o1);
23462 find mustInstanceOfFSObject_class(problem,interpretation,var_o2);
23463 // o1 is exported
23464 // o2 is exported
23465 find mustInstanceOfDir_class(problem,interpretation,var_o1);
23466 find mustInRelationcontents_reference_Dir(problem,interpretation,var_o1,var_virtual0);
23467 find mustInstanceOfFSObject_class(problem,interpretation,var_virtual0);
23468 var_virtual0 == var_o2;
23469}
23470private pattern twoParam_mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(var_o1, var_o2) {
23471 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(_,_,var_o1, var_o2);
23472}
23473private pattern twoParam_mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(var_o1, var_o2) {
23474 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(_,_,var_o1, var_o2);
23475}
23476private pattern twoParam_currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(var_o1, var_o2) {
23477 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(_,_,var_o1, var_o2);
23478}
23479// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test filesystem queries live
23480private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(
23481 problem:LogicProblem, interpretation:PartialInterpretation,
23482 var_this, var_l)
23483{
23484 find interpretation(problem,interpretation);
23485 find mustInstanceOfFileSystem_class(problem,interpretation,var_this);
23486 find mustInstanceOfFSObject_class(problem,interpretation,var_l);
23487 // this is exported
23488 // l is exported
23489 find mustInstanceOfFileSystem_class(problem,interpretation,var_this);
23490 find mustInRelationroot_reference_FileSystem(problem,interpretation,var_this,var_virtual0);
23491 find mustInstanceOfDir_class(problem,interpretation,var_virtual0);
23492 var_virtual0 == var_l;
23493}or{
23494 find interpretation(problem,interpretation);
23495 find mustInstanceOfFileSystem_class(problem,interpretation,var_this);
23496 find mustInstanceOfFSObject_class(problem,interpretation,var_l);
23497 // this is exported
23498 // l is exported
23499 find mustInstanceOfFileSystem_class(problem,interpretation,var_this);
23500 find mustInRelationroot_reference_FileSystem(problem,interpretation,var_this,var_virtual0);
23501 find mustInstanceOfDir_class(problem,interpretation,var_virtual0);
23502 var_virtual0 == var_root;
23503 find twoParam_mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent+(var_root,var_l);
23504}
23505private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(
23506 problem:LogicProblem, interpretation:PartialInterpretation,
23507 var_this, var_l)
23508{
23509 find interpretation(problem,interpretation);
23510 find mayInstanceOfFileSystem_class(problem,interpretation,var_this);
23511 find mayInstanceOfFSObject_class(problem,interpretation,var_l);
23512 // this is exported
23513 // l is exported
23514 find mayInstanceOfFileSystem_class(problem,interpretation,var_this);
23515 find mayInRelationroot_reference_FileSystem(problem,interpretation,var_this,var_virtual0);
23516 find mayInstanceOfDir_class(problem,interpretation,var_virtual0);
23517 find mayEquivalent(problem, interpretation, var_virtual0, var_l);
23518}or{
23519 find interpretation(problem,interpretation);
23520 find mayInstanceOfFileSystem_class(problem,interpretation,var_this);
23521 find mayInstanceOfFSObject_class(problem,interpretation,var_l);
23522 // this is exported
23523 // l is exported
23524 find mayInstanceOfFileSystem_class(problem,interpretation,var_this);
23525 find mayInRelationroot_reference_FileSystem(problem,interpretation,var_this,var_virtual0);
23526 find mayInstanceOfDir_class(problem,interpretation,var_virtual0);
23527 find mayEquivalent(problem, interpretation, var_virtual0, var_root);
23528 find twoParam_mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent+(var_root,var_l);
23529}
23530private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(
23531 problem:LogicProblem, interpretation:PartialInterpretation,
23532 var_this, var_l)
23533{
23534 find interpretation(problem,interpretation);
23535 find mustInstanceOfFileSystem_class(problem,interpretation,var_this);
23536 find mustInstanceOfFSObject_class(problem,interpretation,var_l);
23537 // this is exported
23538 // l is exported
23539 find mustInstanceOfFileSystem_class(problem,interpretation,var_this);
23540 find mustInRelationroot_reference_FileSystem(problem,interpretation,var_this,var_virtual0);
23541 find mustInstanceOfDir_class(problem,interpretation,var_virtual0);
23542 var_virtual0 == var_l;
23543}or{
23544 find interpretation(problem,interpretation);
23545 find mustInstanceOfFileSystem_class(problem,interpretation,var_this);
23546 find mustInstanceOfFSObject_class(problem,interpretation,var_l);
23547 // this is exported
23548 // l is exported
23549 find mustInstanceOfFileSystem_class(problem,interpretation,var_this);
23550 find mustInRelationroot_reference_FileSystem(problem,interpretation,var_this,var_virtual0);
23551 find mustInstanceOfDir_class(problem,interpretation,var_virtual0);
23552 var_virtual0 == var_root;
23553 find twoParam_currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent+(var_root,var_l);
23554}
23555// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test filesystem queries contentInNotLive
23556private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive(
23557 problem:LogicProblem, interpretation:PartialInterpretation,
23558 var_parent, var_child)
23559{
23560 find interpretation(problem,interpretation);
23561 find mustInstanceOfDir_class(problem,interpretation,var_parent);
23562 find mustInstanceOfFSObject_class(problem,interpretation,var_child);
23563 // parent is exported
23564 // child is exported
23565 find mustInstanceOfDir_class(problem,interpretation,var_parent);
23566 find mustInRelationcontents_reference_Dir(problem,interpretation,var_parent,var_virtual0);
23567 find mustInstanceOfFSObject_class(problem,interpretation,var_virtual0);
23568 var_virtual0 == var_child;
23569 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,_var__0,var_parent);
23570}or{
23571 find interpretation(problem,interpretation);
23572 find mustInstanceOfDir_class(problem,interpretation,var_parent);
23573 find mustInstanceOfFSObject_class(problem,interpretation,var_child);
23574 // parent is exported
23575 // child is exported
23576 find mustInstanceOfDir_class(problem,interpretation,var_parent);
23577 find mustInRelationcontents_reference_Dir(problem,interpretation,var_parent,var_virtual0);
23578 find mustInstanceOfFSObject_class(problem,interpretation,var_virtual0);
23579 var_virtual0 == var_child;
23580 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,_var__0,var_child);
23581}
23582private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive(
23583 problem:LogicProblem, interpretation:PartialInterpretation,
23584 var_parent, var_child)
23585{
23586 find interpretation(problem,interpretation);
23587 find mayInstanceOfDir_class(problem,interpretation,var_parent);
23588 find mayInstanceOfFSObject_class(problem,interpretation,var_child);
23589 // parent is exported
23590 // child is exported
23591 find mayInstanceOfDir_class(problem,interpretation,var_parent);
23592 find mayInRelationcontents_reference_Dir(problem,interpretation,var_parent,var_virtual0);
23593 find mayInstanceOfFSObject_class(problem,interpretation,var_virtual0);
23594 find mayEquivalent(problem, interpretation, var_virtual0, var_child);
23595 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,_var__0,var_parent);
23596}or{
23597 find interpretation(problem,interpretation);
23598 find mayInstanceOfDir_class(problem,interpretation,var_parent);
23599 find mayInstanceOfFSObject_class(problem,interpretation,var_child);
23600 // parent is exported
23601 // child is exported
23602 find mayInstanceOfDir_class(problem,interpretation,var_parent);
23603 find mayInRelationcontents_reference_Dir(problem,interpretation,var_parent,var_virtual0);
23604 find mayInstanceOfFSObject_class(problem,interpretation,var_virtual0);
23605 find mayEquivalent(problem, interpretation, var_virtual0, var_child);
23606 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,_var__0,var_child);
23607}
23608private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive(
23609 problem:LogicProblem, interpretation:PartialInterpretation,
23610 var_parent, var_child)
23611{
23612 find interpretation(problem,interpretation);
23613 find mustInstanceOfDir_class(problem,interpretation,var_parent);
23614 find mustInstanceOfFSObject_class(problem,interpretation,var_child);
23615 // parent is exported
23616 // child is exported
23617 find mustInstanceOfDir_class(problem,interpretation,var_parent);
23618 find mustInRelationcontents_reference_Dir(problem,interpretation,var_parent,var_virtual0);
23619 find mustInstanceOfFSObject_class(problem,interpretation,var_virtual0);
23620 var_virtual0 == var_child;
23621 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,_var__0,var_parent);
23622}or{
23623 find interpretation(problem,interpretation);
23624 find mustInstanceOfDir_class(problem,interpretation,var_parent);
23625 find mustInstanceOfFSObject_class(problem,interpretation,var_child);
23626 // parent is exported
23627 // child is exported
23628 find mustInstanceOfDir_class(problem,interpretation,var_parent);
23629 find mustInRelationcontents_reference_Dir(problem,interpretation,var_parent,var_virtual0);
23630 find mustInstanceOfFSObject_class(problem,interpretation,var_virtual0);
23631 var_virtual0 == var_child;
23632 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,_var__0,var_child);
23633}
23634
23635//////////
23636// 1.4 Containment Indexer
23637//////////
23638private pattern mustContains2(source: DefinedElement, target: DefinedElement) {
23639 find mustContains4(_,_,source,target);
23640}
23641
23642private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation,
23643 source: DefinedElement, target: DefinedElement)
23644 { find mustInRelationroot_reference_FileSystem(problem,interpretation,source,target); }or
23645
23646 { find mustInRelationcontents_reference_Dir(problem,interpretation,source,target); }or
23647
23648 { find mustInRelationfilesystems_reference_Model(problem,interpretation,source,target); }or
23649
23650 { find mustInRelationotherFSObjects_reference_Model(problem,interpretation,source,target); }
23651
23652private pattern mustTransitiveContains(source,target) {
23653 find mustContains2+(source,target);
23654}
23655
23656//////////
23657// 2. Invalidation Indexers
23658//////////
23659// 2.1 Invalidated by WF Queries
23660//////////
23661pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive(problem:LogicProblem, interpretation:PartialInterpretation,
23662 var_parent, var_child)
23663{
23664 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive(problem,interpretation,var_parent,var_child);
23665}
23666
23667//////////
23668// 3. Unfinishedness Indexers
23669//////////
23670// 3.1 Unfinishedness Measured by Multiplicity
23671//////////
23672pattern unfinishedLowerMultiplicity_root_reference_FileSystem(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) {
23673 find interpretation(problem,interpretation);
23674 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
23675 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"root reference FileSystem");
23676 find mustInstanceOfFileSystem_class(problem,interpretation,object);
23677 numberOfExistingReferences == count find mustInRelationroot_reference_FileSystem(problem,interpretation,object,_);
23678 check(numberOfExistingReferences < 1);
23679 missingMultiplicity == eval(1-numberOfExistingReferences);
23680}
23681pattern unfinishedLowerMultiplicity_filesystems_reference_Model(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) {
23682 find interpretation(problem,interpretation);
23683 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
23684 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"filesystems reference Model");
23685 find mustInstanceOfModel_class(problem,interpretation,object);
23686 numberOfExistingReferences == count find mustInRelationfilesystems_reference_Model(problem,interpretation,object,_);
23687 check(numberOfExistingReferences < 1);
23688 missingMultiplicity == eval(1-numberOfExistingReferences);
23689}
23690
23691//////////
23692// 3.2 Unfinishedness Measured by WF Queries
23693//////////
23694pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive(problem:LogicProblem, interpretation:PartialInterpretation,
23695 var_parent, var_child)
23696{
23697 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive(problem,interpretation,var_parent,var_child);
23698}
23699
23700//////////
23701// 4. Refinement Indexers
23702//////////
23703// 4.1 Object constructors
23704//////////
23705private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation)
23706{
23707 find interpretation(problem,interpretation);
23708 find mustInstanceOfModel_class(problem,interpretation,root);
23709 find mustExist(problem, interpretation, root);
23710}or{
23711 find interpretation(problem,interpretation);
23712 find mustInstanceOfFile_class(problem,interpretation,root);
23713 find mustExist(problem, interpretation, root);
23714}or{
23715 find interpretation(problem,interpretation);
23716 find mustInstanceOfFSObject_class(problem,interpretation,root);
23717 find mustExist(problem, interpretation, root);
23718}or{
23719 find interpretation(problem,interpretation);
23720 find mustInstanceOfFileSystem_class(problem,interpretation,root);
23721 find mustExist(problem, interpretation, root);
23722}or{
23723 find interpretation(problem,interpretation);
23724 find mustInstanceOfDir_class(problem,interpretation,root);
23725 find mustExist(problem, interpretation, root);
23726}or{
23727 find interpretation(problem,interpretation);
23728 find mustInstanceOfModel_class_DefinedPart(problem,interpretation,root);
23729 find mustExist(problem, interpretation, root);
23730}or{
23731 find interpretation(problem,interpretation);
23732 find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,root);
23733 find mustExist(problem, interpretation, root);
23734}
23735pattern createObject_Dir_class_by_root_reference_FileSystem(
23736 problem:LogicProblem, interpretation:PartialInterpretation,
23737 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
23738 container:DefinedElement)
23739{
23740 find interpretation(problem,interpretation);
23741 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
23742 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Dir class");
23743 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
23744 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"root reference FileSystem");
23745 find mustInstanceOfFileSystem_class(problem,interpretation,container);
23746 find mayInstanceOfDir_class(problem,interpretation,newObject);
23747 find mayInRelationroot_reference_FileSystem(problem,interpretation,container,newObject);
23748 find mustExist(problem, interpretation, container);
23749 neg find mustExist(problem, interpretation, newObject);
23750}
23751pattern createObject_Dir_class_by_contents_reference_Dir_with_parent_reference_FSObject(
23752 problem:LogicProblem, interpretation:PartialInterpretation,
23753 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
23754 container:DefinedElement)
23755{
23756 find interpretation(problem,interpretation);
23757 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
23758 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Dir class");
23759 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
23760 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"contents reference Dir");
23761 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
23762 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FSObject");
23763 find mustInstanceOfDir_class(problem,interpretation,container);
23764 find mayInstanceOfDir_class(problem,interpretation,newObject);
23765 find mayInRelationcontents_reference_Dir(problem,interpretation,container,newObject);
23766 find mustExist(problem, interpretation, container);
23767 neg find mustExist(problem, interpretation, newObject);
23768}
23769pattern createObject_Dir_class_by_otherFSObjects_reference_Model(
23770 problem:LogicProblem, interpretation:PartialInterpretation,
23771 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
23772 container:DefinedElement)
23773{
23774 find interpretation(problem,interpretation);
23775 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
23776 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Dir class");
23777 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
23778 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"otherFSObjects reference Model");
23779 find mustInstanceOfModel_class(problem,interpretation,container);
23780 find mayInstanceOfDir_class(problem,interpretation,newObject);
23781 find mayInRelationotherFSObjects_reference_Model(problem,interpretation,container,newObject);
23782 find mustExist(problem, interpretation, container);
23783 neg find mustExist(problem, interpretation, newObject);
23784}
23785pattern createObject_Dir_class(
23786 problem:LogicProblem, interpretation:PartialInterpretation,
23787 typeInterpretation:PartialComplexTypeInterpretation)
23788{
23789 find interpretation(problem,interpretation);
23790 neg find hasElementInContainment(problem,interpretation);
23791 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
23792 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Dir class");
23793 find mayInstanceOfDir_class(problem,interpretation,newObject);
23794 find mayExist(problem, interpretation, newObject);
23795 neg find mustExist(problem, interpretation, newObject);
23796}
23797pattern createObject_File_class_by_contents_reference_Dir_with_parent_reference_FSObject(
23798 problem:LogicProblem, interpretation:PartialInterpretation,
23799 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
23800 container:DefinedElement)
23801{
23802 find interpretation(problem,interpretation);
23803 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
23804 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"File class");
23805 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
23806 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"contents reference Dir");
23807 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
23808 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FSObject");
23809 find mustInstanceOfDir_class(problem,interpretation,container);
23810 find mayInstanceOfFile_class(problem,interpretation,newObject);
23811 find mayInRelationcontents_reference_Dir(problem,interpretation,container,newObject);
23812 find mustExist(problem, interpretation, container);
23813 neg find mustExist(problem, interpretation, newObject);
23814}
23815pattern createObject_File_class_by_otherFSObjects_reference_Model(
23816 problem:LogicProblem, interpretation:PartialInterpretation,
23817 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
23818 container:DefinedElement)
23819{
23820 find interpretation(problem,interpretation);
23821 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
23822 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"File class");
23823 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
23824 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"otherFSObjects reference Model");
23825 find mustInstanceOfModel_class(problem,interpretation,container);
23826 find mayInstanceOfFile_class(problem,interpretation,newObject);
23827 find mayInRelationotherFSObjects_reference_Model(problem,interpretation,container,newObject);
23828 find mustExist(problem, interpretation, container);
23829 neg find mustExist(problem, interpretation, newObject);
23830}
23831pattern createObject_File_class(
23832 problem:LogicProblem, interpretation:PartialInterpretation,
23833 typeInterpretation:PartialComplexTypeInterpretation)
23834{
23835 find interpretation(problem,interpretation);
23836 neg find hasElementInContainment(problem,interpretation);
23837 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
23838 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"File class");
23839 find mayInstanceOfFile_class(problem,interpretation,newObject);
23840 find mayExist(problem, interpretation, newObject);
23841 neg find mustExist(problem, interpretation, newObject);
23842}
23843pattern createObject_Model_class_UndefinedPart(
23844 problem:LogicProblem, interpretation:PartialInterpretation,
23845 typeInterpretation:PartialComplexTypeInterpretation)
23846{
23847 find interpretation(problem,interpretation);
23848 neg find hasElementInContainment(problem,interpretation);
23849 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
23850 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Model class UndefinedPart");
23851 find mayInstanceOfModel_class_UndefinedPart(problem,interpretation,newObject);
23852 find mayExist(problem, interpretation, newObject);
23853 neg find mustExist(problem, interpretation, newObject);
23854}
23855pattern createObject_FileSystem_class_by_filesystems_reference_Model(
23856 problem:LogicProblem, interpretation:PartialInterpretation,
23857 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
23858 container:DefinedElement)
23859{
23860 find interpretation(problem,interpretation);
23861 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
23862 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FileSystem class");
23863 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
23864 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"filesystems reference Model");
23865 find mustInstanceOfModel_class(problem,interpretation,container);
23866 find mayInstanceOfFileSystem_class(problem,interpretation,newObject);
23867 find mayInRelationfilesystems_reference_Model(problem,interpretation,container,newObject);
23868 find mustExist(problem, interpretation, container);
23869 neg find mustExist(problem, interpretation, newObject);
23870}
23871pattern createObject_FileSystem_class(
23872 problem:LogicProblem, interpretation:PartialInterpretation,
23873 typeInterpretation:PartialComplexTypeInterpretation)
23874{
23875 find interpretation(problem,interpretation);
23876 neg find hasElementInContainment(problem,interpretation);
23877 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
23878 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FileSystem class");
23879 find mayInstanceOfFileSystem_class(problem,interpretation,newObject);
23880 find mayExist(problem, interpretation, newObject);
23881 neg find mustExist(problem, interpretation, newObject);
23882}
23883
23884//////////
23885// 4.2 Type refinement
23886//////////
23887pattern refineTypeTo_Dir_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
23888 find interpretation(problem,interpretation);
23889 PartialInterpretation.newElements(interpretation,element);
23890 find mayInstanceOfDir_class(problem,interpretation,element);
23891 neg find mustInstanceOfDir_class(problem,interpretation,element);
23892 neg find mustInstanceOfFile_class(problem,interpretation,element);
23893 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
23894 neg find mustInstanceOfModel_class(problem,interpretation,element);
23895}
23896pattern refineTypeTo_File_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
23897 find interpretation(problem,interpretation);
23898 PartialInterpretation.newElements(interpretation,element);
23899 find mayInstanceOfFile_class(problem,interpretation,element);
23900 neg find mustInstanceOfDir_class(problem,interpretation,element);
23901 neg find mustInstanceOfFile_class(problem,interpretation,element);
23902 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
23903 neg find mustInstanceOfModel_class(problem,interpretation,element);
23904}
23905pattern refineTypeTo_Model_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
23906 find interpretation(problem,interpretation);
23907 PartialInterpretation.newElements(interpretation,element);
23908 find mayInstanceOfModel_class_UndefinedPart(problem,interpretation,element);
23909 neg find mustInstanceOfFSObject_class(problem,interpretation,element);
23910 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
23911 neg find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,element);
23912}
23913pattern refineTypeTo_FileSystem_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
23914 find interpretation(problem,interpretation);
23915 PartialInterpretation.newElements(interpretation,element);
23916 find mayInstanceOfFileSystem_class(problem,interpretation,element);
23917 neg find mustInstanceOfFSObject_class(problem,interpretation,element);
23918 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
23919 neg find mustInstanceOfModel_class(problem,interpretation,element);
23920}
23921
23922//////////
23923// 4.3 Relation refinement
23924//////////
23925pattern refineRelation_live_reference_FileSystem(
23926 problem:LogicProblem, interpretation:PartialInterpretation,
23927 relationIterpretation:PartialRelationInterpretation,
23928 from: DefinedElement, to: DefinedElement)
23929{
23930 find interpretation(problem,interpretation);
23931 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
23932 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"live reference FileSystem");
23933 find mustExist(problem, interpretation, from);
23934 find mustExist(problem, interpretation, to);
23935 find mustInstanceOfFileSystem_class(problem,interpretation,from);
23936 find mustInstanceOfFSObject_class(problem,interpretation,to);
23937 find mayInRelationlive_reference_FileSystem(problem,interpretation,from,to);
23938 neg find mustInRelationlive_reference_FileSystem(problem,interpretation,from,to);
23939}
23940import epackage "http://www.bme.hu/mit/inf/dslreasoner/viatrasolver/partialinterpretationlanguage"
23941import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/problem"
23942import epackage "http://www.bme.hu/mit/inf/dslreasoner/logic/model/language"
23943
23944//////////
23945// 0. Util
23946//////////
23947private pattern interpretation(problem:LogicProblem, interpretation:PartialInterpretation) {
23948 PartialInterpretation.problem(interpretation,problem);
23949}
23950
23951/////////////////////////
23952// 0.1 Existence
23953/////////////////////////
23954private pattern mustExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
23955 find interpretation(problem,interpretation);
23956 LogicProblem.elements(problem,element);
23957} or {
23958 find interpretation(problem,interpretation);
23959 PartialInterpretation.newElements(interpretation,element);
23960}
23961
23962private pattern mayExist(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
23963 find mustExist(problem,interpretation,element);
23964} or {
23965 find interpretation(problem,interpretation);
23966 neg find elementCloseWorld(element);
23967 PartialInterpretation.openWorldElements(interpretation,element);
23968}
23969
23970private pattern elementCloseWorld(element:DefinedElement) {
23971 PartialInterpretation.openWorldElements(i,element);
23972 PartialInterpretation.maxNewElements(i,0);
23973} or {
23974 Scope.targetTypeInterpretation(scope,interpretation);
23975 PartialTypeInterpratation.elements(interpretation,element);
23976 Scope.maxNewElements(scope,0);
23977}
23978
23979////////////////////////
23980// 0.2 Equivalence
23981////////////////////////
23982pattern mayEquivalent(problem:LogicProblem, interpretation:PartialInterpretation, a: DefinedElement, b: DefinedElement) {
23983 find mayExist(problem,interpretation,a);
23984 find mayExist(problem,interpretation,b);
23985 a == b;
23986}
23987
23988////////////////////////
23989// 0.3 Required Patterns by TypeIndexer
23990////////////////////////
23991private pattern typeInterpretation(problem:LogicProblem, interpretation:PartialInterpretation, type:TypeDeclaration, typeInterpretation:PartialComplexTypeInterpretation) {
23992 find interpretation(problem,interpretation);
23993 LogicProblem.types(problem,type);
23994 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
23995 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
23996}
23997
23998private pattern directInstanceOf(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement, type:Type) {
23999 find interpretation(problem,interpretation);
24000 LogicProblem.types(problem,type);
24001 TypeDefinition.elements(type,element);
24002} or {
24003 find interpretation(problem,interpretation);
24004 find typeInterpretation(problem,interpretation,type,typeInterpretation);
24005 PartialComplexTypeInterpretation.elements(typeInterpretation,element);
24006}
24007
24008private pattern isPrimitive(element: PrimitiveElement) {
24009 PrimitiveElement(element);
24010}
24011
24012//////////
24013// 1. Problem-Specific Base Indexers
24014//////////
24015// 1.1 Type Indexers
24016//////////
24017// 1.1.1 primitive Type Indexers
24018//////////
24019
24020//////////
24021// 1.1.2 domain-specific Type Indexers
24022//////////
24023/**
24024 * An element must be an instance of type "FileSystem class".
24025 */
24026private pattern mustInstanceOfFileSystem_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
24027 Type.name(type,"FileSystem class");
24028 find directInstanceOf(problem,interpretation,element,type);
24029}
24030private pattern scopeDisallowsNewFileSystem_class(problem:LogicProblem, interpretation:PartialInterpretation) {
24031 find interpretation(problem,interpretation);
24032 PartialInterpretation.scopes(interpretation,scope);
24033 Scope.targetTypeInterpretation(scope,typeInterpretation);
24034 Scope.maxNewElements(scope,0);
24035 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
24036 Type.name(type,"FileSystem class");
24037}
24038
24039/**
24040 * An element may be an instance of type "FileSystem class".
24041 */
24042private pattern mayInstanceOfFileSystem_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
24043{
24044 find interpretation(problem,interpretation);
24045 PartialInterpretation.newElements(interpretation,element);
24046 neg find mustInstanceOfModel_class(problem,interpretation,element);
24047 neg find mustInstanceOfFSObject_class(problem,interpretation,element);
24048 neg find scopeDisallowsNewFileSystem_class(problem, interpretation);
24049 neg find isPrimitive(element);
24050} or {
24051 find interpretation(problem,interpretation);
24052 PartialInterpretation.openWorldElements(interpretation,element);
24053 neg find mustInstanceOfModel_class(problem,interpretation,element);
24054 neg find mustInstanceOfFSObject_class(problem,interpretation,element);
24055 neg find scopeDisallowsNewFileSystem_class(problem, interpretation);
24056 neg find isPrimitive(element);
24057} or
24058{ find mustInstanceOfFileSystem_class(problem,interpretation,element); }
24059/**
24060 * An element must be an instance of type "FSObject class".
24061 */
24062private pattern mustInstanceOfFSObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
24063 Type.name(type,"FSObject class");
24064 find directInstanceOf(problem,interpretation,element,type);
24065}
24066private pattern scopeDisallowsNewFSObject_class(problem:LogicProblem, interpretation:PartialInterpretation) {
24067 find interpretation(problem,interpretation);
24068 PartialInterpretation.scopes(interpretation,scope);
24069 Scope.targetTypeInterpretation(scope,typeInterpretation);
24070 Scope.maxNewElements(scope,0);
24071 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
24072 Type.name(type,"FSObject class");
24073}
24074
24075/**
24076 * An element may be an instance of type "FSObject class".
24077 */
24078private pattern mayInstanceOfFSObject_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
24079{
24080 find interpretation(problem,interpretation);
24081 PartialInterpretation.newElements(interpretation,element);
24082 neg find mustInstanceOfDir_class(problem,interpretation,element);
24083 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
24084 neg find mustInstanceOfFile_class(problem,interpretation,element);
24085 neg find mustInstanceOfModel_class(problem,interpretation,element);
24086 neg find scopeDisallowsNewFSObject_class(problem, interpretation);
24087 neg find isPrimitive(element);
24088} or {
24089 find interpretation(problem,interpretation);
24090 PartialInterpretation.openWorldElements(interpretation,element);
24091 neg find mustInstanceOfDir_class(problem,interpretation,element);
24092 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
24093 neg find mustInstanceOfFile_class(problem,interpretation,element);
24094 neg find mustInstanceOfModel_class(problem,interpretation,element);
24095 neg find scopeDisallowsNewFSObject_class(problem, interpretation);
24096 neg find isPrimitive(element);
24097} or
24098{ find mustInstanceOfFSObject_class(problem,interpretation,element); }
24099/**
24100 * An element must be an instance of type "Dir class".
24101 */
24102private pattern mustInstanceOfDir_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
24103 Type.name(type,"Dir class");
24104 find directInstanceOf(problem,interpretation,element,type);
24105}
24106private pattern scopeDisallowsNewDir_class(problem:LogicProblem, interpretation:PartialInterpretation) {
24107 find interpretation(problem,interpretation);
24108 PartialInterpretation.scopes(interpretation,scope);
24109 Scope.targetTypeInterpretation(scope,typeInterpretation);
24110 Scope.maxNewElements(scope,0);
24111 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
24112 Type.name(type,"Dir class");
24113}
24114
24115/**
24116 * An element may be an instance of type "Dir class".
24117 */
24118private pattern mayInstanceOfDir_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
24119{
24120 find interpretation(problem,interpretation);
24121 PartialInterpretation.newElements(interpretation,element);
24122 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
24123 neg find mustInstanceOfFile_class(problem,interpretation,element);
24124 neg find mustInstanceOfModel_class(problem,interpretation,element);
24125 neg find scopeDisallowsNewDir_class(problem, interpretation);
24126 neg find isPrimitive(element);
24127} or {
24128 find interpretation(problem,interpretation);
24129 PartialInterpretation.openWorldElements(interpretation,element);
24130 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
24131 neg find mustInstanceOfFile_class(problem,interpretation,element);
24132 neg find mustInstanceOfModel_class(problem,interpretation,element);
24133 neg find scopeDisallowsNewDir_class(problem, interpretation);
24134 neg find isPrimitive(element);
24135} or
24136{ find mustInstanceOfDir_class(problem,interpretation,element); }
24137/**
24138 * An element must be an instance of type "File class".
24139 */
24140private pattern mustInstanceOfFile_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
24141 Type.name(type,"File class");
24142 find directInstanceOf(problem,interpretation,element,type);
24143}
24144private pattern scopeDisallowsNewFile_class(problem:LogicProblem, interpretation:PartialInterpretation) {
24145 find interpretation(problem,interpretation);
24146 PartialInterpretation.scopes(interpretation,scope);
24147 Scope.targetTypeInterpretation(scope,typeInterpretation);
24148 Scope.maxNewElements(scope,0);
24149 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
24150 Type.name(type,"File class");
24151}
24152
24153/**
24154 * An element may be an instance of type "File class".
24155 */
24156private pattern mayInstanceOfFile_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
24157{
24158 find interpretation(problem,interpretation);
24159 PartialInterpretation.newElements(interpretation,element);
24160 neg find mustInstanceOfDir_class(problem,interpretation,element);
24161 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
24162 neg find mustInstanceOfModel_class(problem,interpretation,element);
24163 neg find scopeDisallowsNewFile_class(problem, interpretation);
24164 neg find isPrimitive(element);
24165} or {
24166 find interpretation(problem,interpretation);
24167 PartialInterpretation.openWorldElements(interpretation,element);
24168 neg find mustInstanceOfDir_class(problem,interpretation,element);
24169 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
24170 neg find mustInstanceOfModel_class(problem,interpretation,element);
24171 neg find scopeDisallowsNewFile_class(problem, interpretation);
24172 neg find isPrimitive(element);
24173} or
24174{ find mustInstanceOfFile_class(problem,interpretation,element); }
24175/**
24176 * An element must be an instance of type "Model class".
24177 */
24178private pattern mustInstanceOfModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
24179 Type.name(type,"Model class");
24180 find directInstanceOf(problem,interpretation,element,type);
24181}
24182private pattern scopeDisallowsNewModel_class(problem:LogicProblem, interpretation:PartialInterpretation) {
24183 find interpretation(problem,interpretation);
24184 PartialInterpretation.scopes(interpretation,scope);
24185 Scope.targetTypeInterpretation(scope,typeInterpretation);
24186 Scope.maxNewElements(scope,0);
24187 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
24188 Type.name(type,"Model class");
24189}
24190
24191/**
24192 * An element may be an instance of type "Model class".
24193 */
24194private pattern mayInstanceOfModel_class(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
24195{
24196 find interpretation(problem,interpretation);
24197 PartialInterpretation.newElements(interpretation,element);
24198 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
24199 neg find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,element);
24200 neg find mustInstanceOfFSObject_class(problem,interpretation,element);
24201 neg find scopeDisallowsNewModel_class(problem, interpretation);
24202 neg find isPrimitive(element);
24203} or {
24204 find interpretation(problem,interpretation);
24205 PartialInterpretation.openWorldElements(interpretation,element);
24206 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
24207 neg find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,element);
24208 neg find mustInstanceOfFSObject_class(problem,interpretation,element);
24209 neg find scopeDisallowsNewModel_class(problem, interpretation);
24210 neg find isPrimitive(element);
24211} or
24212{ find mustInstanceOfModel_class(problem,interpretation,element); }
24213/**
24214 * An element must be an instance of type "Model class DefinedPart".
24215 */
24216private pattern mustInstanceOfModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
24217 Type.name(type,"Model class DefinedPart");
24218 find directInstanceOf(problem,interpretation,element,type);
24219}
24220private pattern scopeDisallowsNewModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
24221 find interpretation(problem,interpretation);
24222 PartialInterpretation.scopes(interpretation,scope);
24223 Scope.targetTypeInterpretation(scope,typeInterpretation);
24224 Scope.maxNewElements(scope,0);
24225 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
24226 Type.name(type,"Model class DefinedPart");
24227}
24228
24229/**
24230 * An element may be an instance of type "Model class DefinedPart".
24231 */
24232private pattern mayInstanceOfModel_class_DefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
24233{ find mustInstanceOfModel_class_DefinedPart(problem,interpretation,element); }
24234/**
24235 * An element must be an instance of type "Model class UndefinedPart".
24236 */
24237private pattern mustInstanceOfModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement) {
24238 Type.name(type,"Model class UndefinedPart");
24239 find directInstanceOf(problem,interpretation,element,type);
24240}
24241private pattern scopeDisallowsNewModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation) {
24242 find interpretation(problem,interpretation);
24243 PartialInterpretation.scopes(interpretation,scope);
24244 Scope.targetTypeInterpretation(scope,typeInterpretation);
24245 Scope.maxNewElements(scope,0);
24246 PartialComplexTypeInterpretation.interpretationOf(typeInterpretation,type);
24247 Type.name(type,"Model class UndefinedPart");
24248}
24249
24250/**
24251 * An element may be an instance of type "Model class UndefinedPart".
24252 */
24253private pattern mayInstanceOfModel_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element:DefinedElement)
24254{
24255 find interpretation(problem,interpretation);
24256 PartialInterpretation.newElements(interpretation,element);
24257 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
24258 neg find mustInstanceOfFSObject_class(problem,interpretation,element);
24259 neg find scopeDisallowsNewModel_class_UndefinedPart(problem, interpretation);
24260 neg find isPrimitive(element);
24261} or {
24262 find interpretation(problem,interpretation);
24263 PartialInterpretation.openWorldElements(interpretation,element);
24264 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
24265 neg find mustInstanceOfFSObject_class(problem,interpretation,element);
24266 neg find scopeDisallowsNewModel_class_UndefinedPart(problem, interpretation);
24267 neg find isPrimitive(element);
24268} or
24269{ find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,element); }
24270
24271//////////
24272// 1.2 Relation Declaration Indexers
24273//////////
24274/**
24275 * Matcher for detecting tuples t where []root reference FileSystem(source,target)
24276 */
24277private pattern mustInRelationroot_reference_FileSystem(
24278 problem:LogicProblem, interpretation:PartialInterpretation,
24279 source: DefinedElement, target:DefinedElement)
24280{
24281 find interpretation(problem,interpretation);
24282 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
24283 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"root reference FileSystem");
24284 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
24285 BinaryElementRelationLink.param1(link,source);
24286 BinaryElementRelationLink.param2(link,target);
24287}
24288/**
24289 * Matcher for detecting tuples t where <>root reference FileSystem(source,target)
24290 */
24291private pattern mayInRelationroot_reference_FileSystem(
24292 problem:LogicProblem, interpretation:PartialInterpretation,
24293 source: DefinedElement, target:DefinedElement)
24294{
24295 find interpretation(problem,interpretation);
24296 // The two endpoint of the link have to exist
24297 find mayExist(problem, interpretation, source);
24298 find mayExist(problem, interpretation, target);
24299 // Type consistency
24300 find mayInstanceOfFileSystem_class(problem,interpretation,source);
24301 find mayInstanceOfDir_class(problem,interpretation,target);
24302 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
24303 // the upper bound of the multiplicity should be considered.
24304 numberOfExistingReferences == count find mustInRelationroot_reference_FileSystem(problem,interpretation,source,_);
24305 check(numberOfExistingReferences < 1);
24306 // The reference is containment, then a new reference cannot be create if:
24307 // 1. Multiple parents
24308 neg find mustContains4(problem,interpretation,_,target);
24309 // 2. Circle in the containment hierarchy
24310 neg find mustTransitiveContains(source,target);
24311} or {
24312 find mustInRelationroot_reference_FileSystem(problem,interpretation,source,target);
24313}
24314/**
24315 * Matcher for detecting tuples t where []live reference FileSystem(source,target)
24316 */
24317 private pattern mustInRelationlive_reference_FileSystem(
24318 problem:LogicProblem, interpretation:PartialInterpretation,
24319 source: DefinedElement, target:DefinedElement)
24320 {
24321 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,source,target);
24322 }
24323/**
24324 * Matcher for detecting tuples t where []live reference FileSystem(source,target)
24325 */
24326 private pattern mayInRelationlive_reference_FileSystem(
24327 problem:LogicProblem, interpretation:PartialInterpretation,
24328 source: DefinedElement, target:DefinedElement)
24329 {
24330 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,source,target);
24331 }
24332/**
24333 * Matcher for detecting tuples t where []parent reference FSObject(source,target)
24334 */
24335private pattern mustInRelationparent_reference_FSObject(
24336 problem:LogicProblem, interpretation:PartialInterpretation,
24337 source: DefinedElement, target:DefinedElement)
24338{
24339 find interpretation(problem,interpretation);
24340 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
24341 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"parent reference FSObject");
24342 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
24343 BinaryElementRelationLink.param1(link,source);
24344 BinaryElementRelationLink.param2(link,target);
24345}
24346/**
24347 * Matcher for detecting tuples t where <>parent reference FSObject(source,target)
24348 */
24349private pattern mayInRelationparent_reference_FSObject(
24350 problem:LogicProblem, interpretation:PartialInterpretation,
24351 source: DefinedElement, target:DefinedElement)
24352{
24353 find interpretation(problem,interpretation);
24354 // The two endpoint of the link have to exist
24355 find mayExist(problem, interpretation, source);
24356 find mayExist(problem, interpretation, target);
24357 // Type consistency
24358 find mayInstanceOfFSObject_class(problem,interpretation,source);
24359 find mayInstanceOfDir_class(problem,interpretation,target);
24360 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
24361 // the upper bound of the multiplicity should be considered.
24362 numberOfExistingReferences == count find mustInRelationparent_reference_FSObject(problem,interpretation,source,_);
24363 check(numberOfExistingReferences < 1);
24364 // The eOpposite of the reference is containment, then a referene cannot be created if
24365 // 1. Multiple parents
24366 neg find mustContains4(problem,interpretation,source,_);
24367 // 2. Circle in the containment hierarchy
24368 neg find mustTransitiveContains(source,target);
24369} or {
24370 find mustInRelationparent_reference_FSObject(problem,interpretation,source,target);
24371}
24372/**
24373 * Matcher for detecting tuples t where []contents reference Dir(source,target)
24374 */
24375private pattern mustInRelationcontents_reference_Dir(
24376 problem:LogicProblem, interpretation:PartialInterpretation,
24377 source: DefinedElement, target:DefinedElement)
24378{
24379 find interpretation(problem,interpretation);
24380 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
24381 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"contents reference Dir");
24382 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
24383 BinaryElementRelationLink.param1(link,source);
24384 BinaryElementRelationLink.param2(link,target);
24385}
24386/**
24387 * Matcher for detecting tuples t where <>contents reference Dir(source,target)
24388 */
24389private pattern mayInRelationcontents_reference_Dir(
24390 problem:LogicProblem, interpretation:PartialInterpretation,
24391 source: DefinedElement, target:DefinedElement)
24392{
24393 find interpretation(problem,interpretation);
24394 // The two endpoint of the link have to exist
24395 find mayExist(problem, interpretation, source);
24396 find mayExist(problem, interpretation, target);
24397 // Type consistency
24398 find mayInstanceOfDir_class(problem,interpretation,source);
24399 find mayInstanceOfFSObject_class(problem,interpretation,target);
24400 // There are "numberOfExistingReferences" currently existing instances of the reference to the target,
24401 // the upper bound of the opposite reference multiplicity should be considered.
24402 numberOfExistingOppositeReferences == count find mustInRelationparent_reference_FSObject(problem,interpretation,target,_);
24403 check(numberOfExistingOppositeReferences < 1);
24404 // The reference is containment, then a new reference cannot be create if:
24405 // 1. Multiple parents
24406 neg find mustContains4(problem,interpretation,_,target);
24407 // 2. Circle in the containment hierarchy
24408 neg find mustTransitiveContains(source,target);
24409} or {
24410 find mustInRelationcontents_reference_Dir(problem,interpretation,source,target);
24411}
24412/**
24413 * Matcher for detecting tuples t where []filesystems reference Model(source,target)
24414 */
24415private pattern mustInRelationfilesystems_reference_Model(
24416 problem:LogicProblem, interpretation:PartialInterpretation,
24417 source: DefinedElement, target:DefinedElement)
24418{
24419 find interpretation(problem,interpretation);
24420 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
24421 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"filesystems reference Model");
24422 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
24423 BinaryElementRelationLink.param1(link,source);
24424 BinaryElementRelationLink.param2(link,target);
24425}
24426/**
24427 * Matcher for detecting tuples t where <>filesystems reference Model(source,target)
24428 */
24429private pattern mayInRelationfilesystems_reference_Model(
24430 problem:LogicProblem, interpretation:PartialInterpretation,
24431 source: DefinedElement, target:DefinedElement)
24432{
24433 find interpretation(problem,interpretation);
24434 // The two endpoint of the link have to exist
24435 find mayExist(problem, interpretation, source);
24436 find mayExist(problem, interpretation, target);
24437 // Type consistency
24438 find mayInstanceOfModel_class(problem,interpretation,source);
24439 find mayInstanceOfFileSystem_class(problem,interpretation,target);
24440 // There are "numberOfExistingReferences" currently existing instances of the reference from the source,
24441 // the upper bound of the multiplicity should be considered.
24442 numberOfExistingReferences == count find mustInRelationfilesystems_reference_Model(problem,interpretation,source,_);
24443 check(numberOfExistingReferences < 1);
24444 // The reference is containment, then a new reference cannot be create if:
24445 // 1. Multiple parents
24446 neg find mustContains4(problem,interpretation,_,target);
24447 // 2. Circle in the containment hierarchy
24448 neg find mustTransitiveContains(source,target);
24449} or {
24450 find mustInRelationfilesystems_reference_Model(problem,interpretation,source,target);
24451}
24452/**
24453 * Matcher for detecting tuples t where []otherFSObjects reference Model(source,target)
24454 */
24455private pattern mustInRelationotherFSObjects_reference_Model(
24456 problem:LogicProblem, interpretation:PartialInterpretation,
24457 source: DefinedElement, target:DefinedElement)
24458{
24459 find interpretation(problem,interpretation);
24460 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
24461 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"otherFSObjects reference Model");
24462 PartialRelationInterpretation.relationlinks(relationIterpretation,link);
24463 BinaryElementRelationLink.param1(link,source);
24464 BinaryElementRelationLink.param2(link,target);
24465}
24466/**
24467 * Matcher for detecting tuples t where <>otherFSObjects reference Model(source,target)
24468 */
24469private pattern mayInRelationotherFSObjects_reference_Model(
24470 problem:LogicProblem, interpretation:PartialInterpretation,
24471 source: DefinedElement, target:DefinedElement)
24472{
24473 find interpretation(problem,interpretation);
24474 // The two endpoint of the link have to exist
24475 find mayExist(problem, interpretation, source);
24476 find mayExist(problem, interpretation, target);
24477 // Type consistency
24478 find mayInstanceOfModel_class(problem,interpretation,source);
24479 find mayInstanceOfFSObject_class(problem,interpretation,target);
24480 // The reference is containment, then a new reference cannot be create if:
24481 // 1. Multiple parents
24482 neg find mustContains4(problem,interpretation,_,target);
24483 // 2. Circle in the containment hierarchy
24484 neg find mustTransitiveContains(source,target);
24485} or {
24486 find mustInRelationotherFSObjects_reference_Model(problem,interpretation,source,target);
24487}
24488
24489//////////
24490// 1.3 Relation Definition Indexers
24491//////////
24492// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test filesystem queries patternContent
24493private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(
24494 problem:LogicProblem, interpretation:PartialInterpretation,
24495 var_o1, var_o2)
24496{
24497 find interpretation(problem,interpretation);
24498 find mustInstanceOfFSObject_class(problem,interpretation,var_o1);
24499 find mustInstanceOfFSObject_class(problem,interpretation,var_o2);
24500 // o1 is exported
24501 // o2 is exported
24502 find mustInstanceOfDir_class(problem,interpretation,var_o1);
24503 find mustInRelationcontents_reference_Dir(problem,interpretation,var_o1,var_virtual0);
24504 find mustInstanceOfFSObject_class(problem,interpretation,var_virtual0);
24505 var_virtual0 == var_o2;
24506}
24507private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(
24508 problem:LogicProblem, interpretation:PartialInterpretation,
24509 var_o1, var_o2)
24510{
24511 find interpretation(problem,interpretation);
24512 find mayInstanceOfFSObject_class(problem,interpretation,var_o1);
24513 find mayInstanceOfFSObject_class(problem,interpretation,var_o2);
24514 // o1 is exported
24515 // o2 is exported
24516 find mayInstanceOfDir_class(problem,interpretation,var_o1);
24517 find mayInRelationcontents_reference_Dir(problem,interpretation,var_o1,var_virtual0);
24518 find mayInstanceOfFSObject_class(problem,interpretation,var_virtual0);
24519 find mayEquivalent(problem, interpretation, var_virtual0, var_o2);
24520}
24521private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(
24522 problem:LogicProblem, interpretation:PartialInterpretation,
24523 var_o1, var_o2)
24524{
24525 find interpretation(problem,interpretation);
24526 find mustInstanceOfFSObject_class(problem,interpretation,var_o1);
24527 find mustInstanceOfFSObject_class(problem,interpretation,var_o2);
24528 // o1 is exported
24529 // o2 is exported
24530 find mustInstanceOfDir_class(problem,interpretation,var_o1);
24531 find mustInRelationcontents_reference_Dir(problem,interpretation,var_o1,var_virtual0);
24532 find mustInstanceOfFSObject_class(problem,interpretation,var_virtual0);
24533 var_virtual0 == var_o2;
24534}
24535private pattern twoParam_mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(var_o1, var_o2) {
24536 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(_,_,var_o1, var_o2);
24537}
24538private pattern twoParam_mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(var_o1, var_o2) {
24539 find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(_,_,var_o1, var_o2);
24540}
24541private pattern twoParam_currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(var_o1, var_o2) {
24542 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent(_,_,var_o1, var_o2);
24543}
24544// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test filesystem queries live
24545private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(
24546 problem:LogicProblem, interpretation:PartialInterpretation,
24547 var_this, var_l)
24548{
24549 find interpretation(problem,interpretation);
24550 find mustInstanceOfFileSystem_class(problem,interpretation,var_this);
24551 find mustInstanceOfFSObject_class(problem,interpretation,var_l);
24552 // this is exported
24553 // l is exported
24554 find mustInstanceOfFileSystem_class(problem,interpretation,var_this);
24555 find mustInRelationroot_reference_FileSystem(problem,interpretation,var_this,var_virtual0);
24556 find mustInstanceOfDir_class(problem,interpretation,var_virtual0);
24557 var_virtual0 == var_l;
24558}or{
24559 find interpretation(problem,interpretation);
24560 find mustInstanceOfFileSystem_class(problem,interpretation,var_this);
24561 find mustInstanceOfFSObject_class(problem,interpretation,var_l);
24562 // this is exported
24563 // l is exported
24564 find mustInstanceOfFileSystem_class(problem,interpretation,var_this);
24565 find mustInRelationroot_reference_FileSystem(problem,interpretation,var_this,var_virtual0);
24566 find mustInstanceOfDir_class(problem,interpretation,var_virtual0);
24567 var_virtual0 == var_root;
24568 find twoParam_mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent+(var_root,var_l);
24569}
24570private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(
24571 problem:LogicProblem, interpretation:PartialInterpretation,
24572 var_this, var_l)
24573{
24574 find interpretation(problem,interpretation);
24575 find mayInstanceOfFileSystem_class(problem,interpretation,var_this);
24576 find mayInstanceOfFSObject_class(problem,interpretation,var_l);
24577 // this is exported
24578 // l is exported
24579 find mayInstanceOfFileSystem_class(problem,interpretation,var_this);
24580 find mayInRelationroot_reference_FileSystem(problem,interpretation,var_this,var_virtual0);
24581 find mayInstanceOfDir_class(problem,interpretation,var_virtual0);
24582 find mayEquivalent(problem, interpretation, var_virtual0, var_l);
24583}or{
24584 find interpretation(problem,interpretation);
24585 find mayInstanceOfFileSystem_class(problem,interpretation,var_this);
24586 find mayInstanceOfFSObject_class(problem,interpretation,var_l);
24587 // this is exported
24588 // l is exported
24589 find mayInstanceOfFileSystem_class(problem,interpretation,var_this);
24590 find mayInRelationroot_reference_FileSystem(problem,interpretation,var_this,var_virtual0);
24591 find mayInstanceOfDir_class(problem,interpretation,var_virtual0);
24592 find mayEquivalent(problem, interpretation, var_virtual0, var_root);
24593 find twoParam_mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent+(var_root,var_l);
24594}
24595private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(
24596 problem:LogicProblem, interpretation:PartialInterpretation,
24597 var_this, var_l)
24598{
24599 find interpretation(problem,interpretation);
24600 find mustInstanceOfFileSystem_class(problem,interpretation,var_this);
24601 find mustInstanceOfFSObject_class(problem,interpretation,var_l);
24602 // this is exported
24603 // l is exported
24604 find mustInstanceOfFileSystem_class(problem,interpretation,var_this);
24605 find mustInRelationroot_reference_FileSystem(problem,interpretation,var_this,var_virtual0);
24606 find mustInstanceOfDir_class(problem,interpretation,var_virtual0);
24607 var_virtual0 == var_l;
24608}or{
24609 find interpretation(problem,interpretation);
24610 find mustInstanceOfFileSystem_class(problem,interpretation,var_this);
24611 find mustInstanceOfFSObject_class(problem,interpretation,var_l);
24612 // this is exported
24613 // l is exported
24614 find mustInstanceOfFileSystem_class(problem,interpretation,var_this);
24615 find mustInRelationroot_reference_FileSystem(problem,interpretation,var_this,var_virtual0);
24616 find mustInstanceOfDir_class(problem,interpretation,var_virtual0);
24617 var_virtual0 == var_root;
24618 find twoParam_currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_patternContent+(var_root,var_l);
24619}
24620// Must, May and Current queries for pattern ca mcgill ecse dslreasoner standalone test filesystem queries contentInNotLive
24621private pattern mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive(
24622 problem:LogicProblem, interpretation:PartialInterpretation,
24623 var_parent, var_child)
24624{
24625 find interpretation(problem,interpretation);
24626 find mustInstanceOfDir_class(problem,interpretation,var_parent);
24627 find mustInstanceOfFSObject_class(problem,interpretation,var_child);
24628 // parent is exported
24629 // child is exported
24630 find mustInstanceOfDir_class(problem,interpretation,var_parent);
24631 find mustInRelationcontents_reference_Dir(problem,interpretation,var_parent,var_virtual0);
24632 find mustInstanceOfFSObject_class(problem,interpretation,var_virtual0);
24633 var_virtual0 == var_child;
24634 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,_var__0,var_parent);
24635}or{
24636 find interpretation(problem,interpretation);
24637 find mustInstanceOfDir_class(problem,interpretation,var_parent);
24638 find mustInstanceOfFSObject_class(problem,interpretation,var_child);
24639 // parent is exported
24640 // child is exported
24641 find mustInstanceOfDir_class(problem,interpretation,var_parent);
24642 find mustInRelationcontents_reference_Dir(problem,interpretation,var_parent,var_virtual0);
24643 find mustInstanceOfFSObject_class(problem,interpretation,var_virtual0);
24644 var_virtual0 == var_child;
24645 neg find mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,_var__0,var_child);
24646}
24647private pattern mayInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive(
24648 problem:LogicProblem, interpretation:PartialInterpretation,
24649 var_parent, var_child)
24650{
24651 find interpretation(problem,interpretation);
24652 find mayInstanceOfDir_class(problem,interpretation,var_parent);
24653 find mayInstanceOfFSObject_class(problem,interpretation,var_child);
24654 // parent is exported
24655 // child is exported
24656 find mayInstanceOfDir_class(problem,interpretation,var_parent);
24657 find mayInRelationcontents_reference_Dir(problem,interpretation,var_parent,var_virtual0);
24658 find mayInstanceOfFSObject_class(problem,interpretation,var_virtual0);
24659 find mayEquivalent(problem, interpretation, var_virtual0, var_child);
24660 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,_var__0,var_parent);
24661}or{
24662 find interpretation(problem,interpretation);
24663 find mayInstanceOfDir_class(problem,interpretation,var_parent);
24664 find mayInstanceOfFSObject_class(problem,interpretation,var_child);
24665 // parent is exported
24666 // child is exported
24667 find mayInstanceOfDir_class(problem,interpretation,var_parent);
24668 find mayInRelationcontents_reference_Dir(problem,interpretation,var_parent,var_virtual0);
24669 find mayInstanceOfFSObject_class(problem,interpretation,var_virtual0);
24670 find mayEquivalent(problem, interpretation, var_virtual0, var_child);
24671 neg find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,_var__0,var_child);
24672}
24673private pattern currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive(
24674 problem:LogicProblem, interpretation:PartialInterpretation,
24675 var_parent, var_child)
24676{
24677 find interpretation(problem,interpretation);
24678 find mustInstanceOfDir_class(problem,interpretation,var_parent);
24679 find mustInstanceOfFSObject_class(problem,interpretation,var_child);
24680 // parent is exported
24681 // child is exported
24682 find mustInstanceOfDir_class(problem,interpretation,var_parent);
24683 find mustInRelationcontents_reference_Dir(problem,interpretation,var_parent,var_virtual0);
24684 find mustInstanceOfFSObject_class(problem,interpretation,var_virtual0);
24685 var_virtual0 == var_child;
24686 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,_var__0,var_parent);
24687}or{
24688 find interpretation(problem,interpretation);
24689 find mustInstanceOfDir_class(problem,interpretation,var_parent);
24690 find mustInstanceOfFSObject_class(problem,interpretation,var_child);
24691 // parent is exported
24692 // child is exported
24693 find mustInstanceOfDir_class(problem,interpretation,var_parent);
24694 find mustInRelationcontents_reference_Dir(problem,interpretation,var_parent,var_virtual0);
24695 find mustInstanceOfFSObject_class(problem,interpretation,var_virtual0);
24696 var_virtual0 == var_child;
24697 neg find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_live(problem,interpretation,_var__0,var_child);
24698}
24699
24700//////////
24701// 1.4 Containment Indexer
24702//////////
24703private pattern mustContains2(source: DefinedElement, target: DefinedElement) {
24704 find mustContains4(_,_,source,target);
24705}
24706
24707private pattern mustContains4(problem:LogicProblem, interpretation:PartialInterpretation,
24708 source: DefinedElement, target: DefinedElement)
24709 { find mustInRelationroot_reference_FileSystem(problem,interpretation,source,target); }or
24710
24711 { find mustInRelationcontents_reference_Dir(problem,interpretation,source,target); }or
24712
24713 { find mustInRelationfilesystems_reference_Model(problem,interpretation,source,target); }or
24714
24715 { find mustInRelationotherFSObjects_reference_Model(problem,interpretation,source,target); }
24716
24717private pattern mustTransitiveContains(source,target) {
24718 find mustContains2+(source,target);
24719}
24720
24721//////////
24722// 2. Invalidation Indexers
24723//////////
24724// 2.1 Invalidated by WF Queries
24725//////////
24726pattern invalidatedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive(problem:LogicProblem, interpretation:PartialInterpretation,
24727 var_parent, var_child)
24728{
24729 find mustInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive(problem,interpretation,var_parent,var_child);
24730}
24731
24732//////////
24733// 3. Unfinishedness Indexers
24734//////////
24735// 3.1 Unfinishedness Measured by Multiplicity
24736//////////
24737pattern unfinishedLowerMultiplicity_root_reference_FileSystem(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) {
24738 find interpretation(problem,interpretation);
24739 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
24740 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"root reference FileSystem");
24741 find mustInstanceOfFileSystem_class(problem,interpretation,object);
24742 numberOfExistingReferences == count find mustInRelationroot_reference_FileSystem(problem,interpretation,object,_);
24743 check(numberOfExistingReferences < 1);
24744 missingMultiplicity == eval(1-numberOfExistingReferences);
24745}
24746pattern unfinishedLowerMultiplicity_filesystems_reference_Model(problem:LogicProblem, interpretation:PartialInterpretation, relationIterpretation:PartialRelationInterpretation, object:DefinedElement,missingMultiplicity) {
24747 find interpretation(problem,interpretation);
24748 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
24749 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"filesystems reference Model");
24750 find mustInstanceOfModel_class(problem,interpretation,object);
24751 numberOfExistingReferences == count find mustInRelationfilesystems_reference_Model(problem,interpretation,object,_);
24752 check(numberOfExistingReferences < 1);
24753 missingMultiplicity == eval(1-numberOfExistingReferences);
24754}
24755
24756//////////
24757// 3.2 Unfinishedness Measured by WF Queries
24758//////////
24759pattern unfinishedBy_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive(problem:LogicProblem, interpretation:PartialInterpretation,
24760 var_parent, var_child)
24761{
24762 find currentInRelation_pattern_ca_mcgill_ecse_dslreasoner_standalone_test_filesystem_queries_contentInNotLive(problem,interpretation,var_parent,var_child);
24763}
24764
24765//////////
24766// 4. Refinement Indexers
24767//////////
24768// 4.1 Object constructors
24769//////////
24770private pattern hasElementInContainment(problem:LogicProblem, interpretation:PartialInterpretation)
24771{
24772 find interpretation(problem,interpretation);
24773 find mustInstanceOfModel_class(problem,interpretation,root);
24774 find mustExist(problem, interpretation, root);
24775}or{
24776 find interpretation(problem,interpretation);
24777 find mustInstanceOfFile_class(problem,interpretation,root);
24778 find mustExist(problem, interpretation, root);
24779}or{
24780 find interpretation(problem,interpretation);
24781 find mustInstanceOfFSObject_class(problem,interpretation,root);
24782 find mustExist(problem, interpretation, root);
24783}or{
24784 find interpretation(problem,interpretation);
24785 find mustInstanceOfFileSystem_class(problem,interpretation,root);
24786 find mustExist(problem, interpretation, root);
24787}or{
24788 find interpretation(problem,interpretation);
24789 find mustInstanceOfDir_class(problem,interpretation,root);
24790 find mustExist(problem, interpretation, root);
24791}or{
24792 find interpretation(problem,interpretation);
24793 find mustInstanceOfModel_class_DefinedPart(problem,interpretation,root);
24794 find mustExist(problem, interpretation, root);
24795}or{
24796 find interpretation(problem,interpretation);
24797 find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,root);
24798 find mustExist(problem, interpretation, root);
24799}
24800pattern createObject_Dir_class_by_root_reference_FileSystem(
24801 problem:LogicProblem, interpretation:PartialInterpretation,
24802 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
24803 container:DefinedElement)
24804{
24805 find interpretation(problem,interpretation);
24806 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
24807 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Dir class");
24808 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
24809 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"root reference FileSystem");
24810 find mustInstanceOfFileSystem_class(problem,interpretation,container);
24811 find mayInstanceOfDir_class(problem,interpretation,newObject);
24812 find mayInRelationroot_reference_FileSystem(problem,interpretation,container,newObject);
24813 find mustExist(problem, interpretation, container);
24814 neg find mustExist(problem, interpretation, newObject);
24815}
24816pattern createObject_Dir_class_by_contents_reference_Dir_with_parent_reference_FSObject(
24817 problem:LogicProblem, interpretation:PartialInterpretation,
24818 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
24819 container:DefinedElement)
24820{
24821 find interpretation(problem,interpretation);
24822 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
24823 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Dir class");
24824 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
24825 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"contents reference Dir");
24826 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
24827 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FSObject");
24828 find mustInstanceOfDir_class(problem,interpretation,container);
24829 find mayInstanceOfDir_class(problem,interpretation,newObject);
24830 find mayInRelationcontents_reference_Dir(problem,interpretation,container,newObject);
24831 find mustExist(problem, interpretation, container);
24832 neg find mustExist(problem, interpretation, newObject);
24833}
24834pattern createObject_Dir_class_by_otherFSObjects_reference_Model(
24835 problem:LogicProblem, interpretation:PartialInterpretation,
24836 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
24837 container:DefinedElement)
24838{
24839 find interpretation(problem,interpretation);
24840 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
24841 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Dir class");
24842 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
24843 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"otherFSObjects reference Model");
24844 find mustInstanceOfModel_class(problem,interpretation,container);
24845 find mayInstanceOfDir_class(problem,interpretation,newObject);
24846 find mayInRelationotherFSObjects_reference_Model(problem,interpretation,container,newObject);
24847 find mustExist(problem, interpretation, container);
24848 neg find mustExist(problem, interpretation, newObject);
24849}
24850pattern createObject_Dir_class(
24851 problem:LogicProblem, interpretation:PartialInterpretation,
24852 typeInterpretation:PartialComplexTypeInterpretation)
24853{
24854 find interpretation(problem,interpretation);
24855 neg find hasElementInContainment(problem,interpretation);
24856 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
24857 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Dir class");
24858 find mayInstanceOfDir_class(problem,interpretation,newObject);
24859 find mayExist(problem, interpretation, newObject);
24860 neg find mustExist(problem, interpretation, newObject);
24861}
24862pattern createObject_FileSystem_class_by_filesystems_reference_Model(
24863 problem:LogicProblem, interpretation:PartialInterpretation,
24864 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
24865 container:DefinedElement)
24866{
24867 find interpretation(problem,interpretation);
24868 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
24869 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FileSystem class");
24870 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
24871 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"filesystems reference Model");
24872 find mustInstanceOfModel_class(problem,interpretation,container);
24873 find mayInstanceOfFileSystem_class(problem,interpretation,newObject);
24874 find mayInRelationfilesystems_reference_Model(problem,interpretation,container,newObject);
24875 find mustExist(problem, interpretation, container);
24876 neg find mustExist(problem, interpretation, newObject);
24877}
24878pattern createObject_FileSystem_class(
24879 problem:LogicProblem, interpretation:PartialInterpretation,
24880 typeInterpretation:PartialComplexTypeInterpretation)
24881{
24882 find interpretation(problem,interpretation);
24883 neg find hasElementInContainment(problem,interpretation);
24884 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
24885 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"FileSystem class");
24886 find mayInstanceOfFileSystem_class(problem,interpretation,newObject);
24887 find mayExist(problem, interpretation, newObject);
24888 neg find mustExist(problem, interpretation, newObject);
24889}
24890pattern createObject_Model_class_UndefinedPart(
24891 problem:LogicProblem, interpretation:PartialInterpretation,
24892 typeInterpretation:PartialComplexTypeInterpretation)
24893{
24894 find interpretation(problem,interpretation);
24895 neg find hasElementInContainment(problem,interpretation);
24896 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
24897 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"Model class UndefinedPart");
24898 find mayInstanceOfModel_class_UndefinedPart(problem,interpretation,newObject);
24899 find mayExist(problem, interpretation, newObject);
24900 neg find mustExist(problem, interpretation, newObject);
24901}
24902pattern createObject_File_class_by_contents_reference_Dir_with_parent_reference_FSObject(
24903 problem:LogicProblem, interpretation:PartialInterpretation,
24904 relationInterpretation:PartialRelationInterpretation, inverseInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
24905 container:DefinedElement)
24906{
24907 find interpretation(problem,interpretation);
24908 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
24909 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"File class");
24910 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
24911 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"contents reference Dir");
24912 PartialInterpretation.partialrelationinterpretation(interpretation,inverseInterpretation);
24913 PartialRelationInterpretation.interpretationOf.name(inverseInterpretation,"parent reference FSObject");
24914 find mustInstanceOfDir_class(problem,interpretation,container);
24915 find mayInstanceOfFile_class(problem,interpretation,newObject);
24916 find mayInRelationcontents_reference_Dir(problem,interpretation,container,newObject);
24917 find mustExist(problem, interpretation, container);
24918 neg find mustExist(problem, interpretation, newObject);
24919}
24920pattern createObject_File_class_by_otherFSObjects_reference_Model(
24921 problem:LogicProblem, interpretation:PartialInterpretation,
24922 relationInterpretation:PartialRelationInterpretation, typeInterpretation:PartialComplexTypeInterpretation,
24923 container:DefinedElement)
24924{
24925 find interpretation(problem,interpretation);
24926 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
24927 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"File class");
24928 PartialInterpretation.partialrelationinterpretation(interpretation,relationInterpretation);
24929 PartialRelationInterpretation.interpretationOf.name(relationInterpretation,"otherFSObjects reference Model");
24930 find mustInstanceOfModel_class(problem,interpretation,container);
24931 find mayInstanceOfFile_class(problem,interpretation,newObject);
24932 find mayInRelationotherFSObjects_reference_Model(problem,interpretation,container,newObject);
24933 find mustExist(problem, interpretation, container);
24934 neg find mustExist(problem, interpretation, newObject);
24935}
24936pattern createObject_File_class(
24937 problem:LogicProblem, interpretation:PartialInterpretation,
24938 typeInterpretation:PartialComplexTypeInterpretation)
24939{
24940 find interpretation(problem,interpretation);
24941 neg find hasElementInContainment(problem,interpretation);
24942 PartialInterpretation.partialtypeinterpratation(interpretation,typeInterpretation);
24943 PartialComplexTypeInterpretation.interpretationOf.name(typeInterpretation,"File class");
24944 find mayInstanceOfFile_class(problem,interpretation,newObject);
24945 find mayExist(problem, interpretation, newObject);
24946 neg find mustExist(problem, interpretation, newObject);
24947}
24948
24949//////////
24950// 4.2 Type refinement
24951//////////
24952pattern refineTypeTo_Dir_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
24953 find interpretation(problem,interpretation);
24954 PartialInterpretation.newElements(interpretation,element);
24955 find mayInstanceOfDir_class(problem,interpretation,element);
24956 neg find mustInstanceOfDir_class(problem,interpretation,element);
24957 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
24958 neg find mustInstanceOfFile_class(problem,interpretation,element);
24959 neg find mustInstanceOfModel_class(problem,interpretation,element);
24960}
24961pattern refineTypeTo_FileSystem_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
24962 find interpretation(problem,interpretation);
24963 PartialInterpretation.newElements(interpretation,element);
24964 find mayInstanceOfFileSystem_class(problem,interpretation,element);
24965 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
24966 neg find mustInstanceOfModel_class(problem,interpretation,element);
24967 neg find mustInstanceOfFSObject_class(problem,interpretation,element);
24968}
24969pattern refineTypeTo_Model_class_UndefinedPart(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
24970 find interpretation(problem,interpretation);
24971 PartialInterpretation.newElements(interpretation,element);
24972 find mayInstanceOfModel_class_UndefinedPart(problem,interpretation,element);
24973 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
24974 neg find mustInstanceOfModel_class_UndefinedPart(problem,interpretation,element);
24975 neg find mustInstanceOfFSObject_class(problem,interpretation,element);
24976}
24977pattern refineTypeTo_File_class(problem:LogicProblem, interpretation:PartialInterpretation, element: DefinedElement) {
24978 find interpretation(problem,interpretation);
24979 PartialInterpretation.newElements(interpretation,element);
24980 find mayInstanceOfFile_class(problem,interpretation,element);
24981 neg find mustInstanceOfDir_class(problem,interpretation,element);
24982 neg find mustInstanceOfFileSystem_class(problem,interpretation,element);
24983 neg find mustInstanceOfFile_class(problem,interpretation,element);
24984 neg find mustInstanceOfModel_class(problem,interpretation,element);
24985}
24986
24987//////////
24988// 4.3 Relation refinement
24989//////////
24990pattern refineRelation_live_reference_FileSystem(
24991 problem:LogicProblem, interpretation:PartialInterpretation,
24992 relationIterpretation:PartialRelationInterpretation,
24993 from: DefinedElement, to: DefinedElement)
24994{
24995 find interpretation(problem,interpretation);
24996 PartialInterpretation.partialrelationinterpretation(interpretation,relationIterpretation);
24997 PartialRelationInterpretation.interpretationOf.name(relationIterpretation,"live reference FileSystem");
24998 find mustExist(problem, interpretation, from);
24999 find mustExist(problem, interpretation, to);
25000 find mustInstanceOfFileSystem_class(problem,interpretation,from);
25001 find mustInstanceOfFSObject_class(problem,interpretation,to);
25002 find mayInRelationlive_reference_FileSystem(problem,interpretation,from,to);
25003 neg find mustInRelationlive_reference_FileSystem(problem,interpretation,from,to);
25004}
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/debug/generation.logicproblem b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/debug/generation.logicproblem
index b744bf95..991c88fd 100644
--- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/debug/generation.logicproblem
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/debug/generation.logicproblem
@@ -1,33 +1,23 @@
1<?xml version="1.0" encoding="ASCII"?> 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"> 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:viatra2logicannotations="http://www.bme.hu/mit/inf/dslreasoner/logic/model/language/viatra2logicannotation">
3 <types xsi:type="language_1:TypeDeclaration" name="Pseudostate class" subtypes="//@types.5 //@types.6 //@types.10 //@types.11" supertypes="//@types.1" isAbstract="true"/> 3 <types xsi:type="language_1:TypeDeclaration" name="FileSystem class"/>
4 <types xsi:type="language_1:TypeDeclaration" name="Vertex class" subtypes="//@types.0 //@types.8" isAbstract="true"/> 4 <types xsi:type="language_1:TypeDeclaration" name="FSObject class" subtypes="//@types.2 //@types.3" isAbstract="true"/>
5 <types xsi:type="language_1:TypeDeclaration" name="Region class"/> 5 <types xsi:type="language_1:TypeDeclaration" name="Dir class" supertypes="//@types.1"/>
6 <types xsi:type="language_1:TypeDeclaration" name="Transition class"/> 6 <types xsi:type="language_1:TypeDeclaration" name="File class" supertypes="//@types.1"/>
7 <types xsi:type="language_1:TypeDeclaration" name="Statechart class" subtypes="//@types.13 //@types.14" supertypes="//@types.9" isAbstract="true"/> 7 <types xsi:type="language_1:TypeDeclaration" name="Model class" subtypes="//@types.5 //@types.6" isAbstract="true"/>
8 <types xsi:type="language_1:TypeDeclaration" name="Entry class" supertypes="//@types.0"/> 8 <types xsi:type="language_1:TypeDefinition" name="Model class DefinedPart" supertypes="//@types.4" elements="//@elements.0"/>
9 <types xsi:type="language_1:TypeDeclaration" name="Synchronization class" supertypes="//@types.0"/> 9 <types xsi:type="language_1:TypeDeclaration" name="Model class UndefinedPart" supertypes="//@types.4"/>
10 <types xsi:type="language_1:TypeDeclaration" name="State class" supertypes="//@types.8 //@types.9 //@types.16"/> 10 <assertions name="lowerMultiplicity root FileSystem" annotations="//@annotations.0">
11 <types xsi:type="language_1:TypeDeclaration" name="RegularState class" subtypes="//@types.7 //@types.12" supertypes="//@types.1" isAbstract="true"/>
12 <types xsi:type="language_1:TypeDeclaration" name="CompositeElement class" subtypes="//@types.4 //@types.7 //@types.15 //@types.16" isAbstract="true"/>
13 <types xsi:type="language_1:TypeDeclaration" name="Choice class" supertypes="//@types.0"/>
14 <types xsi:type="language_1:TypeDeclaration" name="Exit class" supertypes="//@types.0"/>
15 <types xsi:type="language_1:TypeDeclaration" name="FinalState class" supertypes="//@types.8"/>
16 <types xsi:type="language_1:TypeDefinition" name="Statechart class DefinedPart" supertypes="//@types.4 //@types.15" elements="//@elements.0"/>
17 <types xsi:type="language_1:TypeDeclaration" name="Statechart class UndefinedPart" supertypes="//@types.4 //@types.16"/>
18 <types xsi:type="language_1:TypeDefinition" name="CompositeElement class DefinedPart" subtypes="//@types.13" supertypes="//@types.9" isAbstract="true" elements="//@elements.0"/>
19 <types xsi:type="language_1:TypeDeclaration" name="CompositeElement class UndefinedPart" subtypes="//@types.14 //@types.7" supertypes="//@types.9" isAbstract="true"/>
20 <assertions name="lowerMultiplicity target Transition" annotations="//@annotations.0">
21 <value xsi:type="language_1:Forall"> 11 <value xsi:type="language_1:Forall">
22 <quantifiedVariables name="src"> 12 <quantifiedVariables name="src">
23 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.3"/> 13 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.0"/>
24 </quantifiedVariables> 14 </quantifiedVariables>
25 <expression xsi:type="language_1:Exists"> 15 <expression xsi:type="language_1:Exists">
26 <quantifiedVariables name="trg 1"> 16 <quantifiedVariables name="trg 1">
27 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.1"/> 17 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.2"/>
28 </quantifiedVariables> 18 </quantifiedVariables>
29 <expression xsi:type="language_1:And"> 19 <expression xsi:type="language_1:And">
30 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.3"> 20 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.0">
31 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.0/@value/@quantifiedVariables.0"/> 21 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.0/@value/@quantifiedVariables.0"/>
32 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.0/@value/@expression/@quantifiedVariables.0"/> 22 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.0/@value/@expression/@quantifiedVariables.0"/>
33 </operands> 23 </operands>
@@ -35,24 +25,24 @@
35 </expression> 25 </expression>
36 </value> 26 </value>
37 </assertions> 27 </assertions>
38 <assertions name="upperMultiplicity target Transition" annotations="//@annotations.1"> 28 <assertions name="upperMultiplicity root FileSystem" annotations="//@annotations.1">
39 <value xsi:type="language_1:Forall"> 29 <value xsi:type="language_1:Forall">
40 <quantifiedVariables name="src"> 30 <quantifiedVariables name="src">
41 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.3"/> 31 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.0"/>
42 </quantifiedVariables> 32 </quantifiedVariables>
43 <quantifiedVariables name="trg 1"> 33 <quantifiedVariables name="trg 1">
44 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.1"/> 34 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.2"/>
45 </quantifiedVariables> 35 </quantifiedVariables>
46 <quantifiedVariables name="trg 2"> 36 <quantifiedVariables name="trg 2">
47 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.1"/> 37 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.2"/>
48 </quantifiedVariables> 38 </quantifiedVariables>
49 <expression xsi:type="language_1:Impl"> 39 <expression xsi:type="language_1:Impl">
50 <leftOperand xsi:type="language_1:And"> 40 <leftOperand xsi:type="language_1:And">
51 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.3"> 41 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.0">
52 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.1/@value/@quantifiedVariables.0"/> 42 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.1/@value/@quantifiedVariables.0"/>
53 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.1/@value/@quantifiedVariables.1"/> 43 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.1/@value/@quantifiedVariables.1"/>
54 </operands> 44 </operands>
55 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.3"> 45 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.0">
56 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.1/@value/@quantifiedVariables.0"/> 46 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.1/@value/@quantifiedVariables.0"/>
57 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.1/@value/@quantifiedVariables.2"/> 47 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.1/@value/@quantifiedVariables.2"/>
58 </operands> 48 </operands>
@@ -66,24 +56,24 @@
66 </expression> 56 </expression>
67 </value> 57 </value>
68 </assertions> 58 </assertions>
69 <assertions name="upperMultiplicity source Transition" annotations="//@annotations.2"> 59 <assertions name="upperMultiplicity parent FSObject" annotations="//@annotations.2">
70 <value xsi:type="language_1:Forall"> 60 <value xsi:type="language_1:Forall">
71 <quantifiedVariables name="src"> 61 <quantifiedVariables name="src">
72 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.3"/> 62 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.1"/>
73 </quantifiedVariables> 63 </quantifiedVariables>
74 <quantifiedVariables name="trg 1"> 64 <quantifiedVariables name="trg 1">
75 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.1"/> 65 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.2"/>
76 </quantifiedVariables> 66 </quantifiedVariables>
77 <quantifiedVariables name="trg 2"> 67 <quantifiedVariables name="trg 2">
78 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.1"/> 68 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.2"/>
79 </quantifiedVariables> 69 </quantifiedVariables>
80 <expression xsi:type="language_1:Impl"> 70 <expression xsi:type="language_1:Impl">
81 <leftOperand xsi:type="language_1:And"> 71 <leftOperand xsi:type="language_1:And">
82 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.4"> 72 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.2">
83 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.2/@value/@quantifiedVariables.0"/> 73 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.2/@value/@quantifiedVariables.0"/>
84 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.2/@value/@quantifiedVariables.1"/> 74 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.2/@value/@quantifiedVariables.1"/>
85 </operands> 75 </operands>
86 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.4"> 76 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.2">
87 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.2/@value/@quantifiedVariables.0"/> 77 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.2/@value/@quantifiedVariables.0"/>
88 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.2/@value/@quantifiedVariables.2"/> 78 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.2/@value/@quantifiedVariables.2"/>
89 </operands> 79 </operands>
@@ -97,75 +87,220 @@
97 </expression> 87 </expression>
98 </value> 88 </value>
99 </assertions> 89 </assertions>
100 <assertions name="oppositeReference incomingTransitions Vertex" annotations="//@annotations.3"> 90 <assertions name="lowerMultiplicity filesystems Model" annotations="//@annotations.3">
101 <value xsi:type="language_1:Forall"> 91 <value xsi:type="language_1:Forall">
102 <quantifiedVariables name="src"> 92 <quantifiedVariables name="src">
103 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.1"/> 93 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.4"/>
104 </quantifiedVariables> 94 </quantifiedVariables>
105 <quantifiedVariables name="trg"> 95 <expression xsi:type="language_1:Exists">
106 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.3"/> 96 <quantifiedVariables name="trg 1">
97 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.0"/>
98 </quantifiedVariables>
99 <expression xsi:type="language_1:And">
100 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.4">
101 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.3/@value/@quantifiedVariables.0"/>
102 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.3/@value/@expression/@quantifiedVariables.0"/>
103 </operands>
104 </expression>
105 </expression>
106 </value>
107 </assertions>
108 <assertions name="upperMultiplicity filesystems Model" annotations="//@annotations.4">
109 <value xsi:type="language_1:Forall">
110 <quantifiedVariables name="src">
111 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.4"/>
107 </quantifiedVariables> 112 </quantifiedVariables>
108 <expression xsi:type="language_1:Iff"> 113 <quantifiedVariables name="trg 1">
109 <leftOperand xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.0"> 114 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.0"/>
110 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.3/@value/@quantifiedVariables.0"/> 115 </quantifiedVariables>
111 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.3/@value/@quantifiedVariables.1"/> 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.4">
122 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.4/@value/@quantifiedVariables.0"/>
123 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.4/@value/@quantifiedVariables.1"/>
124 </operands>
125 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.4">
126 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.4/@value/@quantifiedVariables.0"/>
127 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.4/@value/@quantifiedVariables.2"/>
128 </operands>
112 </leftOperand> 129 </leftOperand>
113 <rightOperand xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.3"> 130 <rightOperand xsi:type="language_1:Not">
114 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.3/@value/@quantifiedVariables.1"/> 131 <operand xsi:type="language_1:Distinct">
115 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.3/@value/@quantifiedVariables.0"/> 132 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.4/@value/@quantifiedVariables.1"/>
133 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.4/@value/@quantifiedVariables.2"/>
134 </operand>
116 </rightOperand> 135 </rightOperand>
117 </expression> 136 </expression>
118 </value> 137 </value>
119 </assertions> 138 </assertions>
120 <assertions name="oppositeReference outgoingTransitions Vertex" annotations="//@annotations.4"> 139 <assertions name="oppositeReference parent FSObject" annotations="//@annotations.5">
121 <value xsi:type="language_1:Forall"> 140 <value xsi:type="language_1:Forall">
122 <quantifiedVariables name="src"> 141 <quantifiedVariables name="src">
123 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.1"/> 142 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.1"/>
124 </quantifiedVariables> 143 </quantifiedVariables>
125 <quantifiedVariables name="trg"> 144 <quantifiedVariables name="trg">
126 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.3"/> 145 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.2"/>
127 </quantifiedVariables> 146 </quantifiedVariables>
128 <expression xsi:type="language_1:Iff"> 147 <expression xsi:type="language_1:Iff">
129 <leftOperand xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.1"> 148 <leftOperand xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.2">
130 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.4/@value/@quantifiedVariables.0"/> 149 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.5/@value/@quantifiedVariables.0"/>
131 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.4/@value/@quantifiedVariables.1"/> 150 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.5/@value/@quantifiedVariables.1"/>
132 </leftOperand> 151 </leftOperand>
133 <rightOperand xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.4"> 152 <rightOperand xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.3">
134 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.4/@value/@quantifiedVariables.1"/> 153 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.5/@value/@quantifiedVariables.1"/>
135 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.4/@value/@quantifiedVariables.0"/> 154 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.5/@value/@quantifiedVariables.0"/>
136 </rightOperand> 155 </rightOperand>
137 </expression> 156 </expression>
138 </value> 157 </value>
139 </assertions> 158 </assertions>
140 <relations xsi:type="language_1:RelationDeclaration" name="incomingTransitions reference Vertex"> 159 <assertions name="errorpattern ca mcgill ecse dslreasoner standalone test filesystem queries contentInNotLive" annotations="//@annotations.9">
160 <value xsi:type="language_1:Forall">
161 <quantifiedVariables name="p0">
162 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.2"/>
163 </quantifiedVariables>
164 <quantifiedVariables name="p1">
165 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.1"/>
166 </quantifiedVariables>
167 <expression xsi:type="language_1:Not">
168 <operand xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.8">
169 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.6/@value/@quantifiedVariables.0"/>
170 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@assertions.6/@value/@quantifiedVariables.1"/>
171 </operand>
172 </expression>
173 </value>
174 </assertions>
175 <relations xsi:type="language_1:RelationDeclaration" name="root reference FileSystem">
176 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.0"/>
177 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.2"/>
178 </relations>
179 <relations xsi:type="language_1:RelationDeclaration" name="live reference FileSystem" annotations="//@annotations.10">
180 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.0"/>
141 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.1"/> 181 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.1"/>
142 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.3"/>
143 </relations> 182 </relations>
144 <relations xsi:type="language_1:RelationDeclaration" name="outgoingTransitions reference Vertex"> 183 <relations xsi:type="language_1:RelationDeclaration" name="parent reference FSObject">
145 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.1"/> 184 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.1"/>
146 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.3"/> 185 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.2"/>
147 </relations> 186 </relations>
148 <relations xsi:type="language_1:RelationDeclaration" name="vertices reference Region"> 187 <relations xsi:type="language_1:RelationDeclaration" name="contents reference Dir">
149 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.2"/> 188 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.2"/>
150 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.1"/> 189 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.1"/>
151 </relations> 190 </relations>
152 <relations xsi:type="language_1:RelationDeclaration" name="target reference Transition"> 191 <relations xsi:type="language_1:RelationDeclaration" name="filesystems reference Model">
153 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.3"/> 192 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.4"/>
193 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.0"/>
194 </relations>
195 <relations xsi:type="language_1:RelationDeclaration" name="otherFSObjects reference Model">
196 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.4"/>
154 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.1"/> 197 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.1"/>
155 </relations> 198 </relations>
156 <relations xsi:type="language_1:RelationDeclaration" name="source reference Transition"> 199 <relations xsi:type="language_1:RelationDefinition" name="pattern ca mcgill ecse dslreasoner standalone test filesystem queries patternContent" annotations="//@annotations.6">
157 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.3"/> 200 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.1"/>
158 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.1"/> 201 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.1"/>
202 <variables name="parameter o1">
203 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.1"/>
204 </variables>
205 <variables name="parameter o2">
206 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.1"/>
207 </variables>
208 <value xsi:type="language_1:Or">
209 <operands xsi:type="language_1:And">
210 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.3">
211 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.6/@variables.0"/>
212 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.6/@variables.1"/>
213 </operands>
214 </operands>
215 </value>
159 </relations> 216 </relations>
160 <relations xsi:type="language_1:RelationDeclaration" name="regions reference CompositeElement"> 217 <relations xsi:type="language_1:RelationDefinition" name="pattern ca mcgill ecse dslreasoner standalone test filesystem queries live" annotations="//@annotations.7" defines="//@relations.1">
161 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.9"/> 218 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.0"/>
219 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.1"/>
220 <variables name="parameter this">
221 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.0"/>
222 </variables>
223 <variables name="parameter l">
224 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.1"/>
225 </variables>
226 <value xsi:type="language_1:Or">
227 <operands xsi:type="language_1:And">
228 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.0">
229 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.7/@variables.0"/>
230 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.7/@variables.1"/>
231 </operands>
232 </operands>
233 <operands xsi:type="language_1:Exists">
234 <quantifiedVariables name="variable root">
235 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.2"/>
236 </quantifiedVariables>
237 <expression xsi:type="language_1:And">
238 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.0">
239 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.7/@variables.0"/>
240 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.7/@value/@operands.1/@quantifiedVariables.0"/>
241 </operands>
242 <operands xsi:type="language_1:TransitiveClosure" relation="//@relations.6"/>
243 </expression>
244 </operands>
245 </value>
246 </relations>
247 <relations xsi:type="language_1:RelationDefinition" name="pattern ca mcgill ecse dslreasoner standalone test filesystem queries contentInNotLive" annotations="//@annotations.8">
162 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.2"/> 248 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.2"/>
249 <parameters xsi:type="language_1:ComplexTypeReference" referred="//@types.1"/>
250 <variables name="parameter parent">
251 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.2"/>
252 </variables>
253 <variables name="parameter child">
254 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.1"/>
255 </variables>
256 <value xsi:type="language_1:Or">
257 <operands xsi:type="language_1:Forall">
258 <quantifiedVariables name="variable 0">
259 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.0"/>
260 </quantifiedVariables>
261 <expression xsi:type="language_1:And">
262 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.3">
263 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.8/@variables.0"/>
264 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.8/@variables.1"/>
265 </operands>
266 <operands xsi:type="language_1:Not">
267 <operand xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.7">
268 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.8/@value/@operands.0/@quantifiedVariables.0"/>
269 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.8/@variables.0"/>
270 </operand>
271 </operands>
272 </expression>
273 </operands>
274 <operands xsi:type="language_1:Forall">
275 <quantifiedVariables name="variable 0">
276 <range xsi:type="language_1:ComplexTypeReference" referred="//@types.0"/>
277 </quantifiedVariables>
278 <expression xsi:type="language_1:And">
279 <operands xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.3">
280 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.8/@variables.0"/>
281 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.8/@variables.1"/>
282 </operands>
283 <operands xsi:type="language_1:Not">
284 <operand xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.7">
285 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.8/@value/@operands.1/@quantifiedVariables.0"/>
286 <parameterSubstitutions xsi:type="language_1:SymbolicValue" symbolicReference="//@relations.8/@variables.1"/>
287 </operand>
288 </operands>
289 </expression>
290 </operands>
291 </value>
163 </relations> 292 </relations>
164 <elements name="o 1" definedInType="//@types.13 //@types.15"/> 293 <elements name="o 1" definedInType="//@types.5"/>
165 <containmentHierarchies typesOrderedInHierarchy="//@types.0 //@types.9 //@types.3 //@types.7 //@types.6 //@types.5 //@types.8 //@types.10 //@types.1 //@types.4 //@types.11 //@types.12 //@types.2 //@types.13 //@types.14 //@types.15 //@types.16" containmentRelations="//@relations.1 //@relations.2 //@relations.5"/> 294 <containmentHierarchies typesOrderedInHierarchy="//@types.4 //@types.3 //@types.1 //@types.0 //@types.2 //@types.5 //@types.6" containmentRelations="//@relations.0 //@relations.3 //@relations.4 //@relations.5"/>
166 <annotations xsi:type="ecore2logicannotations:LowerMultiplicityAssertion" target="//@assertions.0" relation="//@relations.3" lower="1"/> 295 <annotations xsi:type="ecore2logicannotations:LowerMultiplicityAssertion" target="//@assertions.0" relation="//@relations.0" lower="1"/>
167 <annotations xsi:type="ecore2logicannotations:UpperMultiplicityAssertion" target="//@assertions.1" relation="//@relations.3" upper="1"/> 296 <annotations xsi:type="ecore2logicannotations:UpperMultiplicityAssertion" target="//@assertions.1" relation="//@relations.0" upper="1"/>
168 <annotations xsi:type="ecore2logicannotations:UpperMultiplicityAssertion" target="//@assertions.2" relation="//@relations.4" upper="1"/> 297 <annotations xsi:type="ecore2logicannotations:UpperMultiplicityAssertion" target="//@assertions.2" relation="//@relations.2" upper="1"/>
169 <annotations xsi:type="ecore2logicannotations:InverseRelationAssertion" target="//@assertions.3" inverseA="//@relations.0" inverseB="//@relations.3"/> 298 <annotations xsi:type="ecore2logicannotations:LowerMultiplicityAssertion" target="//@assertions.3" relation="//@relations.4" lower="1"/>
170 <annotations xsi:type="ecore2logicannotations:InverseRelationAssertion" target="//@assertions.4" inverseA="//@relations.1" inverseB="//@relations.4"/> 299 <annotations xsi:type="ecore2logicannotations:UpperMultiplicityAssertion" target="//@assertions.4" relation="//@relations.4" upper="1"/>
300 <annotations xsi:type="ecore2logicannotations:InverseRelationAssertion" target="//@assertions.5" inverseA="//@relations.2" inverseB="//@relations.3"/>
301 <annotations xsi:type="viatra2logicannotations:TransfomedViatraQuery" target="//@relations.6" patternFullyQualifiedName="ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.queries.patternContent"/>
302 <annotations xsi:type="viatra2logicannotations:TransfomedViatraQuery" target="//@relations.7" patternFullyQualifiedName="ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.queries.live"/>
303 <annotations xsi:type="viatra2logicannotations:TransfomedViatraQuery" target="//@relations.8" patternFullyQualifiedName="ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.queries.contentInNotLive"/>
304 <annotations xsi:type="viatra2logicannotations:TransformedViatraWellformednessConstraint" target="//@assertions.6" query="//@annotations.8"/>
305 <annotations xsi:type="viatra2logicannotations:DefinedByDerivedFeature" target="//@relations.1" query="//@annotations.7"/>
171</language:LogicProblem> 306</language:LogicProblem>
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/debug/init.partialmodel b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/debug/init.partialmodel
index ead2b44e..6c0e5571 100644
--- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/debug/init.partialmodel
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/debug/init.partialmodel
@@ -37,53 +37,25 @@
37 <partialtypeinterpratation xsi:type="partialinterpretation:PartialIntegerInterpretation" elements="//@openWorldElements.0"/> 37 <partialtypeinterpratation xsi:type="partialinterpretation:PartialIntegerInterpretation" elements="//@openWorldElements.0"/>
38 <partialtypeinterpratation xsi:type="partialinterpretation:PartialRealInterpretation" elements="//@openWorldElements.1"/> 38 <partialtypeinterpratation xsi:type="partialinterpretation:PartialRealInterpretation" elements="//@openWorldElements.1"/>
39 <partialtypeinterpratation xsi:type="partialinterpretation:PartialStringInterpretation" elements="//@openWorldElements.2"/> 39 <partialtypeinterpratation xsi:type="partialinterpretation:PartialStringInterpretation" elements="//@openWorldElements.2"/>
40 <partialtypeinterpratation xsi:type="partialinterpretation:PartialComplexTypeInterpretation" scopes="//@scopes.0" supertypeInterpretation="//@partialtypeinterpratation.5"> 40 <partialtypeinterpratation xsi:type="partialinterpretation:PartialComplexTypeInterpretation" scopes="//@scopes.0">
41 <interpretationOf href="generation.logicproblem#//@types.0"/> 41 <interpretationOf href="generation.logicproblem#//@types.0"/>
42 </partialtypeinterpratation> 42 </partialtypeinterpratation>
43 <partialtypeinterpratation xsi:type="partialinterpretation:PartialComplexTypeInterpretation" scopes="//@scopes.1"> 43 <partialtypeinterpratation xsi:type="partialinterpretation:PartialComplexTypeInterpretation" scopes="//@scopes.1">
44 <interpretationOf href="generation.logicproblem#//@types.1"/> 44 <interpretationOf href="generation.logicproblem#//@types.1"/>
45 </partialtypeinterpratation> 45 </partialtypeinterpratation>
46 <partialtypeinterpratation xsi:type="partialinterpretation:PartialComplexTypeInterpretation" scopes="//@scopes.2"> 46 <partialtypeinterpratation xsi:type="partialinterpretation:PartialComplexTypeInterpretation" scopes="//@scopes.2" supertypeInterpretation="//@partialtypeinterpratation.5">
47 <interpretationOf href="generation.logicproblem#//@types.2"/> 47 <interpretationOf href="generation.logicproblem#//@types.2"/>
48 </partialtypeinterpratation> 48 </partialtypeinterpratation>
49 <partialtypeinterpratation xsi:type="partialinterpretation:PartialComplexTypeInterpretation" scopes="//@scopes.3"> 49 <partialtypeinterpratation xsi:type="partialinterpretation:PartialComplexTypeInterpretation" scopes="//@scopes.3" supertypeInterpretation="//@partialtypeinterpratation.5">
50 <interpretationOf href="generation.logicproblem#//@types.3"/> 50 <interpretationOf href="generation.logicproblem#//@types.3"/>
51 </partialtypeinterpratation> 51 </partialtypeinterpratation>
52 <partialtypeinterpratation xsi:type="partialinterpretation:PartialComplexTypeInterpretation" scopes="//@scopes.4" supertypeInterpretation="//@partialtypeinterpratation.13"> 52 <partialtypeinterpratation xsi:type="partialinterpretation:PartialComplexTypeInterpretation" scopes="//@scopes.4">
53 <elements href="generation.logicproblem#//@elements.0"/> 53 <elements href="generation.logicproblem#//@elements.0"/>
54 <interpretationOf href="generation.logicproblem#//@types.4"/> 54 <interpretationOf href="generation.logicproblem#//@types.4"/>
55 </partialtypeinterpratation> 55 </partialtypeinterpratation>
56 <partialtypeinterpratation xsi:type="partialinterpretation:PartialComplexTypeInterpretation" scopes="//@scopes.5" supertypeInterpretation="//@partialtypeinterpratation.4 //@partialtypeinterpratation.5"> 56 <partialtypeinterpratation xsi:type="partialinterpretation:PartialComplexTypeInterpretation" scopes="//@scopes.5" supertypeInterpretation="//@partialtypeinterpratation.8">
57 <interpretationOf href="generation.logicproblem#//@types.5"/>
58 </partialtypeinterpratation>
59 <partialtypeinterpratation xsi:type="partialinterpretation:PartialComplexTypeInterpretation" scopes="//@scopes.6" supertypeInterpretation="//@partialtypeinterpratation.4 //@partialtypeinterpratation.5">
60 <interpretationOf href="generation.logicproblem#//@types.6"/> 57 <interpretationOf href="generation.logicproblem#//@types.6"/>
61 </partialtypeinterpratation> 58 </partialtypeinterpratation>
62 <partialtypeinterpratation xsi:type="partialinterpretation:PartialComplexTypeInterpretation" scopes="//@scopes.7" supertypeInterpretation="//@partialtypeinterpratation.12 //@partialtypeinterpratation.5 //@partialtypeinterpratation.13 //@partialtypeinterpratation.18">
63 <interpretationOf href="generation.logicproblem#//@types.7"/>
64 </partialtypeinterpratation>
65 <partialtypeinterpratation xsi:type="partialinterpretation:PartialComplexTypeInterpretation" scopes="//@scopes.8" supertypeInterpretation="//@partialtypeinterpratation.5">
66 <interpretationOf href="generation.logicproblem#//@types.8"/>
67 </partialtypeinterpratation>
68 <partialtypeinterpratation xsi:type="partialinterpretation:PartialComplexTypeInterpretation" scopes="//@scopes.9">
69 <elements href="generation.logicproblem#//@elements.0"/>
70 <interpretationOf href="generation.logicproblem#//@types.9"/>
71 </partialtypeinterpratation>
72 <partialtypeinterpratation xsi:type="partialinterpretation:PartialComplexTypeInterpretation" scopes="//@scopes.10" supertypeInterpretation="//@partialtypeinterpratation.4 //@partialtypeinterpratation.5">
73 <interpretationOf href="generation.logicproblem#//@types.10"/>
74 </partialtypeinterpratation>
75 <partialtypeinterpratation xsi:type="partialinterpretation:PartialComplexTypeInterpretation" scopes="//@scopes.11" supertypeInterpretation="//@partialtypeinterpratation.4 //@partialtypeinterpratation.5">
76 <interpretationOf href="generation.logicproblem#//@types.11"/>
77 </partialtypeinterpratation>
78 <partialtypeinterpratation xsi:type="partialinterpretation:PartialComplexTypeInterpretation" scopes="//@scopes.12" supertypeInterpretation="//@partialtypeinterpratation.12 //@partialtypeinterpratation.5">
79 <interpretationOf href="generation.logicproblem#//@types.12"/>
80 </partialtypeinterpratation>
81 <partialtypeinterpratation xsi:type="partialinterpretation:PartialComplexTypeInterpretation" scopes="//@scopes.13" supertypeInterpretation="//@partialtypeinterpratation.8 //@partialtypeinterpratation.13 //@partialtypeinterpratation.18">
82 <interpretationOf href="generation.logicproblem#//@types.14"/>
83 </partialtypeinterpratation>
84 <partialtypeinterpratation xsi:type="partialinterpretation:PartialComplexTypeInterpretation" scopes="//@scopes.14" supertypeInterpretation="//@partialtypeinterpratation.13">
85 <interpretationOf href="generation.logicproblem#//@types.16"/>
86 </partialtypeinterpratation>
87 <openWorldElements xsi:type="partialinterpretation:IntegerElement" name="New Integers"/> 59 <openWorldElements xsi:type="partialinterpretation:IntegerElement" name="New Integers"/>
88 <openWorldElements xsi:type="partialinterpretation:RealElement" name="New Reals"/> 60 <openWorldElements xsi:type="partialinterpretation:RealElement" name="New Reals"/>
89 <openWorldElements xsi:type="partialinterpretation:StringElement" name="New Strings"/> 61 <openWorldElements xsi:type="partialinterpretation:StringElement" name="New Strings"/>
@@ -94,13 +66,4 @@
94 <scopes targetTypeInterpretation="//@partialtypeinterpratation.7"/> 66 <scopes targetTypeInterpretation="//@partialtypeinterpratation.7"/>
95 <scopes targetTypeInterpretation="//@partialtypeinterpratation.8"/> 67 <scopes targetTypeInterpretation="//@partialtypeinterpratation.8"/>
96 <scopes targetTypeInterpretation="//@partialtypeinterpratation.9"/> 68 <scopes targetTypeInterpretation="//@partialtypeinterpratation.9"/>
97 <scopes targetTypeInterpretation="//@partialtypeinterpratation.10"/>
98 <scopes targetTypeInterpretation="//@partialtypeinterpratation.11"/>
99 <scopes targetTypeInterpretation="//@partialtypeinterpratation.12"/>
100 <scopes targetTypeInterpretation="//@partialtypeinterpratation.13"/>
101 <scopes targetTypeInterpretation="//@partialtypeinterpratation.14"/>
102 <scopes targetTypeInterpretation="//@partialtypeinterpratation.15"/>
103 <scopes targetTypeInterpretation="//@partialtypeinterpratation.16"/>
104 <scopes targetTypeInterpretation="//@partialtypeinterpratation.17"/>
105 <scopes targetTypeInterpretation="//@partialtypeinterpratation.18"/>
106</partialinterpretation:PartialInterpretation> 69</partialinterpretation:PartialInterpretation>
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/log.txt b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/log.txt
index 4d22da6b..162931cc 100644
--- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/log.txt
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/log.txt
@@ -1 +1 @@
Model 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 finished \ No newline at end of file Model 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!Model generation startedProblem is consistent, 2 models are generated!Model generation startedProblem is consistent, a model is generatedModels: [1.xmi]Visualisations: [1.gml]Visualisations: [1.png]Model generation finishedModel generation startedProblem is inconsistent, no model is created!Model generation finishedModel generation startedProblem is inconsistent, no model is created!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, 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, 2 models are generated!Models: [1.xmi][2.xmi]Visualisations: [1.gml][2.gml]Visualisations: [1.png][2.png]Model generation finished \ No newline at end of file
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/models/1.gml b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/models/1.gml
index 4c5b2e7d..e73f85db 100644
--- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/models/1.gml
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/models/1.gml
@@ -477,3 +477,4307 @@ graph
477 ] 477 ]
478 ] 478 ]
479] 479]
480graph
481[
482 node
483 [
484 id 0
485 graphics
486 [
487 w 277.20000000000005
488 h 82
489 type "rectangle"
490 fill "#FFFFFF"
491 fill2 "#FFFFFF"
492 outline "#000000"
493 ]
494 LabelGraphics
495 [
496 text "o 1"
497 outline "#000000"
498 fill "#FFFFFF"
499 fontSize 16
500 fontName "Monospace"
501 autoSizePolicy "node_width"
502 anchor "t"
503 borderDistance 0.0
504 ]
505 LabelGraphics
506 [
507 text "
508 Statechart class DefinedPart
509 CompositeElement class DefinedPart
510 Statechart class
511 CompositeElement class
512 "
513 fontSize 14
514 fontName "Consolas"
515 alignment "left"
516 anchor "tl"
517 borderDistance 6
518 ]
519 ]
520
521 node
522 [
523 id 1
524 graphics
525 [
526 w 41.800000000000004
527 h 26
528 type "rectangle"
529 fill "#FFFFFF"
530 fill2 "#FFFFFF"
531 outline "#000000"
532 ]
533 LabelGraphics
534 [
535 text "true"
536 outline "#000000"
537 fill "#FFFFFF"
538 fontSize 16
539 fontName "Monospace"
540 autoSizePolicy "node_width"
541 anchor "t"
542 borderDistance 0.0
543 ]
544 LabelGraphics
545 [
546 text "
547 "
548 fontSize 14
549 fontName "Consolas"
550 alignment "left"
551 anchor "tl"
552 borderDistance 6
553 ]
554 ]
555
556 node
557 [
558 id 2
559 graphics
560 [
561 w 50.6
562 h 26
563 type "rectangle"
564 fill "#FFFFFF"
565 fill2 "#FFFFFF"
566 outline "#000000"
567 ]
568 LabelGraphics
569 [
570 text "false"
571 outline "#000000"
572 fill "#FFFFFF"
573 fontSize 16
574 fontName "Monospace"
575 autoSizePolicy "node_width"
576 anchor "t"
577 borderDistance 0.0
578 ]
579 LabelGraphics
580 [
581 text "
582 "
583 fontSize 14
584 fontName "Consolas"
585 alignment "left"
586 anchor "tl"
587 borderDistance 6
588 ]
589 ]
590
591 node
592 [
593 id 3
594 graphics
595 [
596 w 107.80000000000001
597 h 40
598 type "rectangle"
599 fill "#FFFFFF"
600 fill2 "#FFFFFF"
601 outline "#000000"
602 ]
603 LabelGraphics
604 [
605 text "null"
606 outline "#000000"
607 fill "#FFFFFF"
608 fontSize 16
609 fontName "Monospace"
610 autoSizePolicy "node_width"
611 anchor "t"
612 borderDistance 0.0
613 ]
614 LabelGraphics
615 [
616 text "
617 Region class
618 "
619 fontSize 14
620 fontName "Consolas"
621 alignment "left"
622 anchor "tl"
623 borderDistance 6
624 ]
625 ]
626
627 node
628 [
629 id 4
630 graphics
631 [
632 w 292.6
633 h 96
634 type "rectangle"
635 fill "#FFFFFF"
636 fill2 "#FFFFFF"
637 outline "#000000"
638 ]
639 LabelGraphics
640 [
641 text "null"
642 outline "#000000"
643 fill "#FFFFFF"
644 fontSize 16
645 fontName "Monospace"
646 autoSizePolicy "node_width"
647 anchor "t"
648 borderDistance 0.0
649 ]
650 LabelGraphics
651 [
652 text "
653 Vertex class
654 State class
655 RegularState class
656 CompositeElement class
657 CompositeElement class UndefinedPart
658 "
659 fontSize 14
660 fontName "Consolas"
661 alignment "left"
662 anchor "tl"
663 borderDistance 6
664 ]
665 ]
666
667 node
668 [
669 id 5
670 graphics
671 [
672 w 146.3
673 h 68
674 type "rectangle"
675 fill "#FFFFFF"
676 fill2 "#FFFFFF"
677 outline "#000000"
678 ]
679 LabelGraphics
680 [
681 text "null"
682 outline "#000000"
683 fill "#FFFFFF"
684 fontSize 16
685 fontName "Monospace"
686 autoSizePolicy "node_width"
687 anchor "t"
688 borderDistance 0.0
689 ]
690 LabelGraphics
691 [
692 text "
693 Pseudostate class
694 Vertex class
695 Entry class
696 "
697 fontSize 14
698 fontName "Consolas"
699 alignment "left"
700 anchor "tl"
701 borderDistance 6
702 ]
703 ]
704
705 node
706 [
707 id 6
708 graphics
709 [
710 w 138.60000000000002
711 h 40
712 type "rectangle"
713 fill "#FFFFFF"
714 fill2 "#FFFFFF"
715 outline "#000000"
716 ]
717 LabelGraphics
718 [
719 text "null"
720 outline "#000000"
721 fill "#FFFFFF"
722 fontSize 16
723 fontName "Monospace"
724 autoSizePolicy "node_width"
725 anchor "t"
726 borderDistance 0.0
727 ]
728 LabelGraphics
729 [
730 text "
731 Transition class
732 "
733 fontSize 14
734 fontName "Consolas"
735 alignment "left"
736 anchor "tl"
737 borderDistance 6
738 ]
739 ]
740
741 node
742 [
743 id 7
744 graphics
745 [
746 w 112.2
747 h 26
748 type "rectangle"
749 fill "#FFFFFF"
750 fill2 "#FFFFFF"
751 outline "#000000"
752 ]
753 LabelGraphics
754 [
755 text "New Integers"
756 outline "#000000"
757 fill "#FFFFFF"
758 fontSize 16
759 fontName "Monospace"
760 autoSizePolicy "node_width"
761 anchor "t"
762 borderDistance 0.0
763 ]
764 LabelGraphics
765 [
766 text "
767 "
768 fontSize 14
769 fontName "Consolas"
770 alignment "left"
771 anchor "tl"
772 borderDistance 6
773 ]
774 ]
775
776 node
777 [
778 id 8
779 graphics
780 [
781 w 85.80000000000001
782 h 26
783 type "rectangle"
784 fill "#FFFFFF"
785 fill2 "#FFFFFF"
786 outline "#000000"
787 ]
788 LabelGraphics
789 [
790 text "New Reals"
791 outline "#000000"
792 fill "#FFFFFF"
793 fontSize 16
794 fontName "Monospace"
795 autoSizePolicy "node_width"
796 anchor "t"
797 borderDistance 0.0
798 ]
799 LabelGraphics
800 [
801 text "
802 "
803 fontSize 14
804 fontName "Consolas"
805 alignment "left"
806 anchor "tl"
807 borderDistance 6
808 ]
809 ]
810
811 node
812 [
813 id 9
814 graphics
815 [
816 w 103.4
817 h 26
818 type "rectangle"
819 fill "#FFFFFF"
820 fill2 "#FFFFFF"
821 outline "#000000"
822 ]
823 LabelGraphics
824 [
825 text "New Strings"
826 outline "#000000"
827 fill "#FFFFFF"
828 fontSize 16
829 fontName "Monospace"
830 autoSizePolicy "node_width"
831 anchor "t"
832 borderDistance 0.0
833 ]
834 LabelGraphics
835 [
836 text "
837 "
838 fontSize 14
839 fontName "Consolas"
840 alignment "left"
841 anchor "tl"
842 borderDistance 6
843 ]
844 ]
845
846 node
847 [
848 id 10
849 graphics
850 [
851 w 103.4
852 h 26
853 type "rectangle"
854 fill "#FFFFFF"
855 fill2 "#FFFFFF"
856 outline "#000000"
857 ]
858 LabelGraphics
859 [
860 text "New Objects"
861 outline "#000000"
862 fill "#FFFFFF"
863 fontSize 16
864 fontName "Monospace"
865 autoSizePolicy "node_width"
866 anchor "t"
867 borderDistance 0.0
868 ]
869 LabelGraphics
870 [
871 text "
872 "
873 fontSize 14
874 fontName "Consolas"
875 alignment "left"
876 anchor "tl"
877 borderDistance 6
878 ]
879 ]
880 edge
881 [
882 source 4
883 target 6
884 graphics
885 [
886 fill "#000000"
887 targetArrow "standard"
888 ]
889 LabelGraphics
890 [
891 text "incomingTransitions reference Vertex"
892 fontSize 14
893 fontName "Consolas"
894 configuration "AutoFlippingLabel"
895 model "six_pos"
896 position "thead"
897 ]
898 ]
899 edge
900 [
901 source 5
902 target 6
903 graphics
904 [
905 fill "#000000"
906 width 3
907 targetArrow "standard"
908 ]
909 LabelGraphics
910 [
911 text "outgoingTransitions reference Vertex"
912 fontSize 14
913 fontName "Consolas"
914 configuration "AutoFlippingLabel"
915 model "six_pos"
916 position "thead"
917 ]
918 ]
919 edge
920 [
921 source 3
922 target 4
923 graphics
924 [
925 fill "#000000"
926 width 3
927 targetArrow "standard"
928 ]
929 LabelGraphics
930 [
931 text "vertices reference Region"
932 fontSize 14
933 fontName "Consolas"
934 configuration "AutoFlippingLabel"
935 model "six_pos"
936 position "thead"
937 ]
938 ]
939 edge
940 [
941 source 3
942 target 5
943 graphics
944 [
945 fill "#000000"
946 width 3
947 targetArrow "standard"
948 ]
949 LabelGraphics
950 [
951 text "vertices reference Region"
952 fontSize 14
953 fontName "Consolas"
954 configuration "AutoFlippingLabel"
955 model "six_pos"
956 position "thead"
957 ]
958 ]
959 edge
960 [
961 source 6
962 target 4
963 graphics
964 [
965 fill "#000000"
966 targetArrow "standard"
967 ]
968 LabelGraphics
969 [
970 text "target reference Transition"
971 fontSize 14
972 fontName "Consolas"
973 configuration "AutoFlippingLabel"
974 model "six_pos"
975 position "thead"
976 ]
977 ]
978 edge
979 [
980 source 6
981 target 5
982 graphics
983 [
984 fill "#000000"
985 targetArrow "standard"
986 ]
987 LabelGraphics
988 [
989 text "source reference Transition"
990 fontSize 14
991 fontName "Consolas"
992 configuration "AutoFlippingLabel"
993 model "six_pos"
994 position "thead"
995 ]
996 ]
997 edge
998 [
999 source 0
1000 target 3
1001 graphics
1002 [
1003 fill "#000000"
1004 width 3
1005 targetArrow "standard"
1006 ]
1007 LabelGraphics
1008 [
1009 text "regions reference CompositeElement"
1010 fontSize 14
1011 fontName "Consolas"
1012 configuration "AutoFlippingLabel"
1013 model "six_pos"
1014 position "thead"
1015 ]
1016 ]
1017]
1018graph
1019[
1020 node
1021 [
1022 id 0
1023 graphics
1024 [
1025 w 277.20000000000005
1026 h 82
1027 type "rectangle"
1028 fill "#FFFFFF"
1029 fill2 "#FFFFFF"
1030 outline "#000000"
1031 ]
1032 LabelGraphics
1033 [
1034 text "o 1"
1035 outline "#000000"
1036 fill "#FFFFFF"
1037 fontSize 16
1038 fontName "Monospace"
1039 autoSizePolicy "node_width"
1040 anchor "t"
1041 borderDistance 0.0
1042 ]
1043 LabelGraphics
1044 [
1045 text "
1046 Statechart class DefinedPart
1047 CompositeElement class DefinedPart
1048 Statechart class
1049 CompositeElement class
1050 "
1051 fontSize 14
1052 fontName "Consolas"
1053 alignment "left"
1054 anchor "tl"
1055 borderDistance 6
1056 ]
1057 ]
1058
1059 node
1060 [
1061 id 1
1062 graphics
1063 [
1064 w 41.800000000000004
1065 h 26
1066 type "rectangle"
1067 fill "#FFFFFF"
1068 fill2 "#FFFFFF"
1069 outline "#000000"
1070 ]
1071 LabelGraphics
1072 [
1073 text "true"
1074 outline "#000000"
1075 fill "#FFFFFF"
1076 fontSize 16
1077 fontName "Monospace"
1078 autoSizePolicy "node_width"
1079 anchor "t"
1080 borderDistance 0.0
1081 ]
1082 LabelGraphics
1083 [
1084 text "
1085 "
1086 fontSize 14
1087 fontName "Consolas"
1088 alignment "left"
1089 anchor "tl"
1090 borderDistance 6
1091 ]
1092 ]
1093
1094 node
1095 [
1096 id 2
1097 graphics
1098 [
1099 w 50.6
1100 h 26
1101 type "rectangle"
1102 fill "#FFFFFF"
1103 fill2 "#FFFFFF"
1104 outline "#000000"
1105 ]
1106 LabelGraphics
1107 [
1108 text "false"
1109 outline "#000000"
1110 fill "#FFFFFF"
1111 fontSize 16
1112 fontName "Monospace"
1113 autoSizePolicy "node_width"
1114 anchor "t"
1115 borderDistance 0.0
1116 ]
1117 LabelGraphics
1118 [
1119 text "
1120 "
1121 fontSize 14
1122 fontName "Consolas"
1123 alignment "left"
1124 anchor "tl"
1125 borderDistance 6
1126 ]
1127 ]
1128
1129 node
1130 [
1131 id 3
1132 graphics
1133 [
1134 w 107.80000000000001
1135 h 40
1136 type "rectangle"
1137 fill "#FFFFFF"
1138 fill2 "#FFFFFF"
1139 outline "#000000"
1140 ]
1141 LabelGraphics
1142 [
1143 text "null"
1144 outline "#000000"
1145 fill "#FFFFFF"
1146 fontSize 16
1147 fontName "Monospace"
1148 autoSizePolicy "node_width"
1149 anchor "t"
1150 borderDistance 0.0
1151 ]
1152 LabelGraphics
1153 [
1154 text "
1155 Region class
1156 "
1157 fontSize 14
1158 fontName "Consolas"
1159 alignment "left"
1160 anchor "tl"
1161 borderDistance 6
1162 ]
1163 ]
1164
1165 node
1166 [
1167 id 4
1168 graphics
1169 [
1170 w 146.3
1171 h 68
1172 type "rectangle"
1173 fill "#FFFFFF"
1174 fill2 "#FFFFFF"
1175 outline "#000000"
1176 ]
1177 LabelGraphics
1178 [
1179 text "null"
1180 outline "#000000"
1181 fill "#FFFFFF"
1182 fontSize 16
1183 fontName "Monospace"
1184 autoSizePolicy "node_width"
1185 anchor "t"
1186 borderDistance 0.0
1187 ]
1188 LabelGraphics
1189 [
1190 text "
1191 Pseudostate class
1192 Vertex class
1193 Entry class
1194 "
1195 fontSize 14
1196 fontName "Consolas"
1197 alignment "left"
1198 anchor "tl"
1199 borderDistance 6
1200 ]
1201 ]
1202
1203 node
1204 [
1205 id 5
1206 graphics
1207 [
1208 w 138.60000000000002
1209 h 40
1210 type "rectangle"
1211 fill "#FFFFFF"
1212 fill2 "#FFFFFF"
1213 outline "#000000"
1214 ]
1215 LabelGraphics
1216 [
1217 text "null"
1218 outline "#000000"
1219 fill "#FFFFFF"
1220 fontSize 16
1221 fontName "Monospace"
1222 autoSizePolicy "node_width"
1223 anchor "t"
1224 borderDistance 0.0
1225 ]
1226 LabelGraphics
1227 [
1228 text "
1229 Transition class
1230 "
1231 fontSize 14
1232 fontName "Consolas"
1233 alignment "left"
1234 anchor "tl"
1235 borderDistance 6
1236 ]
1237 ]
1238
1239 node
1240 [
1241 id 6
1242 graphics
1243 [
1244 w 292.6
1245 h 96
1246 type "rectangle"
1247 fill "#FFFFFF"
1248 fill2 "#FFFFFF"
1249 outline "#000000"
1250 ]
1251 LabelGraphics
1252 [
1253 text "null"
1254 outline "#000000"
1255 fill "#FFFFFF"
1256 fontSize 16
1257 fontName "Monospace"
1258 autoSizePolicy "node_width"
1259 anchor "t"
1260 borderDistance 0.0
1261 ]
1262 LabelGraphics
1263 [
1264 text "
1265 Vertex class
1266 State class
1267 RegularState class
1268 CompositeElement class
1269 CompositeElement class UndefinedPart
1270 "
1271 fontSize 14
1272 fontName "Consolas"
1273 alignment "left"
1274 anchor "tl"
1275 borderDistance 6
1276 ]
1277 ]
1278
1279 node
1280 [
1281 id 7
1282 graphics
1283 [
1284 w 138.60000000000002
1285 h 40
1286 type "rectangle"
1287 fill "#FFFFFF"
1288 fill2 "#FFFFFF"
1289 outline "#000000"
1290 ]
1291 LabelGraphics
1292 [
1293 text "null"
1294 outline "#000000"
1295 fill "#FFFFFF"
1296 fontSize 16
1297 fontName "Monospace"
1298 autoSizePolicy "node_width"
1299 anchor "t"
1300 borderDistance 0.0
1301 ]
1302 LabelGraphics
1303 [
1304 text "
1305 Transition class
1306 "
1307 fontSize 14
1308 fontName "Consolas"
1309 alignment "left"
1310 anchor "tl"
1311 borderDistance 6
1312 ]
1313 ]
1314
1315 node
1316 [
1317 id 8
1318 graphics
1319 [
1320 w 112.2
1321 h 26
1322 type "rectangle"
1323 fill "#FFFFFF"
1324 fill2 "#FFFFFF"
1325 outline "#000000"
1326 ]
1327 LabelGraphics
1328 [
1329 text "New Integers"
1330 outline "#000000"
1331 fill "#FFFFFF"
1332 fontSize 16
1333 fontName "Monospace"
1334 autoSizePolicy "node_width"
1335 anchor "t"
1336 borderDistance 0.0
1337 ]
1338 LabelGraphics
1339 [
1340 text "
1341 "
1342 fontSize 14
1343 fontName "Consolas"
1344 alignment "left"
1345 anchor "tl"
1346 borderDistance 6
1347 ]
1348 ]
1349
1350 node
1351 [
1352 id 9
1353 graphics
1354 [
1355 w 85.80000000000001
1356 h 26
1357 type "rectangle"
1358 fill "#FFFFFF"
1359 fill2 "#FFFFFF"
1360 outline "#000000"
1361 ]
1362 LabelGraphics
1363 [
1364 text "New Reals"
1365 outline "#000000"
1366 fill "#FFFFFF"
1367 fontSize 16
1368 fontName "Monospace"
1369 autoSizePolicy "node_width"
1370 anchor "t"
1371 borderDistance 0.0
1372 ]
1373 LabelGraphics
1374 [
1375 text "
1376 "
1377 fontSize 14
1378 fontName "Consolas"
1379 alignment "left"
1380 anchor "tl"
1381 borderDistance 6
1382 ]
1383 ]
1384
1385 node
1386 [
1387 id 10
1388 graphics
1389 [
1390 w 103.4
1391 h 26
1392 type "rectangle"
1393 fill "#FFFFFF"
1394 fill2 "#FFFFFF"
1395 outline "#000000"
1396 ]
1397 LabelGraphics
1398 [
1399 text "New Strings"
1400 outline "#000000"
1401 fill "#FFFFFF"
1402 fontSize 16
1403 fontName "Monospace"
1404 autoSizePolicy "node_width"
1405 anchor "t"
1406 borderDistance 0.0
1407 ]
1408 LabelGraphics
1409 [
1410 text "
1411 "
1412 fontSize 14
1413 fontName "Consolas"
1414 alignment "left"
1415 anchor "tl"
1416 borderDistance 6
1417 ]
1418 ]
1419
1420 node
1421 [
1422 id 11
1423 graphics
1424 [
1425 w 103.4
1426 h 26
1427 type "rectangle"
1428 fill "#FFFFFF"
1429 fill2 "#FFFFFF"
1430 outline "#000000"
1431 ]
1432 LabelGraphics
1433 [
1434 text "New Objects"
1435 outline "#000000"
1436 fill "#FFFFFF"
1437 fontSize 16
1438 fontName "Monospace"
1439 autoSizePolicy "node_width"
1440 anchor "t"
1441 borderDistance 0.0
1442 ]
1443 LabelGraphics
1444 [
1445 text "
1446 "
1447 fontSize 14
1448 fontName "Consolas"
1449 alignment "left"
1450 anchor "tl"
1451 borderDistance 6
1452 ]
1453 ]
1454 edge
1455 [
1456 source 6
1457 target 7
1458 graphics
1459 [
1460 fill "#000000"
1461 targetArrow "standard"
1462 ]
1463 LabelGraphics
1464 [
1465 text "incomingTransitions reference Vertex"
1466 fontSize 14
1467 fontName "Consolas"
1468 configuration "AutoFlippingLabel"
1469 model "six_pos"
1470 position "thead"
1471 ]
1472 ]
1473 edge
1474 [
1475 source 6
1476 target 5
1477 graphics
1478 [
1479 fill "#000000"
1480 targetArrow "standard"
1481 ]
1482 LabelGraphics
1483 [
1484 text "incomingTransitions reference Vertex"
1485 fontSize 14
1486 fontName "Consolas"
1487 configuration "AutoFlippingLabel"
1488 model "six_pos"
1489 position "thead"
1490 ]
1491 ]
1492 edge
1493 [
1494 source 4
1495 target 5
1496 graphics
1497 [
1498 fill "#000000"
1499 width 3
1500 targetArrow "standard"
1501 ]
1502 LabelGraphics
1503 [
1504 text "outgoingTransitions reference Vertex"
1505 fontSize 14
1506 fontName "Consolas"
1507 configuration "AutoFlippingLabel"
1508 model "six_pos"
1509 position "thead"
1510 ]
1511 ]
1512 edge
1513 [
1514 source 6
1515 target 7
1516 graphics
1517 [
1518 fill "#000000"
1519 width 3
1520 targetArrow "standard"
1521 ]
1522 LabelGraphics
1523 [
1524 text "outgoingTransitions reference Vertex"
1525 fontSize 14
1526 fontName "Consolas"
1527 configuration "AutoFlippingLabel"
1528 model "six_pos"
1529 position "thead"
1530 ]
1531 ]
1532 edge
1533 [
1534 source 3
1535 target 4
1536 graphics
1537 [
1538 fill "#000000"
1539 width 3
1540 targetArrow "standard"
1541 ]
1542 LabelGraphics
1543 [
1544 text "vertices reference Region"
1545 fontSize 14
1546 fontName "Consolas"
1547 configuration "AutoFlippingLabel"
1548 model "six_pos"
1549 position "thead"
1550 ]
1551 ]
1552 edge
1553 [
1554 source 3
1555 target 6
1556 graphics
1557 [
1558 fill "#000000"
1559 width 3
1560 targetArrow "standard"
1561 ]
1562 LabelGraphics
1563 [
1564 text "vertices reference Region"
1565 fontSize 14
1566 fontName "Consolas"
1567 configuration "AutoFlippingLabel"
1568 model "six_pos"
1569 position "thead"
1570 ]
1571 ]
1572 edge
1573 [
1574 source 7
1575 target 6
1576 graphics
1577 [
1578 fill "#000000"
1579 targetArrow "standard"
1580 ]
1581 LabelGraphics
1582 [
1583 text "target reference Transition"
1584 fontSize 14
1585 fontName "Consolas"
1586 configuration "AutoFlippingLabel"
1587 model "six_pos"
1588 position "thead"
1589 ]
1590 ]
1591 edge
1592 [
1593 source 5
1594 target 6
1595 graphics
1596 [
1597 fill "#000000"
1598 targetArrow "standard"
1599 ]
1600 LabelGraphics
1601 [
1602 text "target reference Transition"
1603 fontSize 14
1604 fontName "Consolas"
1605 configuration "AutoFlippingLabel"
1606 model "six_pos"
1607 position "thead"
1608 ]
1609 ]
1610 edge
1611 [
1612 source 5
1613 target 4
1614 graphics
1615 [
1616 fill "#000000"
1617 targetArrow "standard"
1618 ]
1619 LabelGraphics
1620 [
1621 text "source reference Transition"
1622 fontSize 14
1623 fontName "Consolas"
1624 configuration "AutoFlippingLabel"
1625 model "six_pos"
1626 position "thead"
1627 ]
1628 ]
1629 edge
1630 [
1631 source 7
1632 target 6
1633 graphics
1634 [
1635 fill "#000000"
1636 targetArrow "standard"
1637 ]
1638 LabelGraphics
1639 [
1640 text "source reference Transition"
1641 fontSize 14
1642 fontName "Consolas"
1643 configuration "AutoFlippingLabel"
1644 model "six_pos"
1645 position "thead"
1646 ]
1647 ]
1648 edge
1649 [
1650 source 0
1651 target 3
1652 graphics
1653 [
1654 fill "#000000"
1655 width 3
1656 targetArrow "standard"
1657 ]
1658 LabelGraphics
1659 [
1660 text "regions reference CompositeElement"
1661 fontSize 14
1662 fontName "Consolas"
1663 configuration "AutoFlippingLabel"
1664 model "six_pos"
1665 position "thead"
1666 ]
1667 ]
1668]
1669graph
1670[
1671 node
1672 [
1673 id 0
1674 graphics
1675 [
1676 w 277.20000000000005
1677 h 82
1678 type "rectangle"
1679 fill "#FFFFFF"
1680 fill2 "#FFFFFF"
1681 outline "#000000"
1682 ]
1683 LabelGraphics
1684 [
1685 text "o 1"
1686 outline "#000000"
1687 fill "#FFFFFF"
1688 fontSize 16
1689 fontName "Monospace"
1690 autoSizePolicy "node_width"
1691 anchor "t"
1692 borderDistance 0.0
1693 ]
1694 LabelGraphics
1695 [
1696 text "
1697 Statechart class DefinedPart
1698 CompositeElement class DefinedPart
1699 Statechart class
1700 CompositeElement class
1701 "
1702 fontSize 14
1703 fontName "Consolas"
1704 alignment "left"
1705 anchor "tl"
1706 borderDistance 6
1707 ]
1708 ]
1709
1710 node
1711 [
1712 id 1
1713 graphics
1714 [
1715 w 41.800000000000004
1716 h 26
1717 type "rectangle"
1718 fill "#FFFFFF"
1719 fill2 "#FFFFFF"
1720 outline "#000000"
1721 ]
1722 LabelGraphics
1723 [
1724 text "true"
1725 outline "#000000"
1726 fill "#FFFFFF"
1727 fontSize 16
1728 fontName "Monospace"
1729 autoSizePolicy "node_width"
1730 anchor "t"
1731 borderDistance 0.0
1732 ]
1733 LabelGraphics
1734 [
1735 text "
1736 "
1737 fontSize 14
1738 fontName "Consolas"
1739 alignment "left"
1740 anchor "tl"
1741 borderDistance 6
1742 ]
1743 ]
1744
1745 node
1746 [
1747 id 2
1748 graphics
1749 [
1750 w 50.6
1751 h 26
1752 type "rectangle"
1753 fill "#FFFFFF"
1754 fill2 "#FFFFFF"
1755 outline "#000000"
1756 ]
1757 LabelGraphics
1758 [
1759 text "false"
1760 outline "#000000"
1761 fill "#FFFFFF"
1762 fontSize 16
1763 fontName "Monospace"
1764 autoSizePolicy "node_width"
1765 anchor "t"
1766 borderDistance 0.0
1767 ]
1768 LabelGraphics
1769 [
1770 text "
1771 "
1772 fontSize 14
1773 fontName "Consolas"
1774 alignment "left"
1775 anchor "tl"
1776 borderDistance 6
1777 ]
1778 ]
1779
1780 node
1781 [
1782 id 3
1783 graphics
1784 [
1785 w 107.80000000000001
1786 h 40
1787 type "rectangle"
1788 fill "#FFFFFF"
1789 fill2 "#FFFFFF"
1790 outline "#000000"
1791 ]
1792 LabelGraphics
1793 [
1794 text "null"
1795 outline "#000000"
1796 fill "#FFFFFF"
1797 fontSize 16
1798 fontName "Monospace"
1799 autoSizePolicy "node_width"
1800 anchor "t"
1801 borderDistance 0.0
1802 ]
1803 LabelGraphics
1804 [
1805 text "
1806 Region class
1807 "
1808 fontSize 14
1809 fontName "Consolas"
1810 alignment "left"
1811 anchor "tl"
1812 borderDistance 6
1813 ]
1814 ]
1815
1816 node
1817 [
1818 id 4
1819 graphics
1820 [
1821 w 154.0
1822 h 68
1823 type "rectangle"
1824 fill "#FFFFFF"
1825 fill2 "#FFFFFF"
1826 outline "#000000"
1827 ]
1828 LabelGraphics
1829 [
1830 text "null"
1831 outline "#000000"
1832 fill "#FFFFFF"
1833 fontSize 16
1834 fontName "Monospace"
1835 autoSizePolicy "node_width"
1836 anchor "t"
1837 borderDistance 0.0
1838 ]
1839 LabelGraphics
1840 [
1841 text "
1842 Vertex class
1843 RegularState class
1844 FinalState class
1845 "
1846 fontSize 14
1847 fontName "Consolas"
1848 alignment "left"
1849 anchor "tl"
1850 borderDistance 6
1851 ]
1852 ]
1853
1854 node
1855 [
1856 id 5
1857 graphics
1858 [
1859 w 146.3
1860 h 68
1861 type "rectangle"
1862 fill "#FFFFFF"
1863 fill2 "#FFFFFF"
1864 outline "#000000"
1865 ]
1866 LabelGraphics
1867 [
1868 text "null"
1869 outline "#000000"
1870 fill "#FFFFFF"
1871 fontSize 16
1872 fontName "Monospace"
1873 autoSizePolicy "node_width"
1874 anchor "t"
1875 borderDistance 0.0
1876 ]
1877 LabelGraphics
1878 [
1879 text "
1880 Pseudostate class
1881 Vertex class
1882 Entry class
1883 "
1884 fontSize 14
1885 fontName "Consolas"
1886 alignment "left"
1887 anchor "tl"
1888 borderDistance 6
1889 ]
1890 ]
1891
1892 node
1893 [
1894 id 6
1895 graphics
1896 [
1897 w 292.6
1898 h 96
1899 type "rectangle"
1900 fill "#FFFFFF"
1901 fill2 "#FFFFFF"
1902 outline "#000000"
1903 ]
1904 LabelGraphics
1905 [
1906 text "null"
1907 outline "#000000"
1908 fill "#FFFFFF"
1909 fontSize 16
1910 fontName "Monospace"
1911 autoSizePolicy "node_width"
1912 anchor "t"
1913 borderDistance 0.0
1914 ]
1915 LabelGraphics
1916 [
1917 text "
1918 Vertex class
1919 State class
1920 RegularState class
1921 CompositeElement class
1922 CompositeElement class UndefinedPart
1923 "
1924 fontSize 14
1925 fontName "Consolas"
1926 alignment "left"
1927 anchor "tl"
1928 borderDistance 6
1929 ]
1930 ]
1931
1932 node
1933 [
1934 id 7
1935 graphics
1936 [
1937 w 138.60000000000002
1938 h 40
1939 type "rectangle"
1940 fill "#FFFFFF"
1941 fill2 "#FFFFFF"
1942 outline "#000000"
1943 ]
1944 LabelGraphics
1945 [
1946 text "null"
1947 outline "#000000"
1948 fill "#FFFFFF"
1949 fontSize 16
1950 fontName "Monospace"
1951 autoSizePolicy "node_width"
1952 anchor "t"
1953 borderDistance 0.0
1954 ]
1955 LabelGraphics
1956 [
1957 text "
1958 Transition class
1959 "
1960 fontSize 14
1961 fontName "Consolas"
1962 alignment "left"
1963 anchor "tl"
1964 borderDistance 6
1965 ]
1966 ]
1967
1968 node
1969 [
1970 id 8
1971 graphics
1972 [
1973 w 112.2
1974 h 26
1975 type "rectangle"
1976 fill "#FFFFFF"
1977 fill2 "#FFFFFF"
1978 outline "#000000"
1979 ]
1980 LabelGraphics
1981 [
1982 text "New Integers"
1983 outline "#000000"
1984 fill "#FFFFFF"
1985 fontSize 16
1986 fontName "Monospace"
1987 autoSizePolicy "node_width"
1988 anchor "t"
1989 borderDistance 0.0
1990 ]
1991 LabelGraphics
1992 [
1993 text "
1994 "
1995 fontSize 14
1996 fontName "Consolas"
1997 alignment "left"
1998 anchor "tl"
1999 borderDistance 6
2000 ]
2001 ]
2002
2003 node
2004 [
2005 id 9
2006 graphics
2007 [
2008 w 85.80000000000001
2009 h 26
2010 type "rectangle"
2011 fill "#FFFFFF"
2012 fill2 "#FFFFFF"
2013 outline "#000000"
2014 ]
2015 LabelGraphics
2016 [
2017 text "New Reals"
2018 outline "#000000"
2019 fill "#FFFFFF"
2020 fontSize 16
2021 fontName "Monospace"
2022 autoSizePolicy "node_width"
2023 anchor "t"
2024 borderDistance 0.0
2025 ]
2026 LabelGraphics
2027 [
2028 text "
2029 "
2030 fontSize 14
2031 fontName "Consolas"
2032 alignment "left"
2033 anchor "tl"
2034 borderDistance 6
2035 ]
2036 ]
2037
2038 node
2039 [
2040 id 10
2041 graphics
2042 [
2043 w 103.4
2044 h 26
2045 type "rectangle"
2046 fill "#FFFFFF"
2047 fill2 "#FFFFFF"
2048 outline "#000000"
2049 ]
2050 LabelGraphics
2051 [
2052 text "New Strings"
2053 outline "#000000"
2054 fill "#FFFFFF"
2055 fontSize 16
2056 fontName "Monospace"
2057 autoSizePolicy "node_width"
2058 anchor "t"
2059 borderDistance 0.0
2060 ]
2061 LabelGraphics
2062 [
2063 text "
2064 "
2065 fontSize 14
2066 fontName "Consolas"
2067 alignment "left"
2068 anchor "tl"
2069 borderDistance 6
2070 ]
2071 ]
2072
2073 node
2074 [
2075 id 11
2076 graphics
2077 [
2078 w 103.4
2079 h 26
2080 type "rectangle"
2081 fill "#FFFFFF"
2082 fill2 "#FFFFFF"
2083 outline "#000000"
2084 ]
2085 LabelGraphics
2086 [
2087 text "New Objects"
2088 outline "#000000"
2089 fill "#FFFFFF"
2090 fontSize 16
2091 fontName "Monospace"
2092 autoSizePolicy "node_width"
2093 anchor "t"
2094 borderDistance 0.0
2095 ]
2096 LabelGraphics
2097 [
2098 text "
2099 "
2100 fontSize 14
2101 fontName "Consolas"
2102 alignment "left"
2103 anchor "tl"
2104 borderDistance 6
2105 ]
2106 ]
2107 edge
2108 [
2109 source 6
2110 target 7
2111 graphics
2112 [
2113 fill "#000000"
2114 targetArrow "standard"
2115 ]
2116 LabelGraphics
2117 [
2118 text "incomingTransitions reference Vertex"
2119 fontSize 14
2120 fontName "Consolas"
2121 configuration "AutoFlippingLabel"
2122 model "six_pos"
2123 position "thead"
2124 ]
2125 ]
2126 edge
2127 [
2128 source 5
2129 target 7
2130 graphics
2131 [
2132 fill "#000000"
2133 width 3
2134 targetArrow "standard"
2135 ]
2136 LabelGraphics
2137 [
2138 text "outgoingTransitions reference Vertex"
2139 fontSize 14
2140 fontName "Consolas"
2141 configuration "AutoFlippingLabel"
2142 model "six_pos"
2143 position "thead"
2144 ]
2145 ]
2146 edge
2147 [
2148 source 3
2149 target 4
2150 graphics
2151 [
2152 fill "#000000"
2153 width 3
2154 targetArrow "standard"
2155 ]
2156 LabelGraphics
2157 [
2158 text "vertices reference Region"
2159 fontSize 14
2160 fontName "Consolas"
2161 configuration "AutoFlippingLabel"
2162 model "six_pos"
2163 position "thead"
2164 ]
2165 ]
2166 edge
2167 [
2168 source 3
2169 target 5
2170 graphics
2171 [
2172 fill "#000000"
2173 width 3
2174 targetArrow "standard"
2175 ]
2176 LabelGraphics
2177 [
2178 text "vertices reference Region"
2179 fontSize 14
2180 fontName "Consolas"
2181 configuration "AutoFlippingLabel"
2182 model "six_pos"
2183 position "thead"
2184 ]
2185 ]
2186 edge
2187 [
2188 source 3
2189 target 6
2190 graphics
2191 [
2192 fill "#000000"
2193 width 3
2194 targetArrow "standard"
2195 ]
2196 LabelGraphics
2197 [
2198 text "vertices reference Region"
2199 fontSize 14
2200 fontName "Consolas"
2201 configuration "AutoFlippingLabel"
2202 model "six_pos"
2203 position "thead"
2204 ]
2205 ]
2206 edge
2207 [
2208 source 7
2209 target 6
2210 graphics
2211 [
2212 fill "#000000"
2213 targetArrow "standard"
2214 ]
2215 LabelGraphics
2216 [
2217 text "target reference Transition"
2218 fontSize 14
2219 fontName "Consolas"
2220 configuration "AutoFlippingLabel"
2221 model "six_pos"
2222 position "thead"
2223 ]
2224 ]
2225 edge
2226 [
2227 source 7
2228 target 5
2229 graphics
2230 [
2231 fill "#000000"
2232 targetArrow "standard"
2233 ]
2234 LabelGraphics
2235 [
2236 text "source reference Transition"
2237 fontSize 14
2238 fontName "Consolas"
2239 configuration "AutoFlippingLabel"
2240 model "six_pos"
2241 position "thead"
2242 ]
2243 ]
2244 edge
2245 [
2246 source 0
2247 target 3
2248 graphics
2249 [
2250 fill "#000000"
2251 width 3
2252 targetArrow "standard"
2253 ]
2254 LabelGraphics
2255 [
2256 text "regions reference CompositeElement"
2257 fontSize 14
2258 fontName "Consolas"
2259 configuration "AutoFlippingLabel"
2260 model "six_pos"
2261 position "thead"
2262 ]
2263 ]
2264]
2265graph
2266[
2267 node
2268 [
2269 id 0
2270 graphics
2271 [
2272 w 277.20000000000005
2273 h 82
2274 type "rectangle"
2275 fill "#FFFFFF"
2276 fill2 "#FFFFFF"
2277 outline "#000000"
2278 ]
2279 LabelGraphics
2280 [
2281 text "o 1"
2282 outline "#000000"
2283 fill "#FFFFFF"
2284 fontSize 16
2285 fontName "Monospace"
2286 autoSizePolicy "node_width"
2287 anchor "t"
2288 borderDistance 0.0
2289 ]
2290 LabelGraphics
2291 [
2292 text "
2293 Statechart class DefinedPart
2294 CompositeElement class DefinedPart
2295 Statechart class
2296 CompositeElement class
2297 "
2298 fontSize 14
2299 fontName "Consolas"
2300 alignment "left"
2301 anchor "tl"
2302 borderDistance 6
2303 ]
2304 ]
2305
2306 node
2307 [
2308 id 1
2309 graphics
2310 [
2311 w 41.800000000000004
2312 h 26
2313 type "rectangle"
2314 fill "#FFFFFF"
2315 fill2 "#FFFFFF"
2316 outline "#000000"
2317 ]
2318 LabelGraphics
2319 [
2320 text "true"
2321 outline "#000000"
2322 fill "#FFFFFF"
2323 fontSize 16
2324 fontName "Monospace"
2325 autoSizePolicy "node_width"
2326 anchor "t"
2327 borderDistance 0.0
2328 ]
2329 LabelGraphics
2330 [
2331 text "
2332 "
2333 fontSize 14
2334 fontName "Consolas"
2335 alignment "left"
2336 anchor "tl"
2337 borderDistance 6
2338 ]
2339 ]
2340
2341 node
2342 [
2343 id 2
2344 graphics
2345 [
2346 w 50.6
2347 h 26
2348 type "rectangle"
2349 fill "#FFFFFF"
2350 fill2 "#FFFFFF"
2351 outline "#000000"
2352 ]
2353 LabelGraphics
2354 [
2355 text "false"
2356 outline "#000000"
2357 fill "#FFFFFF"
2358 fontSize 16
2359 fontName "Monospace"
2360 autoSizePolicy "node_width"
2361 anchor "t"
2362 borderDistance 0.0
2363 ]
2364 LabelGraphics
2365 [
2366 text "
2367 "
2368 fontSize 14
2369 fontName "Consolas"
2370 alignment "left"
2371 anchor "tl"
2372 borderDistance 6
2373 ]
2374 ]
2375
2376 node
2377 [
2378 id 3
2379 graphics
2380 [
2381 w 107.80000000000001
2382 h 40
2383 type "rectangle"
2384 fill "#FFFFFF"
2385 fill2 "#FFFFFF"
2386 outline "#000000"
2387 ]
2388 LabelGraphics
2389 [
2390 text "null"
2391 outline "#000000"
2392 fill "#FFFFFF"
2393 fontSize 16
2394 fontName "Monospace"
2395 autoSizePolicy "node_width"
2396 anchor "t"
2397 borderDistance 0.0
2398 ]
2399 LabelGraphics
2400 [
2401 text "
2402 Region class
2403 "
2404 fontSize 14
2405 fontName "Consolas"
2406 alignment "left"
2407 anchor "tl"
2408 borderDistance 6
2409 ]
2410 ]
2411
2412 node
2413 [
2414 id 4
2415 graphics
2416 [
2417 w 146.3
2418 h 68
2419 type "rectangle"
2420 fill "#FFFFFF"
2421 fill2 "#FFFFFF"
2422 outline "#000000"
2423 ]
2424 LabelGraphics
2425 [
2426 text "null"
2427 outline "#000000"
2428 fill "#FFFFFF"
2429 fontSize 16
2430 fontName "Monospace"
2431 autoSizePolicy "node_width"
2432 anchor "t"
2433 borderDistance 0.0
2434 ]
2435 LabelGraphics
2436 [
2437 text "
2438 Pseudostate class
2439 Vertex class
2440 Exit class
2441 "
2442 fontSize 14
2443 fontName "Consolas"
2444 alignment "left"
2445 anchor "tl"
2446 borderDistance 6
2447 ]
2448 ]
2449
2450 node
2451 [
2452 id 5
2453 graphics
2454 [
2455 w 146.3
2456 h 68
2457 type "rectangle"
2458 fill "#FFFFFF"
2459 fill2 "#FFFFFF"
2460 outline "#000000"
2461 ]
2462 LabelGraphics
2463 [
2464 text "null"
2465 outline "#000000"
2466 fill "#FFFFFF"
2467 fontSize 16
2468 fontName "Monospace"
2469 autoSizePolicy "node_width"
2470 anchor "t"
2471 borderDistance 0.0
2472 ]
2473 LabelGraphics
2474 [
2475 text "
2476 Pseudostate class
2477 Vertex class
2478 Entry class
2479 "
2480 fontSize 14
2481 fontName "Consolas"
2482 alignment "left"
2483 anchor "tl"
2484 borderDistance 6
2485 ]
2486 ]
2487
2488 node
2489 [
2490 id 6
2491 graphics
2492 [
2493 w 292.6
2494 h 96
2495 type "rectangle"
2496 fill "#FFFFFF"
2497 fill2 "#FFFFFF"
2498 outline "#000000"
2499 ]
2500 LabelGraphics
2501 [
2502 text "null"
2503 outline "#000000"
2504 fill "#FFFFFF"
2505 fontSize 16
2506 fontName "Monospace"
2507 autoSizePolicy "node_width"
2508 anchor "t"
2509 borderDistance 0.0
2510 ]
2511 LabelGraphics
2512 [
2513 text "
2514 Vertex class
2515 State class
2516 RegularState class
2517 CompositeElement class
2518 CompositeElement class UndefinedPart
2519 "
2520 fontSize 14
2521 fontName "Consolas"
2522 alignment "left"
2523 anchor "tl"
2524 borderDistance 6
2525 ]
2526 ]
2527
2528 node
2529 [
2530 id 7
2531 graphics
2532 [
2533 w 138.60000000000002
2534 h 40
2535 type "rectangle"
2536 fill "#FFFFFF"
2537 fill2 "#FFFFFF"
2538 outline "#000000"
2539 ]
2540 LabelGraphics
2541 [
2542 text "null"
2543 outline "#000000"
2544 fill "#FFFFFF"
2545 fontSize 16
2546 fontName "Monospace"
2547 autoSizePolicy "node_width"
2548 anchor "t"
2549 borderDistance 0.0
2550 ]
2551 LabelGraphics
2552 [
2553 text "
2554 Transition class
2555 "
2556 fontSize 14
2557 fontName "Consolas"
2558 alignment "left"
2559 anchor "tl"
2560 borderDistance 6
2561 ]
2562 ]
2563
2564 node
2565 [
2566 id 8
2567 graphics
2568 [
2569 w 112.2
2570 h 26
2571 type "rectangle"
2572 fill "#FFFFFF"
2573 fill2 "#FFFFFF"
2574 outline "#000000"
2575 ]
2576 LabelGraphics
2577 [
2578 text "New Integers"
2579 outline "#000000"
2580 fill "#FFFFFF"
2581 fontSize 16
2582 fontName "Monospace"
2583 autoSizePolicy "node_width"
2584 anchor "t"
2585 borderDistance 0.0
2586 ]
2587 LabelGraphics
2588 [
2589 text "
2590 "
2591 fontSize 14
2592 fontName "Consolas"
2593 alignment "left"
2594 anchor "tl"
2595 borderDistance 6
2596 ]
2597 ]
2598
2599 node
2600 [
2601 id 9
2602 graphics
2603 [
2604 w 85.80000000000001
2605 h 26
2606 type "rectangle"
2607 fill "#FFFFFF"
2608 fill2 "#FFFFFF"
2609 outline "#000000"
2610 ]
2611 LabelGraphics
2612 [
2613 text "New Reals"
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 "
2626 fontSize 14
2627 fontName "Consolas"
2628 alignment "left"
2629 anchor "tl"
2630 borderDistance 6
2631 ]
2632 ]
2633
2634 node
2635 [
2636 id 10
2637 graphics
2638 [
2639 w 103.4
2640 h 26
2641 type "rectangle"
2642 fill "#FFFFFF"
2643 fill2 "#FFFFFF"
2644 outline "#000000"
2645 ]
2646 LabelGraphics
2647 [
2648 text "New Strings"
2649 outline "#000000"
2650 fill "#FFFFFF"
2651 fontSize 16
2652 fontName "Monospace"
2653 autoSizePolicy "node_width"
2654 anchor "t"
2655 borderDistance 0.0
2656 ]
2657 LabelGraphics
2658 [
2659 text "
2660 "
2661 fontSize 14
2662 fontName "Consolas"
2663 alignment "left"
2664 anchor "tl"
2665 borderDistance 6
2666 ]
2667 ]
2668
2669 node
2670 [
2671 id 11
2672 graphics
2673 [
2674 w 103.4
2675 h 26
2676 type "rectangle"
2677 fill "#FFFFFF"
2678 fill2 "#FFFFFF"
2679 outline "#000000"
2680 ]
2681 LabelGraphics
2682 [
2683 text "New Objects"
2684 outline "#000000"
2685 fill "#FFFFFF"
2686 fontSize 16
2687 fontName "Monospace"
2688 autoSizePolicy "node_width"
2689 anchor "t"
2690 borderDistance 0.0
2691 ]
2692 LabelGraphics
2693 [
2694 text "
2695 "
2696 fontSize 14
2697 fontName "Consolas"
2698 alignment "left"
2699 anchor "tl"
2700 borderDistance 6
2701 ]
2702 ]
2703 edge
2704 [
2705 source 6
2706 target 7
2707 graphics
2708 [
2709 fill "#000000"
2710 targetArrow "standard"
2711 ]
2712 LabelGraphics
2713 [
2714 text "incomingTransitions reference Vertex"
2715 fontSize 14
2716 fontName "Consolas"
2717 configuration "AutoFlippingLabel"
2718 model "six_pos"
2719 position "thead"
2720 ]
2721 ]
2722 edge
2723 [
2724 source 5
2725 target 7
2726 graphics
2727 [
2728 fill "#000000"
2729 width 3
2730 targetArrow "standard"
2731 ]
2732 LabelGraphics
2733 [
2734 text "outgoingTransitions reference Vertex"
2735 fontSize 14
2736 fontName "Consolas"
2737 configuration "AutoFlippingLabel"
2738 model "six_pos"
2739 position "thead"
2740 ]
2741 ]
2742 edge
2743 [
2744 source 3
2745 target 4
2746 graphics
2747 [
2748 fill "#000000"
2749 width 3
2750 targetArrow "standard"
2751 ]
2752 LabelGraphics
2753 [
2754 text "vertices reference Region"
2755 fontSize 14
2756 fontName "Consolas"
2757 configuration "AutoFlippingLabel"
2758 model "six_pos"
2759 position "thead"
2760 ]
2761 ]
2762 edge
2763 [
2764 source 3
2765 target 5
2766 graphics
2767 [
2768 fill "#000000"
2769 width 3
2770 targetArrow "standard"
2771 ]
2772 LabelGraphics
2773 [
2774 text "vertices reference Region"
2775 fontSize 14
2776 fontName "Consolas"
2777 configuration "AutoFlippingLabel"
2778 model "six_pos"
2779 position "thead"
2780 ]
2781 ]
2782 edge
2783 [
2784 source 3
2785 target 6
2786 graphics
2787 [
2788 fill "#000000"
2789 width 3
2790 targetArrow "standard"
2791 ]
2792 LabelGraphics
2793 [
2794 text "vertices reference Region"
2795 fontSize 14
2796 fontName "Consolas"
2797 configuration "AutoFlippingLabel"
2798 model "six_pos"
2799 position "thead"
2800 ]
2801 ]
2802 edge
2803 [
2804 source 7
2805 target 6
2806 graphics
2807 [
2808 fill "#000000"
2809 targetArrow "standard"
2810 ]
2811 LabelGraphics
2812 [
2813 text "target reference Transition"
2814 fontSize 14
2815 fontName "Consolas"
2816 configuration "AutoFlippingLabel"
2817 model "six_pos"
2818 position "thead"
2819 ]
2820 ]
2821 edge
2822 [
2823 source 7
2824 target 5
2825 graphics
2826 [
2827 fill "#000000"
2828 targetArrow "standard"
2829 ]
2830 LabelGraphics
2831 [
2832 text "source reference Transition"
2833 fontSize 14
2834 fontName "Consolas"
2835 configuration "AutoFlippingLabel"
2836 model "six_pos"
2837 position "thead"
2838 ]
2839 ]
2840 edge
2841 [
2842 source 0
2843 target 3
2844 graphics
2845 [
2846 fill "#000000"
2847 width 3
2848 targetArrow "standard"
2849 ]
2850 LabelGraphics
2851 [
2852 text "regions reference CompositeElement"
2853 fontSize 14
2854 fontName "Consolas"
2855 configuration "AutoFlippingLabel"
2856 model "six_pos"
2857 position "thead"
2858 ]
2859 ]
2860]
2861graph
2862[
2863 node
2864 [
2865 id 0
2866 graphics
2867 [
2868 w 192.50000000000003
2869 h 54
2870 type "rectangle"
2871 fill "#FFFFFF"
2872 fill2 "#FFFFFF"
2873 outline "#000000"
2874 ]
2875 LabelGraphics
2876 [
2877 text "o 1"
2878 outline "#000000"
2879 fill "#FFFFFF"
2880 fontSize 16
2881 fontName "Monospace"
2882 autoSizePolicy "node_width"
2883 anchor "t"
2884 borderDistance 0.0
2885 ]
2886 LabelGraphics
2887 [
2888 text "
2889 Model class DefinedPart
2890 Model class
2891 "
2892 fontSize 14
2893 fontName "Consolas"
2894 alignment "left"
2895 anchor "tl"
2896 borderDistance 6
2897 ]
2898 ]
2899
2900 node
2901 [
2902 id 1
2903 graphics
2904 [
2905 w 41.800000000000004
2906 h 26
2907 type "rectangle"
2908 fill "#FFFFFF"
2909 fill2 "#FFFFFF"
2910 outline "#000000"
2911 ]
2912 LabelGraphics
2913 [
2914 text "true"
2915 outline "#000000"
2916 fill "#FFFFFF"
2917 fontSize 16
2918 fontName "Monospace"
2919 autoSizePolicy "node_width"
2920 anchor "t"
2921 borderDistance 0.0
2922 ]
2923 LabelGraphics
2924 [
2925 text "
2926 "
2927 fontSize 14
2928 fontName "Consolas"
2929 alignment "left"
2930 anchor "tl"
2931 borderDistance 6
2932 ]
2933 ]
2934
2935 node
2936 [
2937 id 2
2938 graphics
2939 [
2940 w 50.6
2941 h 26
2942 type "rectangle"
2943 fill "#FFFFFF"
2944 fill2 "#FFFFFF"
2945 outline "#000000"
2946 ]
2947 LabelGraphics
2948 [
2949 text "false"
2950 outline "#000000"
2951 fill "#FFFFFF"
2952 fontSize 16
2953 fontName "Monospace"
2954 autoSizePolicy "node_width"
2955 anchor "t"
2956 borderDistance 0.0
2957 ]
2958 LabelGraphics
2959 [
2960 text "
2961 "
2962 fontSize 14
2963 fontName "Consolas"
2964 alignment "left"
2965 anchor "tl"
2966 borderDistance 6
2967 ]
2968 ]
2969
2970 node
2971 [
2972 id 3
2973 graphics
2974 [
2975 w 123.20000000000002
2976 h 54
2977 type "rectangle"
2978 fill "#FFFFFF"
2979 fill2 "#FFFFFF"
2980 outline "#000000"
2981 ]
2982 LabelGraphics
2983 [
2984 text "null"
2985 outline "#000000"
2986 fill "#FFFFFF"
2987 fontSize 16
2988 fontName "Monospace"
2989 autoSizePolicy "node_width"
2990 anchor "t"
2991 borderDistance 0.0
2992 ]
2993 LabelGraphics
2994 [
2995 text "
2996 FSObject class
2997 Dir class
2998 "
2999 fontSize 14
3000 fontName "Consolas"
3001 alignment "left"
3002 anchor "tl"
3003 borderDistance 6
3004 ]
3005 ]
3006
3007 node
3008 [
3009 id 4
3010 graphics
3011 [
3012 w 123.20000000000002
3013 h 54
3014 type "rectangle"
3015 fill "#FFFFFF"
3016 fill2 "#FFFFFF"
3017 outline "#000000"
3018 ]
3019 LabelGraphics
3020 [
3021 text "null"
3022 outline "#000000"
3023 fill "#FFFFFF"
3024 fontSize 16
3025 fontName "Monospace"
3026 autoSizePolicy "node_width"
3027 anchor "t"
3028 borderDistance 0.0
3029 ]
3030 LabelGraphics
3031 [
3032 text "
3033 FSObject class
3034 File class
3035 "
3036 fontSize 14
3037 fontName "Consolas"
3038 alignment "left"
3039 anchor "tl"
3040 borderDistance 6
3041 ]
3042 ]
3043
3044 node
3045 [
3046 id 5
3047 graphics
3048 [
3049 w 138.60000000000002
3050 h 40
3051 type "rectangle"
3052 fill "#FFFFFF"
3053 fill2 "#FFFFFF"
3054 outline "#000000"
3055 ]
3056 LabelGraphics
3057 [
3058 text "null"
3059 outline "#000000"
3060 fill "#FFFFFF"
3061 fontSize 16
3062 fontName "Monospace"
3063 autoSizePolicy "node_width"
3064 anchor "t"
3065 borderDistance 0.0
3066 ]
3067 LabelGraphics
3068 [
3069 text "
3070 FileSystem class
3071 "
3072 fontSize 14
3073 fontName "Consolas"
3074 alignment "left"
3075 anchor "tl"
3076 borderDistance 6
3077 ]
3078 ]
3079
3080 node
3081 [
3082 id 6
3083 graphics
3084 [
3085 w 123.20000000000002
3086 h 54
3087 type "rectangle"
3088 fill "#FFFFFF"
3089 fill2 "#FFFFFF"
3090 outline "#000000"
3091 ]
3092 LabelGraphics
3093 [
3094 text "null"
3095 outline "#000000"
3096 fill "#FFFFFF"
3097 fontSize 16
3098 fontName "Monospace"
3099 autoSizePolicy "node_width"
3100 anchor "t"
3101 borderDistance 0.0
3102 ]
3103 LabelGraphics
3104 [
3105 text "
3106 FSObject class
3107 Dir class
3108 "
3109 fontSize 14
3110 fontName "Consolas"
3111 alignment "left"
3112 anchor "tl"
3113 borderDistance 6
3114 ]
3115 ]
3116
3117 node
3118 [
3119 id 7
3120 graphics
3121 [
3122 w 112.2
3123 h 26
3124 type "rectangle"
3125 fill "#FFFFFF"
3126 fill2 "#FFFFFF"
3127 outline "#000000"
3128 ]
3129 LabelGraphics
3130 [
3131 text "New Integers"
3132 outline "#000000"
3133 fill "#FFFFFF"
3134 fontSize 16
3135 fontName "Monospace"
3136 autoSizePolicy "node_width"
3137 anchor "t"
3138 borderDistance 0.0
3139 ]
3140 LabelGraphics
3141 [
3142 text "
3143 "
3144 fontSize 14
3145 fontName "Consolas"
3146 alignment "left"
3147 anchor "tl"
3148 borderDistance 6
3149 ]
3150 ]
3151
3152 node
3153 [
3154 id 8
3155 graphics
3156 [
3157 w 85.80000000000001
3158 h 26
3159 type "rectangle"
3160 fill "#FFFFFF"
3161 fill2 "#FFFFFF"
3162 outline "#000000"
3163 ]
3164 LabelGraphics
3165 [
3166 text "New Reals"
3167 outline "#000000"
3168 fill "#FFFFFF"
3169 fontSize 16
3170 fontName "Monospace"
3171 autoSizePolicy "node_width"
3172 anchor "t"
3173 borderDistance 0.0
3174 ]
3175 LabelGraphics
3176 [
3177 text "
3178 "
3179 fontSize 14
3180 fontName "Consolas"
3181 alignment "left"
3182 anchor "tl"
3183 borderDistance 6
3184 ]
3185 ]
3186
3187 node
3188 [
3189 id 9
3190 graphics
3191 [
3192 w 103.4
3193 h 26
3194 type "rectangle"
3195 fill "#FFFFFF"
3196 fill2 "#FFFFFF"
3197 outline "#000000"
3198 ]
3199 LabelGraphics
3200 [
3201 text "New Strings"
3202 outline "#000000"
3203 fill "#FFFFFF"
3204 fontSize 16
3205 fontName "Monospace"
3206 autoSizePolicy "node_width"
3207 anchor "t"
3208 borderDistance 0.0
3209 ]
3210 LabelGraphics
3211 [
3212 text "
3213 "
3214 fontSize 14
3215 fontName "Consolas"
3216 alignment "left"
3217 anchor "tl"
3218 borderDistance 6
3219 ]
3220 ]
3221
3222 node
3223 [
3224 id 10
3225 graphics
3226 [
3227 w 103.4
3228 h 26
3229 type "rectangle"
3230 fill "#FFFFFF"
3231 fill2 "#FFFFFF"
3232 outline "#000000"
3233 ]
3234 LabelGraphics
3235 [
3236 text "New Objects"
3237 outline "#000000"
3238 fill "#FFFFFF"
3239 fontSize 16
3240 fontName "Monospace"
3241 autoSizePolicy "node_width"
3242 anchor "t"
3243 borderDistance 0.0
3244 ]
3245 LabelGraphics
3246 [
3247 text "
3248 "
3249 fontSize 14
3250 fontName "Consolas"
3251 alignment "left"
3252 anchor "tl"
3253 borderDistance 6
3254 ]
3255 ]
3256 edge
3257 [
3258 source 5
3259 target 6
3260 graphics
3261 [
3262 fill "#000000"
3263 width 3
3264 targetArrow "standard"
3265 ]
3266 LabelGraphics
3267 [
3268 text "root reference FileSystem"
3269 fontSize 14
3270 fontName "Consolas"
3271 configuration "AutoFlippingLabel"
3272 model "six_pos"
3273 position "thead"
3274 ]
3275 ]
3276 edge
3277 [
3278 source 0
3279 target 5
3280 graphics
3281 [
3282 fill "#000000"
3283 width 3
3284 targetArrow "standard"
3285 ]
3286 LabelGraphics
3287 [
3288 text "filesystems reference Model"
3289 fontSize 14
3290 fontName "Consolas"
3291 configuration "AutoFlippingLabel"
3292 model "six_pos"
3293 position "thead"
3294 ]
3295 ]
3296 edge
3297 [
3298 source 0
3299 target 3
3300 graphics
3301 [
3302 fill "#000000"
3303 width 3
3304 targetArrow "standard"
3305 ]
3306 LabelGraphics
3307 [
3308 text "otherFSObjects reference Model"
3309 fontSize 14
3310 fontName "Consolas"
3311 configuration "AutoFlippingLabel"
3312 model "six_pos"
3313 position "thead"
3314 ]
3315 ]
3316 edge
3317 [
3318 source 0
3319 target 4
3320 graphics
3321 [
3322 fill "#000000"
3323 width 3
3324 targetArrow "standard"
3325 ]
3326 LabelGraphics
3327 [
3328 text "otherFSObjects reference Model"
3329 fontSize 14
3330 fontName "Consolas"
3331 configuration "AutoFlippingLabel"
3332 model "six_pos"
3333 position "thead"
3334 ]
3335 ]
3336]
3337graph
3338[
3339 node
3340 [
3341 id 0
3342 graphics
3343 [
3344 w 192.50000000000003
3345 h 54
3346 type "rectangle"
3347 fill "#FFFFFF"
3348 fill2 "#FFFFFF"
3349 outline "#000000"
3350 ]
3351 LabelGraphics
3352 [
3353 text "o 1"
3354 outline "#000000"
3355 fill "#FFFFFF"
3356 fontSize 16
3357 fontName "Monospace"
3358 autoSizePolicy "node_width"
3359 anchor "t"
3360 borderDistance 0.0
3361 ]
3362 LabelGraphics
3363 [
3364 text "
3365 Model class DefinedPart
3366 Model class
3367 "
3368 fontSize 14
3369 fontName "Consolas"
3370 alignment "left"
3371 anchor "tl"
3372 borderDistance 6
3373 ]
3374 ]
3375
3376 node
3377 [
3378 id 1
3379 graphics
3380 [
3381 w 41.800000000000004
3382 h 26
3383 type "rectangle"
3384 fill "#FFFFFF"
3385 fill2 "#FFFFFF"
3386 outline "#000000"
3387 ]
3388 LabelGraphics
3389 [
3390 text "true"
3391 outline "#000000"
3392 fill "#FFFFFF"
3393 fontSize 16
3394 fontName "Monospace"
3395 autoSizePolicy "node_width"
3396 anchor "t"
3397 borderDistance 0.0
3398 ]
3399 LabelGraphics
3400 [
3401 text "
3402 "
3403 fontSize 14
3404 fontName "Consolas"
3405 alignment "left"
3406 anchor "tl"
3407 borderDistance 6
3408 ]
3409 ]
3410
3411 node
3412 [
3413 id 2
3414 graphics
3415 [
3416 w 50.6
3417 h 26
3418 type "rectangle"
3419 fill "#FFFFFF"
3420 fill2 "#FFFFFF"
3421 outline "#000000"
3422 ]
3423 LabelGraphics
3424 [
3425 text "false"
3426 outline "#000000"
3427 fill "#FFFFFF"
3428 fontSize 16
3429 fontName "Monospace"
3430 autoSizePolicy "node_width"
3431 anchor "t"
3432 borderDistance 0.0
3433 ]
3434 LabelGraphics
3435 [
3436 text "
3437 "
3438 fontSize 14
3439 fontName "Consolas"
3440 alignment "left"
3441 anchor "tl"
3442 borderDistance 6
3443 ]
3444 ]
3445
3446 node
3447 [
3448 id 3
3449 graphics
3450 [
3451 w 123.20000000000002
3452 h 54
3453 type "rectangle"
3454 fill "#FFFFFF"
3455 fill2 "#FFFFFF"
3456 outline "#000000"
3457 ]
3458 LabelGraphics
3459 [
3460 text "null"
3461 outline "#000000"
3462 fill "#FFFFFF"
3463 fontSize 16
3464 fontName "Monospace"
3465 autoSizePolicy "node_width"
3466 anchor "t"
3467 borderDistance 0.0
3468 ]
3469 LabelGraphics
3470 [
3471 text "
3472 FSObject class
3473 File class
3474 "
3475 fontSize 14
3476 fontName "Consolas"
3477 alignment "left"
3478 anchor "tl"
3479 borderDistance 6
3480 ]
3481 ]
3482
3483 node
3484 [
3485 id 4
3486 graphics
3487 [
3488 w 138.60000000000002
3489 h 40
3490 type "rectangle"
3491 fill "#FFFFFF"
3492 fill2 "#FFFFFF"
3493 outline "#000000"
3494 ]
3495 LabelGraphics
3496 [
3497 text "null"
3498 outline "#000000"
3499 fill "#FFFFFF"
3500 fontSize 16
3501 fontName "Monospace"
3502 autoSizePolicy "node_width"
3503 anchor "t"
3504 borderDistance 0.0
3505 ]
3506 LabelGraphics
3507 [
3508 text "
3509 FileSystem class
3510 "
3511 fontSize 14
3512 fontName "Consolas"
3513 alignment "left"
3514 anchor "tl"
3515 borderDistance 6
3516 ]
3517 ]
3518
3519 node
3520 [
3521 id 5
3522 graphics
3523 [
3524 w 123.20000000000002
3525 h 54
3526 type "rectangle"
3527 fill "#FFFFFF"
3528 fill2 "#FFFFFF"
3529 outline "#000000"
3530 ]
3531 LabelGraphics
3532 [
3533 text "null"
3534 outline "#000000"
3535 fill "#FFFFFF"
3536 fontSize 16
3537 fontName "Monospace"
3538 autoSizePolicy "node_width"
3539 anchor "t"
3540 borderDistance 0.0
3541 ]
3542 LabelGraphics
3543 [
3544 text "
3545 FSObject class
3546 Dir class
3547 "
3548 fontSize 14
3549 fontName "Consolas"
3550 alignment "left"
3551 anchor "tl"
3552 borderDistance 6
3553 ]
3554 ]
3555
3556 node
3557 [
3558 id 6
3559 graphics
3560 [
3561 w 123.20000000000002
3562 h 54
3563 type "rectangle"
3564 fill "#FFFFFF"
3565 fill2 "#FFFFFF"
3566 outline "#000000"
3567 ]
3568 LabelGraphics
3569 [
3570 text "null"
3571 outline "#000000"
3572 fill "#FFFFFF"
3573 fontSize 16
3574 fontName "Monospace"
3575 autoSizePolicy "node_width"
3576 anchor "t"
3577 borderDistance 0.0
3578 ]
3579 LabelGraphics
3580 [
3581 text "
3582 FSObject class
3583 Dir class
3584 "
3585 fontSize 14
3586 fontName "Consolas"
3587 alignment "left"
3588 anchor "tl"
3589 borderDistance 6
3590 ]
3591 ]
3592
3593 node
3594 [
3595 id 7
3596 graphics
3597 [
3598 w 112.2
3599 h 26
3600 type "rectangle"
3601 fill "#FFFFFF"
3602 fill2 "#FFFFFF"
3603 outline "#000000"
3604 ]
3605 LabelGraphics
3606 [
3607 text "New Integers"
3608 outline "#000000"
3609 fill "#FFFFFF"
3610 fontSize 16
3611 fontName "Monospace"
3612 autoSizePolicy "node_width"
3613 anchor "t"
3614 borderDistance 0.0
3615 ]
3616 LabelGraphics
3617 [
3618 text "
3619 "
3620 fontSize 14
3621 fontName "Consolas"
3622 alignment "left"
3623 anchor "tl"
3624 borderDistance 6
3625 ]
3626 ]
3627
3628 node
3629 [
3630 id 8
3631 graphics
3632 [
3633 w 85.80000000000001
3634 h 26
3635 type "rectangle"
3636 fill "#FFFFFF"
3637 fill2 "#FFFFFF"
3638 outline "#000000"
3639 ]
3640 LabelGraphics
3641 [
3642 text "New Reals"
3643 outline "#000000"
3644 fill "#FFFFFF"
3645 fontSize 16
3646 fontName "Monospace"
3647 autoSizePolicy "node_width"
3648 anchor "t"
3649 borderDistance 0.0
3650 ]
3651 LabelGraphics
3652 [
3653 text "
3654 "
3655 fontSize 14
3656 fontName "Consolas"
3657 alignment "left"
3658 anchor "tl"
3659 borderDistance 6
3660 ]
3661 ]
3662
3663 node
3664 [
3665 id 9
3666 graphics
3667 [
3668 w 103.4
3669 h 26
3670 type "rectangle"
3671 fill "#FFFFFF"
3672 fill2 "#FFFFFF"
3673 outline "#000000"
3674 ]
3675 LabelGraphics
3676 [
3677 text "New Strings"
3678 outline "#000000"
3679 fill "#FFFFFF"
3680 fontSize 16
3681 fontName "Monospace"
3682 autoSizePolicy "node_width"
3683 anchor "t"
3684 borderDistance 0.0
3685 ]
3686 LabelGraphics
3687 [
3688 text "
3689 "
3690 fontSize 14
3691 fontName "Consolas"
3692 alignment "left"
3693 anchor "tl"
3694 borderDistance 6
3695 ]
3696 ]
3697
3698 node
3699 [
3700 id 10
3701 graphics
3702 [
3703 w 103.4
3704 h 26
3705 type "rectangle"
3706 fill "#FFFFFF"
3707 fill2 "#FFFFFF"
3708 outline "#000000"
3709 ]
3710 LabelGraphics
3711 [
3712 text "New Objects"
3713 outline "#000000"
3714 fill "#FFFFFF"
3715 fontSize 16
3716 fontName "Monospace"
3717 autoSizePolicy "node_width"
3718 anchor "t"
3719 borderDistance 0.0
3720 ]
3721 LabelGraphics
3722 [
3723 text "
3724 "
3725 fontSize 14
3726 fontName "Consolas"
3727 alignment "left"
3728 anchor "tl"
3729 borderDistance 6
3730 ]
3731 ]
3732 edge
3733 [
3734 source 4
3735 target 6
3736 graphics
3737 [
3738 fill "#000000"
3739 width 3
3740 targetArrow "standard"
3741 ]
3742 LabelGraphics
3743 [
3744 text "root reference FileSystem"
3745 fontSize 14
3746 fontName "Consolas"
3747 configuration "AutoFlippingLabel"
3748 model "six_pos"
3749 position "thead"
3750 ]
3751 ]
3752 edge
3753 [
3754 source 0
3755 target 4
3756 graphics
3757 [
3758 fill "#000000"
3759 width 3
3760 targetArrow "standard"
3761 ]
3762 LabelGraphics
3763 [
3764 text "filesystems reference Model"
3765 fontSize 14
3766 fontName "Consolas"
3767 configuration "AutoFlippingLabel"
3768 model "six_pos"
3769 position "thead"
3770 ]
3771 ]
3772 edge
3773 [
3774 source 0
3775 target 3
3776 graphics
3777 [
3778 fill "#000000"
3779 width 3
3780 targetArrow "standard"
3781 ]
3782 LabelGraphics
3783 [
3784 text "otherFSObjects reference Model"
3785 fontSize 14
3786 fontName "Consolas"
3787 configuration "AutoFlippingLabel"
3788 model "six_pos"
3789 position "thead"
3790 ]
3791 ]
3792 edge
3793 [
3794 source 0
3795 target 5
3796 graphics
3797 [
3798 fill "#000000"
3799 width 3
3800 targetArrow "standard"
3801 ]
3802 LabelGraphics
3803 [
3804 text "otherFSObjects reference Model"
3805 fontSize 14
3806 fontName "Consolas"
3807 configuration "AutoFlippingLabel"
3808 model "six_pos"
3809 position "thead"
3810 ]
3811 ]
3812]
3813graph
3814[
3815 node
3816 [
3817 id 0
3818 graphics
3819 [
3820 w 192.50000000000003
3821 h 54
3822 type "rectangle"
3823 fill "#FFFFFF"
3824 fill2 "#FFFFFF"
3825 outline "#000000"
3826 ]
3827 LabelGraphics
3828 [
3829 text "o 1"
3830 outline "#000000"
3831 fill "#FFFFFF"
3832 fontSize 16
3833 fontName "Monospace"
3834 autoSizePolicy "node_width"
3835 anchor "t"
3836 borderDistance 0.0
3837 ]
3838 LabelGraphics
3839 [
3840 text "
3841 Model class DefinedPart
3842 Model class
3843 "
3844 fontSize 14
3845 fontName "Consolas"
3846 alignment "left"
3847 anchor "tl"
3848 borderDistance 6
3849 ]
3850 ]
3851
3852 node
3853 [
3854 id 1
3855 graphics
3856 [
3857 w 41.800000000000004
3858 h 26
3859 type "rectangle"
3860 fill "#FFFFFF"
3861 fill2 "#FFFFFF"
3862 outline "#000000"
3863 ]
3864 LabelGraphics
3865 [
3866 text "true"
3867 outline "#000000"
3868 fill "#FFFFFF"
3869 fontSize 16
3870 fontName "Monospace"
3871 autoSizePolicy "node_width"
3872 anchor "t"
3873 borderDistance 0.0
3874 ]
3875 LabelGraphics
3876 [
3877 text "
3878 "
3879 fontSize 14
3880 fontName "Consolas"
3881 alignment "left"
3882 anchor "tl"
3883 borderDistance 6
3884 ]
3885 ]
3886
3887 node
3888 [
3889 id 2
3890 graphics
3891 [
3892 w 50.6
3893 h 26
3894 type "rectangle"
3895 fill "#FFFFFF"
3896 fill2 "#FFFFFF"
3897 outline "#000000"
3898 ]
3899 LabelGraphics
3900 [
3901 text "false"
3902 outline "#000000"
3903 fill "#FFFFFF"
3904 fontSize 16
3905 fontName "Monospace"
3906 autoSizePolicy "node_width"
3907 anchor "t"
3908 borderDistance 0.0
3909 ]
3910 LabelGraphics
3911 [
3912 text "
3913 "
3914 fontSize 14
3915 fontName "Consolas"
3916 alignment "left"
3917 anchor "tl"
3918 borderDistance 6
3919 ]
3920 ]
3921
3922 node
3923 [
3924 id 3
3925 graphics
3926 [
3927 w 123.20000000000002
3928 h 54
3929 type "rectangle"
3930 fill "#FFFFFF"
3931 fill2 "#FFFFFF"
3932 outline "#000000"
3933 ]
3934 LabelGraphics
3935 [
3936 text "null"
3937 outline "#000000"
3938 fill "#FFFFFF"
3939 fontSize 16
3940 fontName "Monospace"
3941 autoSizePolicy "node_width"
3942 anchor "t"
3943 borderDistance 0.0
3944 ]
3945 LabelGraphics
3946 [
3947 text "
3948 FSObject class
3949 File class
3950 "
3951 fontSize 14
3952 fontName "Consolas"
3953 alignment "left"
3954 anchor "tl"
3955 borderDistance 6
3956 ]
3957 ]
3958
3959 node
3960 [
3961 id 4
3962 graphics
3963 [
3964 w 123.20000000000002
3965 h 54
3966 type "rectangle"
3967 fill "#FFFFFF"
3968 fill2 "#FFFFFF"
3969 outline "#000000"
3970 ]
3971 LabelGraphics
3972 [
3973 text "null"
3974 outline "#000000"
3975 fill "#FFFFFF"
3976 fontSize 16
3977 fontName "Monospace"
3978 autoSizePolicy "node_width"
3979 anchor "t"
3980 borderDistance 0.0
3981 ]
3982 LabelGraphics
3983 [
3984 text "
3985 FSObject class
3986 File class
3987 "
3988 fontSize 14
3989 fontName "Consolas"
3990 alignment "left"
3991 anchor "tl"
3992 borderDistance 6
3993 ]
3994 ]
3995
3996 node
3997 [
3998 id 5
3999 graphics
4000 [
4001 w 138.60000000000002
4002 h 40
4003 type "rectangle"
4004 fill "#FFFFFF"
4005 fill2 "#FFFFFF"
4006 outline "#000000"
4007 ]
4008 LabelGraphics
4009 [
4010 text "null"
4011 outline "#000000"
4012 fill "#FFFFFF"
4013 fontSize 16
4014 fontName "Monospace"
4015 autoSizePolicy "node_width"
4016 anchor "t"
4017 borderDistance 0.0
4018 ]
4019 LabelGraphics
4020 [
4021 text "
4022 FileSystem class
4023 "
4024 fontSize 14
4025 fontName "Consolas"
4026 alignment "left"
4027 anchor "tl"
4028 borderDistance 6
4029 ]
4030 ]
4031
4032 node
4033 [
4034 id 6
4035 graphics
4036 [
4037 w 123.20000000000002
4038 h 54
4039 type "rectangle"
4040 fill "#FFFFFF"
4041 fill2 "#FFFFFF"
4042 outline "#000000"
4043 ]
4044 LabelGraphics
4045 [
4046 text "null"
4047 outline "#000000"
4048 fill "#FFFFFF"
4049 fontSize 16
4050 fontName "Monospace"
4051 autoSizePolicy "node_width"
4052 anchor "t"
4053 borderDistance 0.0
4054 ]
4055 LabelGraphics
4056 [
4057 text "
4058 FSObject class
4059 Dir class
4060 "
4061 fontSize 14
4062 fontName "Consolas"
4063 alignment "left"
4064 anchor "tl"
4065 borderDistance 6
4066 ]
4067 ]
4068
4069 node
4070 [
4071 id 7
4072 graphics
4073 [
4074 w 112.2
4075 h 26
4076 type "rectangle"
4077 fill "#FFFFFF"
4078 fill2 "#FFFFFF"
4079 outline "#000000"
4080 ]
4081 LabelGraphics
4082 [
4083 text "New Integers"
4084 outline "#000000"
4085 fill "#FFFFFF"
4086 fontSize 16
4087 fontName "Monospace"
4088 autoSizePolicy "node_width"
4089 anchor "t"
4090 borderDistance 0.0
4091 ]
4092 LabelGraphics
4093 [
4094 text "
4095 "
4096 fontSize 14
4097 fontName "Consolas"
4098 alignment "left"
4099 anchor "tl"
4100 borderDistance 6
4101 ]
4102 ]
4103
4104 node
4105 [
4106 id 8
4107 graphics
4108 [
4109 w 85.80000000000001
4110 h 26
4111 type "rectangle"
4112 fill "#FFFFFF"
4113 fill2 "#FFFFFF"
4114 outline "#000000"
4115 ]
4116 LabelGraphics
4117 [
4118 text "New Reals"
4119 outline "#000000"
4120 fill "#FFFFFF"
4121 fontSize 16
4122 fontName "Monospace"
4123 autoSizePolicy "node_width"
4124 anchor "t"
4125 borderDistance 0.0
4126 ]
4127 LabelGraphics
4128 [
4129 text "
4130 "
4131 fontSize 14
4132 fontName "Consolas"
4133 alignment "left"
4134 anchor "tl"
4135 borderDistance 6
4136 ]
4137 ]
4138
4139 node
4140 [
4141 id 9
4142 graphics
4143 [
4144 w 103.4
4145 h 26
4146 type "rectangle"
4147 fill "#FFFFFF"
4148 fill2 "#FFFFFF"
4149 outline "#000000"
4150 ]
4151 LabelGraphics
4152 [
4153 text "New Strings"
4154 outline "#000000"
4155 fill "#FFFFFF"
4156 fontSize 16
4157 fontName "Monospace"
4158 autoSizePolicy "node_width"
4159 anchor "t"
4160 borderDistance 0.0
4161 ]
4162 LabelGraphics
4163 [
4164 text "
4165 "
4166 fontSize 14
4167 fontName "Consolas"
4168 alignment "left"
4169 anchor "tl"
4170 borderDistance 6
4171 ]
4172 ]
4173
4174 node
4175 [
4176 id 10
4177 graphics
4178 [
4179 w 103.4
4180 h 26
4181 type "rectangle"
4182 fill "#FFFFFF"
4183 fill2 "#FFFFFF"
4184 outline "#000000"
4185 ]
4186 LabelGraphics
4187 [
4188 text "New Objects"
4189 outline "#000000"
4190 fill "#FFFFFF"
4191 fontSize 16
4192 fontName "Monospace"
4193 autoSizePolicy "node_width"
4194 anchor "t"
4195 borderDistance 0.0
4196 ]
4197 LabelGraphics
4198 [
4199 text "
4200 "
4201 fontSize 14
4202 fontName "Consolas"
4203 alignment "left"
4204 anchor "tl"
4205 borderDistance 6
4206 ]
4207 ]
4208 edge
4209 [
4210 source 5
4211 target 6
4212 graphics
4213 [
4214 fill "#000000"
4215 width 3
4216 targetArrow "standard"
4217 ]
4218 LabelGraphics
4219 [
4220 text "root reference FileSystem"
4221 fontSize 14
4222 fontName "Consolas"
4223 configuration "AutoFlippingLabel"
4224 model "six_pos"
4225 position "thead"
4226 ]
4227 ]
4228 edge
4229 [
4230 source 0
4231 target 5
4232 graphics
4233 [
4234 fill "#000000"
4235 width 3
4236 targetArrow "standard"
4237 ]
4238 LabelGraphics
4239 [
4240 text "filesystems reference Model"
4241 fontSize 14
4242 fontName "Consolas"
4243 configuration "AutoFlippingLabel"
4244 model "six_pos"
4245 position "thead"
4246 ]
4247 ]
4248 edge
4249 [
4250 source 0
4251 target 3
4252 graphics
4253 [
4254 fill "#000000"
4255 width 3
4256 targetArrow "standard"
4257 ]
4258 LabelGraphics
4259 [
4260 text "otherFSObjects reference Model"
4261 fontSize 14
4262 fontName "Consolas"
4263 configuration "AutoFlippingLabel"
4264 model "six_pos"
4265 position "thead"
4266 ]
4267 ]
4268 edge
4269 [
4270 source 0
4271 target 4
4272 graphics
4273 [
4274 fill "#000000"
4275 width 3
4276 targetArrow "standard"
4277 ]
4278 LabelGraphics
4279 [
4280 text "otherFSObjects reference Model"
4281 fontSize 14
4282 fontName "Consolas"
4283 configuration "AutoFlippingLabel"
4284 model "six_pos"
4285 position "thead"
4286 ]
4287 ]
4288]
4289graph
4290[
4291 node
4292 [
4293 id 0
4294 graphics
4295 [
4296 w 192.50000000000003
4297 h 54
4298 type "rectangle"
4299 fill "#FFFFFF"
4300 fill2 "#FFFFFF"
4301 outline "#000000"
4302 ]
4303 LabelGraphics
4304 [
4305 text "o 1"
4306 outline "#000000"
4307 fill "#FFFFFF"
4308 fontSize 16
4309 fontName "Monospace"
4310 autoSizePolicy "node_width"
4311 anchor "t"
4312 borderDistance 0.0
4313 ]
4314 LabelGraphics
4315 [
4316 text "
4317 Model class DefinedPart
4318 Model class
4319 "
4320 fontSize 14
4321 fontName "Consolas"
4322 alignment "left"
4323 anchor "tl"
4324 borderDistance 6
4325 ]
4326 ]
4327
4328 node
4329 [
4330 id 1
4331 graphics
4332 [
4333 w 41.800000000000004
4334 h 26
4335 type "rectangle"
4336 fill "#FFFFFF"
4337 fill2 "#FFFFFF"
4338 outline "#000000"
4339 ]
4340 LabelGraphics
4341 [
4342 text "true"
4343 outline "#000000"
4344 fill "#FFFFFF"
4345 fontSize 16
4346 fontName "Monospace"
4347 autoSizePolicy "node_width"
4348 anchor "t"
4349 borderDistance 0.0
4350 ]
4351 LabelGraphics
4352 [
4353 text "
4354 "
4355 fontSize 14
4356 fontName "Consolas"
4357 alignment "left"
4358 anchor "tl"
4359 borderDistance 6
4360 ]
4361 ]
4362
4363 node
4364 [
4365 id 2
4366 graphics
4367 [
4368 w 50.6
4369 h 26
4370 type "rectangle"
4371 fill "#FFFFFF"
4372 fill2 "#FFFFFF"
4373 outline "#000000"
4374 ]
4375 LabelGraphics
4376 [
4377 text "false"
4378 outline "#000000"
4379 fill "#FFFFFF"
4380 fontSize 16
4381 fontName "Monospace"
4382 autoSizePolicy "node_width"
4383 anchor "t"
4384 borderDistance 0.0
4385 ]
4386 LabelGraphics
4387 [
4388 text "
4389 "
4390 fontSize 14
4391 fontName "Consolas"
4392 alignment "left"
4393 anchor "tl"
4394 borderDistance 6
4395 ]
4396 ]
4397
4398 node
4399 [
4400 id 3
4401 graphics
4402 [
4403 w 138.60000000000002
4404 h 40
4405 type "rectangle"
4406 fill "#FFFFFF"
4407 fill2 "#FFFFFF"
4408 outline "#000000"
4409 ]
4410 LabelGraphics
4411 [
4412 text "null"
4413 outline "#000000"
4414 fill "#FFFFFF"
4415 fontSize 16
4416 fontName "Monospace"
4417 autoSizePolicy "node_width"
4418 anchor "t"
4419 borderDistance 0.0
4420 ]
4421 LabelGraphics
4422 [
4423 text "
4424 FileSystem class
4425 "
4426 fontSize 14
4427 fontName "Consolas"
4428 alignment "left"
4429 anchor "tl"
4430 borderDistance 6
4431 ]
4432 ]
4433
4434 node
4435 [
4436 id 4
4437 graphics
4438 [
4439 w 123.20000000000002
4440 h 54
4441 type "rectangle"
4442 fill "#FFFFFF"
4443 fill2 "#FFFFFF"
4444 outline "#000000"
4445 ]
4446 LabelGraphics
4447 [
4448 text "null"
4449 outline "#000000"
4450 fill "#FFFFFF"
4451 fontSize 16
4452 fontName "Monospace"
4453 autoSizePolicy "node_width"
4454 anchor "t"
4455 borderDistance 0.0
4456 ]
4457 LabelGraphics
4458 [
4459 text "
4460 FSObject class
4461 Dir class
4462 "
4463 fontSize 14
4464 fontName "Consolas"
4465 alignment "left"
4466 anchor "tl"
4467 borderDistance 6
4468 ]
4469 ]
4470
4471 node
4472 [
4473 id 5
4474 graphics
4475 [
4476 w 123.20000000000002
4477 h 54
4478 type "rectangle"
4479 fill "#FFFFFF"
4480 fill2 "#FFFFFF"
4481 outline "#000000"
4482 ]
4483 LabelGraphics
4484 [
4485 text "null"
4486 outline "#000000"
4487 fill "#FFFFFF"
4488 fontSize 16
4489 fontName "Monospace"
4490 autoSizePolicy "node_width"
4491 anchor "t"
4492 borderDistance 0.0
4493 ]
4494 LabelGraphics
4495 [
4496 text "
4497 FSObject class
4498 File class
4499 "
4500 fontSize 14
4501 fontName "Consolas"
4502 alignment "left"
4503 anchor "tl"
4504 borderDistance 6
4505 ]
4506 ]
4507
4508 node
4509 [
4510 id 6
4511 graphics
4512 [
4513 w 123.20000000000002
4514 h 54
4515 type "rectangle"
4516 fill "#FFFFFF"
4517 fill2 "#FFFFFF"
4518 outline "#000000"
4519 ]
4520 LabelGraphics
4521 [
4522 text "null"
4523 outline "#000000"
4524 fill "#FFFFFF"
4525 fontSize 16
4526 fontName "Monospace"
4527 autoSizePolicy "node_width"
4528 anchor "t"
4529 borderDistance 0.0
4530 ]
4531 LabelGraphics
4532 [
4533 text "
4534 FSObject class
4535 Dir class
4536 "
4537 fontSize 14
4538 fontName "Consolas"
4539 alignment "left"
4540 anchor "tl"
4541 borderDistance 6
4542 ]
4543 ]
4544
4545 node
4546 [
4547 id 7
4548 graphics
4549 [
4550 w 112.2
4551 h 26
4552 type "rectangle"
4553 fill "#FFFFFF"
4554 fill2 "#FFFFFF"
4555 outline "#000000"
4556 ]
4557 LabelGraphics
4558 [
4559 text "New Integers"
4560 outline "#000000"
4561 fill "#FFFFFF"
4562 fontSize 16
4563 fontName "Monospace"
4564 autoSizePolicy "node_width"
4565 anchor "t"
4566 borderDistance 0.0
4567 ]
4568 LabelGraphics
4569 [
4570 text "
4571 "
4572 fontSize 14
4573 fontName "Consolas"
4574 alignment "left"
4575 anchor "tl"
4576 borderDistance 6
4577 ]
4578 ]
4579
4580 node
4581 [
4582 id 8
4583 graphics
4584 [
4585 w 85.80000000000001
4586 h 26
4587 type "rectangle"
4588 fill "#FFFFFF"
4589 fill2 "#FFFFFF"
4590 outline "#000000"
4591 ]
4592 LabelGraphics
4593 [
4594 text "New Reals"
4595 outline "#000000"
4596 fill "#FFFFFF"
4597 fontSize 16
4598 fontName "Monospace"
4599 autoSizePolicy "node_width"
4600 anchor "t"
4601 borderDistance 0.0
4602 ]
4603 LabelGraphics
4604 [
4605 text "
4606 "
4607 fontSize 14
4608 fontName "Consolas"
4609 alignment "left"
4610 anchor "tl"
4611 borderDistance 6
4612 ]
4613 ]
4614
4615 node
4616 [
4617 id 9
4618 graphics
4619 [
4620 w 103.4
4621 h 26
4622 type "rectangle"
4623 fill "#FFFFFF"
4624 fill2 "#FFFFFF"
4625 outline "#000000"
4626 ]
4627 LabelGraphics
4628 [
4629 text "New Strings"
4630 outline "#000000"
4631 fill "#FFFFFF"
4632 fontSize 16
4633 fontName "Monospace"
4634 autoSizePolicy "node_width"
4635 anchor "t"
4636 borderDistance 0.0
4637 ]
4638 LabelGraphics
4639 [
4640 text "
4641 "
4642 fontSize 14
4643 fontName "Consolas"
4644 alignment "left"
4645 anchor "tl"
4646 borderDistance 6
4647 ]
4648 ]
4649
4650 node
4651 [
4652 id 10
4653 graphics
4654 [
4655 w 103.4
4656 h 26
4657 type "rectangle"
4658 fill "#FFFFFF"
4659 fill2 "#FFFFFF"
4660 outline "#000000"
4661 ]
4662 LabelGraphics
4663 [
4664 text "New Objects"
4665 outline "#000000"
4666 fill "#FFFFFF"
4667 fontSize 16
4668 fontName "Monospace"
4669 autoSizePolicy "node_width"
4670 anchor "t"
4671 borderDistance 0.0
4672 ]
4673 LabelGraphics
4674 [
4675 text "
4676 "
4677 fontSize 14
4678 fontName "Consolas"
4679 alignment "left"
4680 anchor "tl"
4681 borderDistance 6
4682 ]
4683 ]
4684 edge
4685 [
4686 source 3
4687 target 4
4688 graphics
4689 [
4690 fill "#000000"
4691 width 3
4692 targetArrow "standard"
4693 ]
4694 LabelGraphics
4695 [
4696 text "root reference FileSystem"
4697 fontSize 14
4698 fontName "Consolas"
4699 configuration "AutoFlippingLabel"
4700 model "six_pos"
4701 position "thead"
4702 ]
4703 ]
4704 edge
4705 [
4706 source 6
4707 target 4
4708 graphics
4709 [
4710 fill "#000000"
4711 targetArrow "standard"
4712 ]
4713 LabelGraphics
4714 [
4715 text "parent reference FSObject"
4716 fontSize 14
4717 fontName "Consolas"
4718 configuration "AutoFlippingLabel"
4719 model "six_pos"
4720 position "thead"
4721 ]
4722 ]
4723 edge
4724 [
4725 source 4
4726 target 6
4727 graphics
4728 [
4729 fill "#000000"
4730 width 3
4731 targetArrow "standard"
4732 ]
4733 LabelGraphics
4734 [
4735 text "contents reference Dir"
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 3
4747 graphics
4748 [
4749 fill "#000000"
4750 width 3
4751 targetArrow "standard"
4752 ]
4753 LabelGraphics
4754 [
4755 text "filesystems reference Model"
4756 fontSize 14
4757 fontName "Consolas"
4758 configuration "AutoFlippingLabel"
4759 model "six_pos"
4760 position "thead"
4761 ]
4762 ]
4763 edge
4764 [
4765 source 0
4766 target 5
4767 graphics
4768 [
4769 fill "#000000"
4770 width 3
4771 targetArrow "standard"
4772 ]
4773 LabelGraphics
4774 [
4775 text "otherFSObjects reference Model"
4776 fontSize 14
4777 fontName "Consolas"
4778 configuration "AutoFlippingLabel"
4779 model "six_pos"
4780 position "thead"
4781 ]
4782 ]
4783]
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/models/1.png b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/models/1.png
index d9b7c988..605b244d 100644
--- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/models/1.png
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/models/1.png
Binary files differ
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/models/1.xmi b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/models/1.xmi
index f6b5a41e..ffc48f68 100644
--- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/models/1.xmi
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/models/1.xmi
@@ -1,9 +1,9 @@
1<?xml version="1.0" encoding="ASCII"?> 1<?xml version="1.0" encoding="ASCII"?>
2<yakindu:Statechart xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:yakindu="YakinduMetamodel"> 2<filesystem:Model xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:filesystem="FileSystemMetamodel">
3 <regions> 3 <filesystems>
4 <vertices xsi:type="yakindu:FinalState"/> 4 <root>
5 </regions> 5 <contents xsi:type="filesystem:Dir"/>
6 <regions> 6 </root>
7 <vertices xsi:type="yakindu:FinalState"/> 7 </filesystems>
8 </regions> 8 <otherFSObjects xsi:type="filesystem:File"/>
9</yakindu:Statechart> 9</filesystem:Model>
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/models/2.gml b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/models/2.gml
index f07ae0db..57d704cf 100644
--- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/models/2.gml
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/models/2.gml
@@ -477,3 +477,3695 @@ graph
477 ] 477 ]
478 ] 478 ]
479] 479]
480graph
481[
482 node
483 [
484 id 0
485 graphics
486 [
487 w 277.20000000000005
488 h 82
489 type "rectangle"
490 fill "#FFFFFF"
491 fill2 "#FFFFFF"
492 outline "#000000"
493 ]
494 LabelGraphics
495 [
496 text "o 1"
497 outline "#000000"
498 fill "#FFFFFF"
499 fontSize 16
500 fontName "Monospace"
501 autoSizePolicy "node_width"
502 anchor "t"
503 borderDistance 0.0
504 ]
505 LabelGraphics
506 [
507 text "
508 Statechart class DefinedPart
509 CompositeElement class DefinedPart
510 Statechart class
511 CompositeElement class
512 "
513 fontSize 14
514 fontName "Consolas"
515 alignment "left"
516 anchor "tl"
517 borderDistance 6
518 ]
519 ]
520
521 node
522 [
523 id 1
524 graphics
525 [
526 w 41.800000000000004
527 h 26
528 type "rectangle"
529 fill "#FFFFFF"
530 fill2 "#FFFFFF"
531 outline "#000000"
532 ]
533 LabelGraphics
534 [
535 text "true"
536 outline "#000000"
537 fill "#FFFFFF"
538 fontSize 16
539 fontName "Monospace"
540 autoSizePolicy "node_width"
541 anchor "t"
542 borderDistance 0.0
543 ]
544 LabelGraphics
545 [
546 text "
547 "
548 fontSize 14
549 fontName "Consolas"
550 alignment "left"
551 anchor "tl"
552 borderDistance 6
553 ]
554 ]
555
556 node
557 [
558 id 2
559 graphics
560 [
561 w 50.6
562 h 26
563 type "rectangle"
564 fill "#FFFFFF"
565 fill2 "#FFFFFF"
566 outline "#000000"
567 ]
568 LabelGraphics
569 [
570 text "false"
571 outline "#000000"
572 fill "#FFFFFF"
573 fontSize 16
574 fontName "Monospace"
575 autoSizePolicy "node_width"
576 anchor "t"
577 borderDistance 0.0
578 ]
579 LabelGraphics
580 [
581 text "
582 "
583 fontSize 14
584 fontName "Consolas"
585 alignment "left"
586 anchor "tl"
587 borderDistance 6
588 ]
589 ]
590
591 node
592 [
593 id 3
594 graphics
595 [
596 w 107.80000000000001
597 h 40
598 type "rectangle"
599 fill "#FFFFFF"
600 fill2 "#FFFFFF"
601 outline "#000000"
602 ]
603 LabelGraphics
604 [
605 text "null"
606 outline "#000000"
607 fill "#FFFFFF"
608 fontSize 16
609 fontName "Monospace"
610 autoSizePolicy "node_width"
611 anchor "t"
612 borderDistance 0.0
613 ]
614 LabelGraphics
615 [
616 text "
617 Region class
618 "
619 fontSize 14
620 fontName "Consolas"
621 alignment "left"
622 anchor "tl"
623 borderDistance 6
624 ]
625 ]
626
627 node
628 [
629 id 4
630 graphics
631 [
632 w 146.3
633 h 68
634 type "rectangle"
635 fill "#FFFFFF"
636 fill2 "#FFFFFF"
637 outline "#000000"
638 ]
639 LabelGraphics
640 [
641 text "null"
642 outline "#000000"
643 fill "#FFFFFF"
644 fontSize 16
645 fontName "Monospace"
646 autoSizePolicy "node_width"
647 anchor "t"
648 borderDistance 0.0
649 ]
650 LabelGraphics
651 [
652 text "
653 Pseudostate class
654 Vertex class
655 Entry class
656 "
657 fontSize 14
658 fontName "Consolas"
659 alignment "left"
660 anchor "tl"
661 borderDistance 6
662 ]
663 ]
664
665 node
666 [
667 id 5
668 graphics
669 [
670 w 138.60000000000002
671 h 40
672 type "rectangle"
673 fill "#FFFFFF"
674 fill2 "#FFFFFF"
675 outline "#000000"
676 ]
677 LabelGraphics
678 [
679 text "null"
680 outline "#000000"
681 fill "#FFFFFF"
682 fontSize 16
683 fontName "Monospace"
684 autoSizePolicy "node_width"
685 anchor "t"
686 borderDistance 0.0
687 ]
688 LabelGraphics
689 [
690 text "
691 Transition class
692 "
693 fontSize 14
694 fontName "Consolas"
695 alignment "left"
696 anchor "tl"
697 borderDistance 6
698 ]
699 ]
700
701 node
702 [
703 id 6
704 graphics
705 [
706 w 292.6
707 h 96
708 type "rectangle"
709 fill "#FFFFFF"
710 fill2 "#FFFFFF"
711 outline "#000000"
712 ]
713 LabelGraphics
714 [
715 text "null"
716 outline "#000000"
717 fill "#FFFFFF"
718 fontSize 16
719 fontName "Monospace"
720 autoSizePolicy "node_width"
721 anchor "t"
722 borderDistance 0.0
723 ]
724 LabelGraphics
725 [
726 text "
727 Vertex class
728 State class
729 RegularState class
730 CompositeElement class
731 CompositeElement class UndefinedPart
732 "
733 fontSize 14
734 fontName "Consolas"
735 alignment "left"
736 anchor "tl"
737 borderDistance 6
738 ]
739 ]
740
741 node
742 [
743 id 7
744 graphics
745 [
746 w 146.3
747 h 68
748 type "rectangle"
749 fill "#FFFFFF"
750 fill2 "#FFFFFF"
751 outline "#000000"
752 ]
753 LabelGraphics
754 [
755 text "null"
756 outline "#000000"
757 fill "#FFFFFF"
758 fontSize 16
759 fontName "Monospace"
760 autoSizePolicy "node_width"
761 anchor "t"
762 borderDistance 0.0
763 ]
764 LabelGraphics
765 [
766 text "
767 Pseudostate class
768 Vertex class
769 Exit class
770 "
771 fontSize 14
772 fontName "Consolas"
773 alignment "left"
774 anchor "tl"
775 borderDistance 6
776 ]
777 ]
778
779 node
780 [
781 id 8
782 graphics
783 [
784 w 112.2
785 h 26
786 type "rectangle"
787 fill "#FFFFFF"
788 fill2 "#FFFFFF"
789 outline "#000000"
790 ]
791 LabelGraphics
792 [
793 text "New Integers"
794 outline "#000000"
795 fill "#FFFFFF"
796 fontSize 16
797 fontName "Monospace"
798 autoSizePolicy "node_width"
799 anchor "t"
800 borderDistance 0.0
801 ]
802 LabelGraphics
803 [
804 text "
805 "
806 fontSize 14
807 fontName "Consolas"
808 alignment "left"
809 anchor "tl"
810 borderDistance 6
811 ]
812 ]
813
814 node
815 [
816 id 9
817 graphics
818 [
819 w 85.80000000000001
820 h 26
821 type "rectangle"
822 fill "#FFFFFF"
823 fill2 "#FFFFFF"
824 outline "#000000"
825 ]
826 LabelGraphics
827 [
828 text "New Reals"
829 outline "#000000"
830 fill "#FFFFFF"
831 fontSize 16
832 fontName "Monospace"
833 autoSizePolicy "node_width"
834 anchor "t"
835 borderDistance 0.0
836 ]
837 LabelGraphics
838 [
839 text "
840 "
841 fontSize 14
842 fontName "Consolas"
843 alignment "left"
844 anchor "tl"
845 borderDistance 6
846 ]
847 ]
848
849 node
850 [
851 id 10
852 graphics
853 [
854 w 103.4
855 h 26
856 type "rectangle"
857 fill "#FFFFFF"
858 fill2 "#FFFFFF"
859 outline "#000000"
860 ]
861 LabelGraphics
862 [
863 text "New Strings"
864 outline "#000000"
865 fill "#FFFFFF"
866 fontSize 16
867 fontName "Monospace"
868 autoSizePolicy "node_width"
869 anchor "t"
870 borderDistance 0.0
871 ]
872 LabelGraphics
873 [
874 text "
875 "
876 fontSize 14
877 fontName "Consolas"
878 alignment "left"
879 anchor "tl"
880 borderDistance 6
881 ]
882 ]
883
884 node
885 [
886 id 11
887 graphics
888 [
889 w 103.4
890 h 26
891 type "rectangle"
892 fill "#FFFFFF"
893 fill2 "#FFFFFF"
894 outline "#000000"
895 ]
896 LabelGraphics
897 [
898 text "New Objects"
899 outline "#000000"
900 fill "#FFFFFF"
901 fontSize 16
902 fontName "Monospace"
903 autoSizePolicy "node_width"
904 anchor "t"
905 borderDistance 0.0
906 ]
907 LabelGraphics
908 [
909 text "
910 "
911 fontSize 14
912 fontName "Consolas"
913 alignment "left"
914 anchor "tl"
915 borderDistance 6
916 ]
917 ]
918 edge
919 [
920 source 7
921 target 5
922 graphics
923 [
924 fill "#000000"
925 targetArrow "standard"
926 ]
927 LabelGraphics
928 [
929 text "incomingTransitions reference Vertex"
930 fontSize 14
931 fontName "Consolas"
932 configuration "AutoFlippingLabel"
933 model "six_pos"
934 position "thead"
935 ]
936 ]
937 edge
938 [
939 source 4
940 target 5
941 graphics
942 [
943 fill "#000000"
944 width 3
945 targetArrow "standard"
946 ]
947 LabelGraphics
948 [
949 text "outgoingTransitions reference Vertex"
950 fontSize 14
951 fontName "Consolas"
952 configuration "AutoFlippingLabel"
953 model "six_pos"
954 position "thead"
955 ]
956 ]
957 edge
958 [
959 source 3
960 target 4
961 graphics
962 [
963 fill "#000000"
964 width 3
965 targetArrow "standard"
966 ]
967 LabelGraphics
968 [
969 text "vertices reference Region"
970 fontSize 14
971 fontName "Consolas"
972 configuration "AutoFlippingLabel"
973 model "six_pos"
974 position "thead"
975 ]
976 ]
977 edge
978 [
979 source 3
980 target 6
981 graphics
982 [
983 fill "#000000"
984 width 3
985 targetArrow "standard"
986 ]
987 LabelGraphics
988 [
989 text "vertices reference Region"
990 fontSize 14
991 fontName "Consolas"
992 configuration "AutoFlippingLabel"
993 model "six_pos"
994 position "thead"
995 ]
996 ]
997 edge
998 [
999 source 3
1000 target 7
1001 graphics
1002 [
1003 fill "#000000"
1004 width 3
1005 targetArrow "standard"
1006 ]
1007 LabelGraphics
1008 [
1009 text "vertices reference Region"
1010 fontSize 14
1011 fontName "Consolas"
1012 configuration "AutoFlippingLabel"
1013 model "six_pos"
1014 position "thead"
1015 ]
1016 ]
1017 edge
1018 [
1019 source 5
1020 target 7
1021 graphics
1022 [
1023 fill "#000000"
1024 targetArrow "standard"
1025 ]
1026 LabelGraphics
1027 [
1028 text "target reference Transition"
1029 fontSize 14
1030 fontName "Consolas"
1031 configuration "AutoFlippingLabel"
1032 model "six_pos"
1033 position "thead"
1034 ]
1035 ]
1036 edge
1037 [
1038 source 5
1039 target 4
1040 graphics
1041 [
1042 fill "#000000"
1043 targetArrow "standard"
1044 ]
1045 LabelGraphics
1046 [
1047 text "source reference Transition"
1048 fontSize 14
1049 fontName "Consolas"
1050 configuration "AutoFlippingLabel"
1051 model "six_pos"
1052 position "thead"
1053 ]
1054 ]
1055 edge
1056 [
1057 source 0
1058 target 3
1059 graphics
1060 [
1061 fill "#000000"
1062 width 3
1063 targetArrow "standard"
1064 ]
1065 LabelGraphics
1066 [
1067 text "regions reference CompositeElement"
1068 fontSize 14
1069 fontName "Consolas"
1070 configuration "AutoFlippingLabel"
1071 model "six_pos"
1072 position "thead"
1073 ]
1074 ]
1075]
1076graph
1077[
1078 node
1079 [
1080 id 0
1081 graphics
1082 [
1083 w 277.20000000000005
1084 h 82
1085 type "rectangle"
1086 fill "#FFFFFF"
1087 fill2 "#FFFFFF"
1088 outline "#000000"
1089 ]
1090 LabelGraphics
1091 [
1092 text "o 1"
1093 outline "#000000"
1094 fill "#FFFFFF"
1095 fontSize 16
1096 fontName "Monospace"
1097 autoSizePolicy "node_width"
1098 anchor "t"
1099 borderDistance 0.0
1100 ]
1101 LabelGraphics
1102 [
1103 text "
1104 Statechart class DefinedPart
1105 CompositeElement class DefinedPart
1106 Statechart class
1107 CompositeElement class
1108 "
1109 fontSize 14
1110 fontName "Consolas"
1111 alignment "left"
1112 anchor "tl"
1113 borderDistance 6
1114 ]
1115 ]
1116
1117 node
1118 [
1119 id 1
1120 graphics
1121 [
1122 w 41.800000000000004
1123 h 26
1124 type "rectangle"
1125 fill "#FFFFFF"
1126 fill2 "#FFFFFF"
1127 outline "#000000"
1128 ]
1129 LabelGraphics
1130 [
1131 text "true"
1132 outline "#000000"
1133 fill "#FFFFFF"
1134 fontSize 16
1135 fontName "Monospace"
1136 autoSizePolicy "node_width"
1137 anchor "t"
1138 borderDistance 0.0
1139 ]
1140 LabelGraphics
1141 [
1142 text "
1143 "
1144 fontSize 14
1145 fontName "Consolas"
1146 alignment "left"
1147 anchor "tl"
1148 borderDistance 6
1149 ]
1150 ]
1151
1152 node
1153 [
1154 id 2
1155 graphics
1156 [
1157 w 50.6
1158 h 26
1159 type "rectangle"
1160 fill "#FFFFFF"
1161 fill2 "#FFFFFF"
1162 outline "#000000"
1163 ]
1164 LabelGraphics
1165 [
1166 text "false"
1167 outline "#000000"
1168 fill "#FFFFFF"
1169 fontSize 16
1170 fontName "Monospace"
1171 autoSizePolicy "node_width"
1172 anchor "t"
1173 borderDistance 0.0
1174 ]
1175 LabelGraphics
1176 [
1177 text "
1178 "
1179 fontSize 14
1180 fontName "Consolas"
1181 alignment "left"
1182 anchor "tl"
1183 borderDistance 6
1184 ]
1185 ]
1186
1187 node
1188 [
1189 id 3
1190 graphics
1191 [
1192 w 107.80000000000001
1193 h 40
1194 type "rectangle"
1195 fill "#FFFFFF"
1196 fill2 "#FFFFFF"
1197 outline "#000000"
1198 ]
1199 LabelGraphics
1200 [
1201 text "null"
1202 outline "#000000"
1203 fill "#FFFFFF"
1204 fontSize 16
1205 fontName "Monospace"
1206 autoSizePolicy "node_width"
1207 anchor "t"
1208 borderDistance 0.0
1209 ]
1210 LabelGraphics
1211 [
1212 text "
1213 Region class
1214 "
1215 fontSize 14
1216 fontName "Consolas"
1217 alignment "left"
1218 anchor "tl"
1219 borderDistance 6
1220 ]
1221 ]
1222
1223 node
1224 [
1225 id 4
1226 graphics
1227 [
1228 w 154.0
1229 h 68
1230 type "rectangle"
1231 fill "#FFFFFF"
1232 fill2 "#FFFFFF"
1233 outline "#000000"
1234 ]
1235 LabelGraphics
1236 [
1237 text "null"
1238 outline "#000000"
1239 fill "#FFFFFF"
1240 fontSize 16
1241 fontName "Monospace"
1242 autoSizePolicy "node_width"
1243 anchor "t"
1244 borderDistance 0.0
1245 ]
1246 LabelGraphics
1247 [
1248 text "
1249 Vertex class
1250 RegularState class
1251 FinalState class
1252 "
1253 fontSize 14
1254 fontName "Consolas"
1255 alignment "left"
1256 anchor "tl"
1257 borderDistance 6
1258 ]
1259 ]
1260
1261 node
1262 [
1263 id 5
1264 graphics
1265 [
1266 w 146.3
1267 h 68
1268 type "rectangle"
1269 fill "#FFFFFF"
1270 fill2 "#FFFFFF"
1271 outline "#000000"
1272 ]
1273 LabelGraphics
1274 [
1275 text "null"
1276 outline "#000000"
1277 fill "#FFFFFF"
1278 fontSize 16
1279 fontName "Monospace"
1280 autoSizePolicy "node_width"
1281 anchor "t"
1282 borderDistance 0.0
1283 ]
1284 LabelGraphics
1285 [
1286 text "
1287 Pseudostate class
1288 Vertex class
1289 Entry class
1290 "
1291 fontSize 14
1292 fontName "Consolas"
1293 alignment "left"
1294 anchor "tl"
1295 borderDistance 6
1296 ]
1297 ]
1298
1299 node
1300 [
1301 id 6
1302 graphics
1303 [
1304 w 292.6
1305 h 96
1306 type "rectangle"
1307 fill "#FFFFFF"
1308 fill2 "#FFFFFF"
1309 outline "#000000"
1310 ]
1311 LabelGraphics
1312 [
1313 text "null"
1314 outline "#000000"
1315 fill "#FFFFFF"
1316 fontSize 16
1317 fontName "Monospace"
1318 autoSizePolicy "node_width"
1319 anchor "t"
1320 borderDistance 0.0
1321 ]
1322 LabelGraphics
1323 [
1324 text "
1325 Vertex class
1326 State class
1327 RegularState class
1328 CompositeElement class
1329 CompositeElement class UndefinedPart
1330 "
1331 fontSize 14
1332 fontName "Consolas"
1333 alignment "left"
1334 anchor "tl"
1335 borderDistance 6
1336 ]
1337 ]
1338
1339 node
1340 [
1341 id 7
1342 graphics
1343 [
1344 w 138.60000000000002
1345 h 40
1346 type "rectangle"
1347 fill "#FFFFFF"
1348 fill2 "#FFFFFF"
1349 outline "#000000"
1350 ]
1351 LabelGraphics
1352 [
1353 text "null"
1354 outline "#000000"
1355 fill "#FFFFFF"
1356 fontSize 16
1357 fontName "Monospace"
1358 autoSizePolicy "node_width"
1359 anchor "t"
1360 borderDistance 0.0
1361 ]
1362 LabelGraphics
1363 [
1364 text "
1365 Transition class
1366 "
1367 fontSize 14
1368 fontName "Consolas"
1369 alignment "left"
1370 anchor "tl"
1371 borderDistance 6
1372 ]
1373 ]
1374
1375 node
1376 [
1377 id 8
1378 graphics
1379 [
1380 w 112.2
1381 h 26
1382 type "rectangle"
1383 fill "#FFFFFF"
1384 fill2 "#FFFFFF"
1385 outline "#000000"
1386 ]
1387 LabelGraphics
1388 [
1389 text "New Integers"
1390 outline "#000000"
1391 fill "#FFFFFF"
1392 fontSize 16
1393 fontName "Monospace"
1394 autoSizePolicy "node_width"
1395 anchor "t"
1396 borderDistance 0.0
1397 ]
1398 LabelGraphics
1399 [
1400 text "
1401 "
1402 fontSize 14
1403 fontName "Consolas"
1404 alignment "left"
1405 anchor "tl"
1406 borderDistance 6
1407 ]
1408 ]
1409
1410 node
1411 [
1412 id 9
1413 graphics
1414 [
1415 w 85.80000000000001
1416 h 26
1417 type "rectangle"
1418 fill "#FFFFFF"
1419 fill2 "#FFFFFF"
1420 outline "#000000"
1421 ]
1422 LabelGraphics
1423 [
1424 text "New Reals"
1425 outline "#000000"
1426 fill "#FFFFFF"
1427 fontSize 16
1428 fontName "Monospace"
1429 autoSizePolicy "node_width"
1430 anchor "t"
1431 borderDistance 0.0
1432 ]
1433 LabelGraphics
1434 [
1435 text "
1436 "
1437 fontSize 14
1438 fontName "Consolas"
1439 alignment "left"
1440 anchor "tl"
1441 borderDistance 6
1442 ]
1443 ]
1444
1445 node
1446 [
1447 id 10
1448 graphics
1449 [
1450 w 103.4
1451 h 26
1452 type "rectangle"
1453 fill "#FFFFFF"
1454 fill2 "#FFFFFF"
1455 outline "#000000"
1456 ]
1457 LabelGraphics
1458 [
1459 text "New Strings"
1460 outline "#000000"
1461 fill "#FFFFFF"
1462 fontSize 16
1463 fontName "Monospace"
1464 autoSizePolicy "node_width"
1465 anchor "t"
1466 borderDistance 0.0
1467 ]
1468 LabelGraphics
1469 [
1470 text "
1471 "
1472 fontSize 14
1473 fontName "Consolas"
1474 alignment "left"
1475 anchor "tl"
1476 borderDistance 6
1477 ]
1478 ]
1479
1480 node
1481 [
1482 id 11
1483 graphics
1484 [
1485 w 103.4
1486 h 26
1487 type "rectangle"
1488 fill "#FFFFFF"
1489 fill2 "#FFFFFF"
1490 outline "#000000"
1491 ]
1492 LabelGraphics
1493 [
1494 text "New Objects"
1495 outline "#000000"
1496 fill "#FFFFFF"
1497 fontSize 16
1498 fontName "Monospace"
1499 autoSizePolicy "node_width"
1500 anchor "t"
1501 borderDistance 0.0
1502 ]
1503 LabelGraphics
1504 [
1505 text "
1506 "
1507 fontSize 14
1508 fontName "Consolas"
1509 alignment "left"
1510 anchor "tl"
1511 borderDistance 6
1512 ]
1513 ]
1514 edge
1515 [
1516 source 4
1517 target 7
1518 graphics
1519 [
1520 fill "#000000"
1521 targetArrow "standard"
1522 ]
1523 LabelGraphics
1524 [
1525 text "incomingTransitions reference Vertex"
1526 fontSize 14
1527 fontName "Consolas"
1528 configuration "AutoFlippingLabel"
1529 model "six_pos"
1530 position "thead"
1531 ]
1532 ]
1533 edge
1534 [
1535 source 5
1536 target 7
1537 graphics
1538 [
1539 fill "#000000"
1540 width 3
1541 targetArrow "standard"
1542 ]
1543 LabelGraphics
1544 [
1545 text "outgoingTransitions reference Vertex"
1546 fontSize 14
1547 fontName "Consolas"
1548 configuration "AutoFlippingLabel"
1549 model "six_pos"
1550 position "thead"
1551 ]
1552 ]
1553 edge
1554 [
1555 source 3
1556 target 4
1557 graphics
1558 [
1559 fill "#000000"
1560 width 3
1561 targetArrow "standard"
1562 ]
1563 LabelGraphics
1564 [
1565 text "vertices reference Region"
1566 fontSize 14
1567 fontName "Consolas"
1568 configuration "AutoFlippingLabel"
1569 model "six_pos"
1570 position "thead"
1571 ]
1572 ]
1573 edge
1574 [
1575 source 3
1576 target 5
1577 graphics
1578 [
1579 fill "#000000"
1580 width 3
1581 targetArrow "standard"
1582 ]
1583 LabelGraphics
1584 [
1585 text "vertices reference Region"
1586 fontSize 14
1587 fontName "Consolas"
1588 configuration "AutoFlippingLabel"
1589 model "six_pos"
1590 position "thead"
1591 ]
1592 ]
1593 edge
1594 [
1595 source 3
1596 target 6
1597 graphics
1598 [
1599 fill "#000000"
1600 width 3
1601 targetArrow "standard"
1602 ]
1603 LabelGraphics
1604 [
1605 text "vertices reference Region"
1606 fontSize 14
1607 fontName "Consolas"
1608 configuration "AutoFlippingLabel"
1609 model "six_pos"
1610 position "thead"
1611 ]
1612 ]
1613 edge
1614 [
1615 source 7
1616 target 4
1617 graphics
1618 [
1619 fill "#000000"
1620 targetArrow "standard"
1621 ]
1622 LabelGraphics
1623 [
1624 text "target reference Transition"
1625 fontSize 14
1626 fontName "Consolas"
1627 configuration "AutoFlippingLabel"
1628 model "six_pos"
1629 position "thead"
1630 ]
1631 ]
1632 edge
1633 [
1634 source 7
1635 target 5
1636 graphics
1637 [
1638 fill "#000000"
1639 targetArrow "standard"
1640 ]
1641 LabelGraphics
1642 [
1643 text "source reference Transition"
1644 fontSize 14
1645 fontName "Consolas"
1646 configuration "AutoFlippingLabel"
1647 model "six_pos"
1648 position "thead"
1649 ]
1650 ]
1651 edge
1652 [
1653 source 0
1654 target 3
1655 graphics
1656 [
1657 fill "#000000"
1658 width 3
1659 targetArrow "standard"
1660 ]
1661 LabelGraphics
1662 [
1663 text "regions reference CompositeElement"
1664 fontSize 14
1665 fontName "Consolas"
1666 configuration "AutoFlippingLabel"
1667 model "six_pos"
1668 position "thead"
1669 ]
1670 ]
1671]
1672graph
1673[
1674 node
1675 [
1676 id 0
1677 graphics
1678 [
1679 w 277.20000000000005
1680 h 82
1681 type "rectangle"
1682 fill "#FFFFFF"
1683 fill2 "#FFFFFF"
1684 outline "#000000"
1685 ]
1686 LabelGraphics
1687 [
1688 text "o 1"
1689 outline "#000000"
1690 fill "#FFFFFF"
1691 fontSize 16
1692 fontName "Monospace"
1693 autoSizePolicy "node_width"
1694 anchor "t"
1695 borderDistance 0.0
1696 ]
1697 LabelGraphics
1698 [
1699 text "
1700 Statechart class DefinedPart
1701 CompositeElement class DefinedPart
1702 Statechart class
1703 CompositeElement class
1704 "
1705 fontSize 14
1706 fontName "Consolas"
1707 alignment "left"
1708 anchor "tl"
1709 borderDistance 6
1710 ]
1711 ]
1712
1713 node
1714 [
1715 id 1
1716 graphics
1717 [
1718 w 41.800000000000004
1719 h 26
1720 type "rectangle"
1721 fill "#FFFFFF"
1722 fill2 "#FFFFFF"
1723 outline "#000000"
1724 ]
1725 LabelGraphics
1726 [
1727 text "true"
1728 outline "#000000"
1729 fill "#FFFFFF"
1730 fontSize 16
1731 fontName "Monospace"
1732 autoSizePolicy "node_width"
1733 anchor "t"
1734 borderDistance 0.0
1735 ]
1736 LabelGraphics
1737 [
1738 text "
1739 "
1740 fontSize 14
1741 fontName "Consolas"
1742 alignment "left"
1743 anchor "tl"
1744 borderDistance 6
1745 ]
1746 ]
1747
1748 node
1749 [
1750 id 2
1751 graphics
1752 [
1753 w 50.6
1754 h 26
1755 type "rectangle"
1756 fill "#FFFFFF"
1757 fill2 "#FFFFFF"
1758 outline "#000000"
1759 ]
1760 LabelGraphics
1761 [
1762 text "false"
1763 outline "#000000"
1764 fill "#FFFFFF"
1765 fontSize 16
1766 fontName "Monospace"
1767 autoSizePolicy "node_width"
1768 anchor "t"
1769 borderDistance 0.0
1770 ]
1771 LabelGraphics
1772 [
1773 text "
1774 "
1775 fontSize 14
1776 fontName "Consolas"
1777 alignment "left"
1778 anchor "tl"
1779 borderDistance 6
1780 ]
1781 ]
1782
1783 node
1784 [
1785 id 3
1786 graphics
1787 [
1788 w 107.80000000000001
1789 h 40
1790 type "rectangle"
1791 fill "#FFFFFF"
1792 fill2 "#FFFFFF"
1793 outline "#000000"
1794 ]
1795 LabelGraphics
1796 [
1797 text "null"
1798 outline "#000000"
1799 fill "#FFFFFF"
1800 fontSize 16
1801 fontName "Monospace"
1802 autoSizePolicy "node_width"
1803 anchor "t"
1804 borderDistance 0.0
1805 ]
1806 LabelGraphics
1807 [
1808 text "
1809 Region class
1810 "
1811 fontSize 14
1812 fontName "Consolas"
1813 alignment "left"
1814 anchor "tl"
1815 borderDistance 6
1816 ]
1817 ]
1818
1819 node
1820 [
1821 id 4
1822 graphics
1823 [
1824 w 146.3
1825 h 68
1826 type "rectangle"
1827 fill "#FFFFFF"
1828 fill2 "#FFFFFF"
1829 outline "#000000"
1830 ]
1831 LabelGraphics
1832 [
1833 text "null"
1834 outline "#000000"
1835 fill "#FFFFFF"
1836 fontSize 16
1837 fontName "Monospace"
1838 autoSizePolicy "node_width"
1839 anchor "t"
1840 borderDistance 0.0
1841 ]
1842 LabelGraphics
1843 [
1844 text "
1845 Pseudostate class
1846 Vertex class
1847 Exit class
1848 "
1849 fontSize 14
1850 fontName "Consolas"
1851 alignment "left"
1852 anchor "tl"
1853 borderDistance 6
1854 ]
1855 ]
1856
1857 node
1858 [
1859 id 5
1860 graphics
1861 [
1862 w 146.3
1863 h 68
1864 type "rectangle"
1865 fill "#FFFFFF"
1866 fill2 "#FFFFFF"
1867 outline "#000000"
1868 ]
1869 LabelGraphics
1870 [
1871 text "null"
1872 outline "#000000"
1873 fill "#FFFFFF"
1874 fontSize 16
1875 fontName "Monospace"
1876 autoSizePolicy "node_width"
1877 anchor "t"
1878 borderDistance 0.0
1879 ]
1880 LabelGraphics
1881 [
1882 text "
1883 Pseudostate class
1884 Vertex class
1885 Entry class
1886 "
1887 fontSize 14
1888 fontName "Consolas"
1889 alignment "left"
1890 anchor "tl"
1891 borderDistance 6
1892 ]
1893 ]
1894
1895 node
1896 [
1897 id 6
1898 graphics
1899 [
1900 w 292.6
1901 h 96
1902 type "rectangle"
1903 fill "#FFFFFF"
1904 fill2 "#FFFFFF"
1905 outline "#000000"
1906 ]
1907 LabelGraphics
1908 [
1909 text "null"
1910 outline "#000000"
1911 fill "#FFFFFF"
1912 fontSize 16
1913 fontName "Monospace"
1914 autoSizePolicy "node_width"
1915 anchor "t"
1916 borderDistance 0.0
1917 ]
1918 LabelGraphics
1919 [
1920 text "
1921 Vertex class
1922 State class
1923 RegularState class
1924 CompositeElement class
1925 CompositeElement class UndefinedPart
1926 "
1927 fontSize 14
1928 fontName "Consolas"
1929 alignment "left"
1930 anchor "tl"
1931 borderDistance 6
1932 ]
1933 ]
1934
1935 node
1936 [
1937 id 7
1938 graphics
1939 [
1940 w 138.60000000000002
1941 h 40
1942 type "rectangle"
1943 fill "#FFFFFF"
1944 fill2 "#FFFFFF"
1945 outline "#000000"
1946 ]
1947 LabelGraphics
1948 [
1949 text "null"
1950 outline "#000000"
1951 fill "#FFFFFF"
1952 fontSize 16
1953 fontName "Monospace"
1954 autoSizePolicy "node_width"
1955 anchor "t"
1956 borderDistance 0.0
1957 ]
1958 LabelGraphics
1959 [
1960 text "
1961 Transition class
1962 "
1963 fontSize 14
1964 fontName "Consolas"
1965 alignment "left"
1966 anchor "tl"
1967 borderDistance 6
1968 ]
1969 ]
1970
1971 node
1972 [
1973 id 8
1974 graphics
1975 [
1976 w 112.2
1977 h 26
1978 type "rectangle"
1979 fill "#FFFFFF"
1980 fill2 "#FFFFFF"
1981 outline "#000000"
1982 ]
1983 LabelGraphics
1984 [
1985 text "New Integers"
1986 outline "#000000"
1987 fill "#FFFFFF"
1988 fontSize 16
1989 fontName "Monospace"
1990 autoSizePolicy "node_width"
1991 anchor "t"
1992 borderDistance 0.0
1993 ]
1994 LabelGraphics
1995 [
1996 text "
1997 "
1998 fontSize 14
1999 fontName "Consolas"
2000 alignment "left"
2001 anchor "tl"
2002 borderDistance 6
2003 ]
2004 ]
2005
2006 node
2007 [
2008 id 9
2009 graphics
2010 [
2011 w 85.80000000000001
2012 h 26
2013 type "rectangle"
2014 fill "#FFFFFF"
2015 fill2 "#FFFFFF"
2016 outline "#000000"
2017 ]
2018 LabelGraphics
2019 [
2020 text "New Reals"
2021 outline "#000000"
2022 fill "#FFFFFF"
2023 fontSize 16
2024 fontName "Monospace"
2025 autoSizePolicy "node_width"
2026 anchor "t"
2027 borderDistance 0.0
2028 ]
2029 LabelGraphics
2030 [
2031 text "
2032 "
2033 fontSize 14
2034 fontName "Consolas"
2035 alignment "left"
2036 anchor "tl"
2037 borderDistance 6
2038 ]
2039 ]
2040
2041 node
2042 [
2043 id 10
2044 graphics
2045 [
2046 w 103.4
2047 h 26
2048 type "rectangle"
2049 fill "#FFFFFF"
2050 fill2 "#FFFFFF"
2051 outline "#000000"
2052 ]
2053 LabelGraphics
2054 [
2055 text "New Strings"
2056 outline "#000000"
2057 fill "#FFFFFF"
2058 fontSize 16
2059 fontName "Monospace"
2060 autoSizePolicy "node_width"
2061 anchor "t"
2062 borderDistance 0.0
2063 ]
2064 LabelGraphics
2065 [
2066 text "
2067 "
2068 fontSize 14
2069 fontName "Consolas"
2070 alignment "left"
2071 anchor "tl"
2072 borderDistance 6
2073 ]
2074 ]
2075
2076 node
2077 [
2078 id 11
2079 graphics
2080 [
2081 w 103.4
2082 h 26
2083 type "rectangle"
2084 fill "#FFFFFF"
2085 fill2 "#FFFFFF"
2086 outline "#000000"
2087 ]
2088 LabelGraphics
2089 [
2090 text "New Objects"
2091 outline "#000000"
2092 fill "#FFFFFF"
2093 fontSize 16
2094 fontName "Monospace"
2095 autoSizePolicy "node_width"
2096 anchor "t"
2097 borderDistance 0.0
2098 ]
2099 LabelGraphics
2100 [
2101 text "
2102 "
2103 fontSize 14
2104 fontName "Consolas"
2105 alignment "left"
2106 anchor "tl"
2107 borderDistance 6
2108 ]
2109 ]
2110 edge
2111 [
2112 source 4
2113 target 7
2114 graphics
2115 [
2116 fill "#000000"
2117 targetArrow "standard"
2118 ]
2119 LabelGraphics
2120 [
2121 text "incomingTransitions reference Vertex"
2122 fontSize 14
2123 fontName "Consolas"
2124 configuration "AutoFlippingLabel"
2125 model "six_pos"
2126 position "thead"
2127 ]
2128 ]
2129 edge
2130 [
2131 source 5
2132 target 7
2133 graphics
2134 [
2135 fill "#000000"
2136 width 3
2137 targetArrow "standard"
2138 ]
2139 LabelGraphics
2140 [
2141 text "outgoingTransitions reference Vertex"
2142 fontSize 14
2143 fontName "Consolas"
2144 configuration "AutoFlippingLabel"
2145 model "six_pos"
2146 position "thead"
2147 ]
2148 ]
2149 edge
2150 [
2151 source 3
2152 target 4
2153 graphics
2154 [
2155 fill "#000000"
2156 width 3
2157 targetArrow "standard"
2158 ]
2159 LabelGraphics
2160 [
2161 text "vertices reference Region"
2162 fontSize 14
2163 fontName "Consolas"
2164 configuration "AutoFlippingLabel"
2165 model "six_pos"
2166 position "thead"
2167 ]
2168 ]
2169 edge
2170 [
2171 source 3
2172 target 5
2173 graphics
2174 [
2175 fill "#000000"
2176 width 3
2177 targetArrow "standard"
2178 ]
2179 LabelGraphics
2180 [
2181 text "vertices reference Region"
2182 fontSize 14
2183 fontName "Consolas"
2184 configuration "AutoFlippingLabel"
2185 model "six_pos"
2186 position "thead"
2187 ]
2188 ]
2189 edge
2190 [
2191 source 3
2192 target 6
2193 graphics
2194 [
2195 fill "#000000"
2196 width 3
2197 targetArrow "standard"
2198 ]
2199 LabelGraphics
2200 [
2201 text "vertices reference Region"
2202 fontSize 14
2203 fontName "Consolas"
2204 configuration "AutoFlippingLabel"
2205 model "six_pos"
2206 position "thead"
2207 ]
2208 ]
2209 edge
2210 [
2211 source 7
2212 target 4
2213 graphics
2214 [
2215 fill "#000000"
2216 targetArrow "standard"
2217 ]
2218 LabelGraphics
2219 [
2220 text "target reference Transition"
2221 fontSize 14
2222 fontName "Consolas"
2223 configuration "AutoFlippingLabel"
2224 model "six_pos"
2225 position "thead"
2226 ]
2227 ]
2228 edge
2229 [
2230 source 7
2231 target 5
2232 graphics
2233 [
2234 fill "#000000"
2235 targetArrow "standard"
2236 ]
2237 LabelGraphics
2238 [
2239 text "source reference Transition"
2240 fontSize 14
2241 fontName "Consolas"
2242 configuration "AutoFlippingLabel"
2243 model "six_pos"
2244 position "thead"
2245 ]
2246 ]
2247 edge
2248 [
2249 source 0
2250 target 3
2251 graphics
2252 [
2253 fill "#000000"
2254 width 3
2255 targetArrow "standard"
2256 ]
2257 LabelGraphics
2258 [
2259 text "regions reference CompositeElement"
2260 fontSize 14
2261 fontName "Consolas"
2262 configuration "AutoFlippingLabel"
2263 model "six_pos"
2264 position "thead"
2265 ]
2266 ]
2267]
2268graph
2269[
2270 node
2271 [
2272 id 0
2273 graphics
2274 [
2275 w 192.50000000000003
2276 h 54
2277 type "rectangle"
2278 fill "#FFFFFF"
2279 fill2 "#FFFFFF"
2280 outline "#000000"
2281 ]
2282 LabelGraphics
2283 [
2284 text "o 1"
2285 outline "#000000"
2286 fill "#FFFFFF"
2287 fontSize 16
2288 fontName "Monospace"
2289 autoSizePolicy "node_width"
2290 anchor "t"
2291 borderDistance 0.0
2292 ]
2293 LabelGraphics
2294 [
2295 text "
2296 Model class DefinedPart
2297 Model class
2298 "
2299 fontSize 14
2300 fontName "Consolas"
2301 alignment "left"
2302 anchor "tl"
2303 borderDistance 6
2304 ]
2305 ]
2306
2307 node
2308 [
2309 id 1
2310 graphics
2311 [
2312 w 41.800000000000004
2313 h 26
2314 type "rectangle"
2315 fill "#FFFFFF"
2316 fill2 "#FFFFFF"
2317 outline "#000000"
2318 ]
2319 LabelGraphics
2320 [
2321 text "true"
2322 outline "#000000"
2323 fill "#FFFFFF"
2324 fontSize 16
2325 fontName "Monospace"
2326 autoSizePolicy "node_width"
2327 anchor "t"
2328 borderDistance 0.0
2329 ]
2330 LabelGraphics
2331 [
2332 text "
2333 "
2334 fontSize 14
2335 fontName "Consolas"
2336 alignment "left"
2337 anchor "tl"
2338 borderDistance 6
2339 ]
2340 ]
2341
2342 node
2343 [
2344 id 2
2345 graphics
2346 [
2347 w 50.6
2348 h 26
2349 type "rectangle"
2350 fill "#FFFFFF"
2351 fill2 "#FFFFFF"
2352 outline "#000000"
2353 ]
2354 LabelGraphics
2355 [
2356 text "false"
2357 outline "#000000"
2358 fill "#FFFFFF"
2359 fontSize 16
2360 fontName "Monospace"
2361 autoSizePolicy "node_width"
2362 anchor "t"
2363 borderDistance 0.0
2364 ]
2365 LabelGraphics
2366 [
2367 text "
2368 "
2369 fontSize 14
2370 fontName "Consolas"
2371 alignment "left"
2372 anchor "tl"
2373 borderDistance 6
2374 ]
2375 ]
2376
2377 node
2378 [
2379 id 3
2380 graphics
2381 [
2382 w 123.20000000000002
2383 h 54
2384 type "rectangle"
2385 fill "#FFFFFF"
2386 fill2 "#FFFFFF"
2387 outline "#000000"
2388 ]
2389 LabelGraphics
2390 [
2391 text "null"
2392 outline "#000000"
2393 fill "#FFFFFF"
2394 fontSize 16
2395 fontName "Monospace"
2396 autoSizePolicy "node_width"
2397 anchor "t"
2398 borderDistance 0.0
2399 ]
2400 LabelGraphics
2401 [
2402 text "
2403 FSObject class
2404 Dir class
2405 "
2406 fontSize 14
2407 fontName "Consolas"
2408 alignment "left"
2409 anchor "tl"
2410 borderDistance 6
2411 ]
2412 ]
2413
2414 node
2415 [
2416 id 4
2417 graphics
2418 [
2419 w 138.60000000000002
2420 h 40
2421 type "rectangle"
2422 fill "#FFFFFF"
2423 fill2 "#FFFFFF"
2424 outline "#000000"
2425 ]
2426 LabelGraphics
2427 [
2428 text "null"
2429 outline "#000000"
2430 fill "#FFFFFF"
2431 fontSize 16
2432 fontName "Monospace"
2433 autoSizePolicy "node_width"
2434 anchor "t"
2435 borderDistance 0.0
2436 ]
2437 LabelGraphics
2438 [
2439 text "
2440 FileSystem class
2441 "
2442 fontSize 14
2443 fontName "Consolas"
2444 alignment "left"
2445 anchor "tl"
2446 borderDistance 6
2447 ]
2448 ]
2449
2450 node
2451 [
2452 id 5
2453 graphics
2454 [
2455 w 123.20000000000002
2456 h 54
2457 type "rectangle"
2458 fill "#FFFFFF"
2459 fill2 "#FFFFFF"
2460 outline "#000000"
2461 ]
2462 LabelGraphics
2463 [
2464 text "null"
2465 outline "#000000"
2466 fill "#FFFFFF"
2467 fontSize 16
2468 fontName "Monospace"
2469 autoSizePolicy "node_width"
2470 anchor "t"
2471 borderDistance 0.0
2472 ]
2473 LabelGraphics
2474 [
2475 text "
2476 FSObject class
2477 Dir class
2478 "
2479 fontSize 14
2480 fontName "Consolas"
2481 alignment "left"
2482 anchor "tl"
2483 borderDistance 6
2484 ]
2485 ]
2486
2487 node
2488 [
2489 id 6
2490 graphics
2491 [
2492 w 123.20000000000002
2493 h 54
2494 type "rectangle"
2495 fill "#FFFFFF"
2496 fill2 "#FFFFFF"
2497 outline "#000000"
2498 ]
2499 LabelGraphics
2500 [
2501 text "null"
2502 outline "#000000"
2503 fill "#FFFFFF"
2504 fontSize 16
2505 fontName "Monospace"
2506 autoSizePolicy "node_width"
2507 anchor "t"
2508 borderDistance 0.0
2509 ]
2510 LabelGraphics
2511 [
2512 text "
2513 FSObject class
2514 Dir class
2515 "
2516 fontSize 14
2517 fontName "Consolas"
2518 alignment "left"
2519 anchor "tl"
2520 borderDistance 6
2521 ]
2522 ]
2523
2524 node
2525 [
2526 id 7
2527 graphics
2528 [
2529 w 112.2
2530 h 26
2531 type "rectangle"
2532 fill "#FFFFFF"
2533 fill2 "#FFFFFF"
2534 outline "#000000"
2535 ]
2536 LabelGraphics
2537 [
2538 text "New Integers"
2539 outline "#000000"
2540 fill "#FFFFFF"
2541 fontSize 16
2542 fontName "Monospace"
2543 autoSizePolicy "node_width"
2544 anchor "t"
2545 borderDistance 0.0
2546 ]
2547 LabelGraphics
2548 [
2549 text "
2550 "
2551 fontSize 14
2552 fontName "Consolas"
2553 alignment "left"
2554 anchor "tl"
2555 borderDistance 6
2556 ]
2557 ]
2558
2559 node
2560 [
2561 id 8
2562 graphics
2563 [
2564 w 85.80000000000001
2565 h 26
2566 type "rectangle"
2567 fill "#FFFFFF"
2568 fill2 "#FFFFFF"
2569 outline "#000000"
2570 ]
2571 LabelGraphics
2572 [
2573 text "New Reals"
2574 outline "#000000"
2575 fill "#FFFFFF"
2576 fontSize 16
2577 fontName "Monospace"
2578 autoSizePolicy "node_width"
2579 anchor "t"
2580 borderDistance 0.0
2581 ]
2582 LabelGraphics
2583 [
2584 text "
2585 "
2586 fontSize 14
2587 fontName "Consolas"
2588 alignment "left"
2589 anchor "tl"
2590 borderDistance 6
2591 ]
2592 ]
2593
2594 node
2595 [
2596 id 9
2597 graphics
2598 [
2599 w 103.4
2600 h 26
2601 type "rectangle"
2602 fill "#FFFFFF"
2603 fill2 "#FFFFFF"
2604 outline "#000000"
2605 ]
2606 LabelGraphics
2607 [
2608 text "New Strings"
2609 outline "#000000"
2610 fill "#FFFFFF"
2611 fontSize 16
2612 fontName "Monospace"
2613 autoSizePolicy "node_width"
2614 anchor "t"
2615 borderDistance 0.0
2616 ]
2617 LabelGraphics
2618 [
2619 text "
2620 "
2621 fontSize 14
2622 fontName "Consolas"
2623 alignment "left"
2624 anchor "tl"
2625 borderDistance 6
2626 ]
2627 ]
2628
2629 node
2630 [
2631 id 10
2632 graphics
2633 [
2634 w 103.4
2635 h 26
2636 type "rectangle"
2637 fill "#FFFFFF"
2638 fill2 "#FFFFFF"
2639 outline "#000000"
2640 ]
2641 LabelGraphics
2642 [
2643 text "New Objects"
2644 outline "#000000"
2645 fill "#FFFFFF"
2646 fontSize 16
2647 fontName "Monospace"
2648 autoSizePolicy "node_width"
2649 anchor "t"
2650 borderDistance 0.0
2651 ]
2652 LabelGraphics
2653 [
2654 text "
2655 "
2656 fontSize 14
2657 fontName "Consolas"
2658 alignment "left"
2659 anchor "tl"
2660 borderDistance 6
2661 ]
2662 ]
2663 edge
2664 [
2665 source 4
2666 target 6
2667 graphics
2668 [
2669 fill "#000000"
2670 width 3
2671 targetArrow "standard"
2672 ]
2673 LabelGraphics
2674 [
2675 text "root reference FileSystem"
2676 fontSize 14
2677 fontName "Consolas"
2678 configuration "AutoFlippingLabel"
2679 model "six_pos"
2680 position "thead"
2681 ]
2682 ]
2683 edge
2684 [
2685 source 0
2686 target 4
2687 graphics
2688 [
2689 fill "#000000"
2690 width 3
2691 targetArrow "standard"
2692 ]
2693 LabelGraphics
2694 [
2695 text "filesystems reference Model"
2696 fontSize 14
2697 fontName "Consolas"
2698 configuration "AutoFlippingLabel"
2699 model "six_pos"
2700 position "thead"
2701 ]
2702 ]
2703 edge
2704 [
2705 source 0
2706 target 3
2707 graphics
2708 [
2709 fill "#000000"
2710 width 3
2711 targetArrow "standard"
2712 ]
2713 LabelGraphics
2714 [
2715 text "otherFSObjects reference Model"
2716 fontSize 14
2717 fontName "Consolas"
2718 configuration "AutoFlippingLabel"
2719 model "six_pos"
2720 position "thead"
2721 ]
2722 ]
2723 edge
2724 [
2725 source 0
2726 target 5
2727 graphics
2728 [
2729 fill "#000000"
2730 width 3
2731 targetArrow "standard"
2732 ]
2733 LabelGraphics
2734 [
2735 text "otherFSObjects reference Model"
2736 fontSize 14
2737 fontName "Consolas"
2738 configuration "AutoFlippingLabel"
2739 model "six_pos"
2740 position "thead"
2741 ]
2742 ]
2743]
2744graph
2745[
2746 node
2747 [
2748 id 0
2749 graphics
2750 [
2751 w 192.50000000000003
2752 h 54
2753 type "rectangle"
2754 fill "#FFFFFF"
2755 fill2 "#FFFFFF"
2756 outline "#000000"
2757 ]
2758 LabelGraphics
2759 [
2760 text "o 1"
2761 outline "#000000"
2762 fill "#FFFFFF"
2763 fontSize 16
2764 fontName "Monospace"
2765 autoSizePolicy "node_width"
2766 anchor "t"
2767 borderDistance 0.0
2768 ]
2769 LabelGraphics
2770 [
2771 text "
2772 Model class DefinedPart
2773 Model class
2774 "
2775 fontSize 14
2776 fontName "Consolas"
2777 alignment "left"
2778 anchor "tl"
2779 borderDistance 6
2780 ]
2781 ]
2782
2783 node
2784 [
2785 id 1
2786 graphics
2787 [
2788 w 41.800000000000004
2789 h 26
2790 type "rectangle"
2791 fill "#FFFFFF"
2792 fill2 "#FFFFFF"
2793 outline "#000000"
2794 ]
2795 LabelGraphics
2796 [
2797 text "true"
2798 outline "#000000"
2799 fill "#FFFFFF"
2800 fontSize 16
2801 fontName "Monospace"
2802 autoSizePolicy "node_width"
2803 anchor "t"
2804 borderDistance 0.0
2805 ]
2806 LabelGraphics
2807 [
2808 text "
2809 "
2810 fontSize 14
2811 fontName "Consolas"
2812 alignment "left"
2813 anchor "tl"
2814 borderDistance 6
2815 ]
2816 ]
2817
2818 node
2819 [
2820 id 2
2821 graphics
2822 [
2823 w 50.6
2824 h 26
2825 type "rectangle"
2826 fill "#FFFFFF"
2827 fill2 "#FFFFFF"
2828 outline "#000000"
2829 ]
2830 LabelGraphics
2831 [
2832 text "false"
2833 outline "#000000"
2834 fill "#FFFFFF"
2835 fontSize 16
2836 fontName "Monospace"
2837 autoSizePolicy "node_width"
2838 anchor "t"
2839 borderDistance 0.0
2840 ]
2841 LabelGraphics
2842 [
2843 text "
2844 "
2845 fontSize 14
2846 fontName "Consolas"
2847 alignment "left"
2848 anchor "tl"
2849 borderDistance 6
2850 ]
2851 ]
2852
2853 node
2854 [
2855 id 3
2856 graphics
2857 [
2858 w 123.20000000000002
2859 h 54
2860 type "rectangle"
2861 fill "#FFFFFF"
2862 fill2 "#FFFFFF"
2863 outline "#000000"
2864 ]
2865 LabelGraphics
2866 [
2867 text "null"
2868 outline "#000000"
2869 fill "#FFFFFF"
2870 fontSize 16
2871 fontName "Monospace"
2872 autoSizePolicy "node_width"
2873 anchor "t"
2874 borderDistance 0.0
2875 ]
2876 LabelGraphics
2877 [
2878 text "
2879 FSObject class
2880 File class
2881 "
2882 fontSize 14
2883 fontName "Consolas"
2884 alignment "left"
2885 anchor "tl"
2886 borderDistance 6
2887 ]
2888 ]
2889
2890 node
2891 [
2892 id 4
2893 graphics
2894 [
2895 w 138.60000000000002
2896 h 40
2897 type "rectangle"
2898 fill "#FFFFFF"
2899 fill2 "#FFFFFF"
2900 outline "#000000"
2901 ]
2902 LabelGraphics
2903 [
2904 text "null"
2905 outline "#000000"
2906 fill "#FFFFFF"
2907 fontSize 16
2908 fontName "Monospace"
2909 autoSizePolicy "node_width"
2910 anchor "t"
2911 borderDistance 0.0
2912 ]
2913 LabelGraphics
2914 [
2915 text "
2916 FileSystem class
2917 "
2918 fontSize 14
2919 fontName "Consolas"
2920 alignment "left"
2921 anchor "tl"
2922 borderDistance 6
2923 ]
2924 ]
2925
2926 node
2927 [
2928 id 5
2929 graphics
2930 [
2931 w 123.20000000000002
2932 h 54
2933 type "rectangle"
2934 fill "#FFFFFF"
2935 fill2 "#FFFFFF"
2936 outline "#000000"
2937 ]
2938 LabelGraphics
2939 [
2940 text "null"
2941 outline "#000000"
2942 fill "#FFFFFF"
2943 fontSize 16
2944 fontName "Monospace"
2945 autoSizePolicy "node_width"
2946 anchor "t"
2947 borderDistance 0.0
2948 ]
2949 LabelGraphics
2950 [
2951 text "
2952 FSObject class
2953 File class
2954 "
2955 fontSize 14
2956 fontName "Consolas"
2957 alignment "left"
2958 anchor "tl"
2959 borderDistance 6
2960 ]
2961 ]
2962
2963 node
2964 [
2965 id 6
2966 graphics
2967 [
2968 w 123.20000000000002
2969 h 54
2970 type "rectangle"
2971 fill "#FFFFFF"
2972 fill2 "#FFFFFF"
2973 outline "#000000"
2974 ]
2975 LabelGraphics
2976 [
2977 text "null"
2978 outline "#000000"
2979 fill "#FFFFFF"
2980 fontSize 16
2981 fontName "Monospace"
2982 autoSizePolicy "node_width"
2983 anchor "t"
2984 borderDistance 0.0
2985 ]
2986 LabelGraphics
2987 [
2988 text "
2989 FSObject class
2990 Dir class
2991 "
2992 fontSize 14
2993 fontName "Consolas"
2994 alignment "left"
2995 anchor "tl"
2996 borderDistance 6
2997 ]
2998 ]
2999
3000 node
3001 [
3002 id 7
3003 graphics
3004 [
3005 w 112.2
3006 h 26
3007 type "rectangle"
3008 fill "#FFFFFF"
3009 fill2 "#FFFFFF"
3010 outline "#000000"
3011 ]
3012 LabelGraphics
3013 [
3014 text "New Integers"
3015 outline "#000000"
3016 fill "#FFFFFF"
3017 fontSize 16
3018 fontName "Monospace"
3019 autoSizePolicy "node_width"
3020 anchor "t"
3021 borderDistance 0.0
3022 ]
3023 LabelGraphics
3024 [
3025 text "
3026 "
3027 fontSize 14
3028 fontName "Consolas"
3029 alignment "left"
3030 anchor "tl"
3031 borderDistance 6
3032 ]
3033 ]
3034
3035 node
3036 [
3037 id 8
3038 graphics
3039 [
3040 w 85.80000000000001
3041 h 26
3042 type "rectangle"
3043 fill "#FFFFFF"
3044 fill2 "#FFFFFF"
3045 outline "#000000"
3046 ]
3047 LabelGraphics
3048 [
3049 text "New Reals"
3050 outline "#000000"
3051 fill "#FFFFFF"
3052 fontSize 16
3053 fontName "Monospace"
3054 autoSizePolicy "node_width"
3055 anchor "t"
3056 borderDistance 0.0
3057 ]
3058 LabelGraphics
3059 [
3060 text "
3061 "
3062 fontSize 14
3063 fontName "Consolas"
3064 alignment "left"
3065 anchor "tl"
3066 borderDistance 6
3067 ]
3068 ]
3069
3070 node
3071 [
3072 id 9
3073 graphics
3074 [
3075 w 103.4
3076 h 26
3077 type "rectangle"
3078 fill "#FFFFFF"
3079 fill2 "#FFFFFF"
3080 outline "#000000"
3081 ]
3082 LabelGraphics
3083 [
3084 text "New Strings"
3085 outline "#000000"
3086 fill "#FFFFFF"
3087 fontSize 16
3088 fontName "Monospace"
3089 autoSizePolicy "node_width"
3090 anchor "t"
3091 borderDistance 0.0
3092 ]
3093 LabelGraphics
3094 [
3095 text "
3096 "
3097 fontSize 14
3098 fontName "Consolas"
3099 alignment "left"
3100 anchor "tl"
3101 borderDistance 6
3102 ]
3103 ]
3104
3105 node
3106 [
3107 id 10
3108 graphics
3109 [
3110 w 103.4
3111 h 26
3112 type "rectangle"
3113 fill "#FFFFFF"
3114 fill2 "#FFFFFF"
3115 outline "#000000"
3116 ]
3117 LabelGraphics
3118 [
3119 text "New Objects"
3120 outline "#000000"
3121 fill "#FFFFFF"
3122 fontSize 16
3123 fontName "Monospace"
3124 autoSizePolicy "node_width"
3125 anchor "t"
3126 borderDistance 0.0
3127 ]
3128 LabelGraphics
3129 [
3130 text "
3131 "
3132 fontSize 14
3133 fontName "Consolas"
3134 alignment "left"
3135 anchor "tl"
3136 borderDistance 6
3137 ]
3138 ]
3139 edge
3140 [
3141 source 4
3142 target 6
3143 graphics
3144 [
3145 fill "#000000"
3146 width 3
3147 targetArrow "standard"
3148 ]
3149 LabelGraphics
3150 [
3151 text "root reference FileSystem"
3152 fontSize 14
3153 fontName "Consolas"
3154 configuration "AutoFlippingLabel"
3155 model "six_pos"
3156 position "thead"
3157 ]
3158 ]
3159 edge
3160 [
3161 source 0
3162 target 4
3163 graphics
3164 [
3165 fill "#000000"
3166 width 3
3167 targetArrow "standard"
3168 ]
3169 LabelGraphics
3170 [
3171 text "filesystems reference Model"
3172 fontSize 14
3173 fontName "Consolas"
3174 configuration "AutoFlippingLabel"
3175 model "six_pos"
3176 position "thead"
3177 ]
3178 ]
3179 edge
3180 [
3181 source 0
3182 target 3
3183 graphics
3184 [
3185 fill "#000000"
3186 width 3
3187 targetArrow "standard"
3188 ]
3189 LabelGraphics
3190 [
3191 text "otherFSObjects reference Model"
3192 fontSize 14
3193 fontName "Consolas"
3194 configuration "AutoFlippingLabel"
3195 model "six_pos"
3196 position "thead"
3197 ]
3198 ]
3199 edge
3200 [
3201 source 0
3202 target 5
3203 graphics
3204 [
3205 fill "#000000"
3206 width 3
3207 targetArrow "standard"
3208 ]
3209 LabelGraphics
3210 [
3211 text "otherFSObjects reference Model"
3212 fontSize 14
3213 fontName "Consolas"
3214 configuration "AutoFlippingLabel"
3215 model "six_pos"
3216 position "thead"
3217 ]
3218 ]
3219]
3220graph
3221[
3222 node
3223 [
3224 id 0
3225 graphics
3226 [
3227 w 192.50000000000003
3228 h 54
3229 type "rectangle"
3230 fill "#FFFFFF"
3231 fill2 "#FFFFFF"
3232 outline "#000000"
3233 ]
3234 LabelGraphics
3235 [
3236 text "o 1"
3237 outline "#000000"
3238 fill "#FFFFFF"
3239 fontSize 16
3240 fontName "Monospace"
3241 autoSizePolicy "node_width"
3242 anchor "t"
3243 borderDistance 0.0
3244 ]
3245 LabelGraphics
3246 [
3247 text "
3248 Model class DefinedPart
3249 Model class
3250 "
3251 fontSize 14
3252 fontName "Consolas"
3253 alignment "left"
3254 anchor "tl"
3255 borderDistance 6
3256 ]
3257 ]
3258
3259 node
3260 [
3261 id 1
3262 graphics
3263 [
3264 w 41.800000000000004
3265 h 26
3266 type "rectangle"
3267 fill "#FFFFFF"
3268 fill2 "#FFFFFF"
3269 outline "#000000"
3270 ]
3271 LabelGraphics
3272 [
3273 text "true"
3274 outline "#000000"
3275 fill "#FFFFFF"
3276 fontSize 16
3277 fontName "Monospace"
3278 autoSizePolicy "node_width"
3279 anchor "t"
3280 borderDistance 0.0
3281 ]
3282 LabelGraphics
3283 [
3284 text "
3285 "
3286 fontSize 14
3287 fontName "Consolas"
3288 alignment "left"
3289 anchor "tl"
3290 borderDistance 6
3291 ]
3292 ]
3293
3294 node
3295 [
3296 id 2
3297 graphics
3298 [
3299 w 50.6
3300 h 26
3301 type "rectangle"
3302 fill "#FFFFFF"
3303 fill2 "#FFFFFF"
3304 outline "#000000"
3305 ]
3306 LabelGraphics
3307 [
3308 text "false"
3309 outline "#000000"
3310 fill "#FFFFFF"
3311 fontSize 16
3312 fontName "Monospace"
3313 autoSizePolicy "node_width"
3314 anchor "t"
3315 borderDistance 0.0
3316 ]
3317 LabelGraphics
3318 [
3319 text "
3320 "
3321 fontSize 14
3322 fontName "Consolas"
3323 alignment "left"
3324 anchor "tl"
3325 borderDistance 6
3326 ]
3327 ]
3328
3329 node
3330 [
3331 id 3
3332 graphics
3333 [
3334 w 123.20000000000002
3335 h 54
3336 type "rectangle"
3337 fill "#FFFFFF"
3338 fill2 "#FFFFFF"
3339 outline "#000000"
3340 ]
3341 LabelGraphics
3342 [
3343 text "null"
3344 outline "#000000"
3345 fill "#FFFFFF"
3346 fontSize 16
3347 fontName "Monospace"
3348 autoSizePolicy "node_width"
3349 anchor "t"
3350 borderDistance 0.0
3351 ]
3352 LabelGraphics
3353 [
3354 text "
3355 FSObject class
3356 File class
3357 "
3358 fontSize 14
3359 fontName "Consolas"
3360 alignment "left"
3361 anchor "tl"
3362 borderDistance 6
3363 ]
3364 ]
3365
3366 node
3367 [
3368 id 4
3369 graphics
3370 [
3371 w 138.60000000000002
3372 h 40
3373 type "rectangle"
3374 fill "#FFFFFF"
3375 fill2 "#FFFFFF"
3376 outline "#000000"
3377 ]
3378 LabelGraphics
3379 [
3380 text "null"
3381 outline "#000000"
3382 fill "#FFFFFF"
3383 fontSize 16
3384 fontName "Monospace"
3385 autoSizePolicy "node_width"
3386 anchor "t"
3387 borderDistance 0.0
3388 ]
3389 LabelGraphics
3390 [
3391 text "
3392 FileSystem class
3393 "
3394 fontSize 14
3395 fontName "Consolas"
3396 alignment "left"
3397 anchor "tl"
3398 borderDistance 6
3399 ]
3400 ]
3401
3402 node
3403 [
3404 id 5
3405 graphics
3406 [
3407 w 123.20000000000002
3408 h 54
3409 type "rectangle"
3410 fill "#FFFFFF"
3411 fill2 "#FFFFFF"
3412 outline "#000000"
3413 ]
3414 LabelGraphics
3415 [
3416 text "null"
3417 outline "#000000"
3418 fill "#FFFFFF"
3419 fontSize 16
3420 fontName "Monospace"
3421 autoSizePolicy "node_width"
3422 anchor "t"
3423 borderDistance 0.0
3424 ]
3425 LabelGraphics
3426 [
3427 text "
3428 FSObject class
3429 Dir class
3430 "
3431 fontSize 14
3432 fontName "Consolas"
3433 alignment "left"
3434 anchor "tl"
3435 borderDistance 6
3436 ]
3437 ]
3438
3439 node
3440 [
3441 id 6
3442 graphics
3443 [
3444 w 123.20000000000002
3445 h 54
3446 type "rectangle"
3447 fill "#FFFFFF"
3448 fill2 "#FFFFFF"
3449 outline "#000000"
3450 ]
3451 LabelGraphics
3452 [
3453 text "null"
3454 outline "#000000"
3455 fill "#FFFFFF"
3456 fontSize 16
3457 fontName "Monospace"
3458 autoSizePolicy "node_width"
3459 anchor "t"
3460 borderDistance 0.0
3461 ]
3462 LabelGraphics
3463 [
3464 text "
3465 FSObject class
3466 Dir class
3467 "
3468 fontSize 14
3469 fontName "Consolas"
3470 alignment "left"
3471 anchor "tl"
3472 borderDistance 6
3473 ]
3474 ]
3475
3476 node
3477 [
3478 id 7
3479 graphics
3480 [
3481 w 112.2
3482 h 26
3483 type "rectangle"
3484 fill "#FFFFFF"
3485 fill2 "#FFFFFF"
3486 outline "#000000"
3487 ]
3488 LabelGraphics
3489 [
3490 text "New Integers"
3491 outline "#000000"
3492 fill "#FFFFFF"
3493 fontSize 16
3494 fontName "Monospace"
3495 autoSizePolicy "node_width"
3496 anchor "t"
3497 borderDistance 0.0
3498 ]
3499 LabelGraphics
3500 [
3501 text "
3502 "
3503 fontSize 14
3504 fontName "Consolas"
3505 alignment "left"
3506 anchor "tl"
3507 borderDistance 6
3508 ]
3509 ]
3510
3511 node
3512 [
3513 id 8
3514 graphics
3515 [
3516 w 85.80000000000001
3517 h 26
3518 type "rectangle"
3519 fill "#FFFFFF"
3520 fill2 "#FFFFFF"
3521 outline "#000000"
3522 ]
3523 LabelGraphics
3524 [
3525 text "New Reals"
3526 outline "#000000"
3527 fill "#FFFFFF"
3528 fontSize 16
3529 fontName "Monospace"
3530 autoSizePolicy "node_width"
3531 anchor "t"
3532 borderDistance 0.0
3533 ]
3534 LabelGraphics
3535 [
3536 text "
3537 "
3538 fontSize 14
3539 fontName "Consolas"
3540 alignment "left"
3541 anchor "tl"
3542 borderDistance 6
3543 ]
3544 ]
3545
3546 node
3547 [
3548 id 9
3549 graphics
3550 [
3551 w 103.4
3552 h 26
3553 type "rectangle"
3554 fill "#FFFFFF"
3555 fill2 "#FFFFFF"
3556 outline "#000000"
3557 ]
3558 LabelGraphics
3559 [
3560 text "New Strings"
3561 outline "#000000"
3562 fill "#FFFFFF"
3563 fontSize 16
3564 fontName "Monospace"
3565 autoSizePolicy "node_width"
3566 anchor "t"
3567 borderDistance 0.0
3568 ]
3569 LabelGraphics
3570 [
3571 text "
3572 "
3573 fontSize 14
3574 fontName "Consolas"
3575 alignment "left"
3576 anchor "tl"
3577 borderDistance 6
3578 ]
3579 ]
3580
3581 node
3582 [
3583 id 10
3584 graphics
3585 [
3586 w 103.4
3587 h 26
3588 type "rectangle"
3589 fill "#FFFFFF"
3590 fill2 "#FFFFFF"
3591 outline "#000000"
3592 ]
3593 LabelGraphics
3594 [
3595 text "New Objects"
3596 outline "#000000"
3597 fill "#FFFFFF"
3598 fontSize 16
3599 fontName "Monospace"
3600 autoSizePolicy "node_width"
3601 anchor "t"
3602 borderDistance 0.0
3603 ]
3604 LabelGraphics
3605 [
3606 text "
3607 "
3608 fontSize 14
3609 fontName "Consolas"
3610 alignment "left"
3611 anchor "tl"
3612 borderDistance 6
3613 ]
3614 ]
3615 edge
3616 [
3617 source 4
3618 target 6
3619 graphics
3620 [
3621 fill "#000000"
3622 width 3
3623 targetArrow "standard"
3624 ]
3625 LabelGraphics
3626 [
3627 text "root reference FileSystem"
3628 fontSize 14
3629 fontName "Consolas"
3630 configuration "AutoFlippingLabel"
3631 model "six_pos"
3632 position "thead"
3633 ]
3634 ]
3635 edge
3636 [
3637 source 0
3638 target 4
3639 graphics
3640 [
3641 fill "#000000"
3642 width 3
3643 targetArrow "standard"
3644 ]
3645 LabelGraphics
3646 [
3647 text "filesystems reference Model"
3648 fontSize 14
3649 fontName "Consolas"
3650 configuration "AutoFlippingLabel"
3651 model "six_pos"
3652 position "thead"
3653 ]
3654 ]
3655 edge
3656 [
3657 source 0
3658 target 3
3659 graphics
3660 [
3661 fill "#000000"
3662 width 3
3663 targetArrow "standard"
3664 ]
3665 LabelGraphics
3666 [
3667 text "otherFSObjects reference Model"
3668 fontSize 14
3669 fontName "Consolas"
3670 configuration "AutoFlippingLabel"
3671 model "six_pos"
3672 position "thead"
3673 ]
3674 ]
3675 edge
3676 [
3677 source 0
3678 target 5
3679 graphics
3680 [
3681 fill "#000000"
3682 width 3
3683 targetArrow "standard"
3684 ]
3685 LabelGraphics
3686 [
3687 text "otherFSObjects reference Model"
3688 fontSize 14
3689 fontName "Consolas"
3690 configuration "AutoFlippingLabel"
3691 model "six_pos"
3692 position "thead"
3693 ]
3694 ]
3695]
3696graph
3697[
3698 node
3699 [
3700 id 0
3701 graphics
3702 [
3703 w 192.50000000000003
3704 h 54
3705 type "rectangle"
3706 fill "#FFFFFF"
3707 fill2 "#FFFFFF"
3708 outline "#000000"
3709 ]
3710 LabelGraphics
3711 [
3712 text "o 1"
3713 outline "#000000"
3714 fill "#FFFFFF"
3715 fontSize 16
3716 fontName "Monospace"
3717 autoSizePolicy "node_width"
3718 anchor "t"
3719 borderDistance 0.0
3720 ]
3721 LabelGraphics
3722 [
3723 text "
3724 Model class DefinedPart
3725 Model class
3726 "
3727 fontSize 14
3728 fontName "Consolas"
3729 alignment "left"
3730 anchor "tl"
3731 borderDistance 6
3732 ]
3733 ]
3734
3735 node
3736 [
3737 id 1
3738 graphics
3739 [
3740 w 41.800000000000004
3741 h 26
3742 type "rectangle"
3743 fill "#FFFFFF"
3744 fill2 "#FFFFFF"
3745 outline "#000000"
3746 ]
3747 LabelGraphics
3748 [
3749 text "true"
3750 outline "#000000"
3751 fill "#FFFFFF"
3752 fontSize 16
3753 fontName "Monospace"
3754 autoSizePolicy "node_width"
3755 anchor "t"
3756 borderDistance 0.0
3757 ]
3758 LabelGraphics
3759 [
3760 text "
3761 "
3762 fontSize 14
3763 fontName "Consolas"
3764 alignment "left"
3765 anchor "tl"
3766 borderDistance 6
3767 ]
3768 ]
3769
3770 node
3771 [
3772 id 2
3773 graphics
3774 [
3775 w 50.6
3776 h 26
3777 type "rectangle"
3778 fill "#FFFFFF"
3779 fill2 "#FFFFFF"
3780 outline "#000000"
3781 ]
3782 LabelGraphics
3783 [
3784 text "false"
3785 outline "#000000"
3786 fill "#FFFFFF"
3787 fontSize 16
3788 fontName "Monospace"
3789 autoSizePolicy "node_width"
3790 anchor "t"
3791 borderDistance 0.0
3792 ]
3793 LabelGraphics
3794 [
3795 text "
3796 "
3797 fontSize 14
3798 fontName "Consolas"
3799 alignment "left"
3800 anchor "tl"
3801 borderDistance 6
3802 ]
3803 ]
3804
3805 node
3806 [
3807 id 3
3808 graphics
3809 [
3810 w 138.60000000000002
3811 h 40
3812 type "rectangle"
3813 fill "#FFFFFF"
3814 fill2 "#FFFFFF"
3815 outline "#000000"
3816 ]
3817 LabelGraphics
3818 [
3819 text "null"
3820 outline "#000000"
3821 fill "#FFFFFF"
3822 fontSize 16
3823 fontName "Monospace"
3824 autoSizePolicy "node_width"
3825 anchor "t"
3826 borderDistance 0.0
3827 ]
3828 LabelGraphics
3829 [
3830 text "
3831 FileSystem class
3832 "
3833 fontSize 14
3834 fontName "Consolas"
3835 alignment "left"
3836 anchor "tl"
3837 borderDistance 6
3838 ]
3839 ]
3840
3841 node
3842 [
3843 id 4
3844 graphics
3845 [
3846 w 123.20000000000002
3847 h 54
3848 type "rectangle"
3849 fill "#FFFFFF"
3850 fill2 "#FFFFFF"
3851 outline "#000000"
3852 ]
3853 LabelGraphics
3854 [
3855 text "null"
3856 outline "#000000"
3857 fill "#FFFFFF"
3858 fontSize 16
3859 fontName "Monospace"
3860 autoSizePolicy "node_width"
3861 anchor "t"
3862 borderDistance 0.0
3863 ]
3864 LabelGraphics
3865 [
3866 text "
3867 FSObject class
3868 Dir class
3869 "
3870 fontSize 14
3871 fontName "Consolas"
3872 alignment "left"
3873 anchor "tl"
3874 borderDistance 6
3875 ]
3876 ]
3877
3878 node
3879 [
3880 id 5
3881 graphics
3882 [
3883 w 123.20000000000002
3884 h 54
3885 type "rectangle"
3886 fill "#FFFFFF"
3887 fill2 "#FFFFFF"
3888 outline "#000000"
3889 ]
3890 LabelGraphics
3891 [
3892 text "null"
3893 outline "#000000"
3894 fill "#FFFFFF"
3895 fontSize 16
3896 fontName "Monospace"
3897 autoSizePolicy "node_width"
3898 anchor "t"
3899 borderDistance 0.0
3900 ]
3901 LabelGraphics
3902 [
3903 text "
3904 FSObject class
3905 File class
3906 "
3907 fontSize 14
3908 fontName "Consolas"
3909 alignment "left"
3910 anchor "tl"
3911 borderDistance 6
3912 ]
3913 ]
3914
3915 node
3916 [
3917 id 6
3918 graphics
3919 [
3920 w 123.20000000000002
3921 h 54
3922 type "rectangle"
3923 fill "#FFFFFF"
3924 fill2 "#FFFFFF"
3925 outline "#000000"
3926 ]
3927 LabelGraphics
3928 [
3929 text "null"
3930 outline "#000000"
3931 fill "#FFFFFF"
3932 fontSize 16
3933 fontName "Monospace"
3934 autoSizePolicy "node_width"
3935 anchor "t"
3936 borderDistance 0.0
3937 ]
3938 LabelGraphics
3939 [
3940 text "
3941 FSObject class
3942 File class
3943 "
3944 fontSize 14
3945 fontName "Consolas"
3946 alignment "left"
3947 anchor "tl"
3948 borderDistance 6
3949 ]
3950 ]
3951
3952 node
3953 [
3954 id 7
3955 graphics
3956 [
3957 w 112.2
3958 h 26
3959 type "rectangle"
3960 fill "#FFFFFF"
3961 fill2 "#FFFFFF"
3962 outline "#000000"
3963 ]
3964 LabelGraphics
3965 [
3966 text "New Integers"
3967 outline "#000000"
3968 fill "#FFFFFF"
3969 fontSize 16
3970 fontName "Monospace"
3971 autoSizePolicy "node_width"
3972 anchor "t"
3973 borderDistance 0.0
3974 ]
3975 LabelGraphics
3976 [
3977 text "
3978 "
3979 fontSize 14
3980 fontName "Consolas"
3981 alignment "left"
3982 anchor "tl"
3983 borderDistance 6
3984 ]
3985 ]
3986
3987 node
3988 [
3989 id 8
3990 graphics
3991 [
3992 w 85.80000000000001
3993 h 26
3994 type "rectangle"
3995 fill "#FFFFFF"
3996 fill2 "#FFFFFF"
3997 outline "#000000"
3998 ]
3999 LabelGraphics
4000 [
4001 text "New Reals"
4002 outline "#000000"
4003 fill "#FFFFFF"
4004 fontSize 16
4005 fontName "Monospace"
4006 autoSizePolicy "node_width"
4007 anchor "t"
4008 borderDistance 0.0
4009 ]
4010 LabelGraphics
4011 [
4012 text "
4013 "
4014 fontSize 14
4015 fontName "Consolas"
4016 alignment "left"
4017 anchor "tl"
4018 borderDistance 6
4019 ]
4020 ]
4021
4022 node
4023 [
4024 id 9
4025 graphics
4026 [
4027 w 103.4
4028 h 26
4029 type "rectangle"
4030 fill "#FFFFFF"
4031 fill2 "#FFFFFF"
4032 outline "#000000"
4033 ]
4034 LabelGraphics
4035 [
4036 text "New Strings"
4037 outline "#000000"
4038 fill "#FFFFFF"
4039 fontSize 16
4040 fontName "Monospace"
4041 autoSizePolicy "node_width"
4042 anchor "t"
4043 borderDistance 0.0
4044 ]
4045 LabelGraphics
4046 [
4047 text "
4048 "
4049 fontSize 14
4050 fontName "Consolas"
4051 alignment "left"
4052 anchor "tl"
4053 borderDistance 6
4054 ]
4055 ]
4056
4057 node
4058 [
4059 id 10
4060 graphics
4061 [
4062 w 103.4
4063 h 26
4064 type "rectangle"
4065 fill "#FFFFFF"
4066 fill2 "#FFFFFF"
4067 outline "#000000"
4068 ]
4069 LabelGraphics
4070 [
4071 text "New Objects"
4072 outline "#000000"
4073 fill "#FFFFFF"
4074 fontSize 16
4075 fontName "Monospace"
4076 autoSizePolicy "node_width"
4077 anchor "t"
4078 borderDistance 0.0
4079 ]
4080 LabelGraphics
4081 [
4082 text "
4083 "
4084 fontSize 14
4085 fontName "Consolas"
4086 alignment "left"
4087 anchor "tl"
4088 borderDistance 6
4089 ]
4090 ]
4091 edge
4092 [
4093 source 3
4094 target 4
4095 graphics
4096 [
4097 fill "#000000"
4098 width 3
4099 targetArrow "standard"
4100 ]
4101 LabelGraphics
4102 [
4103 text "root reference FileSystem"
4104 fontSize 14
4105 fontName "Consolas"
4106 configuration "AutoFlippingLabel"
4107 model "six_pos"
4108 position "thead"
4109 ]
4110 ]
4111 edge
4112 [
4113 source 0
4114 target 3
4115 graphics
4116 [
4117 fill "#000000"
4118 width 3
4119 targetArrow "standard"
4120 ]
4121 LabelGraphics
4122 [
4123 text "filesystems reference Model"
4124 fontSize 14
4125 fontName "Consolas"
4126 configuration "AutoFlippingLabel"
4127 model "six_pos"
4128 position "thead"
4129 ]
4130 ]
4131 edge
4132 [
4133 source 0
4134 target 5
4135 graphics
4136 [
4137 fill "#000000"
4138 width 3
4139 targetArrow "standard"
4140 ]
4141 LabelGraphics
4142 [
4143 text "otherFSObjects reference Model"
4144 fontSize 14
4145 fontName "Consolas"
4146 configuration "AutoFlippingLabel"
4147 model "six_pos"
4148 position "thead"
4149 ]
4150 ]
4151 edge
4152 [
4153 source 0
4154 target 6
4155 graphics
4156 [
4157 fill "#000000"
4158 width 3
4159 targetArrow "standard"
4160 ]
4161 LabelGraphics
4162 [
4163 text "otherFSObjects reference Model"
4164 fontSize 14
4165 fontName "Consolas"
4166 configuration "AutoFlippingLabel"
4167 model "six_pos"
4168 position "thead"
4169 ]
4170 ]
4171]
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/models/2.png b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/models/2.png
index 38dadff8..1fddfd99 100644
--- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/models/2.png
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/models/2.png
Binary files differ
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/models/2.xmi b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/models/2.xmi
index bc0e55cc..6b9900e2 100644
--- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/models/2.xmi
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/models/2.xmi
@@ -1,9 +1,8 @@
1<?xml version="1.0" encoding="ASCII"?> 1<?xml version="1.0" encoding="ASCII"?>
2<yakindu:Statechart xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:yakindu="YakinduMetamodel"> 2<filesystem:Model xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:filesystem="FileSystemMetamodel">
3 <regions> 3 <filesystems>
4 <vertices xsi:type="yakindu:Synchronization"/> 4 <root/>
5 </regions> 5 </filesystems>
6 <regions> 6 <otherFSObjects xsi:type="filesystem:File"/>
7 <vertices xsi:type="yakindu:FinalState"/> 7 <otherFSObjects xsi:type="filesystem:File"/>
8 </regions> 8</filesystem:Model>
9</yakindu:Statechart>
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/statistics.csv b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/statistics.csv
index ee8829e5..d1c8d98d 100644
--- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/statistics.csv
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/outputs/yakindu/statistics.csv
@@ -1,2 +1,22 @@
1Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;_Solution0FoundAt;_Solution1FoundAt;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime 1Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;_Solution0FoundAt;_Solution1FoundAt;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime
21;1;ModelResultImpl;335;2777;2544;7194393100;105;140;61;186;9;0;3 21;1;ModelResultImpl;335;2777;2544;7194393100;105;140;61;186;9;0;3
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;120;2483;7934;1838851300;477;3162;36;100;0;2
5Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime
61;1;InconsistencyResultImpl;20;2258;2771;12900;42;12;1;0;0
7Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime
81;1;InconsistencyResultImpl;14;2066;3146;29000;439;14;13;0;0
9Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;_Solution0FoundAt;_Solution1FoundAt;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime
101;1;ModelResultImpl;15;1857;2520;3998461000;169;207;102;9;4;0;3
11Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;_Solution0FoundAt;_Solution1FoundAt;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime
121;1;ModelResultImpl;70;2695;2815;3409332300;111;133;61;18;3;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;16;2246;2987;3347793300;168;362;201;7;6;0;3
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;6;839;711;3017372100;45;206;107;9;7;0;1
17Task;Run;Result;Domain to logic transformation time;Logic to solver transformation time;Solver time;Postprocessing time;_Solution0FoundAt;_Solution1FoundAt;TransformationExecutionTime;TypeAnalysisTime;StateCoderTime;StateCoderFailCount;SolutionCopyTime
181;1;ModelResultImpl;5;879;674;2970538700;33;111;55;7;2;0;1
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;5;882;742;2902370500;64;203;110;9;6;0;1
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;10;1041;730;3174826600;23;31;19;12;0;0;1
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/plugin.xml b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/plugin.xml
index efdbb9b2..a09e1cf4 100644
--- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/plugin.xml
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/plugin.xml
@@ -1,26 +1,146 @@
1<?xml version="1.0" encoding="UTF-8"?><?eclipse version="3.0"?><!-- 1<?xml version="1.0" encoding="UTF-8"?><?eclipse version="3.0"?><!--
2--><plugin> 2--><plugin>
3 <extension point="org.eclipse.emf.ecore.generated_package"> 3 <extension point="org.eclipse.emf.ecore.generated_package">
4 <!-- @generated fam --> 4 <!-- @generated fam -->
5 <package 5 <package class="ca.mcgill.ecse.dslreasoner.standalone.test.fam.famPackage" genModel="metamodels/fam.genmodel" uri="FamMetamodel"/>
6 uri="FamMetamodel" 6 </extension>
7 class="ca.mcgill.ecse.dslreasoner.standalone.test.fam.famPackage" 7 <extension point="org.eclipse.emf.ecore.generated_package">
8 genModel="metamodels/fam.genmodel"/> 8 <!-- @generated yakindu -->
9 </extension> 9 <package class="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage" genModel="metamodels/yakindu.genmodel" uri="YakinduMetamodel"/>
10 <extension point="org.eclipse.emf.ecore.generated_package"> 10 </extension>
11 <!-- @generated yakindu --> 11 <extension point="org.eclipse.emf.ecore.generated_package">
12 <package 12 <!-- @generated filesystem -->
13 uri="YakinduMetamodel" 13 <package class="ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.filesystemPackage" genModel="metamodels/filesystem.genmodel" uri="FileSystemMetamodel"/>
14 class="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.yakinduPackage" 14 </extension>
15 genModel="metamodels/yakindu.genmodel"/> 15 <extension id="ca.mcgill.ecse.dslreasoner.standalone.test.ecore.queries.EcorePatterns" point="org.eclipse.viatra.query.runtime.queryspecification">
16 </extension> 16 <group group="org.eclipse.viatra.query.runtime.extensibility.SingletonExtensionFactory:ca.mcgill.ecse.dslreasoner.standalone.test.ecore.queries.EcorePatterns" id="ca.mcgill.ecse.dslreasoner.standalone.test.ecore.queries.EcorePatterns">
17 17 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.ecore.queries.directSupertype"/>
18 <extension point="org.eclipse.emf.ecore.generated_package"> 18 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.ecore.queries.loopInInheritence"/>
19 <!-- @generated filesystem --> 19 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.ecore.queries.opposite"/>
20 <package 20 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.ecore.queries.oppositeDifferentClass"/>
21 uri="FileSystemMetamodel" 21 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.ecore.queries.nonSymmetricOpposite"/>
22 class="ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.filesystemPackage" 22 </group>
23 genModel="metamodels/filesystem.genmodel"/> 23 </extension>
24 </extension> 24 <extension id="ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.FamPatterns" point="org.eclipse.viatra.query.runtime.queryspecification">
25 25 <group group="org.eclipse.viatra.query.runtime.extensibility.SingletonExtensionFactory:ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.FamPatterns" id="ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.FamPatterns">
26 </plugin> 26 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.terminatorAndInformation"/>
27 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.type"/>
28 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.rootElements"/>
29 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.parent"/>
30 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.model"/>
31 </group>
32 </extension>
33 <extension id="ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.queries.FileSystemPatterns" point="org.eclipse.viatra.query.runtime.queryspecification">
34 <group group="org.eclipse.viatra.query.runtime.extensibility.SingletonExtensionFactory:ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.queries.FileSystemPatterns" id="ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.queries.FileSystemPatterns">
35 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.queries.patternContent"/>
36 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.queries.live"/>
37 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.queries.contentInNotLive"/>
38 </group>
39 </extension>
40 <extension id="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.YakinduMutatedPatterns" point="org.eclipse.viatra.query.runtime.queryspecification">
41 <group group="org.eclipse.viatra.query.runtime.extensibility.SingletonExtensionFactory:ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.YakinduMutatedPatterns" id="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.YakinduMutatedPatterns">
42 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.entryInRegion_M0"/>
43 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.entryInRegion_M1"/>
44 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.entryInRegion_M2"/>
45 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.noEntryInRegion_M0"/>
46 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.noEntryInRegion_M1"/>
47 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.noEntryInRegion_M2"/>
48 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.noEntryInRegion_M3"/>
49 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.noEntryInRegion_M4"/>
50 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.noEntryInRegion_M5"/>
51 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.multipleEntryInRegion_M0"/>
52 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.multipleEntryInRegion_M1"/>
53 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.multipleEntryInRegion_M2"/>
54 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.multipleEntryInRegion_M3"/>
55 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.multipleEntryInRegion_M4"/>
56 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.multipleEntryInRegion_M5"/>
57 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.transition_M0"/>
58 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.transition_M1"/>
59 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.transition_M2"/>
60 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.transition_M3"/>
61 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.transition_M4"/>
62 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.incomingToEntry_M0"/>
63 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.incomingToEntry_1"/>
64 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.incomingToEntry_2"/>
65 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.incomingToEntry_3"/>
66 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.incomingToEntry_4"/>
67 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.incomingToEntry_5"/>
68 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.noOutgoingTransitionFromEntry_M0"/>
69 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.noOutgoingTransitionFromEntry_M1"/>
70 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.noOutgoingTransitionFromEntry_M2"/>
71 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.noOutgoingTransitionFromEntry_M3"/>
72 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.noOutgoingTransitionFromEntry_M4"/>
73 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.noOutgoingTransitionFromEntry_M5"/>
74 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.multipleTransitionFromEntry_M0"/>
75 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.multipleTransitionFromEntry_M1"/>
76 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.multipleTransitionFromEntry_M2"/>
77 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.multipleTransitionFromEntry_M3"/>
78 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.multipleTransitionFromEntry_M4"/>
79 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.outgoingFromExit_M0"/>
80 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.outgoingFromExit_M1"/>
81 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.outgoingFromExit_M2"/>
82 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.outgoingFromFinal_M0"/>
83 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.outgoingFromFinal_M1"/>
84 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.outgoingFromFinal_M2"/>
85 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.noStateInRegion_M0"/>
86 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.noStateInRegion_M1"/>
87 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.noStateInRegion_M2"/>
88 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.noStateInRegion_M3"/>
89 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.StateInRegion_M0"/>
90 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.StateInRegion_M1"/>
91 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.StateInRegion_M2"/>
92 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.choiceHasNoOutgoing_M0"/>
93 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.choiceHasNoOutgoing_M1"/>
94 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.choiceHasNoOutgoing_M2"/>
95 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.choiceHasNoOutgoing_M3"/>
96 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.choiceHasNoOutgoing_M4"/>
97 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.choiceHasNoOutgoing_M5"/>
98 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.choiceHasNoOutgoing_M6"/>
99 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.choiceHasNoIncoming_M0"/>
100 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.choiceHasNoIncoming_M1"/>
101 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.choiceHasNoIncoming_M2"/>
102 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.choiceHasNoIncoming_M3"/>
103 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.choiceHasNoIncoming_M4"/>
104 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.choiceHasNoIncoming_M5"/>
105 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.choiceHasNoIncoming_M6"/>
106 </group>
107 </extension>
108 <extension id="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.YakinduPatterns" point="org.eclipse.viatra.query.runtime.queryspecification">
109 <group group="org.eclipse.viatra.query.runtime.extensibility.SingletonExtensionFactory:ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.YakinduPatterns" id="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.YakinduPatterns">
110 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.entryInRegion"/>
111 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.noEntryInRegion"/>
112 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.multipleEntryInRegion"/>
113 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.transition"/>
114 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.incomingToEntry"/>
115 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.noOutgoingTransitionFromEntry"/>
116 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.multipleTransitionFromEntry"/>
117 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.outgoingFromExit"/>
118 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.outgoingFromFinal"/>
119 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.noStateInRegion"/>
120 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.StateInRegion"/>
121 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.choiceHasNoOutgoing"/>
122 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.choiceHasNoIncoming"/>
123 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.synchHasNoOutgoing"/>
124 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.synchHasNoIncoming"/>
125 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.SynchronizedIncomingInSameRegion"/>
126 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.notSynchronizingStates"/>
127 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.hasMultipleOutgoingTrainsition"/>
128 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.hasMultipleIncomingTrainsition"/>
129 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.SynchronizedRegionsAreNotSiblings"/>
130 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.child"/>
131 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.SynchronizedRegionDoesNotHaveMultipleRegions"/>
132 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.hasMultipleRegions"/>
133 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.synchThree"/>
134 <query-specification fqn="ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.twoSynch"/>
135 </group>
136 </extension>
137 <extension id="extension.derived.ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.model" point="org.eclipse.viatra.query.runtime.base.wellbehaving.derived.features">
138 <wellbehaving-derived-feature classifier-name="FunctionalElement" feature-name="model" package-nsUri="FamMetamodel"/>
139 </extension>
140 <extension id="extension.derived.ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.type" point="org.eclipse.viatra.query.runtime.base.wellbehaving.derived.features">
141 <wellbehaving-derived-feature classifier-name="Function" feature-name="type" package-nsUri="FamMetamodel"/>
142 </extension>
143 <extension id="extension.derived.ca.mcgill.ecse.dslreasoner.standalone.test.filesystem.queries.live" point="org.eclipse.viatra.query.runtime.base.wellbehaving.derived.features">
144 <wellbehaving-derived-feature classifier-name="FileSystem" feature-name="live" package-nsUri="FileSystemMetamodel"/>
145 </extension>
146</plugin>
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/ecore/queries/Ecore.vql b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/ecore/queries/ecorePatterns.vql
index 9af35b50..9af35b50 100644
--- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/ecore/queries/Ecore.vql
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/ecore/queries/ecorePatterns.vql
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/queries/famPatterns.vql b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/fam/queries/famPatterns.vql
index 02d34dcd..02d34dcd 100644
--- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/queries/famPatterns.vql
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/fam/queries/famPatterns.vql
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/queries/FileSystem.vql b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/queries/FileSystemPatterns.vql
index 269a4242..269a4242 100644
--- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/queries/FileSystem.vql
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/queries/FileSystemPatterns.vql
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduMutatedPatterns.vql b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduMutatedPatterns.vql
index 2e498670..2e498670 100644
--- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduMutatedPatterns.vql
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduMutatedPatterns.vql
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduPatterns.vql b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduPatterns.vql
index 597b1691..597b1691 100644
--- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduPatterns.vql
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduPatterns.vql
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/ecore/queries/.gitignore b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/ecore/queries/.gitignore
new file mode 100644
index 00000000..a9786e0f
--- /dev/null
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/ecore/queries/.gitignore
@@ -0,0 +1,13 @@
1/.DirectSupertype.java._trace
2/.Ecore.java._trace
3/.LoopInInheritence.java._trace
4/.NonSymmetricOpposite.java._trace
5/.Opposite.java._trace
6/.OppositeDifferentClass.java._trace
7/.EcorePatterns.java._trace
8/DirectSupertype.java
9/EcorePatterns.java
10/LoopInInheritence.java
11/NonSymmetricOpposite.java
12/Opposite.java
13/OppositeDifferentClass.java
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/fam/queries/.gitignore b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/fam/queries/.gitignore
new file mode 100644
index 00000000..60f1891b
--- /dev/null
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/fam/queries/.gitignore
@@ -0,0 +1,10 @@
1/.FamPatterns.java._trace
2/.Model.java._trace
3/.Parent.java._trace
4/.RootElements.java._trace
5/.TerminatorAndInformation.java._trace
6/.Type.java._trace
7/FamPatterns.java
8/Model.java
9/Parent.java
10/RootElements.java
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/fam/queries/TerminatorAndInformation.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/fam/queries/TerminatorAndInformation.java
new file mode 100644
index 00000000..69a6b9f4
--- /dev/null
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/fam/queries/TerminatorAndInformation.java
@@ -0,0 +1,747 @@
1/**
2 * Generated from platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/fam/queries/famPatterns.vql
3 */
4package ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries;
5
6import ca.mcgill.ecse.dslreasoner.standalone.test.fam.FAMTerminator;
7import ca.mcgill.ecse.dslreasoner.standalone.test.fam.InformationLink;
8import java.util.Arrays;
9import java.util.Collection;
10import java.util.LinkedHashSet;
11import java.util.List;
12import java.util.Objects;
13import java.util.Optional;
14import java.util.Set;
15import java.util.function.Consumer;
16import java.util.stream.Collectors;
17import java.util.stream.Stream;
18import org.apache.log4j.Logger;
19import org.eclipse.emf.ecore.EClass;
20import org.eclipse.viatra.query.runtime.api.IPatternMatch;
21import org.eclipse.viatra.query.runtime.api.IQuerySpecification;
22import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine;
23import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFPQuery;
24import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFQuerySpecification;
25import org.eclipse.viatra.query.runtime.api.impl.BaseMatcher;
26import org.eclipse.viatra.query.runtime.api.impl.BasePatternMatch;
27import org.eclipse.viatra.query.runtime.emf.types.EClassTransitiveInstancesKey;
28import org.eclipse.viatra.query.runtime.emf.types.EStructuralFeatureInstancesKey;
29import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint;
30import org.eclipse.viatra.query.runtime.matchers.psystem.PBody;
31import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable;
32import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.PAnnotation;
33import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.ParameterReference;
34import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.Equality;
35import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExportedParameter;
36import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint;
37import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter;
38import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameterDirection;
39import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PVisibility;
40import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple;
41import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples;
42import org.eclipse.viatra.query.runtime.util.ViatraQueryLoggingUtil;
43
44/**
45 * A pattern-specific query specification that can instantiate Matcher in a type-safe way.
46 *
47 * <p>Original source:
48 * <code><pre>
49 * {@literal @}Constraint(message="terminatorAndInformation", severity="error", key={T})
50 * pattern terminatorAndInformation(T : FAMTerminator, I : InformationLink) = {
51 * FunctionalOutput.outgoingLinks(Out,I);
52 * FunctionalOutput.terminator(Out,T);
53 * } or {
54 * InformationLink.to(I,In);
55 * FunctionalInput.terminator(In,T);
56 * }
57 * </pre></code>
58 *
59 * @see Matcher
60 * @see Match
61 *
62 */
63@SuppressWarnings("all")
64public final class TerminatorAndInformation extends BaseGeneratedEMFQuerySpecification<TerminatorAndInformation.Matcher> {
65 /**
66 * Pattern-specific match representation of the ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.terminatorAndInformation pattern,
67 * to be used in conjunction with {@link Matcher}.
68 *
69 * <p>Class fields correspond to parameters of the pattern. Fields with value null are considered unassigned.
70 * Each instance is a (possibly partial) substitution of pattern parameters,
71 * usable to represent a match of the pattern in the result of a query,
72 * or to specify the bound (fixed) input parameters when issuing a query.
73 *
74 * @see Matcher
75 *
76 */
77 public static abstract class Match extends BasePatternMatch {
78 private FAMTerminator fT;
79
80 private InformationLink fI;
81
82 private static List<String> parameterNames = makeImmutableList("T", "I");
83
84 private Match(final FAMTerminator pT, final InformationLink pI) {
85 this.fT = pT;
86 this.fI = pI;
87 }
88
89 @Override
90 public Object get(final String parameterName) {
91 if ("T".equals(parameterName)) return this.fT;
92 if ("I".equals(parameterName)) return this.fI;
93 return null;
94 }
95
96 public FAMTerminator getT() {
97 return this.fT;
98 }
99
100 public InformationLink getI() {
101 return this.fI;
102 }
103
104 @Override
105 public boolean set(final String parameterName, final Object newValue) {
106 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
107 if ("T".equals(parameterName) ) {
108 this.fT = (FAMTerminator) newValue;
109 return true;
110 }
111 if ("I".equals(parameterName) ) {
112 this.fI = (InformationLink) newValue;
113 return true;
114 }
115 return false;
116 }
117
118 public void setT(final FAMTerminator pT) {
119 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
120 this.fT = pT;
121 }
122
123 public void setI(final InformationLink pI) {
124 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
125 this.fI = pI;
126 }
127
128 @Override
129 public String patternName() {
130 return "ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.terminatorAndInformation";
131 }
132
133 @Override
134 public List<String> parameterNames() {
135 return TerminatorAndInformation.Match.parameterNames;
136 }
137
138 @Override
139 public Object[] toArray() {
140 return new Object[]{fT, fI};
141 }
142
143 @Override
144 public TerminatorAndInformation.Match toImmutable() {
145 return isMutable() ? newMatch(fT, fI) : this;
146 }
147
148 @Override
149 public String prettyPrint() {
150 StringBuilder result = new StringBuilder();
151 result.append("\"T\"=" + prettyPrintValue(fT) + ", ");
152 result.append("\"I\"=" + prettyPrintValue(fI));
153 return result.toString();
154 }
155
156 @Override
157 public int hashCode() {
158 return Objects.hash(fT, fI);
159 }
160
161 @Override
162 public boolean equals(final Object obj) {
163 if (this == obj)
164 return true;
165 if (obj == null) {
166 return false;
167 }
168 if ((obj instanceof TerminatorAndInformation.Match)) {
169 TerminatorAndInformation.Match other = (TerminatorAndInformation.Match) obj;
170 return Objects.equals(fT, other.fT) && Objects.equals(fI, other.fI);
171 } else {
172 // this should be infrequent
173 if (!(obj instanceof IPatternMatch)) {
174 return false;
175 }
176 IPatternMatch otherSig = (IPatternMatch) obj;
177 return Objects.equals(specification(), otherSig.specification()) && Arrays.deepEquals(toArray(), otherSig.toArray());
178 }
179 }
180
181 @Override
182 public TerminatorAndInformation specification() {
183 return TerminatorAndInformation.instance();
184 }
185
186 /**
187 * Returns an empty, mutable match.
188 * Fields of the mutable match can be filled to create a partial match, usable as matcher input.
189 *
190 * @return the empty match.
191 *
192 */
193 public static TerminatorAndInformation.Match newEmptyMatch() {
194 return new Mutable(null, null);
195 }
196
197 /**
198 * Returns a mutable (partial) match.
199 * Fields of the mutable match can be filled to create a partial match, usable as matcher input.
200 *
201 * @param pT the fixed value of pattern parameter T, or null if not bound.
202 * @param pI the fixed value of pattern parameter I, or null if not bound.
203 * @return the new, mutable (partial) match object.
204 *
205 */
206 public static TerminatorAndInformation.Match newMutableMatch(final FAMTerminator pT, final InformationLink pI) {
207 return new Mutable(pT, pI);
208 }
209
210 /**
211 * Returns a new (partial) match.
212 * This can be used e.g. to call the matcher with a partial match.
213 * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object.
214 * @param pT the fixed value of pattern parameter T, or null if not bound.
215 * @param pI the fixed value of pattern parameter I, or null if not bound.
216 * @return the (partial) match object.
217 *
218 */
219 public static TerminatorAndInformation.Match newMatch(final FAMTerminator pT, final InformationLink pI) {
220 return new Immutable(pT, pI);
221 }
222
223 private static final class Mutable extends TerminatorAndInformation.Match {
224 Mutable(final FAMTerminator pT, final InformationLink pI) {
225 super(pT, pI);
226 }
227
228 @Override
229 public boolean isMutable() {
230 return true;
231 }
232 }
233
234 private static final class Immutable extends TerminatorAndInformation.Match {
235 Immutable(final FAMTerminator pT, final InformationLink pI) {
236 super(pT, pI);
237 }
238
239 @Override
240 public boolean isMutable() {
241 return false;
242 }
243 }
244 }
245
246 /**
247 * Generated pattern matcher API of the ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.terminatorAndInformation pattern,
248 * providing pattern-specific query methods.
249 *
250 * <p>Use the pattern matcher on a given model via {@link #on(ViatraQueryEngine)},
251 * e.g. in conjunction with {@link ViatraQueryEngine#on(QueryScope)}.
252 *
253 * <p>Matches of the pattern will be represented as {@link Match}.
254 *
255 * <p>Original source:
256 * <code><pre>
257 * {@literal @}Constraint(message="terminatorAndInformation", severity="error", key={T})
258 * pattern terminatorAndInformation(T : FAMTerminator, I : InformationLink) = {
259 * FunctionalOutput.outgoingLinks(Out,I);
260 * FunctionalOutput.terminator(Out,T);
261 * } or {
262 * InformationLink.to(I,In);
263 * FunctionalInput.terminator(In,T);
264 * }
265 * </pre></code>
266 *
267 * @see Match
268 * @see TerminatorAndInformation
269 *
270 */
271 public static class Matcher extends BaseMatcher<TerminatorAndInformation.Match> {
272 /**
273 * Initializes the pattern matcher within an existing VIATRA Query engine.
274 * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned.
275 *
276 * @param engine the existing VIATRA Query engine in which this matcher will be created.
277 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
278 *
279 */
280 public static TerminatorAndInformation.Matcher on(final ViatraQueryEngine engine) {
281 // check if matcher already exists
282 Matcher matcher = engine.getExistingMatcher(querySpecification());
283 if (matcher == null) {
284 matcher = (Matcher)engine.getMatcher(querySpecification());
285 }
286 return matcher;
287 }
288
289 /**
290 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
291 * @return an initialized matcher
292 * @noreference This method is for internal matcher initialization by the framework, do not call it manually.
293 *
294 */
295 public static TerminatorAndInformation.Matcher create() {
296 return new Matcher();
297 }
298
299 private final static int POSITION_T = 0;
300
301 private final static int POSITION_I = 1;
302
303 private final static Logger LOGGER = ViatraQueryLoggingUtil.getLogger(TerminatorAndInformation.Matcher.class);
304
305 /**
306 * Initializes the pattern matcher within an existing VIATRA Query engine.
307 * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned.
308 *
309 * @param engine the existing VIATRA Query engine in which this matcher will be created.
310 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
311 *
312 */
313 private Matcher() {
314 super(querySpecification());
315 }
316
317 /**
318 * Returns the set of all matches of the pattern that conform to the given fixed values of some parameters.
319 * @param pT the fixed value of pattern parameter T, or null if not bound.
320 * @param pI the fixed value of pattern parameter I, or null if not bound.
321 * @return matches represented as a Match object.
322 *
323 */
324 public Collection<TerminatorAndInformation.Match> getAllMatches(final FAMTerminator pT, final InformationLink pI) {
325 return rawStreamAllMatches(new Object[]{pT, pI}).collect(Collectors.toSet());
326 }
327
328 /**
329 * Returns a stream of all matches of the pattern that conform to the given fixed values of some parameters.
330 * </p>
331 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
332 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
333 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
334 * @param pT the fixed value of pattern parameter T, or null if not bound.
335 * @param pI the fixed value of pattern parameter I, or null if not bound.
336 * @return a stream of matches represented as a Match object.
337 *
338 */
339 public Stream<TerminatorAndInformation.Match> streamAllMatches(final FAMTerminator pT, final InformationLink pI) {
340 return rawStreamAllMatches(new Object[]{pT, pI});
341 }
342
343 /**
344 * Returns an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters.
345 * Neither determinism nor randomness of selection is guaranteed.
346 * @param pT the fixed value of pattern parameter T, or null if not bound.
347 * @param pI the fixed value of pattern parameter I, or null if not bound.
348 * @return a match represented as a Match object, or null if no match is found.
349 *
350 */
351 public Optional<TerminatorAndInformation.Match> getOneArbitraryMatch(final FAMTerminator pT, final InformationLink pI) {
352 return rawGetOneArbitraryMatch(new Object[]{pT, pI});
353 }
354
355 /**
356 * Indicates whether the given combination of specified pattern parameters constitute a valid pattern match,
357 * under any possible substitution of the unspecified parameters (if any).
358 * @param pT the fixed value of pattern parameter T, or null if not bound.
359 * @param pI the fixed value of pattern parameter I, or null if not bound.
360 * @return true if the input is a valid (partial) match of the pattern.
361 *
362 */
363 public boolean hasMatch(final FAMTerminator pT, final InformationLink pI) {
364 return rawHasMatch(new Object[]{pT, pI});
365 }
366
367 /**
368 * Returns the number of all matches of the pattern that conform to the given fixed values of some parameters.
369 * @param pT the fixed value of pattern parameter T, or null if not bound.
370 * @param pI the fixed value of pattern parameter I, or null if not bound.
371 * @return the number of pattern matches found.
372 *
373 */
374 public int countMatches(final FAMTerminator pT, final InformationLink pI) {
375 return rawCountMatches(new Object[]{pT, pI});
376 }
377
378 /**
379 * Executes the given processor on an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters.
380 * Neither determinism nor randomness of selection is guaranteed.
381 * @param pT the fixed value of pattern parameter T, or null if not bound.
382 * @param pI the fixed value of pattern parameter I, or null if not bound.
383 * @param processor the action that will process the selected match.
384 * @return true if the pattern has at least one match with the given parameter values, false if the processor was not invoked
385 *
386 */
387 public boolean forOneArbitraryMatch(final FAMTerminator pT, final InformationLink pI, final Consumer<? super TerminatorAndInformation.Match> processor) {
388 return rawForOneArbitraryMatch(new Object[]{pT, pI}, processor);
389 }
390
391 /**
392 * Returns a new (partial) match.
393 * This can be used e.g. to call the matcher with a partial match.
394 * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object.
395 * @param pT the fixed value of pattern parameter T, or null if not bound.
396 * @param pI the fixed value of pattern parameter I, or null if not bound.
397 * @return the (partial) match object.
398 *
399 */
400 public TerminatorAndInformation.Match newMatch(final FAMTerminator pT, final InformationLink pI) {
401 return TerminatorAndInformation.Match.newMatch(pT, pI);
402 }
403
404 /**
405 * Retrieve the set of values that occur in matches for T.
406 * @return the Set of all values or empty set if there are no matches
407 *
408 */
409 protected Stream<FAMTerminator> rawStreamAllValuesOfT(final Object[] parameters) {
410 return rawStreamAllValues(POSITION_T, parameters).map(FAMTerminator.class::cast);
411 }
412
413 /**
414 * Retrieve the set of values that occur in matches for T.
415 * @return the Set of all values or empty set if there are no matches
416 *
417 */
418 public Set<FAMTerminator> getAllValuesOfT() {
419 return rawStreamAllValuesOfT(emptyArray()).collect(Collectors.toSet());
420 }
421
422 /**
423 * Retrieve the set of values that occur in matches for T.
424 * @return the Set of all values or empty set if there are no matches
425 *
426 */
427 public Stream<FAMTerminator> streamAllValuesOfT() {
428 return rawStreamAllValuesOfT(emptyArray());
429 }
430
431 /**
432 * Retrieve the set of values that occur in matches for T.
433 * </p>
434 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
435 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
436 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
437 *
438 * @return the Stream of all values or empty set if there are no matches
439 *
440 */
441 public Stream<FAMTerminator> streamAllValuesOfT(final TerminatorAndInformation.Match partialMatch) {
442 return rawStreamAllValuesOfT(partialMatch.toArray());
443 }
444
445 /**
446 * Retrieve the set of values that occur in matches for T.
447 * </p>
448 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
449 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
450 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
451 *
452 * @return the Stream of all values or empty set if there are no matches
453 *
454 */
455 public Stream<FAMTerminator> streamAllValuesOfT(final InformationLink pI) {
456 return rawStreamAllValuesOfT(new Object[]{null, pI});
457 }
458
459 /**
460 * Retrieve the set of values that occur in matches for T.
461 * @return the Set of all values or empty set if there are no matches
462 *
463 */
464 public Set<FAMTerminator> getAllValuesOfT(final TerminatorAndInformation.Match partialMatch) {
465 return rawStreamAllValuesOfT(partialMatch.toArray()).collect(Collectors.toSet());
466 }
467
468 /**
469 * Retrieve the set of values that occur in matches for T.
470 * @return the Set of all values or empty set if there are no matches
471 *
472 */
473 public Set<FAMTerminator> getAllValuesOfT(final InformationLink pI) {
474 return rawStreamAllValuesOfT(new Object[]{null, pI}).collect(Collectors.toSet());
475 }
476
477 /**
478 * Retrieve the set of values that occur in matches for I.
479 * @return the Set of all values or empty set if there are no matches
480 *
481 */
482 protected Stream<InformationLink> rawStreamAllValuesOfI(final Object[] parameters) {
483 return rawStreamAllValues(POSITION_I, parameters).map(InformationLink.class::cast);
484 }
485
486 /**
487 * Retrieve the set of values that occur in matches for I.
488 * @return the Set of all values or empty set if there are no matches
489 *
490 */
491 public Set<InformationLink> getAllValuesOfI() {
492 return rawStreamAllValuesOfI(emptyArray()).collect(Collectors.toSet());
493 }
494
495 /**
496 * Retrieve the set of values that occur in matches for I.
497 * @return the Set of all values or empty set if there are no matches
498 *
499 */
500 public Stream<InformationLink> streamAllValuesOfI() {
501 return rawStreamAllValuesOfI(emptyArray());
502 }
503
504 /**
505 * Retrieve the set of values that occur in matches for I.
506 * </p>
507 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
508 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
509 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
510 *
511 * @return the Stream of all values or empty set if there are no matches
512 *
513 */
514 public Stream<InformationLink> streamAllValuesOfI(final TerminatorAndInformation.Match partialMatch) {
515 return rawStreamAllValuesOfI(partialMatch.toArray());
516 }
517
518 /**
519 * Retrieve the set of values that occur in matches for I.
520 * </p>
521 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
522 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
523 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
524 *
525 * @return the Stream of all values or empty set if there are no matches
526 *
527 */
528 public Stream<InformationLink> streamAllValuesOfI(final FAMTerminator pT) {
529 return rawStreamAllValuesOfI(new Object[]{pT, null});
530 }
531
532 /**
533 * Retrieve the set of values that occur in matches for I.
534 * @return the Set of all values or empty set if there are no matches
535 *
536 */
537 public Set<InformationLink> getAllValuesOfI(final TerminatorAndInformation.Match partialMatch) {
538 return rawStreamAllValuesOfI(partialMatch.toArray()).collect(Collectors.toSet());
539 }
540
541 /**
542 * Retrieve the set of values that occur in matches for I.
543 * @return the Set of all values or empty set if there are no matches
544 *
545 */
546 public Set<InformationLink> getAllValuesOfI(final FAMTerminator pT) {
547 return rawStreamAllValuesOfI(new Object[]{pT, null}).collect(Collectors.toSet());
548 }
549
550 @Override
551 protected TerminatorAndInformation.Match tupleToMatch(final Tuple t) {
552 try {
553 return TerminatorAndInformation.Match.newMatch((FAMTerminator) t.get(POSITION_T), (InformationLink) t.get(POSITION_I));
554 } catch(ClassCastException e) {
555 LOGGER.error("Element(s) in tuple not properly typed!",e);
556 return null;
557 }
558 }
559
560 @Override
561 protected TerminatorAndInformation.Match arrayToMatch(final Object[] match) {
562 try {
563 return TerminatorAndInformation.Match.newMatch((FAMTerminator) match[POSITION_T], (InformationLink) match[POSITION_I]);
564 } catch(ClassCastException e) {
565 LOGGER.error("Element(s) in array not properly typed!",e);
566 return null;
567 }
568 }
569
570 @Override
571 protected TerminatorAndInformation.Match arrayToMatchMutable(final Object[] match) {
572 try {
573 return TerminatorAndInformation.Match.newMutableMatch((FAMTerminator) match[POSITION_T], (InformationLink) match[POSITION_I]);
574 } catch(ClassCastException e) {
575 LOGGER.error("Element(s) in array not properly typed!",e);
576 return null;
577 }
578 }
579
580 /**
581 * @return the singleton instance of the query specification of this pattern
582 * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded
583 *
584 */
585 public static IQuerySpecification<TerminatorAndInformation.Matcher> querySpecification() {
586 return TerminatorAndInformation.instance();
587 }
588 }
589
590 private TerminatorAndInformation() {
591 super(GeneratedPQuery.INSTANCE);
592 }
593
594 /**
595 * @return the singleton instance of the query specification
596 * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded
597 *
598 */
599 public static TerminatorAndInformation instance() {
600 try{
601 return LazyHolder.INSTANCE;
602 } catch (ExceptionInInitializerError err) {
603 throw processInitializerError(err);
604 }
605 }
606
607 @Override
608 protected TerminatorAndInformation.Matcher instantiate(final ViatraQueryEngine engine) {
609 return TerminatorAndInformation.Matcher.on(engine);
610 }
611
612 @Override
613 public TerminatorAndInformation.Matcher instantiate() {
614 return TerminatorAndInformation.Matcher.create();
615 }
616
617 @Override
618 public TerminatorAndInformation.Match newEmptyMatch() {
619 return TerminatorAndInformation.Match.newEmptyMatch();
620 }
621
622 @Override
623 public TerminatorAndInformation.Match newMatch(final Object... parameters) {
624 return TerminatorAndInformation.Match.newMatch((ca.mcgill.ecse.dslreasoner.standalone.test.fam.FAMTerminator) parameters[0], (ca.mcgill.ecse.dslreasoner.standalone.test.fam.InformationLink) parameters[1]);
625 }
626
627 /**
628 * Inner class allowing the singleton instance of {@link JvmGenericType: ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.TerminatorAndInformation (visibility: PUBLIC, simpleName: TerminatorAndInformation, identifier: ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.TerminatorAndInformation, deprecated: <unset>) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries) (interface: false, strictFloatingPoint: false, anonymous: false)} to be created
629 * <b>not</b> at the class load time of the outer class,
630 * but rather at the first call to {@link JvmGenericType: ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.TerminatorAndInformation (visibility: PUBLIC, simpleName: TerminatorAndInformation, identifier: ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.TerminatorAndInformation, deprecated: <unset>) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries) (interface: false, strictFloatingPoint: false, anonymous: false)#instance()}.
631 *
632 * <p> This workaround is required e.g. to support recursion.
633 *
634 */
635 private static class LazyHolder {
636 private final static TerminatorAndInformation INSTANCE = new TerminatorAndInformation();
637
638 /**
639 * Statically initializes the query specification <b>after</b> the field {@link #INSTANCE} is assigned.
640 * This initialization order is required to support indirect recursion.
641 *
642 * <p> The static initializer is defined using a helper field to work around limitations of the code generator.
643 *
644 */
645 private final static Object STATIC_INITIALIZER = ensureInitialized();
646
647 public static Object ensureInitialized() {
648 INSTANCE.ensureInitializedInternal();
649 return null;
650 }
651 }
652
653 private static class GeneratedPQuery extends BaseGeneratedEMFPQuery {
654 private final static TerminatorAndInformation.GeneratedPQuery INSTANCE = new GeneratedPQuery();
655
656 private final PParameter parameter_T = new PParameter("T", "ca.mcgill.ecse.dslreasoner.standalone.test.fam.FAMTerminator", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("FamMetamodel", "FAMTerminator")), PParameterDirection.INOUT);
657
658 private final PParameter parameter_I = new PParameter("I", "ca.mcgill.ecse.dslreasoner.standalone.test.fam.InformationLink", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("FamMetamodel", "InformationLink")), PParameterDirection.INOUT);
659
660 private final List<PParameter> parameters = Arrays.asList(parameter_T, parameter_I);
661
662 private GeneratedPQuery() {
663 super(PVisibility.PUBLIC);
664 }
665
666 @Override
667 public String getFullyQualifiedName() {
668 return "ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.terminatorAndInformation";
669 }
670
671 @Override
672 public List<String> getParameterNames() {
673 return Arrays.asList("T","I");
674 }
675
676 @Override
677 public List<PParameter> getParameters() {
678 return parameters;
679 }
680
681 @Override
682 public Set<PBody> doGetContainedBodies() {
683 setEvaluationHints(new QueryEvaluationHint(null, QueryEvaluationHint.BackendRequirement.UNSPECIFIED));
684 Set<PBody> bodies = new LinkedHashSet<>();
685 {
686 PBody body = new PBody(this);
687 PVariable var_T = body.getOrCreateVariableByName("T");
688 PVariable var_I = body.getOrCreateVariableByName("I");
689 PVariable var_Out = body.getOrCreateVariableByName("Out");
690 new TypeConstraint(body, Tuples.flatTupleOf(var_T), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("FamMetamodel", "FAMTerminator")));
691 new TypeConstraint(body, Tuples.flatTupleOf(var_I), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("FamMetamodel", "InformationLink")));
692 body.setSymbolicParameters(Arrays.<ExportedParameter>asList(
693 new ExportedParameter(body, var_T, parameter_T),
694 new ExportedParameter(body, var_I, parameter_I)
695 ));
696 // FunctionalOutput.outgoingLinks(Out,I)
697 new TypeConstraint(body, Tuples.flatTupleOf(var_Out), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("FamMetamodel", "FunctionalOutput")));
698 PVariable var__virtual_0_ = body.getOrCreateVariableByName(".virtual{0}");
699 new TypeConstraint(body, Tuples.flatTupleOf(var_Out, var__virtual_0_), new EStructuralFeatureInstancesKey(getFeatureLiteral("FamMetamodel", "FunctionalOutput", "outgoingLinks")));
700 new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_0_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("FamMetamodel", "InformationLink")));
701 new Equality(body, var__virtual_0_, var_I);
702 // FunctionalOutput.terminator(Out,T)
703 new TypeConstraint(body, Tuples.flatTupleOf(var_Out), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("FamMetamodel", "FunctionalOutput")));
704 PVariable var__virtual_1_ = body.getOrCreateVariableByName(".virtual{1}");
705 new TypeConstraint(body, Tuples.flatTupleOf(var_Out, var__virtual_1_), new EStructuralFeatureInstancesKey(getFeatureLiteral("FamMetamodel", "FunctionalData", "terminator")));
706 new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_1_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("FamMetamodel", "FAMTerminator")));
707 new Equality(body, var__virtual_1_, var_T);
708 bodies.add(body);
709 }
710 {
711 PBody body = new PBody(this);
712 PVariable var_T = body.getOrCreateVariableByName("T");
713 PVariable var_I = body.getOrCreateVariableByName("I");
714 PVariable var_In = body.getOrCreateVariableByName("In");
715 new TypeConstraint(body, Tuples.flatTupleOf(var_T), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("FamMetamodel", "FAMTerminator")));
716 new TypeConstraint(body, Tuples.flatTupleOf(var_I), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("FamMetamodel", "InformationLink")));
717 body.setSymbolicParameters(Arrays.<ExportedParameter>asList(
718 new ExportedParameter(body, var_T, parameter_T),
719 new ExportedParameter(body, var_I, parameter_I)
720 ));
721 // InformationLink.to(I,In)
722 new TypeConstraint(body, Tuples.flatTupleOf(var_I), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("FamMetamodel", "InformationLink")));
723 PVariable var__virtual_0_ = body.getOrCreateVariableByName(".virtual{0}");
724 new TypeConstraint(body, Tuples.flatTupleOf(var_I, var__virtual_0_), new EStructuralFeatureInstancesKey(getFeatureLiteral("FamMetamodel", "InformationLink", "to")));
725 new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_0_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("FamMetamodel", "FunctionalInput")));
726 new Equality(body, var__virtual_0_, var_In);
727 // FunctionalInput.terminator(In,T)
728 new TypeConstraint(body, Tuples.flatTupleOf(var_In), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("FamMetamodel", "FunctionalInput")));
729 PVariable var__virtual_1_ = body.getOrCreateVariableByName(".virtual{1}");
730 new TypeConstraint(body, Tuples.flatTupleOf(var_In, var__virtual_1_), new EStructuralFeatureInstancesKey(getFeatureLiteral("FamMetamodel", "FunctionalData", "terminator")));
731 new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_1_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("FamMetamodel", "FAMTerminator")));
732 new Equality(body, var__virtual_1_, var_T);
733 bodies.add(body);
734 }
735 {
736 PAnnotation annotation = new PAnnotation("Constraint");
737 annotation.addAttribute("message", "terminatorAndInformation");
738 annotation.addAttribute("severity", "error");
739 annotation.addAttribute("key", Arrays.asList(new Object[] {
740 new ParameterReference("T")
741 }));
742 addAnnotation(annotation);
743 }
744 return bodies;
745 }
746 }
747}
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/fam/queries/Type.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/fam/queries/Type.java
new file mode 100644
index 00000000..bc3230c5
--- /dev/null
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/fam/queries/Type.java
@@ -0,0 +1,770 @@
1/**
2 * Generated from platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/fam/queries/famPatterns.vql
3 */
4package ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries;
5
6import ca.mcgill.ecse.dslreasoner.standalone.test.fam.Function;
7import ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionType;
8import ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.Parent;
9import ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.RootElements;
10import java.util.Arrays;
11import java.util.Collection;
12import java.util.LinkedHashSet;
13import java.util.List;
14import java.util.Objects;
15import java.util.Optional;
16import java.util.Set;
17import java.util.function.Consumer;
18import java.util.stream.Collectors;
19import java.util.stream.Stream;
20import org.apache.log4j.Logger;
21import org.eclipse.emf.ecore.EClass;
22import org.eclipse.emf.ecore.EDataType;
23import org.eclipse.viatra.query.runtime.api.IPatternMatch;
24import org.eclipse.viatra.query.runtime.api.IQuerySpecification;
25import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine;
26import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFPQuery;
27import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFQuerySpecification;
28import org.eclipse.viatra.query.runtime.api.impl.BaseMatcher;
29import org.eclipse.viatra.query.runtime.api.impl.BasePatternMatch;
30import org.eclipse.viatra.query.runtime.emf.types.EClassTransitiveInstancesKey;
31import org.eclipse.viatra.query.runtime.emf.types.EDataTypeInSlotsKey;
32import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint;
33import org.eclipse.viatra.query.runtime.matchers.psystem.PBody;
34import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable;
35import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.PAnnotation;
36import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.Equality;
37import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExportedParameter;
38import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.NegativePatternCall;
39import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.ConstantValue;
40import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.PositivePatternCall;
41import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint;
42import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter;
43import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameterDirection;
44import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PVisibility;
45import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple;
46import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples;
47import org.eclipse.viatra.query.runtime.util.ViatraQueryLoggingUtil;
48
49/**
50 * A pattern-specific query specification that can instantiate Matcher in a type-safe way.
51 *
52 * <p>Original source:
53 * <code><pre>
54 * {@literal @}QueryBasedFeature
55 * pattern type(This : Function, Target : FunctionType) = {
56 * find rootElements(_Model, This);
57 * Target == FunctionType::Root;
58 * } or {
59 * neg find parent(_Child, This);
60 * neg find rootElements(_Model, This);
61 * Target == FunctionType::Leaf;
62 * } or {
63 * find parent(This, _Par);
64 * find parent(_Child, This);
65 * Target == FunctionType::Intermediate;
66 * }
67 * </pre></code>
68 *
69 * @see Matcher
70 * @see Match
71 *
72 */
73@SuppressWarnings("all")
74public final class Type extends BaseGeneratedEMFQuerySpecification<Type.Matcher> {
75 /**
76 * Pattern-specific match representation of the ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.type pattern,
77 * to be used in conjunction with {@link Matcher}.
78 *
79 * <p>Class fields correspond to parameters of the pattern. Fields with value null are considered unassigned.
80 * Each instance is a (possibly partial) substitution of pattern parameters,
81 * usable to represent a match of the pattern in the result of a query,
82 * or to specify the bound (fixed) input parameters when issuing a query.
83 *
84 * @see Matcher
85 *
86 */
87 public static abstract class Match extends BasePatternMatch {
88 private Function fThis;
89
90 private FunctionType fTarget;
91
92 private static List<String> parameterNames = makeImmutableList("This", "Target");
93
94 private Match(final Function pThis, final FunctionType pTarget) {
95 this.fThis = pThis;
96 this.fTarget = pTarget;
97 }
98
99 @Override
100 public Object get(final String parameterName) {
101 if ("This".equals(parameterName)) return this.fThis;
102 if ("Target".equals(parameterName)) return this.fTarget;
103 return null;
104 }
105
106 public Function getThis() {
107 return this.fThis;
108 }
109
110 public FunctionType getTarget() {
111 return this.fTarget;
112 }
113
114 @Override
115 public boolean set(final String parameterName, final Object newValue) {
116 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
117 if ("This".equals(parameterName) ) {
118 this.fThis = (Function) newValue;
119 return true;
120 }
121 if ("Target".equals(parameterName) ) {
122 this.fTarget = (FunctionType) newValue;
123 return true;
124 }
125 return false;
126 }
127
128 public void setThis(final Function pThis) {
129 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
130 this.fThis = pThis;
131 }
132
133 public void setTarget(final FunctionType pTarget) {
134 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
135 this.fTarget = pTarget;
136 }
137
138 @Override
139 public String patternName() {
140 return "ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.type";
141 }
142
143 @Override
144 public List<String> parameterNames() {
145 return Type.Match.parameterNames;
146 }
147
148 @Override
149 public Object[] toArray() {
150 return new Object[]{fThis, fTarget};
151 }
152
153 @Override
154 public Type.Match toImmutable() {
155 return isMutable() ? newMatch(fThis, fTarget) : this;
156 }
157
158 @Override
159 public String prettyPrint() {
160 StringBuilder result = new StringBuilder();
161 result.append("\"This\"=" + prettyPrintValue(fThis) + ", ");
162 result.append("\"Target\"=" + prettyPrintValue(fTarget));
163 return result.toString();
164 }
165
166 @Override
167 public int hashCode() {
168 return Objects.hash(fThis, fTarget);
169 }
170
171 @Override
172 public boolean equals(final Object obj) {
173 if (this == obj)
174 return true;
175 if (obj == null) {
176 return false;
177 }
178 if ((obj instanceof Type.Match)) {
179 Type.Match other = (Type.Match) obj;
180 return Objects.equals(fThis, other.fThis) && Objects.equals(fTarget, other.fTarget);
181 } else {
182 // this should be infrequent
183 if (!(obj instanceof IPatternMatch)) {
184 return false;
185 }
186 IPatternMatch otherSig = (IPatternMatch) obj;
187 return Objects.equals(specification(), otherSig.specification()) && Arrays.deepEquals(toArray(), otherSig.toArray());
188 }
189 }
190
191 @Override
192 public Type specification() {
193 return Type.instance();
194 }
195
196 /**
197 * Returns an empty, mutable match.
198 * Fields of the mutable match can be filled to create a partial match, usable as matcher input.
199 *
200 * @return the empty match.
201 *
202 */
203 public static Type.Match newEmptyMatch() {
204 return new Mutable(null, null);
205 }
206
207 /**
208 * Returns a mutable (partial) match.
209 * Fields of the mutable match can be filled to create a partial match, usable as matcher input.
210 *
211 * @param pThis the fixed value of pattern parameter This, or null if not bound.
212 * @param pTarget the fixed value of pattern parameter Target, or null if not bound.
213 * @return the new, mutable (partial) match object.
214 *
215 */
216 public static Type.Match newMutableMatch(final Function pThis, final FunctionType pTarget) {
217 return new Mutable(pThis, pTarget);
218 }
219
220 /**
221 * Returns a new (partial) match.
222 * This can be used e.g. to call the matcher with a partial match.
223 * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object.
224 * @param pThis the fixed value of pattern parameter This, or null if not bound.
225 * @param pTarget the fixed value of pattern parameter Target, or null if not bound.
226 * @return the (partial) match object.
227 *
228 */
229 public static Type.Match newMatch(final Function pThis, final FunctionType pTarget) {
230 return new Immutable(pThis, pTarget);
231 }
232
233 private static final class Mutable extends Type.Match {
234 Mutable(final Function pThis, final FunctionType pTarget) {
235 super(pThis, pTarget);
236 }
237
238 @Override
239 public boolean isMutable() {
240 return true;
241 }
242 }
243
244 private static final class Immutable extends Type.Match {
245 Immutable(final Function pThis, final FunctionType pTarget) {
246 super(pThis, pTarget);
247 }
248
249 @Override
250 public boolean isMutable() {
251 return false;
252 }
253 }
254 }
255
256 /**
257 * Generated pattern matcher API of the ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.type pattern,
258 * providing pattern-specific query methods.
259 *
260 * <p>Use the pattern matcher on a given model via {@link #on(ViatraQueryEngine)},
261 * e.g. in conjunction with {@link ViatraQueryEngine#on(QueryScope)}.
262 *
263 * <p>Matches of the pattern will be represented as {@link Match}.
264 *
265 * <p>Original source:
266 * <code><pre>
267 * {@literal @}QueryBasedFeature
268 * pattern type(This : Function, Target : FunctionType) = {
269 * find rootElements(_Model, This);
270 * Target == FunctionType::Root;
271 * } or {
272 * neg find parent(_Child, This);
273 * neg find rootElements(_Model, This);
274 * Target == FunctionType::Leaf;
275 * } or {
276 * find parent(This, _Par);
277 * find parent(_Child, This);
278 * Target == FunctionType::Intermediate;
279 * }
280 * </pre></code>
281 *
282 * @see Match
283 * @see Type
284 *
285 */
286 public static class Matcher extends BaseMatcher<Type.Match> {
287 /**
288 * Initializes the pattern matcher within an existing VIATRA Query engine.
289 * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned.
290 *
291 * @param engine the existing VIATRA Query engine in which this matcher will be created.
292 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
293 *
294 */
295 public static Type.Matcher on(final ViatraQueryEngine engine) {
296 // check if matcher already exists
297 Matcher matcher = engine.getExistingMatcher(querySpecification());
298 if (matcher == null) {
299 matcher = (Matcher)engine.getMatcher(querySpecification());
300 }
301 return matcher;
302 }
303
304 /**
305 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
306 * @return an initialized matcher
307 * @noreference This method is for internal matcher initialization by the framework, do not call it manually.
308 *
309 */
310 public static Type.Matcher create() {
311 return new Matcher();
312 }
313
314 private final static int POSITION_THIS = 0;
315
316 private final static int POSITION_TARGET = 1;
317
318 private final static Logger LOGGER = ViatraQueryLoggingUtil.getLogger(Type.Matcher.class);
319
320 /**
321 * Initializes the pattern matcher within an existing VIATRA Query engine.
322 * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned.
323 *
324 * @param engine the existing VIATRA Query engine in which this matcher will be created.
325 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
326 *
327 */
328 private Matcher() {
329 super(querySpecification());
330 }
331
332 /**
333 * Returns the set of all matches of the pattern that conform to the given fixed values of some parameters.
334 * @param pThis the fixed value of pattern parameter This, or null if not bound.
335 * @param pTarget the fixed value of pattern parameter Target, or null if not bound.
336 * @return matches represented as a Match object.
337 *
338 */
339 public Collection<Type.Match> getAllMatches(final Function pThis, final FunctionType pTarget) {
340 return rawStreamAllMatches(new Object[]{pThis, pTarget}).collect(Collectors.toSet());
341 }
342
343 /**
344 * Returns a stream of all matches of the pattern that conform to the given fixed values of some parameters.
345 * </p>
346 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
347 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
348 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
349 * @param pThis the fixed value of pattern parameter This, or null if not bound.
350 * @param pTarget the fixed value of pattern parameter Target, or null if not bound.
351 * @return a stream of matches represented as a Match object.
352 *
353 */
354 public Stream<Type.Match> streamAllMatches(final Function pThis, final FunctionType pTarget) {
355 return rawStreamAllMatches(new Object[]{pThis, pTarget});
356 }
357
358 /**
359 * Returns an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters.
360 * Neither determinism nor randomness of selection is guaranteed.
361 * @param pThis the fixed value of pattern parameter This, or null if not bound.
362 * @param pTarget the fixed value of pattern parameter Target, or null if not bound.
363 * @return a match represented as a Match object, or null if no match is found.
364 *
365 */
366 public Optional<Type.Match> getOneArbitraryMatch(final Function pThis, final FunctionType pTarget) {
367 return rawGetOneArbitraryMatch(new Object[]{pThis, pTarget});
368 }
369
370 /**
371 * Indicates whether the given combination of specified pattern parameters constitute a valid pattern match,
372 * under any possible substitution of the unspecified parameters (if any).
373 * @param pThis the fixed value of pattern parameter This, or null if not bound.
374 * @param pTarget the fixed value of pattern parameter Target, or null if not bound.
375 * @return true if the input is a valid (partial) match of the pattern.
376 *
377 */
378 public boolean hasMatch(final Function pThis, final FunctionType pTarget) {
379 return rawHasMatch(new Object[]{pThis, pTarget});
380 }
381
382 /**
383 * Returns the number of all matches of the pattern that conform to the given fixed values of some parameters.
384 * @param pThis the fixed value of pattern parameter This, or null if not bound.
385 * @param pTarget the fixed value of pattern parameter Target, or null if not bound.
386 * @return the number of pattern matches found.
387 *
388 */
389 public int countMatches(final Function pThis, final FunctionType pTarget) {
390 return rawCountMatches(new Object[]{pThis, pTarget});
391 }
392
393 /**
394 * Executes the given processor on an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters.
395 * Neither determinism nor randomness of selection is guaranteed.
396 * @param pThis the fixed value of pattern parameter This, or null if not bound.
397 * @param pTarget the fixed value of pattern parameter Target, or null if not bound.
398 * @param processor the action that will process the selected match.
399 * @return true if the pattern has at least one match with the given parameter values, false if the processor was not invoked
400 *
401 */
402 public boolean forOneArbitraryMatch(final Function pThis, final FunctionType pTarget, final Consumer<? super Type.Match> processor) {
403 return rawForOneArbitraryMatch(new Object[]{pThis, pTarget}, processor);
404 }
405
406 /**
407 * Returns a new (partial) match.
408 * This can be used e.g. to call the matcher with a partial match.
409 * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object.
410 * @param pThis the fixed value of pattern parameter This, or null if not bound.
411 * @param pTarget the fixed value of pattern parameter Target, or null if not bound.
412 * @return the (partial) match object.
413 *
414 */
415 public Type.Match newMatch(final Function pThis, final FunctionType pTarget) {
416 return Type.Match.newMatch(pThis, pTarget);
417 }
418
419 /**
420 * Retrieve the set of values that occur in matches for This.
421 * @return the Set of all values or empty set if there are no matches
422 *
423 */
424 protected Stream<Function> rawStreamAllValuesOfThis(final Object[] parameters) {
425 return rawStreamAllValues(POSITION_THIS, parameters).map(Function.class::cast);
426 }
427
428 /**
429 * Retrieve the set of values that occur in matches for This.
430 * @return the Set of all values or empty set if there are no matches
431 *
432 */
433 public Set<Function> getAllValuesOfThis() {
434 return rawStreamAllValuesOfThis(emptyArray()).collect(Collectors.toSet());
435 }
436
437 /**
438 * Retrieve the set of values that occur in matches for This.
439 * @return the Set of all values or empty set if there are no matches
440 *
441 */
442 public Stream<Function> streamAllValuesOfThis() {
443 return rawStreamAllValuesOfThis(emptyArray());
444 }
445
446 /**
447 * Retrieve the set of values that occur in matches for This.
448 * </p>
449 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
450 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
451 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
452 *
453 * @return the Stream of all values or empty set if there are no matches
454 *
455 */
456 public Stream<Function> streamAllValuesOfThis(final Type.Match partialMatch) {
457 return rawStreamAllValuesOfThis(partialMatch.toArray());
458 }
459
460 /**
461 * Retrieve the set of values that occur in matches for This.
462 * </p>
463 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
464 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
465 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
466 *
467 * @return the Stream of all values or empty set if there are no matches
468 *
469 */
470 public Stream<Function> streamAllValuesOfThis(final FunctionType pTarget) {
471 return rawStreamAllValuesOfThis(new Object[]{null, pTarget});
472 }
473
474 /**
475 * Retrieve the set of values that occur in matches for This.
476 * @return the Set of all values or empty set if there are no matches
477 *
478 */
479 public Set<Function> getAllValuesOfThis(final Type.Match partialMatch) {
480 return rawStreamAllValuesOfThis(partialMatch.toArray()).collect(Collectors.toSet());
481 }
482
483 /**
484 * Retrieve the set of values that occur in matches for This.
485 * @return the Set of all values or empty set if there are no matches
486 *
487 */
488 public Set<Function> getAllValuesOfThis(final FunctionType pTarget) {
489 return rawStreamAllValuesOfThis(new Object[]{null, pTarget}).collect(Collectors.toSet());
490 }
491
492 /**
493 * Retrieve the set of values that occur in matches for Target.
494 * @return the Set of all values or empty set if there are no matches
495 *
496 */
497 protected Stream<FunctionType> rawStreamAllValuesOfTarget(final Object[] parameters) {
498 return rawStreamAllValues(POSITION_TARGET, parameters).map(FunctionType.class::cast);
499 }
500
501 /**
502 * Retrieve the set of values that occur in matches for Target.
503 * @return the Set of all values or empty set if there are no matches
504 *
505 */
506 public Set<FunctionType> getAllValuesOfTarget() {
507 return rawStreamAllValuesOfTarget(emptyArray()).collect(Collectors.toSet());
508 }
509
510 /**
511 * Retrieve the set of values that occur in matches for Target.
512 * @return the Set of all values or empty set if there are no matches
513 *
514 */
515 public Stream<FunctionType> streamAllValuesOfTarget() {
516 return rawStreamAllValuesOfTarget(emptyArray());
517 }
518
519 /**
520 * Retrieve the set of values that occur in matches for Target.
521 * </p>
522 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
523 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
524 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
525 *
526 * @return the Stream of all values or empty set if there are no matches
527 *
528 */
529 public Stream<FunctionType> streamAllValuesOfTarget(final Type.Match partialMatch) {
530 return rawStreamAllValuesOfTarget(partialMatch.toArray());
531 }
532
533 /**
534 * Retrieve the set of values that occur in matches for Target.
535 * </p>
536 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
537 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
538 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
539 *
540 * @return the Stream of all values or empty set if there are no matches
541 *
542 */
543 public Stream<FunctionType> streamAllValuesOfTarget(final Function pThis) {
544 return rawStreamAllValuesOfTarget(new Object[]{pThis, null});
545 }
546
547 /**
548 * Retrieve the set of values that occur in matches for Target.
549 * @return the Set of all values or empty set if there are no matches
550 *
551 */
552 public Set<FunctionType> getAllValuesOfTarget(final Type.Match partialMatch) {
553 return rawStreamAllValuesOfTarget(partialMatch.toArray()).collect(Collectors.toSet());
554 }
555
556 /**
557 * Retrieve the set of values that occur in matches for Target.
558 * @return the Set of all values or empty set if there are no matches
559 *
560 */
561 public Set<FunctionType> getAllValuesOfTarget(final Function pThis) {
562 return rawStreamAllValuesOfTarget(new Object[]{pThis, null}).collect(Collectors.toSet());
563 }
564
565 @Override
566 protected Type.Match tupleToMatch(final Tuple t) {
567 try {
568 return Type.Match.newMatch((Function) t.get(POSITION_THIS), (FunctionType) t.get(POSITION_TARGET));
569 } catch(ClassCastException e) {
570 LOGGER.error("Element(s) in tuple not properly typed!",e);
571 return null;
572 }
573 }
574
575 @Override
576 protected Type.Match arrayToMatch(final Object[] match) {
577 try {
578 return Type.Match.newMatch((Function) match[POSITION_THIS], (FunctionType) match[POSITION_TARGET]);
579 } catch(ClassCastException e) {
580 LOGGER.error("Element(s) in array not properly typed!",e);
581 return null;
582 }
583 }
584
585 @Override
586 protected Type.Match arrayToMatchMutable(final Object[] match) {
587 try {
588 return Type.Match.newMutableMatch((Function) match[POSITION_THIS], (FunctionType) match[POSITION_TARGET]);
589 } catch(ClassCastException e) {
590 LOGGER.error("Element(s) in array not properly typed!",e);
591 return null;
592 }
593 }
594
595 /**
596 * @return the singleton instance of the query specification of this pattern
597 * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded
598 *
599 */
600 public static IQuerySpecification<Type.Matcher> querySpecification() {
601 return Type.instance();
602 }
603 }
604
605 private Type() {
606 super(GeneratedPQuery.INSTANCE);
607 }
608
609 /**
610 * @return the singleton instance of the query specification
611 * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded
612 *
613 */
614 public static Type instance() {
615 try{
616 return LazyHolder.INSTANCE;
617 } catch (ExceptionInInitializerError err) {
618 throw processInitializerError(err);
619 }
620 }
621
622 @Override
623 protected Type.Matcher instantiate(final ViatraQueryEngine engine) {
624 return Type.Matcher.on(engine);
625 }
626
627 @Override
628 public Type.Matcher instantiate() {
629 return Type.Matcher.create();
630 }
631
632 @Override
633 public Type.Match newEmptyMatch() {
634 return Type.Match.newEmptyMatch();
635 }
636
637 @Override
638 public Type.Match newMatch(final Object... parameters) {
639 return Type.Match.newMatch((ca.mcgill.ecse.dslreasoner.standalone.test.fam.Function) parameters[0], (ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionType) parameters[1]);
640 }
641
642 /**
643 * Inner class allowing the singleton instance of {@link JvmGenericType: ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.Type (visibility: PUBLIC, simpleName: Type, identifier: ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.Type, deprecated: <unset>) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries) (interface: false, strictFloatingPoint: false, anonymous: false)} to be created
644 * <b>not</b> at the class load time of the outer class,
645 * but rather at the first call to {@link JvmGenericType: ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.Type (visibility: PUBLIC, simpleName: Type, identifier: ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.Type, deprecated: <unset>) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries) (interface: false, strictFloatingPoint: false, anonymous: false)#instance()}.
646 *
647 * <p> This workaround is required e.g. to support recursion.
648 *
649 */
650 private static class LazyHolder {
651 private final static Type INSTANCE = new Type();
652
653 /**
654 * Statically initializes the query specification <b>after</b> the field {@link #INSTANCE} is assigned.
655 * This initialization order is required to support indirect recursion.
656 *
657 * <p> The static initializer is defined using a helper field to work around limitations of the code generator.
658 *
659 */
660 private final static Object STATIC_INITIALIZER = ensureInitialized();
661
662 public static Object ensureInitialized() {
663 INSTANCE.ensureInitializedInternal();
664 return null;
665 }
666 }
667
668 private static class GeneratedPQuery extends BaseGeneratedEMFPQuery {
669 private final static Type.GeneratedPQuery INSTANCE = new GeneratedPQuery();
670
671 private final PParameter parameter_This = new PParameter("This", "ca.mcgill.ecse.dslreasoner.standalone.test.fam.Function", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("FamMetamodel", "Function")), PParameterDirection.INOUT);
672
673 private final PParameter parameter_Target = new PParameter("Target", "ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionType", new EDataTypeInSlotsKey((EDataType)getClassifierLiteralSafe("FamMetamodel", "FunctionType")), PParameterDirection.INOUT);
674
675 private final List<PParameter> parameters = Arrays.asList(parameter_This, parameter_Target);
676
677 private GeneratedPQuery() {
678 super(PVisibility.PUBLIC);
679 }
680
681 @Override
682 public String getFullyQualifiedName() {
683 return "ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.type";
684 }
685
686 @Override
687 public List<String> getParameterNames() {
688 return Arrays.asList("This","Target");
689 }
690
691 @Override
692 public List<PParameter> getParameters() {
693 return parameters;
694 }
695
696 @Override
697 public Set<PBody> doGetContainedBodies() {
698 setEvaluationHints(new QueryEvaluationHint(null, QueryEvaluationHint.BackendRequirement.UNSPECIFIED));
699 Set<PBody> bodies = new LinkedHashSet<>();
700 {
701 PBody body = new PBody(this);
702 PVariable var_This = body.getOrCreateVariableByName("This");
703 PVariable var_Target = body.getOrCreateVariableByName("Target");
704 PVariable var__Model = body.getOrCreateVariableByName("_Model");
705 new TypeConstraint(body, Tuples.flatTupleOf(var_This), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("FamMetamodel", "Function")));
706 new TypeConstraint(body, Tuples.flatTupleOf(var_Target), new EDataTypeInSlotsKey((EDataType)getClassifierLiteral("FamMetamodel", "FunctionType")));
707 body.setSymbolicParameters(Arrays.<ExportedParameter>asList(
708 new ExportedParameter(body, var_This, parameter_This),
709 new ExportedParameter(body, var_Target, parameter_Target)
710 ));
711 // find rootElements(_Model, This)
712 new PositivePatternCall(body, Tuples.flatTupleOf(var__Model, var_This), RootElements.instance().getInternalQueryRepresentation());
713 // Target == FunctionType::Root
714 PVariable var__virtual_0_ = body.getOrCreateVariableByName(".virtual{0}");
715 new ConstantValue(body, var__virtual_0_, getEnumLiteral("FamMetamodel", "FunctionType", "Root").getInstance());
716 new Equality(body, var_Target, var__virtual_0_);
717 bodies.add(body);
718 }
719 {
720 PBody body = new PBody(this);
721 PVariable var_This = body.getOrCreateVariableByName("This");
722 PVariable var_Target = body.getOrCreateVariableByName("Target");
723 PVariable var__Child = body.getOrCreateVariableByName("_Child");
724 PVariable var__Model = body.getOrCreateVariableByName("_Model");
725 new TypeConstraint(body, Tuples.flatTupleOf(var_This), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("FamMetamodel", "Function")));
726 new TypeConstraint(body, Tuples.flatTupleOf(var_Target), new EDataTypeInSlotsKey((EDataType)getClassifierLiteral("FamMetamodel", "FunctionType")));
727 body.setSymbolicParameters(Arrays.<ExportedParameter>asList(
728 new ExportedParameter(body, var_This, parameter_This),
729 new ExportedParameter(body, var_Target, parameter_Target)
730 ));
731 // neg find parent(_Child, This)
732 new NegativePatternCall(body, Tuples.flatTupleOf(var__Child, var_This), Parent.instance().getInternalQueryRepresentation());
733 // neg find rootElements(_Model, This)
734 new NegativePatternCall(body, Tuples.flatTupleOf(var__Model, var_This), RootElements.instance().getInternalQueryRepresentation());
735 // Target == FunctionType::Leaf
736 PVariable var__virtual_0_ = body.getOrCreateVariableByName(".virtual{0}");
737 new ConstantValue(body, var__virtual_0_, getEnumLiteral("FamMetamodel", "FunctionType", "Leaf").getInstance());
738 new Equality(body, var_Target, var__virtual_0_);
739 bodies.add(body);
740 }
741 {
742 PBody body = new PBody(this);
743 PVariable var_This = body.getOrCreateVariableByName("This");
744 PVariable var_Target = body.getOrCreateVariableByName("Target");
745 PVariable var__Par = body.getOrCreateVariableByName("_Par");
746 PVariable var__Child = body.getOrCreateVariableByName("_Child");
747 new TypeConstraint(body, Tuples.flatTupleOf(var_This), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("FamMetamodel", "Function")));
748 new TypeConstraint(body, Tuples.flatTupleOf(var_Target), new EDataTypeInSlotsKey((EDataType)getClassifierLiteral("FamMetamodel", "FunctionType")));
749 body.setSymbolicParameters(Arrays.<ExportedParameter>asList(
750 new ExportedParameter(body, var_This, parameter_This),
751 new ExportedParameter(body, var_Target, parameter_Target)
752 ));
753 // find parent(This, _Par)
754 new PositivePatternCall(body, Tuples.flatTupleOf(var_This, var__Par), Parent.instance().getInternalQueryRepresentation());
755 // find parent(_Child, This)
756 new PositivePatternCall(body, Tuples.flatTupleOf(var__Child, var_This), Parent.instance().getInternalQueryRepresentation());
757 // Target == FunctionType::Intermediate
758 PVariable var__virtual_0_ = body.getOrCreateVariableByName(".virtual{0}");
759 new ConstantValue(body, var__virtual_0_, getEnumLiteral("FamMetamodel", "FunctionType", "Intermediate").getInstance());
760 new Equality(body, var_Target, var__virtual_0_);
761 bodies.add(body);
762 }
763 {
764 PAnnotation annotation = new PAnnotation("QueryBasedFeature");
765 addAnnotation(annotation);
766 }
767 return bodies;
768 }
769 }
770}
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/queries/.gitignore b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/queries/.gitignore
new file mode 100644
index 00000000..dcc36d34
--- /dev/null
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/filesystem/queries/.gitignore
@@ -0,0 +1,9 @@
1/.ContentInNotLive.java._trace
2/.FileSystem.java._trace
3/.Live.java._trace
4/.PatternContent.java._trace
5/.FileSystemPatterns.java._trace
6/PatternContent.java
7/ContentInNotLive.java
8/FileSystemPatterns.java
9/Live.java
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/.gitignore b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/.gitignore
new file mode 100644
index 00000000..96fd178f
--- /dev/null
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/.gitignore
@@ -0,0 +1,158 @@
1/.EntryInRegion_M0.java._trace
2/.EntryInRegion_M1.java._trace
3/.EntryInRegion_M2.java._trace
4/.MultipleEntryInRegion_M0.java._trace
5/.MultipleEntryInRegion_M1.java._trace
6/.MultipleEntryInRegion_M2.java._trace
7/.NoEntryInRegion_M0.java._trace
8/.NoEntryInRegion_M1.java._trace
9/.NoEntryInRegion_M2.java._trace
10/.NoEntryInRegion_M3.java._trace
11/.NoEntryInRegion_M4.java._trace
12/.NoEntryInRegion_M5.java._trace
13/.MultipleEntryInRegion_M3.java._trace
14/.EntryInRegion.java._trace
15/.MultipleEntryInRegion.java._trace
16/.NoEntryInRegion.java._trace
17/.Transition.java._trace
18/.Child.java._trace
19/.ChoiceHasNoIncoming.java._trace
20/.ChoiceHasNoOutgoing.java._trace
21/.HasMultipleIncomingTrainsition.java._trace
22/.HasMultipleOutgoingTrainsition.java._trace
23/.HasMultipleRegions.java._trace
24/.IncomingToEntry.java._trace
25/.MultipleTransitionFromEntry.java._trace
26/.NoOutgoingTransitionFromEntry.java._trace
27/.NoStateInRegion.java._trace
28/.NotSynchronizingStates.java._trace
29/.OutgoingFromExit.java._trace
30/.OutgoingFromFinal.java._trace
31/.StateInRegion.java._trace
32/.SynchHasNoIncoming.java._trace
33/.SynchHasNoOutgoing.java._trace
34/.SynchThree.java._trace
35/.SynchronizedIncomingInSameRegion.java._trace
36/.SynchronizedRegionDoesNotHaveMultipleRegions.java._trace
37/.SynchronizedRegionsAreNotSiblings.java._trace
38/.TwoSynch.java._trace
39/.YakinduPatterns.java._trace
40/.ChoiceHasNoIncoming_M0.java._trace
41/.ChoiceHasNoIncoming_M1.java._trace
42/.ChoiceHasNoIncoming_M2.java._trace
43/.ChoiceHasNoIncoming_M3.java._trace
44/.ChoiceHasNoIncoming_M4.java._trace
45/.ChoiceHasNoIncoming_M5.java._trace
46/.ChoiceHasNoIncoming_M6.java._trace
47/.ChoiceHasNoOutgoing_M0.java._trace
48/.ChoiceHasNoOutgoing_M1.java._trace
49/.ChoiceHasNoOutgoing_M2.java._trace
50/.ChoiceHasNoOutgoing_M3.java._trace
51/.ChoiceHasNoOutgoing_M4.java._trace
52/.ChoiceHasNoOutgoing_M5.java._trace
53/.ChoiceHasNoOutgoing_M6.java._trace
54/.IncomingToEntry_1.java._trace
55/.IncomingToEntry_2.java._trace
56/.IncomingToEntry_3.java._trace
57/.IncomingToEntry_4.java._trace
58/.IncomingToEntry_5.java._trace
59/.IncomingToEntry_M0.java._trace
60/.MultipleEntryInRegion_M4.java._trace
61/.MultipleEntryInRegion_M5.java._trace
62/.MultipleTransitionFromEntry_M0.java._trace
63/.MultipleTransitionFromEntry_M1.java._trace
64/.MultipleTransitionFromEntry_M2.java._trace
65/.MultipleTransitionFromEntry_M3.java._trace
66/.MultipleTransitionFromEntry_M4.java._trace
67/.NoOutgoingTransitionFromEntry_M0.java._trace
68/.NoOutgoingTransitionFromEntry_M1.java._trace
69/.NoOutgoingTransitionFromEntry_M2.java._trace
70/.NoOutgoingTransitionFromEntry_M3.java._trace
71/.NoOutgoingTransitionFromEntry_M4.java._trace
72/.NoOutgoingTransitionFromEntry_M5.java._trace
73/.NoStateInRegion_M0.java._trace
74/.NoStateInRegion_M1.java._trace
75/.NoStateInRegion_M2.java._trace
76/.NoStateInRegion_M3.java._trace
77/.OutgoingFromExit_M0.java._trace
78/.OutgoingFromExit_M1.java._trace
79/.OutgoingFromExit_M2.java._trace
80/.OutgoingFromFinal_M0.java._trace
81/.OutgoingFromFinal_M1.java._trace
82/.OutgoingFromFinal_M2.java._trace
83/.StateInRegion_M0.java._trace
84/.StateInRegion_M1.java._trace
85/.StateInRegion_M2.java._trace
86/.Transition_M0.java._trace
87/.Transition_M1.java._trace
88/.Transition_M2.java._trace
89/.Transition_M3.java._trace
90/.Transition_M4.java._trace
91/.YakinduMutatedPatterns.java._trace
92/YakinduPatterns.java
93/MultipleEntryInRegion.java
94/ChoiceHasNoIncoming_M0.java
95/ChoiceHasNoIncoming_M1.java
96/ChoiceHasNoIncoming_M2.java
97/ChoiceHasNoIncoming_M3.java
98/ChoiceHasNoIncoming_M4.java
99/ChoiceHasNoIncoming_M5.java
100/ChoiceHasNoIncoming_M6.java
101/ChoiceHasNoOutgoing_M0.java
102/ChoiceHasNoOutgoing_M1.java
103/ChoiceHasNoOutgoing_M2.java
104/ChoiceHasNoOutgoing_M3.java
105/ChoiceHasNoOutgoing_M4.java
106/ChoiceHasNoOutgoing_M5.java
107/ChoiceHasNoOutgoing_M6.java
108/EntryInRegion_M0.java
109/EntryInRegion_M1.java
110/EntryInRegion_M2.java
111/IncomingToEntry_1.java
112/IncomingToEntry_2.java
113/IncomingToEntry_3.java
114/IncomingToEntry_4.java
115/IncomingToEntry_5.java
116/IncomingToEntry_M0.java
117/MultipleEntryInRegion_M0.java
118/MultipleEntryInRegion_M1.java
119/MultipleEntryInRegion_M2.java
120/MultipleEntryInRegion_M3.java
121/MultipleEntryInRegion_M4.java
122/MultipleEntryInRegion_M5.java
123/MultipleTransitionFromEntry_M0.java
124/MultipleTransitionFromEntry_M1.java
125/MultipleTransitionFromEntry_M2.java
126/MultipleTransitionFromEntry_M3.java
127/MultipleTransitionFromEntry_M4.java
128/NoEntryInRegion_M0.java
129/NoEntryInRegion_M1.java
130/NoEntryInRegion_M2.java
131/NoEntryInRegion_M3.java
132/NoEntryInRegion_M4.java
133/NoEntryInRegion_M5.java
134/NoOutgoingTransitionFromEntry_M0.java
135/NoOutgoingTransitionFromEntry_M1.java
136/NoOutgoingTransitionFromEntry_M2.java
137/NoOutgoingTransitionFromEntry_M3.java
138/NoOutgoingTransitionFromEntry_M4.java
139/NoOutgoingTransitionFromEntry_M5.java
140/NoStateInRegion_M0.java
141/NoStateInRegion_M1.java
142/NoStateInRegion_M2.java
143/NoStateInRegion_M3.java
144/OutgoingFromExit_M0.java
145/OutgoingFromExit_M1.java
146/OutgoingFromExit_M2.java
147/OutgoingFromFinal_M0.java
148/OutgoingFromFinal_M1.java
149/OutgoingFromFinal_M2.java
150/StateInRegion_M0.java
151/StateInRegion_M1.java
152/StateInRegion_M2.java
153/Transition_M0.java
154/Transition_M1.java
155/Transition_M2.java
156/Transition_M3.java
157/Transition_M4.java
158/YakinduMutatedPatterns.java
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/Child.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/Child.java
new file mode 100644
index 00000000..9867c1ee
--- /dev/null
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/Child.java
@@ -0,0 +1,721 @@
1/**
2 * Generated from platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduPatterns.vql
3 */
4package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries;
5
6import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.CompositeElement;
7import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex;
8import java.util.Arrays;
9import java.util.Collection;
10import java.util.LinkedHashSet;
11import java.util.List;
12import java.util.Objects;
13import java.util.Optional;
14import java.util.Set;
15import java.util.function.Consumer;
16import java.util.stream.Collectors;
17import java.util.stream.Stream;
18import org.apache.log4j.Logger;
19import org.eclipse.emf.ecore.EClass;
20import org.eclipse.viatra.query.runtime.api.IPatternMatch;
21import org.eclipse.viatra.query.runtime.api.IQuerySpecification;
22import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine;
23import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFPQuery;
24import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFQuerySpecification;
25import org.eclipse.viatra.query.runtime.api.impl.BaseMatcher;
26import org.eclipse.viatra.query.runtime.api.impl.BasePatternMatch;
27import org.eclipse.viatra.query.runtime.emf.types.EClassTransitiveInstancesKey;
28import org.eclipse.viatra.query.runtime.emf.types.EStructuralFeatureInstancesKey;
29import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint;
30import org.eclipse.viatra.query.runtime.matchers.psystem.PBody;
31import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable;
32import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.Equality;
33import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExportedParameter;
34import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint;
35import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter;
36import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameterDirection;
37import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PVisibility;
38import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple;
39import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples;
40import org.eclipse.viatra.query.runtime.util.ViatraQueryLoggingUtil;
41
42/**
43 * A pattern-specific query specification that can instantiate Matcher in a type-safe way.
44 *
45 * <p>Original source:
46 * <code><pre>
47 * ///////////////////////////////
48 * // Extra
49 * //
50 * //{@literal @}Constraint(severity="error", message="error", key = {s})
51 * //pattern SynchronizedRegionDoesNotHaveParent(s : Synchronization, v : Vertex) {
52 * // find transition(_, v, s);
53 * // neg find child(_,v);
54 * //} or {
55 * // find transition(_, s, v);
56 * // neg find child(_,v);
57 * //}
58 *
59 * pattern child(parent: CompositeElement, child: Vertex) {
60 * CompositeElement.regions.vertices(parent, child);
61 * }
62 * </pre></code>
63 *
64 * @see Matcher
65 * @see Match
66 *
67 */
68@SuppressWarnings("all")
69public final class Child extends BaseGeneratedEMFQuerySpecification<Child.Matcher> {
70 /**
71 * Pattern-specific match representation of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.child pattern,
72 * to be used in conjunction with {@link Matcher}.
73 *
74 * <p>Class fields correspond to parameters of the pattern. Fields with value null are considered unassigned.
75 * Each instance is a (possibly partial) substitution of pattern parameters,
76 * usable to represent a match of the pattern in the result of a query,
77 * or to specify the bound (fixed) input parameters when issuing a query.
78 *
79 * @see Matcher
80 *
81 */
82 public static abstract class Match extends BasePatternMatch {
83 private CompositeElement fParent;
84
85 private Vertex fChild;
86
87 private static List<String> parameterNames = makeImmutableList("parent", "child");
88
89 private Match(final CompositeElement pParent, final Vertex pChild) {
90 this.fParent = pParent;
91 this.fChild = pChild;
92 }
93
94 @Override
95 public Object get(final String parameterName) {
96 if ("parent".equals(parameterName)) return this.fParent;
97 if ("child".equals(parameterName)) return this.fChild;
98 return null;
99 }
100
101 public CompositeElement getParent() {
102 return this.fParent;
103 }
104
105 public Vertex getChild() {
106 return this.fChild;
107 }
108
109 @Override
110 public boolean set(final String parameterName, final Object newValue) {
111 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
112 if ("parent".equals(parameterName) ) {
113 this.fParent = (CompositeElement) newValue;
114 return true;
115 }
116 if ("child".equals(parameterName) ) {
117 this.fChild = (Vertex) newValue;
118 return true;
119 }
120 return false;
121 }
122
123 public void setParent(final CompositeElement pParent) {
124 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
125 this.fParent = pParent;
126 }
127
128 public void setChild(final Vertex pChild) {
129 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
130 this.fChild = pChild;
131 }
132
133 @Override
134 public String patternName() {
135 return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.child";
136 }
137
138 @Override
139 public List<String> parameterNames() {
140 return Child.Match.parameterNames;
141 }
142
143 @Override
144 public Object[] toArray() {
145 return new Object[]{fParent, fChild};
146 }
147
148 @Override
149 public Child.Match toImmutable() {
150 return isMutable() ? newMatch(fParent, fChild) : this;
151 }
152
153 @Override
154 public String prettyPrint() {
155 StringBuilder result = new StringBuilder();
156 result.append("\"parent\"=" + prettyPrintValue(fParent) + ", ");
157 result.append("\"child\"=" + prettyPrintValue(fChild));
158 return result.toString();
159 }
160
161 @Override
162 public int hashCode() {
163 return Objects.hash(fParent, fChild);
164 }
165
166 @Override
167 public boolean equals(final Object obj) {
168 if (this == obj)
169 return true;
170 if (obj == null) {
171 return false;
172 }
173 if ((obj instanceof Child.Match)) {
174 Child.Match other = (Child.Match) obj;
175 return Objects.equals(fParent, other.fParent) && Objects.equals(fChild, other.fChild);
176 } else {
177 // this should be infrequent
178 if (!(obj instanceof IPatternMatch)) {
179 return false;
180 }
181 IPatternMatch otherSig = (IPatternMatch) obj;
182 return Objects.equals(specification(), otherSig.specification()) && Arrays.deepEquals(toArray(), otherSig.toArray());
183 }
184 }
185
186 @Override
187 public Child specification() {
188 return Child.instance();
189 }
190
191 /**
192 * Returns an empty, mutable match.
193 * Fields of the mutable match can be filled to create a partial match, usable as matcher input.
194 *
195 * @return the empty match.
196 *
197 */
198 public static Child.Match newEmptyMatch() {
199 return new Mutable(null, null);
200 }
201
202 /**
203 * Returns a mutable (partial) match.
204 * Fields of the mutable match can be filled to create a partial match, usable as matcher input.
205 *
206 * @param pParent the fixed value of pattern parameter parent, or null if not bound.
207 * @param pChild the fixed value of pattern parameter child, or null if not bound.
208 * @return the new, mutable (partial) match object.
209 *
210 */
211 public static Child.Match newMutableMatch(final CompositeElement pParent, final Vertex pChild) {
212 return new Mutable(pParent, pChild);
213 }
214
215 /**
216 * Returns a new (partial) match.
217 * This can be used e.g. to call the matcher with a partial match.
218 * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object.
219 * @param pParent the fixed value of pattern parameter parent, or null if not bound.
220 * @param pChild the fixed value of pattern parameter child, or null if not bound.
221 * @return the (partial) match object.
222 *
223 */
224 public static Child.Match newMatch(final CompositeElement pParent, final Vertex pChild) {
225 return new Immutable(pParent, pChild);
226 }
227
228 private static final class Mutable extends Child.Match {
229 Mutable(final CompositeElement pParent, final Vertex pChild) {
230 super(pParent, pChild);
231 }
232
233 @Override
234 public boolean isMutable() {
235 return true;
236 }
237 }
238
239 private static final class Immutable extends Child.Match {
240 Immutable(final CompositeElement pParent, final Vertex pChild) {
241 super(pParent, pChild);
242 }
243
244 @Override
245 public boolean isMutable() {
246 return false;
247 }
248 }
249 }
250
251 /**
252 * Generated pattern matcher API of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.child pattern,
253 * providing pattern-specific query methods.
254 *
255 * <p>Use the pattern matcher on a given model via {@link #on(ViatraQueryEngine)},
256 * e.g. in conjunction with {@link ViatraQueryEngine#on(QueryScope)}.
257 *
258 * <p>Matches of the pattern will be represented as {@link Match}.
259 *
260 * <p>Original source:
261 * <code><pre>
262 * ///////////////////////////////
263 * // Extra
264 * //
265 * //{@literal @}Constraint(severity="error", message="error", key = {s})
266 * //pattern SynchronizedRegionDoesNotHaveParent(s : Synchronization, v : Vertex) {
267 * // find transition(_, v, s);
268 * // neg find child(_,v);
269 * //} or {
270 * // find transition(_, s, v);
271 * // neg find child(_,v);
272 * //}
273 *
274 * pattern child(parent: CompositeElement, child: Vertex) {
275 * CompositeElement.regions.vertices(parent, child);
276 * }
277 * </pre></code>
278 *
279 * @see Match
280 * @see Child
281 *
282 */
283 public static class Matcher extends BaseMatcher<Child.Match> {
284 /**
285 * Initializes the pattern matcher within an existing VIATRA Query engine.
286 * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned.
287 *
288 * @param engine the existing VIATRA Query engine in which this matcher will be created.
289 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
290 *
291 */
292 public static Child.Matcher on(final ViatraQueryEngine engine) {
293 // check if matcher already exists
294 Matcher matcher = engine.getExistingMatcher(querySpecification());
295 if (matcher == null) {
296 matcher = (Matcher)engine.getMatcher(querySpecification());
297 }
298 return matcher;
299 }
300
301 /**
302 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
303 * @return an initialized matcher
304 * @noreference This method is for internal matcher initialization by the framework, do not call it manually.
305 *
306 */
307 public static Child.Matcher create() {
308 return new Matcher();
309 }
310
311 private final static int POSITION_PARENT = 0;
312
313 private final static int POSITION_CHILD = 1;
314
315 private final static Logger LOGGER = ViatraQueryLoggingUtil.getLogger(Child.Matcher.class);
316
317 /**
318 * Initializes the pattern matcher within an existing VIATRA Query engine.
319 * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned.
320 *
321 * @param engine the existing VIATRA Query engine in which this matcher will be created.
322 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
323 *
324 */
325 private Matcher() {
326 super(querySpecification());
327 }
328
329 /**
330 * Returns the set of all matches of the pattern that conform to the given fixed values of some parameters.
331 * @param pParent the fixed value of pattern parameter parent, or null if not bound.
332 * @param pChild the fixed value of pattern parameter child, or null if not bound.
333 * @return matches represented as a Match object.
334 *
335 */
336 public Collection<Child.Match> getAllMatches(final CompositeElement pParent, final Vertex pChild) {
337 return rawStreamAllMatches(new Object[]{pParent, pChild}).collect(Collectors.toSet());
338 }
339
340 /**
341 * Returns a stream of all matches of the pattern that conform to the given fixed values of some parameters.
342 * </p>
343 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
344 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
345 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
346 * @param pParent the fixed value of pattern parameter parent, or null if not bound.
347 * @param pChild the fixed value of pattern parameter child, or null if not bound.
348 * @return a stream of matches represented as a Match object.
349 *
350 */
351 public Stream<Child.Match> streamAllMatches(final CompositeElement pParent, final Vertex pChild) {
352 return rawStreamAllMatches(new Object[]{pParent, pChild});
353 }
354
355 /**
356 * Returns an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters.
357 * Neither determinism nor randomness of selection is guaranteed.
358 * @param pParent the fixed value of pattern parameter parent, or null if not bound.
359 * @param pChild the fixed value of pattern parameter child, or null if not bound.
360 * @return a match represented as a Match object, or null if no match is found.
361 *
362 */
363 public Optional<Child.Match> getOneArbitraryMatch(final CompositeElement pParent, final Vertex pChild) {
364 return rawGetOneArbitraryMatch(new Object[]{pParent, pChild});
365 }
366
367 /**
368 * Indicates whether the given combination of specified pattern parameters constitute a valid pattern match,
369 * under any possible substitution of the unspecified parameters (if any).
370 * @param pParent the fixed value of pattern parameter parent, or null if not bound.
371 * @param pChild the fixed value of pattern parameter child, or null if not bound.
372 * @return true if the input is a valid (partial) match of the pattern.
373 *
374 */
375 public boolean hasMatch(final CompositeElement pParent, final Vertex pChild) {
376 return rawHasMatch(new Object[]{pParent, pChild});
377 }
378
379 /**
380 * Returns the number of all matches of the pattern that conform to the given fixed values of some parameters.
381 * @param pParent the fixed value of pattern parameter parent, or null if not bound.
382 * @param pChild the fixed value of pattern parameter child, or null if not bound.
383 * @return the number of pattern matches found.
384 *
385 */
386 public int countMatches(final CompositeElement pParent, final Vertex pChild) {
387 return rawCountMatches(new Object[]{pParent, pChild});
388 }
389
390 /**
391 * Executes the given processor on an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters.
392 * Neither determinism nor randomness of selection is guaranteed.
393 * @param pParent the fixed value of pattern parameter parent, or null if not bound.
394 * @param pChild the fixed value of pattern parameter child, or null if not bound.
395 * @param processor the action that will process the selected match.
396 * @return true if the pattern has at least one match with the given parameter values, false if the processor was not invoked
397 *
398 */
399 public boolean forOneArbitraryMatch(final CompositeElement pParent, final Vertex pChild, final Consumer<? super Child.Match> processor) {
400 return rawForOneArbitraryMatch(new Object[]{pParent, pChild}, processor);
401 }
402
403 /**
404 * Returns a new (partial) match.
405 * This can be used e.g. to call the matcher with a partial match.
406 * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object.
407 * @param pParent the fixed value of pattern parameter parent, or null if not bound.
408 * @param pChild the fixed value of pattern parameter child, or null if not bound.
409 * @return the (partial) match object.
410 *
411 */
412 public Child.Match newMatch(final CompositeElement pParent, final Vertex pChild) {
413 return Child.Match.newMatch(pParent, pChild);
414 }
415
416 /**
417 * Retrieve the set of values that occur in matches for parent.
418 * @return the Set of all values or empty set if there are no matches
419 *
420 */
421 protected Stream<CompositeElement> rawStreamAllValuesOfparent(final Object[] parameters) {
422 return rawStreamAllValues(POSITION_PARENT, parameters).map(CompositeElement.class::cast);
423 }
424
425 /**
426 * Retrieve the set of values that occur in matches for parent.
427 * @return the Set of all values or empty set if there are no matches
428 *
429 */
430 public Set<CompositeElement> getAllValuesOfparent() {
431 return rawStreamAllValuesOfparent(emptyArray()).collect(Collectors.toSet());
432 }
433
434 /**
435 * Retrieve the set of values that occur in matches for parent.
436 * @return the Set of all values or empty set if there are no matches
437 *
438 */
439 public Stream<CompositeElement> streamAllValuesOfparent() {
440 return rawStreamAllValuesOfparent(emptyArray());
441 }
442
443 /**
444 * Retrieve the set of values that occur in matches for parent.
445 * </p>
446 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
447 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
448 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
449 *
450 * @return the Stream of all values or empty set if there are no matches
451 *
452 */
453 public Stream<CompositeElement> streamAllValuesOfparent(final Child.Match partialMatch) {
454 return rawStreamAllValuesOfparent(partialMatch.toArray());
455 }
456
457 /**
458 * Retrieve the set of values that occur in matches for parent.
459 * </p>
460 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
461 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
462 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
463 *
464 * @return the Stream of all values or empty set if there are no matches
465 *
466 */
467 public Stream<CompositeElement> streamAllValuesOfparent(final Vertex pChild) {
468 return rawStreamAllValuesOfparent(new Object[]{null, pChild});
469 }
470
471 /**
472 * Retrieve the set of values that occur in matches for parent.
473 * @return the Set of all values or empty set if there are no matches
474 *
475 */
476 public Set<CompositeElement> getAllValuesOfparent(final Child.Match partialMatch) {
477 return rawStreamAllValuesOfparent(partialMatch.toArray()).collect(Collectors.toSet());
478 }
479
480 /**
481 * Retrieve the set of values that occur in matches for parent.
482 * @return the Set of all values or empty set if there are no matches
483 *
484 */
485 public Set<CompositeElement> getAllValuesOfparent(final Vertex pChild) {
486 return rawStreamAllValuesOfparent(new Object[]{null, pChild}).collect(Collectors.toSet());
487 }
488
489 /**
490 * Retrieve the set of values that occur in matches for child.
491 * @return the Set of all values or empty set if there are no matches
492 *
493 */
494 protected Stream<Vertex> rawStreamAllValuesOfchild(final Object[] parameters) {
495 return rawStreamAllValues(POSITION_CHILD, parameters).map(Vertex.class::cast);
496 }
497
498 /**
499 * Retrieve the set of values that occur in matches for child.
500 * @return the Set of all values or empty set if there are no matches
501 *
502 */
503 public Set<Vertex> getAllValuesOfchild() {
504 return rawStreamAllValuesOfchild(emptyArray()).collect(Collectors.toSet());
505 }
506
507 /**
508 * Retrieve the set of values that occur in matches for child.
509 * @return the Set of all values or empty set if there are no matches
510 *
511 */
512 public Stream<Vertex> streamAllValuesOfchild() {
513 return rawStreamAllValuesOfchild(emptyArray());
514 }
515
516 /**
517 * Retrieve the set of values that occur in matches for child.
518 * </p>
519 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
520 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
521 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
522 *
523 * @return the Stream of all values or empty set if there are no matches
524 *
525 */
526 public Stream<Vertex> streamAllValuesOfchild(final Child.Match partialMatch) {
527 return rawStreamAllValuesOfchild(partialMatch.toArray());
528 }
529
530 /**
531 * Retrieve the set of values that occur in matches for child.
532 * </p>
533 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
534 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
535 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
536 *
537 * @return the Stream of all values or empty set if there are no matches
538 *
539 */
540 public Stream<Vertex> streamAllValuesOfchild(final CompositeElement pParent) {
541 return rawStreamAllValuesOfchild(new Object[]{pParent, null});
542 }
543
544 /**
545 * Retrieve the set of values that occur in matches for child.
546 * @return the Set of all values or empty set if there are no matches
547 *
548 */
549 public Set<Vertex> getAllValuesOfchild(final Child.Match partialMatch) {
550 return rawStreamAllValuesOfchild(partialMatch.toArray()).collect(Collectors.toSet());
551 }
552
553 /**
554 * Retrieve the set of values that occur in matches for child.
555 * @return the Set of all values or empty set if there are no matches
556 *
557 */
558 public Set<Vertex> getAllValuesOfchild(final CompositeElement pParent) {
559 return rawStreamAllValuesOfchild(new Object[]{pParent, null}).collect(Collectors.toSet());
560 }
561
562 @Override
563 protected Child.Match tupleToMatch(final Tuple t) {
564 try {
565 return Child.Match.newMatch((CompositeElement) t.get(POSITION_PARENT), (Vertex) t.get(POSITION_CHILD));
566 } catch(ClassCastException e) {
567 LOGGER.error("Element(s) in tuple not properly typed!",e);
568 return null;
569 }
570 }
571
572 @Override
573 protected Child.Match arrayToMatch(final Object[] match) {
574 try {
575 return Child.Match.newMatch((CompositeElement) match[POSITION_PARENT], (Vertex) match[POSITION_CHILD]);
576 } catch(ClassCastException e) {
577 LOGGER.error("Element(s) in array not properly typed!",e);
578 return null;
579 }
580 }
581
582 @Override
583 protected Child.Match arrayToMatchMutable(final Object[] match) {
584 try {
585 return Child.Match.newMutableMatch((CompositeElement) match[POSITION_PARENT], (Vertex) match[POSITION_CHILD]);
586 } catch(ClassCastException e) {
587 LOGGER.error("Element(s) in array not properly typed!",e);
588 return null;
589 }
590 }
591
592 /**
593 * @return the singleton instance of the query specification of this pattern
594 * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded
595 *
596 */
597 public static IQuerySpecification<Child.Matcher> querySpecification() {
598 return Child.instance();
599 }
600 }
601
602 private Child() {
603 super(GeneratedPQuery.INSTANCE);
604 }
605
606 /**
607 * @return the singleton instance of the query specification
608 * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded
609 *
610 */
611 public static Child instance() {
612 try{
613 return LazyHolder.INSTANCE;
614 } catch (ExceptionInInitializerError err) {
615 throw processInitializerError(err);
616 }
617 }
618
619 @Override
620 protected Child.Matcher instantiate(final ViatraQueryEngine engine) {
621 return Child.Matcher.on(engine);
622 }
623
624 @Override
625 public Child.Matcher instantiate() {
626 return Child.Matcher.create();
627 }
628
629 @Override
630 public Child.Match newEmptyMatch() {
631 return Child.Match.newEmptyMatch();
632 }
633
634 @Override
635 public Child.Match newMatch(final Object... parameters) {
636 return Child.Match.newMatch((ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.CompositeElement) parameters[0], (ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex) parameters[1]);
637 }
638
639 /**
640 * Inner class allowing the singleton instance of {@link JvmGenericType: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.Child (visibility: PUBLIC, simpleName: Child, identifier: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.Child, deprecated: <unset>) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)} to be created
641 * <b>not</b> at the class load time of the outer class,
642 * but rather at the first call to {@link JvmGenericType: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.Child (visibility: PUBLIC, simpleName: Child, identifier: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.Child, deprecated: <unset>) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)#instance()}.
643 *
644 * <p> This workaround is required e.g. to support recursion.
645 *
646 */
647 private static class LazyHolder {
648 private final static Child INSTANCE = new Child();
649
650 /**
651 * Statically initializes the query specification <b>after</b> the field {@link #INSTANCE} is assigned.
652 * This initialization order is required to support indirect recursion.
653 *
654 * <p> The static initializer is defined using a helper field to work around limitations of the code generator.
655 *
656 */
657 private final static Object STATIC_INITIALIZER = ensureInitialized();
658
659 public static Object ensureInitialized() {
660 INSTANCE.ensureInitializedInternal();
661 return null;
662 }
663 }
664
665 private static class GeneratedPQuery extends BaseGeneratedEMFPQuery {
666 private final static Child.GeneratedPQuery INSTANCE = new GeneratedPQuery();
667
668 private final PParameter parameter_parent = new PParameter("parent", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.CompositeElement", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "CompositeElement")), PParameterDirection.INOUT);
669
670 private final PParameter parameter_child = new PParameter("child", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "Vertex")), PParameterDirection.INOUT);
671
672 private final List<PParameter> parameters = Arrays.asList(parameter_parent, parameter_child);
673
674 private GeneratedPQuery() {
675 super(PVisibility.PUBLIC);
676 }
677
678 @Override
679 public String getFullyQualifiedName() {
680 return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.child";
681 }
682
683 @Override
684 public List<String> getParameterNames() {
685 return Arrays.asList("parent","child");
686 }
687
688 @Override
689 public List<PParameter> getParameters() {
690 return parameters;
691 }
692
693 @Override
694 public Set<PBody> doGetContainedBodies() {
695 setEvaluationHints(new QueryEvaluationHint(null, QueryEvaluationHint.BackendRequirement.UNSPECIFIED));
696 Set<PBody> bodies = new LinkedHashSet<>();
697 {
698 PBody body = new PBody(this);
699 PVariable var_parent = body.getOrCreateVariableByName("parent");
700 PVariable var_child = body.getOrCreateVariableByName("child");
701 new TypeConstraint(body, Tuples.flatTupleOf(var_parent), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "CompositeElement")));
702 new TypeConstraint(body, Tuples.flatTupleOf(var_child), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Vertex")));
703 body.setSymbolicParameters(Arrays.<ExportedParameter>asList(
704 new ExportedParameter(body, var_parent, parameter_parent),
705 new ExportedParameter(body, var_child, parameter_child)
706 ));
707 // CompositeElement.regions.vertices(parent, child)
708 new TypeConstraint(body, Tuples.flatTupleOf(var_parent), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "CompositeElement")));
709 PVariable var__virtual_0_ = body.getOrCreateVariableByName(".virtual{0}");
710 new TypeConstraint(body, Tuples.flatTupleOf(var_parent, var__virtual_0_), new EStructuralFeatureInstancesKey(getFeatureLiteral("YakinduMetamodel", "CompositeElement", "regions")));
711 new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_0_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Region")));
712 PVariable var__virtual_1_ = body.getOrCreateVariableByName(".virtual{1}");
713 new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_0_, var__virtual_1_), new EStructuralFeatureInstancesKey(getFeatureLiteral("YakinduMetamodel", "Region", "vertices")));
714 new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_1_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Vertex")));
715 new Equality(body, var__virtual_1_, var_child);
716 bodies.add(body);
717 }
718 return bodies;
719 }
720 }
721}
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/ChoiceHasNoIncoming.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/ChoiceHasNoIncoming.java
new file mode 100644
index 00000000..8e62ee9d
--- /dev/null
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/ChoiceHasNoIncoming.java
@@ -0,0 +1,551 @@
1/**
2 * Generated from platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduPatterns.vql
3 */
4package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries;
5
6import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Choice;
7import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.Transition;
8import java.util.Arrays;
9import java.util.Collection;
10import java.util.LinkedHashSet;
11import java.util.List;
12import java.util.Objects;
13import java.util.Optional;
14import java.util.Set;
15import java.util.function.Consumer;
16import java.util.stream.Collectors;
17import java.util.stream.Stream;
18import org.apache.log4j.Logger;
19import org.eclipse.emf.ecore.EClass;
20import org.eclipse.viatra.query.runtime.api.IPatternMatch;
21import org.eclipse.viatra.query.runtime.api.IQuerySpecification;
22import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine;
23import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFPQuery;
24import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFQuerySpecification;
25import org.eclipse.viatra.query.runtime.api.impl.BaseMatcher;
26import org.eclipse.viatra.query.runtime.api.impl.BasePatternMatch;
27import org.eclipse.viatra.query.runtime.emf.types.EClassTransitiveInstancesKey;
28import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint;
29import org.eclipse.viatra.query.runtime.matchers.psystem.PBody;
30import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable;
31import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.PAnnotation;
32import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.ParameterReference;
33import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExportedParameter;
34import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.NegativePatternCall;
35import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint;
36import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter;
37import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameterDirection;
38import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PVisibility;
39import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple;
40import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples;
41import org.eclipse.viatra.query.runtime.util.ViatraQueryLoggingUtil;
42
43/**
44 * A pattern-specific query specification that can instantiate Matcher in a type-safe way.
45 *
46 * <p>Original source:
47 * <code><pre>
48 * {@literal @}Constraint(severity="error", message="error", key = {c})
49 * pattern choiceHasNoIncoming(c: Choice) {
50 * neg find transition(_, _, c);
51 * }
52 * </pre></code>
53 *
54 * @see Matcher
55 * @see Match
56 *
57 */
58@SuppressWarnings("all")
59public final class ChoiceHasNoIncoming extends BaseGeneratedEMFQuerySpecification<ChoiceHasNoIncoming.Matcher> {
60 /**
61 * Pattern-specific match representation of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.choiceHasNoIncoming pattern,
62 * to be used in conjunction with {@link Matcher}.
63 *
64 * <p>Class fields correspond to parameters of the pattern. Fields with value null are considered unassigned.
65 * Each instance is a (possibly partial) substitution of pattern parameters,
66 * usable to represent a match of the pattern in the result of a query,
67 * or to specify the bound (fixed) input parameters when issuing a query.
68 *
69 * @see Matcher
70 *
71 */
72 public static abstract class Match extends BasePatternMatch {
73 private Choice fC;
74
75 private static List<String> parameterNames = makeImmutableList("c");
76
77 private Match(final Choice pC) {
78 this.fC = pC;
79 }
80
81 @Override
82 public Object get(final String parameterName) {
83 if ("c".equals(parameterName)) return this.fC;
84 return null;
85 }
86
87 public Choice getC() {
88 return this.fC;
89 }
90
91 @Override
92 public boolean set(final String parameterName, final Object newValue) {
93 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
94 if ("c".equals(parameterName) ) {
95 this.fC = (Choice) newValue;
96 return true;
97 }
98 return false;
99 }
100
101 public void setC(final Choice pC) {
102 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
103 this.fC = pC;
104 }
105
106 @Override
107 public String patternName() {
108 return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.choiceHasNoIncoming";
109 }
110
111 @Override
112 public List<String> parameterNames() {
113 return ChoiceHasNoIncoming.Match.parameterNames;
114 }
115
116 @Override
117 public Object[] toArray() {
118 return new Object[]{fC};
119 }
120
121 @Override
122 public ChoiceHasNoIncoming.Match toImmutable() {
123 return isMutable() ? newMatch(fC) : this;
124 }
125
126 @Override
127 public String prettyPrint() {
128 StringBuilder result = new StringBuilder();
129 result.append("\"c\"=" + prettyPrintValue(fC));
130 return result.toString();
131 }
132
133 @Override
134 public int hashCode() {
135 return Objects.hash(fC);
136 }
137
138 @Override
139 public boolean equals(final Object obj) {
140 if (this == obj)
141 return true;
142 if (obj == null) {
143 return false;
144 }
145 if ((obj instanceof ChoiceHasNoIncoming.Match)) {
146 ChoiceHasNoIncoming.Match other = (ChoiceHasNoIncoming.Match) obj;
147 return Objects.equals(fC, other.fC);
148 } else {
149 // this should be infrequent
150 if (!(obj instanceof IPatternMatch)) {
151 return false;
152 }
153 IPatternMatch otherSig = (IPatternMatch) obj;
154 return Objects.equals(specification(), otherSig.specification()) && Arrays.deepEquals(toArray(), otherSig.toArray());
155 }
156 }
157
158 @Override
159 public ChoiceHasNoIncoming specification() {
160 return ChoiceHasNoIncoming.instance();
161 }
162
163 /**
164 * Returns an empty, mutable match.
165 * Fields of the mutable match can be filled to create a partial match, usable as matcher input.
166 *
167 * @return the empty match.
168 *
169 */
170 public static ChoiceHasNoIncoming.Match newEmptyMatch() {
171 return new Mutable(null);
172 }
173
174 /**
175 * Returns a mutable (partial) match.
176 * Fields of the mutable match can be filled to create a partial match, usable as matcher input.
177 *
178 * @param pC the fixed value of pattern parameter c, or null if not bound.
179 * @return the new, mutable (partial) match object.
180 *
181 */
182 public static ChoiceHasNoIncoming.Match newMutableMatch(final Choice pC) {
183 return new Mutable(pC);
184 }
185
186 /**
187 * Returns a new (partial) match.
188 * This can be used e.g. to call the matcher with a partial match.
189 * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object.
190 * @param pC the fixed value of pattern parameter c, or null if not bound.
191 * @return the (partial) match object.
192 *
193 */
194 public static ChoiceHasNoIncoming.Match newMatch(final Choice pC) {
195 return new Immutable(pC);
196 }
197
198 private static final class Mutable extends ChoiceHasNoIncoming.Match {
199 Mutable(final Choice pC) {
200 super(pC);
201 }
202
203 @Override
204 public boolean isMutable() {
205 return true;
206 }
207 }
208
209 private static final class Immutable extends ChoiceHasNoIncoming.Match {
210 Immutable(final Choice pC) {
211 super(pC);
212 }
213
214 @Override
215 public boolean isMutable() {
216 return false;
217 }
218 }
219 }
220
221 /**
222 * Generated pattern matcher API of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.choiceHasNoIncoming pattern,
223 * providing pattern-specific query methods.
224 *
225 * <p>Use the pattern matcher on a given model via {@link #on(ViatraQueryEngine)},
226 * e.g. in conjunction with {@link ViatraQueryEngine#on(QueryScope)}.
227 *
228 * <p>Matches of the pattern will be represented as {@link Match}.
229 *
230 * <p>Original source:
231 * <code><pre>
232 * {@literal @}Constraint(severity="error", message="error", key = {c})
233 * pattern choiceHasNoIncoming(c: Choice) {
234 * neg find transition(_, _, c);
235 * }
236 * </pre></code>
237 *
238 * @see Match
239 * @see ChoiceHasNoIncoming
240 *
241 */
242 public static class Matcher extends BaseMatcher<ChoiceHasNoIncoming.Match> {
243 /**
244 * Initializes the pattern matcher within an existing VIATRA Query engine.
245 * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned.
246 *
247 * @param engine the existing VIATRA Query engine in which this matcher will be created.
248 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
249 *
250 */
251 public static ChoiceHasNoIncoming.Matcher on(final ViatraQueryEngine engine) {
252 // check if matcher already exists
253 Matcher matcher = engine.getExistingMatcher(querySpecification());
254 if (matcher == null) {
255 matcher = (Matcher)engine.getMatcher(querySpecification());
256 }
257 return matcher;
258 }
259
260 /**
261 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
262 * @return an initialized matcher
263 * @noreference This method is for internal matcher initialization by the framework, do not call it manually.
264 *
265 */
266 public static ChoiceHasNoIncoming.Matcher create() {
267 return new Matcher();
268 }
269
270 private final static int POSITION_C = 0;
271
272 private final static Logger LOGGER = ViatraQueryLoggingUtil.getLogger(ChoiceHasNoIncoming.Matcher.class);
273
274 /**
275 * Initializes the pattern matcher within an existing VIATRA Query engine.
276 * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned.
277 *
278 * @param engine the existing VIATRA Query engine in which this matcher will be created.
279 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
280 *
281 */
282 private Matcher() {
283 super(querySpecification());
284 }
285
286 /**
287 * Returns the set of all matches of the pattern that conform to the given fixed values of some parameters.
288 * @param pC the fixed value of pattern parameter c, or null if not bound.
289 * @return matches represented as a Match object.
290 *
291 */
292 public Collection<ChoiceHasNoIncoming.Match> getAllMatches(final Choice pC) {
293 return rawStreamAllMatches(new Object[]{pC}).collect(Collectors.toSet());
294 }
295
296 /**
297 * Returns a stream of all matches of the pattern that conform to the given fixed values of some parameters.
298 * </p>
299 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
300 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
301 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
302 * @param pC the fixed value of pattern parameter c, or null if not bound.
303 * @return a stream of matches represented as a Match object.
304 *
305 */
306 public Stream<ChoiceHasNoIncoming.Match> streamAllMatches(final Choice pC) {
307 return rawStreamAllMatches(new Object[]{pC});
308 }
309
310 /**
311 * Returns an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters.
312 * Neither determinism nor randomness of selection is guaranteed.
313 * @param pC the fixed value of pattern parameter c, or null if not bound.
314 * @return a match represented as a Match object, or null if no match is found.
315 *
316 */
317 public Optional<ChoiceHasNoIncoming.Match> getOneArbitraryMatch(final Choice pC) {
318 return rawGetOneArbitraryMatch(new Object[]{pC});
319 }
320
321 /**
322 * Indicates whether the given combination of specified pattern parameters constitute a valid pattern match,
323 * under any possible substitution of the unspecified parameters (if any).
324 * @param pC the fixed value of pattern parameter c, or null if not bound.
325 * @return true if the input is a valid (partial) match of the pattern.
326 *
327 */
328 public boolean hasMatch(final Choice pC) {
329 return rawHasMatch(new Object[]{pC});
330 }
331
332 /**
333 * Returns the number of all matches of the pattern that conform to the given fixed values of some parameters.
334 * @param pC the fixed value of pattern parameter c, or null if not bound.
335 * @return the number of pattern matches found.
336 *
337 */
338 public int countMatches(final Choice pC) {
339 return rawCountMatches(new Object[]{pC});
340 }
341
342 /**
343 * Executes the given processor on an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters.
344 * Neither determinism nor randomness of selection is guaranteed.
345 * @param pC the fixed value of pattern parameter c, or null if not bound.
346 * @param processor the action that will process the selected match.
347 * @return true if the pattern has at least one match with the given parameter values, false if the processor was not invoked
348 *
349 */
350 public boolean forOneArbitraryMatch(final Choice pC, final Consumer<? super ChoiceHasNoIncoming.Match> processor) {
351 return rawForOneArbitraryMatch(new Object[]{pC}, processor);
352 }
353
354 /**
355 * Returns a new (partial) match.
356 * This can be used e.g. to call the matcher with a partial match.
357 * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object.
358 * @param pC the fixed value of pattern parameter c, or null if not bound.
359 * @return the (partial) match object.
360 *
361 */
362 public ChoiceHasNoIncoming.Match newMatch(final Choice pC) {
363 return ChoiceHasNoIncoming.Match.newMatch(pC);
364 }
365
366 /**
367 * Retrieve the set of values that occur in matches for c.
368 * @return the Set of all values or empty set if there are no matches
369 *
370 */
371 protected Stream<Choice> rawStreamAllValuesOfc(final Object[] parameters) {
372 return rawStreamAllValues(POSITION_C, parameters).map(Choice.class::cast);
373 }
374
375 /**
376 * Retrieve the set of values that occur in matches for c.
377 * @return the Set of all values or empty set if there are no matches
378 *
379 */
380 public Set<Choice> getAllValuesOfc() {
381 return rawStreamAllValuesOfc(emptyArray()).collect(Collectors.toSet());
382 }
383
384 /**
385 * Retrieve the set of values that occur in matches for c.
386 * @return the Set of all values or empty set if there are no matches
387 *
388 */
389 public Stream<Choice> streamAllValuesOfc() {
390 return rawStreamAllValuesOfc(emptyArray());
391 }
392
393 @Override
394 protected ChoiceHasNoIncoming.Match tupleToMatch(final Tuple t) {
395 try {
396 return ChoiceHasNoIncoming.Match.newMatch((Choice) t.get(POSITION_C));
397 } catch(ClassCastException e) {
398 LOGGER.error("Element(s) in tuple not properly typed!",e);
399 return null;
400 }
401 }
402
403 @Override
404 protected ChoiceHasNoIncoming.Match arrayToMatch(final Object[] match) {
405 try {
406 return ChoiceHasNoIncoming.Match.newMatch((Choice) match[POSITION_C]);
407 } catch(ClassCastException e) {
408 LOGGER.error("Element(s) in array not properly typed!",e);
409 return null;
410 }
411 }
412
413 @Override
414 protected ChoiceHasNoIncoming.Match arrayToMatchMutable(final Object[] match) {
415 try {
416 return ChoiceHasNoIncoming.Match.newMutableMatch((Choice) match[POSITION_C]);
417 } catch(ClassCastException e) {
418 LOGGER.error("Element(s) in array not properly typed!",e);
419 return null;
420 }
421 }
422
423 /**
424 * @return the singleton instance of the query specification of this pattern
425 * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded
426 *
427 */
428 public static IQuerySpecification<ChoiceHasNoIncoming.Matcher> querySpecification() {
429 return ChoiceHasNoIncoming.instance();
430 }
431 }
432
433 private ChoiceHasNoIncoming() {
434 super(GeneratedPQuery.INSTANCE);
435 }
436
437 /**
438 * @return the singleton instance of the query specification
439 * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded
440 *
441 */
442 public static ChoiceHasNoIncoming instance() {
443 try{
444 return LazyHolder.INSTANCE;
445 } catch (ExceptionInInitializerError err) {
446 throw processInitializerError(err);
447 }
448 }
449
450 @Override
451 protected ChoiceHasNoIncoming.Matcher instantiate(final ViatraQueryEngine engine) {
452 return ChoiceHasNoIncoming.Matcher.on(engine);
453 }
454
455 @Override
456 public ChoiceHasNoIncoming.Matcher instantiate() {
457 return ChoiceHasNoIncoming.Matcher.create();
458 }
459
460 @Override
461 public ChoiceHasNoIncoming.Match newEmptyMatch() {
462 return ChoiceHasNoIncoming.Match.newEmptyMatch();
463 }
464
465 @Override
466 public ChoiceHasNoIncoming.Match newMatch(final Object... parameters) {
467 return ChoiceHasNoIncoming.Match.newMatch((ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Choice) parameters[0]);
468 }
469
470 /**
471 * Inner class allowing the singleton instance of {@link JvmGenericType: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.ChoiceHasNoIncoming (visibility: PUBLIC, simpleName: ChoiceHasNoIncoming, identifier: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.ChoiceHasNoIncoming, deprecated: <unset>) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)} to be created
472 * <b>not</b> at the class load time of the outer class,
473 * but rather at the first call to {@link JvmGenericType: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.ChoiceHasNoIncoming (visibility: PUBLIC, simpleName: ChoiceHasNoIncoming, identifier: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.ChoiceHasNoIncoming, deprecated: <unset>) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)#instance()}.
474 *
475 * <p> This workaround is required e.g. to support recursion.
476 *
477 */
478 private static class LazyHolder {
479 private final static ChoiceHasNoIncoming INSTANCE = new ChoiceHasNoIncoming();
480
481 /**
482 * Statically initializes the query specification <b>after</b> the field {@link #INSTANCE} is assigned.
483 * This initialization order is required to support indirect recursion.
484 *
485 * <p> The static initializer is defined using a helper field to work around limitations of the code generator.
486 *
487 */
488 private final static Object STATIC_INITIALIZER = ensureInitialized();
489
490 public static Object ensureInitialized() {
491 INSTANCE.ensureInitializedInternal();
492 return null;
493 }
494 }
495
496 private static class GeneratedPQuery extends BaseGeneratedEMFPQuery {
497 private final static ChoiceHasNoIncoming.GeneratedPQuery INSTANCE = new GeneratedPQuery();
498
499 private final PParameter parameter_c = new PParameter("c", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Choice", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "Choice")), PParameterDirection.INOUT);
500
501 private final List<PParameter> parameters = Arrays.asList(parameter_c);
502
503 private GeneratedPQuery() {
504 super(PVisibility.PUBLIC);
505 }
506
507 @Override
508 public String getFullyQualifiedName() {
509 return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.choiceHasNoIncoming";
510 }
511
512 @Override
513 public List<String> getParameterNames() {
514 return Arrays.asList("c");
515 }
516
517 @Override
518 public List<PParameter> getParameters() {
519 return parameters;
520 }
521
522 @Override
523 public Set<PBody> doGetContainedBodies() {
524 setEvaluationHints(new QueryEvaluationHint(null, QueryEvaluationHint.BackendRequirement.UNSPECIFIED));
525 Set<PBody> bodies = new LinkedHashSet<>();
526 {
527 PBody body = new PBody(this);
528 PVariable var_c = body.getOrCreateVariableByName("c");
529 PVariable var___0_ = body.getOrCreateVariableByName("_<0>");
530 PVariable var___1_ = body.getOrCreateVariableByName("_<1>");
531 new TypeConstraint(body, Tuples.flatTupleOf(var_c), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Choice")));
532 body.setSymbolicParameters(Arrays.<ExportedParameter>asList(
533 new ExportedParameter(body, var_c, parameter_c)
534 ));
535 // neg find transition(_, _, c)
536 new NegativePatternCall(body, Tuples.flatTupleOf(var___0_, var___1_, var_c), Transition.instance().getInternalQueryRepresentation());
537 bodies.add(body);
538 }
539 {
540 PAnnotation annotation = new PAnnotation("Constraint");
541 annotation.addAttribute("severity", "error");
542 annotation.addAttribute("message", "error");
543 annotation.addAttribute("key", Arrays.asList(new Object[] {
544 new ParameterReference("c")
545 }));
546 addAnnotation(annotation);
547 }
548 return bodies;
549 }
550 }
551}
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/ChoiceHasNoOutgoing.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/ChoiceHasNoOutgoing.java
new file mode 100644
index 00000000..1c20a03b
--- /dev/null
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/ChoiceHasNoOutgoing.java
@@ -0,0 +1,559 @@
1/**
2 * Generated from platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduPatterns.vql
3 */
4package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries;
5
6import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Choice;
7import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.Transition;
8import java.util.Arrays;
9import java.util.Collection;
10import java.util.LinkedHashSet;
11import java.util.List;
12import java.util.Objects;
13import java.util.Optional;
14import java.util.Set;
15import java.util.function.Consumer;
16import java.util.stream.Collectors;
17import java.util.stream.Stream;
18import org.apache.log4j.Logger;
19import org.eclipse.emf.ecore.EClass;
20import org.eclipse.viatra.query.runtime.api.IPatternMatch;
21import org.eclipse.viatra.query.runtime.api.IQuerySpecification;
22import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine;
23import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFPQuery;
24import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFQuerySpecification;
25import org.eclipse.viatra.query.runtime.api.impl.BaseMatcher;
26import org.eclipse.viatra.query.runtime.api.impl.BasePatternMatch;
27import org.eclipse.viatra.query.runtime.emf.types.EClassTransitiveInstancesKey;
28import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint;
29import org.eclipse.viatra.query.runtime.matchers.psystem.PBody;
30import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable;
31import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.PAnnotation;
32import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.ParameterReference;
33import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExportedParameter;
34import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.NegativePatternCall;
35import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint;
36import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter;
37import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameterDirection;
38import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PVisibility;
39import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple;
40import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples;
41import org.eclipse.viatra.query.runtime.util.ViatraQueryLoggingUtil;
42
43/**
44 * A pattern-specific query specification that can instantiate Matcher in a type-safe way.
45 *
46 * <p>Original source:
47 * <code><pre>
48 * /////////
49 * // Choice
50 * /////////
51 *
52 * {@literal @}Constraint(severity="error", message="error", key = {c})
53 * pattern choiceHasNoOutgoing(c : Choice) {
54 * neg find transition(_, c, _);
55 * }
56 * </pre></code>
57 *
58 * @see Matcher
59 * @see Match
60 *
61 */
62@SuppressWarnings("all")
63public final class ChoiceHasNoOutgoing extends BaseGeneratedEMFQuerySpecification<ChoiceHasNoOutgoing.Matcher> {
64 /**
65 * Pattern-specific match representation of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.choiceHasNoOutgoing pattern,
66 * to be used in conjunction with {@link Matcher}.
67 *
68 * <p>Class fields correspond to parameters of the pattern. Fields with value null are considered unassigned.
69 * Each instance is a (possibly partial) substitution of pattern parameters,
70 * usable to represent a match of the pattern in the result of a query,
71 * or to specify the bound (fixed) input parameters when issuing a query.
72 *
73 * @see Matcher
74 *
75 */
76 public static abstract class Match extends BasePatternMatch {
77 private Choice fC;
78
79 private static List<String> parameterNames = makeImmutableList("c");
80
81 private Match(final Choice pC) {
82 this.fC = pC;
83 }
84
85 @Override
86 public Object get(final String parameterName) {
87 if ("c".equals(parameterName)) return this.fC;
88 return null;
89 }
90
91 public Choice getC() {
92 return this.fC;
93 }
94
95 @Override
96 public boolean set(final String parameterName, final Object newValue) {
97 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
98 if ("c".equals(parameterName) ) {
99 this.fC = (Choice) newValue;
100 return true;
101 }
102 return false;
103 }
104
105 public void setC(final Choice pC) {
106 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
107 this.fC = pC;
108 }
109
110 @Override
111 public String patternName() {
112 return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.choiceHasNoOutgoing";
113 }
114
115 @Override
116 public List<String> parameterNames() {
117 return ChoiceHasNoOutgoing.Match.parameterNames;
118 }
119
120 @Override
121 public Object[] toArray() {
122 return new Object[]{fC};
123 }
124
125 @Override
126 public ChoiceHasNoOutgoing.Match toImmutable() {
127 return isMutable() ? newMatch(fC) : this;
128 }
129
130 @Override
131 public String prettyPrint() {
132 StringBuilder result = new StringBuilder();
133 result.append("\"c\"=" + prettyPrintValue(fC));
134 return result.toString();
135 }
136
137 @Override
138 public int hashCode() {
139 return Objects.hash(fC);
140 }
141
142 @Override
143 public boolean equals(final Object obj) {
144 if (this == obj)
145 return true;
146 if (obj == null) {
147 return false;
148 }
149 if ((obj instanceof ChoiceHasNoOutgoing.Match)) {
150 ChoiceHasNoOutgoing.Match other = (ChoiceHasNoOutgoing.Match) obj;
151 return Objects.equals(fC, other.fC);
152 } else {
153 // this should be infrequent
154 if (!(obj instanceof IPatternMatch)) {
155 return false;
156 }
157 IPatternMatch otherSig = (IPatternMatch) obj;
158 return Objects.equals(specification(), otherSig.specification()) && Arrays.deepEquals(toArray(), otherSig.toArray());
159 }
160 }
161
162 @Override
163 public ChoiceHasNoOutgoing specification() {
164 return ChoiceHasNoOutgoing.instance();
165 }
166
167 /**
168 * Returns an empty, mutable match.
169 * Fields of the mutable match can be filled to create a partial match, usable as matcher input.
170 *
171 * @return the empty match.
172 *
173 */
174 public static ChoiceHasNoOutgoing.Match newEmptyMatch() {
175 return new Mutable(null);
176 }
177
178 /**
179 * Returns a mutable (partial) match.
180 * Fields of the mutable match can be filled to create a partial match, usable as matcher input.
181 *
182 * @param pC the fixed value of pattern parameter c, or null if not bound.
183 * @return the new, mutable (partial) match object.
184 *
185 */
186 public static ChoiceHasNoOutgoing.Match newMutableMatch(final Choice pC) {
187 return new Mutable(pC);
188 }
189
190 /**
191 * Returns a new (partial) match.
192 * This can be used e.g. to call the matcher with a partial match.
193 * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object.
194 * @param pC the fixed value of pattern parameter c, or null if not bound.
195 * @return the (partial) match object.
196 *
197 */
198 public static ChoiceHasNoOutgoing.Match newMatch(final Choice pC) {
199 return new Immutable(pC);
200 }
201
202 private static final class Mutable extends ChoiceHasNoOutgoing.Match {
203 Mutable(final Choice pC) {
204 super(pC);
205 }
206
207 @Override
208 public boolean isMutable() {
209 return true;
210 }
211 }
212
213 private static final class Immutable extends ChoiceHasNoOutgoing.Match {
214 Immutable(final Choice pC) {
215 super(pC);
216 }
217
218 @Override
219 public boolean isMutable() {
220 return false;
221 }
222 }
223 }
224
225 /**
226 * Generated pattern matcher API of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.choiceHasNoOutgoing pattern,
227 * providing pattern-specific query methods.
228 *
229 * <p>Use the pattern matcher on a given model via {@link #on(ViatraQueryEngine)},
230 * e.g. in conjunction with {@link ViatraQueryEngine#on(QueryScope)}.
231 *
232 * <p>Matches of the pattern will be represented as {@link Match}.
233 *
234 * <p>Original source:
235 * <code><pre>
236 * /////////
237 * // Choice
238 * /////////
239 *
240 * {@literal @}Constraint(severity="error", message="error", key = {c})
241 * pattern choiceHasNoOutgoing(c : Choice) {
242 * neg find transition(_, c, _);
243 * }
244 * </pre></code>
245 *
246 * @see Match
247 * @see ChoiceHasNoOutgoing
248 *
249 */
250 public static class Matcher extends BaseMatcher<ChoiceHasNoOutgoing.Match> {
251 /**
252 * Initializes the pattern matcher within an existing VIATRA Query engine.
253 * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned.
254 *
255 * @param engine the existing VIATRA Query engine in which this matcher will be created.
256 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
257 *
258 */
259 public static ChoiceHasNoOutgoing.Matcher on(final ViatraQueryEngine engine) {
260 // check if matcher already exists
261 Matcher matcher = engine.getExistingMatcher(querySpecification());
262 if (matcher == null) {
263 matcher = (Matcher)engine.getMatcher(querySpecification());
264 }
265 return matcher;
266 }
267
268 /**
269 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
270 * @return an initialized matcher
271 * @noreference This method is for internal matcher initialization by the framework, do not call it manually.
272 *
273 */
274 public static ChoiceHasNoOutgoing.Matcher create() {
275 return new Matcher();
276 }
277
278 private final static int POSITION_C = 0;
279
280 private final static Logger LOGGER = ViatraQueryLoggingUtil.getLogger(ChoiceHasNoOutgoing.Matcher.class);
281
282 /**
283 * Initializes the pattern matcher within an existing VIATRA Query engine.
284 * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned.
285 *
286 * @param engine the existing VIATRA Query engine in which this matcher will be created.
287 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
288 *
289 */
290 private Matcher() {
291 super(querySpecification());
292 }
293
294 /**
295 * Returns the set of all matches of the pattern that conform to the given fixed values of some parameters.
296 * @param pC the fixed value of pattern parameter c, or null if not bound.
297 * @return matches represented as a Match object.
298 *
299 */
300 public Collection<ChoiceHasNoOutgoing.Match> getAllMatches(final Choice pC) {
301 return rawStreamAllMatches(new Object[]{pC}).collect(Collectors.toSet());
302 }
303
304 /**
305 * Returns a stream of all matches of the pattern that conform to the given fixed values of some parameters.
306 * </p>
307 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
308 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
309 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
310 * @param pC the fixed value of pattern parameter c, or null if not bound.
311 * @return a stream of matches represented as a Match object.
312 *
313 */
314 public Stream<ChoiceHasNoOutgoing.Match> streamAllMatches(final Choice pC) {
315 return rawStreamAllMatches(new Object[]{pC});
316 }
317
318 /**
319 * Returns an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters.
320 * Neither determinism nor randomness of selection is guaranteed.
321 * @param pC the fixed value of pattern parameter c, or null if not bound.
322 * @return a match represented as a Match object, or null if no match is found.
323 *
324 */
325 public Optional<ChoiceHasNoOutgoing.Match> getOneArbitraryMatch(final Choice pC) {
326 return rawGetOneArbitraryMatch(new Object[]{pC});
327 }
328
329 /**
330 * Indicates whether the given combination of specified pattern parameters constitute a valid pattern match,
331 * under any possible substitution of the unspecified parameters (if any).
332 * @param pC the fixed value of pattern parameter c, or null if not bound.
333 * @return true if the input is a valid (partial) match of the pattern.
334 *
335 */
336 public boolean hasMatch(final Choice pC) {
337 return rawHasMatch(new Object[]{pC});
338 }
339
340 /**
341 * Returns the number of all matches of the pattern that conform to the given fixed values of some parameters.
342 * @param pC the fixed value of pattern parameter c, or null if not bound.
343 * @return the number of pattern matches found.
344 *
345 */
346 public int countMatches(final Choice pC) {
347 return rawCountMatches(new Object[]{pC});
348 }
349
350 /**
351 * Executes the given processor on an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters.
352 * Neither determinism nor randomness of selection is guaranteed.
353 * @param pC the fixed value of pattern parameter c, or null if not bound.
354 * @param processor the action that will process the selected match.
355 * @return true if the pattern has at least one match with the given parameter values, false if the processor was not invoked
356 *
357 */
358 public boolean forOneArbitraryMatch(final Choice pC, final Consumer<? super ChoiceHasNoOutgoing.Match> processor) {
359 return rawForOneArbitraryMatch(new Object[]{pC}, processor);
360 }
361
362 /**
363 * Returns a new (partial) match.
364 * This can be used e.g. to call the matcher with a partial match.
365 * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object.
366 * @param pC the fixed value of pattern parameter c, or null if not bound.
367 * @return the (partial) match object.
368 *
369 */
370 public ChoiceHasNoOutgoing.Match newMatch(final Choice pC) {
371 return ChoiceHasNoOutgoing.Match.newMatch(pC);
372 }
373
374 /**
375 * Retrieve the set of values that occur in matches for c.
376 * @return the Set of all values or empty set if there are no matches
377 *
378 */
379 protected Stream<Choice> rawStreamAllValuesOfc(final Object[] parameters) {
380 return rawStreamAllValues(POSITION_C, parameters).map(Choice.class::cast);
381 }
382
383 /**
384 * Retrieve the set of values that occur in matches for c.
385 * @return the Set of all values or empty set if there are no matches
386 *
387 */
388 public Set<Choice> getAllValuesOfc() {
389 return rawStreamAllValuesOfc(emptyArray()).collect(Collectors.toSet());
390 }
391
392 /**
393 * Retrieve the set of values that occur in matches for c.
394 * @return the Set of all values or empty set if there are no matches
395 *
396 */
397 public Stream<Choice> streamAllValuesOfc() {
398 return rawStreamAllValuesOfc(emptyArray());
399 }
400
401 @Override
402 protected ChoiceHasNoOutgoing.Match tupleToMatch(final Tuple t) {
403 try {
404 return ChoiceHasNoOutgoing.Match.newMatch((Choice) t.get(POSITION_C));
405 } catch(ClassCastException e) {
406 LOGGER.error("Element(s) in tuple not properly typed!",e);
407 return null;
408 }
409 }
410
411 @Override
412 protected ChoiceHasNoOutgoing.Match arrayToMatch(final Object[] match) {
413 try {
414 return ChoiceHasNoOutgoing.Match.newMatch((Choice) match[POSITION_C]);
415 } catch(ClassCastException e) {
416 LOGGER.error("Element(s) in array not properly typed!",e);
417 return null;
418 }
419 }
420
421 @Override
422 protected ChoiceHasNoOutgoing.Match arrayToMatchMutable(final Object[] match) {
423 try {
424 return ChoiceHasNoOutgoing.Match.newMutableMatch((Choice) match[POSITION_C]);
425 } catch(ClassCastException e) {
426 LOGGER.error("Element(s) in array not properly typed!",e);
427 return null;
428 }
429 }
430
431 /**
432 * @return the singleton instance of the query specification of this pattern
433 * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded
434 *
435 */
436 public static IQuerySpecification<ChoiceHasNoOutgoing.Matcher> querySpecification() {
437 return ChoiceHasNoOutgoing.instance();
438 }
439 }
440
441 private ChoiceHasNoOutgoing() {
442 super(GeneratedPQuery.INSTANCE);
443 }
444
445 /**
446 * @return the singleton instance of the query specification
447 * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded
448 *
449 */
450 public static ChoiceHasNoOutgoing instance() {
451 try{
452 return LazyHolder.INSTANCE;
453 } catch (ExceptionInInitializerError err) {
454 throw processInitializerError(err);
455 }
456 }
457
458 @Override
459 protected ChoiceHasNoOutgoing.Matcher instantiate(final ViatraQueryEngine engine) {
460 return ChoiceHasNoOutgoing.Matcher.on(engine);
461 }
462
463 @Override
464 public ChoiceHasNoOutgoing.Matcher instantiate() {
465 return ChoiceHasNoOutgoing.Matcher.create();
466 }
467
468 @Override
469 public ChoiceHasNoOutgoing.Match newEmptyMatch() {
470 return ChoiceHasNoOutgoing.Match.newEmptyMatch();
471 }
472
473 @Override
474 public ChoiceHasNoOutgoing.Match newMatch(final Object... parameters) {
475 return ChoiceHasNoOutgoing.Match.newMatch((ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Choice) parameters[0]);
476 }
477
478 /**
479 * Inner class allowing the singleton instance of {@link JvmGenericType: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.ChoiceHasNoOutgoing (visibility: PUBLIC, simpleName: ChoiceHasNoOutgoing, identifier: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.ChoiceHasNoOutgoing, deprecated: <unset>) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)} to be created
480 * <b>not</b> at the class load time of the outer class,
481 * but rather at the first call to {@link JvmGenericType: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.ChoiceHasNoOutgoing (visibility: PUBLIC, simpleName: ChoiceHasNoOutgoing, identifier: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.ChoiceHasNoOutgoing, deprecated: <unset>) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)#instance()}.
482 *
483 * <p> This workaround is required e.g. to support recursion.
484 *
485 */
486 private static class LazyHolder {
487 private final static ChoiceHasNoOutgoing INSTANCE = new ChoiceHasNoOutgoing();
488
489 /**
490 * Statically initializes the query specification <b>after</b> the field {@link #INSTANCE} is assigned.
491 * This initialization order is required to support indirect recursion.
492 *
493 * <p> The static initializer is defined using a helper field to work around limitations of the code generator.
494 *
495 */
496 private final static Object STATIC_INITIALIZER = ensureInitialized();
497
498 public static Object ensureInitialized() {
499 INSTANCE.ensureInitializedInternal();
500 return null;
501 }
502 }
503
504 private static class GeneratedPQuery extends BaseGeneratedEMFPQuery {
505 private final static ChoiceHasNoOutgoing.GeneratedPQuery INSTANCE = new GeneratedPQuery();
506
507 private final PParameter parameter_c = new PParameter("c", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Choice", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "Choice")), PParameterDirection.INOUT);
508
509 private final List<PParameter> parameters = Arrays.asList(parameter_c);
510
511 private GeneratedPQuery() {
512 super(PVisibility.PUBLIC);
513 }
514
515 @Override
516 public String getFullyQualifiedName() {
517 return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.choiceHasNoOutgoing";
518 }
519
520 @Override
521 public List<String> getParameterNames() {
522 return Arrays.asList("c");
523 }
524
525 @Override
526 public List<PParameter> getParameters() {
527 return parameters;
528 }
529
530 @Override
531 public Set<PBody> doGetContainedBodies() {
532 setEvaluationHints(new QueryEvaluationHint(null, QueryEvaluationHint.BackendRequirement.UNSPECIFIED));
533 Set<PBody> bodies = new LinkedHashSet<>();
534 {
535 PBody body = new PBody(this);
536 PVariable var_c = body.getOrCreateVariableByName("c");
537 PVariable var___0_ = body.getOrCreateVariableByName("_<0>");
538 PVariable var___1_ = body.getOrCreateVariableByName("_<1>");
539 new TypeConstraint(body, Tuples.flatTupleOf(var_c), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Choice")));
540 body.setSymbolicParameters(Arrays.<ExportedParameter>asList(
541 new ExportedParameter(body, var_c, parameter_c)
542 ));
543 // neg find transition(_, c, _)
544 new NegativePatternCall(body, Tuples.flatTupleOf(var___0_, var_c, var___1_), Transition.instance().getInternalQueryRepresentation());
545 bodies.add(body);
546 }
547 {
548 PAnnotation annotation = new PAnnotation("Constraint");
549 annotation.addAttribute("severity", "error");
550 annotation.addAttribute("message", "error");
551 annotation.addAttribute("key", Arrays.asList(new Object[] {
552 new ParameterReference("c")
553 }));
554 addAnnotation(annotation);
555 }
556 return bodies;
557 }
558 }
559}
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/EntryInRegion.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/EntryInRegion.java
new file mode 100644
index 00000000..147b27f9
--- /dev/null
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/EntryInRegion.java
@@ -0,0 +1,702 @@
1/**
2 * Generated from platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduPatterns.vql
3 */
4package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries;
5
6import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Entry;
7import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Region;
8import java.util.Arrays;
9import java.util.Collection;
10import java.util.LinkedHashSet;
11import java.util.List;
12import java.util.Objects;
13import java.util.Optional;
14import java.util.Set;
15import java.util.function.Consumer;
16import java.util.stream.Collectors;
17import java.util.stream.Stream;
18import org.apache.log4j.Logger;
19import org.eclipse.emf.ecore.EClass;
20import org.eclipse.viatra.query.runtime.api.IPatternMatch;
21import org.eclipse.viatra.query.runtime.api.IQuerySpecification;
22import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine;
23import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFPQuery;
24import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFQuerySpecification;
25import org.eclipse.viatra.query.runtime.api.impl.BaseMatcher;
26import org.eclipse.viatra.query.runtime.api.impl.BasePatternMatch;
27import org.eclipse.viatra.query.runtime.emf.types.EClassTransitiveInstancesKey;
28import org.eclipse.viatra.query.runtime.emf.types.EStructuralFeatureInstancesKey;
29import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint;
30import org.eclipse.viatra.query.runtime.matchers.psystem.PBody;
31import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable;
32import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.Equality;
33import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExportedParameter;
34import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint;
35import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter;
36import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameterDirection;
37import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PVisibility;
38import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple;
39import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples;
40import org.eclipse.viatra.query.runtime.util.ViatraQueryLoggingUtil;
41
42/**
43 * A pattern-specific query specification that can instantiate Matcher in a type-safe way.
44 *
45 * <p>Original source:
46 * <code><pre>
47 * /////////
48 * // Entry
49 * /////////
50 *
51 * pattern entryInRegion(r1 : Region, e1 : Entry) {
52 * Region.vertices(r1, e1);
53 * }
54 * </pre></code>
55 *
56 * @see Matcher
57 * @see Match
58 *
59 */
60@SuppressWarnings("all")
61public final class EntryInRegion extends BaseGeneratedEMFQuerySpecification<EntryInRegion.Matcher> {
62 /**
63 * Pattern-specific match representation of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.entryInRegion pattern,
64 * to be used in conjunction with {@link Matcher}.
65 *
66 * <p>Class fields correspond to parameters of the pattern. Fields with value null are considered unassigned.
67 * Each instance is a (possibly partial) substitution of pattern parameters,
68 * usable to represent a match of the pattern in the result of a query,
69 * or to specify the bound (fixed) input parameters when issuing a query.
70 *
71 * @see Matcher
72 *
73 */
74 public static abstract class Match extends BasePatternMatch {
75 private Region fR1;
76
77 private Entry fE1;
78
79 private static List<String> parameterNames = makeImmutableList("r1", "e1");
80
81 private Match(final Region pR1, final Entry pE1) {
82 this.fR1 = pR1;
83 this.fE1 = pE1;
84 }
85
86 @Override
87 public Object get(final String parameterName) {
88 if ("r1".equals(parameterName)) return this.fR1;
89 if ("e1".equals(parameterName)) return this.fE1;
90 return null;
91 }
92
93 public Region getR1() {
94 return this.fR1;
95 }
96
97 public Entry getE1() {
98 return this.fE1;
99 }
100
101 @Override
102 public boolean set(final String parameterName, final Object newValue) {
103 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
104 if ("r1".equals(parameterName) ) {
105 this.fR1 = (Region) newValue;
106 return true;
107 }
108 if ("e1".equals(parameterName) ) {
109 this.fE1 = (Entry) newValue;
110 return true;
111 }
112 return false;
113 }
114
115 public void setR1(final Region pR1) {
116 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
117 this.fR1 = pR1;
118 }
119
120 public void setE1(final Entry pE1) {
121 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
122 this.fE1 = pE1;
123 }
124
125 @Override
126 public String patternName() {
127 return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.entryInRegion";
128 }
129
130 @Override
131 public List<String> parameterNames() {
132 return EntryInRegion.Match.parameterNames;
133 }
134
135 @Override
136 public Object[] toArray() {
137 return new Object[]{fR1, fE1};
138 }
139
140 @Override
141 public EntryInRegion.Match toImmutable() {
142 return isMutable() ? newMatch(fR1, fE1) : this;
143 }
144
145 @Override
146 public String prettyPrint() {
147 StringBuilder result = new StringBuilder();
148 result.append("\"r1\"=" + prettyPrintValue(fR1) + ", ");
149 result.append("\"e1\"=" + prettyPrintValue(fE1));
150 return result.toString();
151 }
152
153 @Override
154 public int hashCode() {
155 return Objects.hash(fR1, fE1);
156 }
157
158 @Override
159 public boolean equals(final Object obj) {
160 if (this == obj)
161 return true;
162 if (obj == null) {
163 return false;
164 }
165 if ((obj instanceof EntryInRegion.Match)) {
166 EntryInRegion.Match other = (EntryInRegion.Match) obj;
167 return Objects.equals(fR1, other.fR1) && Objects.equals(fE1, other.fE1);
168 } else {
169 // this should be infrequent
170 if (!(obj instanceof IPatternMatch)) {
171 return false;
172 }
173 IPatternMatch otherSig = (IPatternMatch) obj;
174 return Objects.equals(specification(), otherSig.specification()) && Arrays.deepEquals(toArray(), otherSig.toArray());
175 }
176 }
177
178 @Override
179 public EntryInRegion specification() {
180 return EntryInRegion.instance();
181 }
182
183 /**
184 * Returns an empty, mutable match.
185 * Fields of the mutable match can be filled to create a partial match, usable as matcher input.
186 *
187 * @return the empty match.
188 *
189 */
190 public static EntryInRegion.Match newEmptyMatch() {
191 return new Mutable(null, null);
192 }
193
194 /**
195 * Returns a mutable (partial) match.
196 * Fields of the mutable match can be filled to create a partial match, usable as matcher input.
197 *
198 * @param pR1 the fixed value of pattern parameter r1, or null if not bound.
199 * @param pE1 the fixed value of pattern parameter e1, or null if not bound.
200 * @return the new, mutable (partial) match object.
201 *
202 */
203 public static EntryInRegion.Match newMutableMatch(final Region pR1, final Entry pE1) {
204 return new Mutable(pR1, pE1);
205 }
206
207 /**
208 * Returns a new (partial) match.
209 * This can be used e.g. to call the matcher with a partial match.
210 * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object.
211 * @param pR1 the fixed value of pattern parameter r1, or null if not bound.
212 * @param pE1 the fixed value of pattern parameter e1, or null if not bound.
213 * @return the (partial) match object.
214 *
215 */
216 public static EntryInRegion.Match newMatch(final Region pR1, final Entry pE1) {
217 return new Immutable(pR1, pE1);
218 }
219
220 private static final class Mutable extends EntryInRegion.Match {
221 Mutable(final Region pR1, final Entry pE1) {
222 super(pR1, pE1);
223 }
224
225 @Override
226 public boolean isMutable() {
227 return true;
228 }
229 }
230
231 private static final class Immutable extends EntryInRegion.Match {
232 Immutable(final Region pR1, final Entry pE1) {
233 super(pR1, pE1);
234 }
235
236 @Override
237 public boolean isMutable() {
238 return false;
239 }
240 }
241 }
242
243 /**
244 * Generated pattern matcher API of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.entryInRegion pattern,
245 * providing pattern-specific query methods.
246 *
247 * <p>Use the pattern matcher on a given model via {@link #on(ViatraQueryEngine)},
248 * e.g. in conjunction with {@link ViatraQueryEngine#on(QueryScope)}.
249 *
250 * <p>Matches of the pattern will be represented as {@link Match}.
251 *
252 * <p>Original source:
253 * <code><pre>
254 * /////////
255 * // Entry
256 * /////////
257 *
258 * pattern entryInRegion(r1 : Region, e1 : Entry) {
259 * Region.vertices(r1, e1);
260 * }
261 * </pre></code>
262 *
263 * @see Match
264 * @see EntryInRegion
265 *
266 */
267 public static class Matcher extends BaseMatcher<EntryInRegion.Match> {
268 /**
269 * Initializes the pattern matcher within an existing VIATRA Query engine.
270 * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned.
271 *
272 * @param engine the existing VIATRA Query engine in which this matcher will be created.
273 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
274 *
275 */
276 public static EntryInRegion.Matcher on(final ViatraQueryEngine engine) {
277 // check if matcher already exists
278 Matcher matcher = engine.getExistingMatcher(querySpecification());
279 if (matcher == null) {
280 matcher = (Matcher)engine.getMatcher(querySpecification());
281 }
282 return matcher;
283 }
284
285 /**
286 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
287 * @return an initialized matcher
288 * @noreference This method is for internal matcher initialization by the framework, do not call it manually.
289 *
290 */
291 public static EntryInRegion.Matcher create() {
292 return new Matcher();
293 }
294
295 private final static int POSITION_R1 = 0;
296
297 private final static int POSITION_E1 = 1;
298
299 private final static Logger LOGGER = ViatraQueryLoggingUtil.getLogger(EntryInRegion.Matcher.class);
300
301 /**
302 * Initializes the pattern matcher within an existing VIATRA Query engine.
303 * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned.
304 *
305 * @param engine the existing VIATRA Query engine in which this matcher will be created.
306 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
307 *
308 */
309 private Matcher() {
310 super(querySpecification());
311 }
312
313 /**
314 * Returns the set of all matches of the pattern that conform to the given fixed values of some parameters.
315 * @param pR1 the fixed value of pattern parameter r1, or null if not bound.
316 * @param pE1 the fixed value of pattern parameter e1, or null if not bound.
317 * @return matches represented as a Match object.
318 *
319 */
320 public Collection<EntryInRegion.Match> getAllMatches(final Region pR1, final Entry pE1) {
321 return rawStreamAllMatches(new Object[]{pR1, pE1}).collect(Collectors.toSet());
322 }
323
324 /**
325 * Returns a stream of all matches of the pattern that conform to the given fixed values of some parameters.
326 * </p>
327 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
328 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
329 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
330 * @param pR1 the fixed value of pattern parameter r1, or null if not bound.
331 * @param pE1 the fixed value of pattern parameter e1, or null if not bound.
332 * @return a stream of matches represented as a Match object.
333 *
334 */
335 public Stream<EntryInRegion.Match> streamAllMatches(final Region pR1, final Entry pE1) {
336 return rawStreamAllMatches(new Object[]{pR1, pE1});
337 }
338
339 /**
340 * Returns an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters.
341 * Neither determinism nor randomness of selection is guaranteed.
342 * @param pR1 the fixed value of pattern parameter r1, or null if not bound.
343 * @param pE1 the fixed value of pattern parameter e1, or null if not bound.
344 * @return a match represented as a Match object, or null if no match is found.
345 *
346 */
347 public Optional<EntryInRegion.Match> getOneArbitraryMatch(final Region pR1, final Entry pE1) {
348 return rawGetOneArbitraryMatch(new Object[]{pR1, pE1});
349 }
350
351 /**
352 * Indicates whether the given combination of specified pattern parameters constitute a valid pattern match,
353 * under any possible substitution of the unspecified parameters (if any).
354 * @param pR1 the fixed value of pattern parameter r1, or null if not bound.
355 * @param pE1 the fixed value of pattern parameter e1, or null if not bound.
356 * @return true if the input is a valid (partial) match of the pattern.
357 *
358 */
359 public boolean hasMatch(final Region pR1, final Entry pE1) {
360 return rawHasMatch(new Object[]{pR1, pE1});
361 }
362
363 /**
364 * Returns the number of all matches of the pattern that conform to the given fixed values of some parameters.
365 * @param pR1 the fixed value of pattern parameter r1, or null if not bound.
366 * @param pE1 the fixed value of pattern parameter e1, or null if not bound.
367 * @return the number of pattern matches found.
368 *
369 */
370 public int countMatches(final Region pR1, final Entry pE1) {
371 return rawCountMatches(new Object[]{pR1, pE1});
372 }
373
374 /**
375 * Executes the given processor on an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters.
376 * Neither determinism nor randomness of selection is guaranteed.
377 * @param pR1 the fixed value of pattern parameter r1, or null if not bound.
378 * @param pE1 the fixed value of pattern parameter e1, or null if not bound.
379 * @param processor the action that will process the selected match.
380 * @return true if the pattern has at least one match with the given parameter values, false if the processor was not invoked
381 *
382 */
383 public boolean forOneArbitraryMatch(final Region pR1, final Entry pE1, final Consumer<? super EntryInRegion.Match> processor) {
384 return rawForOneArbitraryMatch(new Object[]{pR1, pE1}, processor);
385 }
386
387 /**
388 * Returns a new (partial) match.
389 * This can be used e.g. to call the matcher with a partial match.
390 * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object.
391 * @param pR1 the fixed value of pattern parameter r1, or null if not bound.
392 * @param pE1 the fixed value of pattern parameter e1, or null if not bound.
393 * @return the (partial) match object.
394 *
395 */
396 public EntryInRegion.Match newMatch(final Region pR1, final Entry pE1) {
397 return EntryInRegion.Match.newMatch(pR1, pE1);
398 }
399
400 /**
401 * Retrieve the set of values that occur in matches for r1.
402 * @return the Set of all values or empty set if there are no matches
403 *
404 */
405 protected Stream<Region> rawStreamAllValuesOfr1(final Object[] parameters) {
406 return rawStreamAllValues(POSITION_R1, parameters).map(Region.class::cast);
407 }
408
409 /**
410 * Retrieve the set of values that occur in matches for r1.
411 * @return the Set of all values or empty set if there are no matches
412 *
413 */
414 public Set<Region> getAllValuesOfr1() {
415 return rawStreamAllValuesOfr1(emptyArray()).collect(Collectors.toSet());
416 }
417
418 /**
419 * Retrieve the set of values that occur in matches for r1.
420 * @return the Set of all values or empty set if there are no matches
421 *
422 */
423 public Stream<Region> streamAllValuesOfr1() {
424 return rawStreamAllValuesOfr1(emptyArray());
425 }
426
427 /**
428 * Retrieve the set of values that occur in matches for r1.
429 * </p>
430 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
431 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
432 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
433 *
434 * @return the Stream of all values or empty set if there are no matches
435 *
436 */
437 public Stream<Region> streamAllValuesOfr1(final EntryInRegion.Match partialMatch) {
438 return rawStreamAllValuesOfr1(partialMatch.toArray());
439 }
440
441 /**
442 * Retrieve the set of values that occur in matches for r1.
443 * </p>
444 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
445 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
446 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
447 *
448 * @return the Stream of all values or empty set if there are no matches
449 *
450 */
451 public Stream<Region> streamAllValuesOfr1(final Entry pE1) {
452 return rawStreamAllValuesOfr1(new Object[]{null, pE1});
453 }
454
455 /**
456 * Retrieve the set of values that occur in matches for r1.
457 * @return the Set of all values or empty set if there are no matches
458 *
459 */
460 public Set<Region> getAllValuesOfr1(final EntryInRegion.Match partialMatch) {
461 return rawStreamAllValuesOfr1(partialMatch.toArray()).collect(Collectors.toSet());
462 }
463
464 /**
465 * Retrieve the set of values that occur in matches for r1.
466 * @return the Set of all values or empty set if there are no matches
467 *
468 */
469 public Set<Region> getAllValuesOfr1(final Entry pE1) {
470 return rawStreamAllValuesOfr1(new Object[]{null, pE1}).collect(Collectors.toSet());
471 }
472
473 /**
474 * Retrieve the set of values that occur in matches for e1.
475 * @return the Set of all values or empty set if there are no matches
476 *
477 */
478 protected Stream<Entry> rawStreamAllValuesOfe1(final Object[] parameters) {
479 return rawStreamAllValues(POSITION_E1, parameters).map(Entry.class::cast);
480 }
481
482 /**
483 * Retrieve the set of values that occur in matches for e1.
484 * @return the Set of all values or empty set if there are no matches
485 *
486 */
487 public Set<Entry> getAllValuesOfe1() {
488 return rawStreamAllValuesOfe1(emptyArray()).collect(Collectors.toSet());
489 }
490
491 /**
492 * Retrieve the set of values that occur in matches for e1.
493 * @return the Set of all values or empty set if there are no matches
494 *
495 */
496 public Stream<Entry> streamAllValuesOfe1() {
497 return rawStreamAllValuesOfe1(emptyArray());
498 }
499
500 /**
501 * Retrieve the set of values that occur in matches for e1.
502 * </p>
503 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
504 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
505 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
506 *
507 * @return the Stream of all values or empty set if there are no matches
508 *
509 */
510 public Stream<Entry> streamAllValuesOfe1(final EntryInRegion.Match partialMatch) {
511 return rawStreamAllValuesOfe1(partialMatch.toArray());
512 }
513
514 /**
515 * Retrieve the set of values that occur in matches for e1.
516 * </p>
517 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
518 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
519 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
520 *
521 * @return the Stream of all values or empty set if there are no matches
522 *
523 */
524 public Stream<Entry> streamAllValuesOfe1(final Region pR1) {
525 return rawStreamAllValuesOfe1(new Object[]{pR1, null});
526 }
527
528 /**
529 * Retrieve the set of values that occur in matches for e1.
530 * @return the Set of all values or empty set if there are no matches
531 *
532 */
533 public Set<Entry> getAllValuesOfe1(final EntryInRegion.Match partialMatch) {
534 return rawStreamAllValuesOfe1(partialMatch.toArray()).collect(Collectors.toSet());
535 }
536
537 /**
538 * Retrieve the set of values that occur in matches for e1.
539 * @return the Set of all values or empty set if there are no matches
540 *
541 */
542 public Set<Entry> getAllValuesOfe1(final Region pR1) {
543 return rawStreamAllValuesOfe1(new Object[]{pR1, null}).collect(Collectors.toSet());
544 }
545
546 @Override
547 protected EntryInRegion.Match tupleToMatch(final Tuple t) {
548 try {
549 return EntryInRegion.Match.newMatch((Region) t.get(POSITION_R1), (Entry) t.get(POSITION_E1));
550 } catch(ClassCastException e) {
551 LOGGER.error("Element(s) in tuple not properly typed!",e);
552 return null;
553 }
554 }
555
556 @Override
557 protected EntryInRegion.Match arrayToMatch(final Object[] match) {
558 try {
559 return EntryInRegion.Match.newMatch((Region) match[POSITION_R1], (Entry) match[POSITION_E1]);
560 } catch(ClassCastException e) {
561 LOGGER.error("Element(s) in array not properly typed!",e);
562 return null;
563 }
564 }
565
566 @Override
567 protected EntryInRegion.Match arrayToMatchMutable(final Object[] match) {
568 try {
569 return EntryInRegion.Match.newMutableMatch((Region) match[POSITION_R1], (Entry) match[POSITION_E1]);
570 } catch(ClassCastException e) {
571 LOGGER.error("Element(s) in array not properly typed!",e);
572 return null;
573 }
574 }
575
576 /**
577 * @return the singleton instance of the query specification of this pattern
578 * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded
579 *
580 */
581 public static IQuerySpecification<EntryInRegion.Matcher> querySpecification() {
582 return EntryInRegion.instance();
583 }
584 }
585
586 private EntryInRegion() {
587 super(GeneratedPQuery.INSTANCE);
588 }
589
590 /**
591 * @return the singleton instance of the query specification
592 * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded
593 *
594 */
595 public static EntryInRegion instance() {
596 try{
597 return LazyHolder.INSTANCE;
598 } catch (ExceptionInInitializerError err) {
599 throw processInitializerError(err);
600 }
601 }
602
603 @Override
604 protected EntryInRegion.Matcher instantiate(final ViatraQueryEngine engine) {
605 return EntryInRegion.Matcher.on(engine);
606 }
607
608 @Override
609 public EntryInRegion.Matcher instantiate() {
610 return EntryInRegion.Matcher.create();
611 }
612
613 @Override
614 public EntryInRegion.Match newEmptyMatch() {
615 return EntryInRegion.Match.newEmptyMatch();
616 }
617
618 @Override
619 public EntryInRegion.Match newMatch(final Object... parameters) {
620 return EntryInRegion.Match.newMatch((ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Region) parameters[0], (ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Entry) parameters[1]);
621 }
622
623 /**
624 * Inner class allowing the singleton instance of {@link JvmGenericType: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.EntryInRegion (visibility: PUBLIC, simpleName: EntryInRegion, identifier: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.EntryInRegion, deprecated: <unset>) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)} to be created
625 * <b>not</b> at the class load time of the outer class,
626 * but rather at the first call to {@link JvmGenericType: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.EntryInRegion (visibility: PUBLIC, simpleName: EntryInRegion, identifier: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.EntryInRegion, deprecated: <unset>) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)#instance()}.
627 *
628 * <p> This workaround is required e.g. to support recursion.
629 *
630 */
631 private static class LazyHolder {
632 private final static EntryInRegion INSTANCE = new EntryInRegion();
633
634 /**
635 * Statically initializes the query specification <b>after</b> the field {@link #INSTANCE} is assigned.
636 * This initialization order is required to support indirect recursion.
637 *
638 * <p> The static initializer is defined using a helper field to work around limitations of the code generator.
639 *
640 */
641 private final static Object STATIC_INITIALIZER = ensureInitialized();
642
643 public static Object ensureInitialized() {
644 INSTANCE.ensureInitializedInternal();
645 return null;
646 }
647 }
648
649 private static class GeneratedPQuery extends BaseGeneratedEMFPQuery {
650 private final static EntryInRegion.GeneratedPQuery INSTANCE = new GeneratedPQuery();
651
652 private final PParameter parameter_r1 = new PParameter("r1", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Region", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "Region")), PParameterDirection.INOUT);
653
654 private final PParameter parameter_e1 = new PParameter("e1", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Entry", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "Entry")), PParameterDirection.INOUT);
655
656 private final List<PParameter> parameters = Arrays.asList(parameter_r1, parameter_e1);
657
658 private GeneratedPQuery() {
659 super(PVisibility.PUBLIC);
660 }
661
662 @Override
663 public String getFullyQualifiedName() {
664 return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.entryInRegion";
665 }
666
667 @Override
668 public List<String> getParameterNames() {
669 return Arrays.asList("r1","e1");
670 }
671
672 @Override
673 public List<PParameter> getParameters() {
674 return parameters;
675 }
676
677 @Override
678 public Set<PBody> doGetContainedBodies() {
679 setEvaluationHints(new QueryEvaluationHint(null, QueryEvaluationHint.BackendRequirement.UNSPECIFIED));
680 Set<PBody> bodies = new LinkedHashSet<>();
681 {
682 PBody body = new PBody(this);
683 PVariable var_r1 = body.getOrCreateVariableByName("r1");
684 PVariable var_e1 = body.getOrCreateVariableByName("e1");
685 new TypeConstraint(body, Tuples.flatTupleOf(var_r1), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Region")));
686 new TypeConstraint(body, Tuples.flatTupleOf(var_e1), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Entry")));
687 body.setSymbolicParameters(Arrays.<ExportedParameter>asList(
688 new ExportedParameter(body, var_r1, parameter_r1),
689 new ExportedParameter(body, var_e1, parameter_e1)
690 ));
691 // Region.vertices(r1, e1)
692 new TypeConstraint(body, Tuples.flatTupleOf(var_r1), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Region")));
693 PVariable var__virtual_0_ = body.getOrCreateVariableByName(".virtual{0}");
694 new TypeConstraint(body, Tuples.flatTupleOf(var_r1, var__virtual_0_), new EStructuralFeatureInstancesKey(getFeatureLiteral("YakinduMetamodel", "Region", "vertices")));
695 new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_0_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Vertex")));
696 new Equality(body, var__virtual_0_, var_e1);
697 bodies.add(body);
698 }
699 return bodies;
700 }
701 }
702}
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/HasMultipleIncomingTrainsition.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/HasMultipleIncomingTrainsition.java
new file mode 100644
index 00000000..236ce5ff
--- /dev/null
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/HasMultipleIncomingTrainsition.java
@@ -0,0 +1,549 @@
1/**
2 * Generated from platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduPatterns.vql
3 */
4package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries;
5
6import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization;
7import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.Transition;
8import java.util.Arrays;
9import java.util.Collection;
10import java.util.LinkedHashSet;
11import java.util.List;
12import java.util.Objects;
13import java.util.Optional;
14import java.util.Set;
15import java.util.function.Consumer;
16import java.util.stream.Collectors;
17import java.util.stream.Stream;
18import org.apache.log4j.Logger;
19import org.eclipse.emf.ecore.EClass;
20import org.eclipse.viatra.query.runtime.api.IPatternMatch;
21import org.eclipse.viatra.query.runtime.api.IQuerySpecification;
22import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine;
23import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFPQuery;
24import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFQuerySpecification;
25import org.eclipse.viatra.query.runtime.api.impl.BaseMatcher;
26import org.eclipse.viatra.query.runtime.api.impl.BasePatternMatch;
27import org.eclipse.viatra.query.runtime.emf.types.EClassTransitiveInstancesKey;
28import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint;
29import org.eclipse.viatra.query.runtime.matchers.psystem.PBody;
30import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable;
31import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExportedParameter;
32import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.Inequality;
33import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.PositivePatternCall;
34import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint;
35import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter;
36import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameterDirection;
37import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PVisibility;
38import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple;
39import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples;
40import org.eclipse.viatra.query.runtime.util.ViatraQueryLoggingUtil;
41
42/**
43 * A pattern-specific query specification that can instantiate Matcher in a type-safe way.
44 *
45 * <p>Original source:
46 * <code><pre>
47 * pattern hasMultipleIncomingTrainsition(v : Synchronization) {
48 * find transition(_, src1, v);
49 * find transition(_, src2, v);
50 * src1 != src2;
51 * }
52 * </pre></code>
53 *
54 * @see Matcher
55 * @see Match
56 *
57 */
58@SuppressWarnings("all")
59public final class HasMultipleIncomingTrainsition extends BaseGeneratedEMFQuerySpecification<HasMultipleIncomingTrainsition.Matcher> {
60 /**
61 * Pattern-specific match representation of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.hasMultipleIncomingTrainsition pattern,
62 * to be used in conjunction with {@link Matcher}.
63 *
64 * <p>Class fields correspond to parameters of the pattern. Fields with value null are considered unassigned.
65 * Each instance is a (possibly partial) substitution of pattern parameters,
66 * usable to represent a match of the pattern in the result of a query,
67 * or to specify the bound (fixed) input parameters when issuing a query.
68 *
69 * @see Matcher
70 *
71 */
72 public static abstract class Match extends BasePatternMatch {
73 private Synchronization fV;
74
75 private static List<String> parameterNames = makeImmutableList("v");
76
77 private Match(final Synchronization pV) {
78 this.fV = pV;
79 }
80
81 @Override
82 public Object get(final String parameterName) {
83 if ("v".equals(parameterName)) return this.fV;
84 return null;
85 }
86
87 public Synchronization getV() {
88 return this.fV;
89 }
90
91 @Override
92 public boolean set(final String parameterName, final Object newValue) {
93 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
94 if ("v".equals(parameterName) ) {
95 this.fV = (Synchronization) newValue;
96 return true;
97 }
98 return false;
99 }
100
101 public void setV(final Synchronization pV) {
102 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
103 this.fV = pV;
104 }
105
106 @Override
107 public String patternName() {
108 return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.hasMultipleIncomingTrainsition";
109 }
110
111 @Override
112 public List<String> parameterNames() {
113 return HasMultipleIncomingTrainsition.Match.parameterNames;
114 }
115
116 @Override
117 public Object[] toArray() {
118 return new Object[]{fV};
119 }
120
121 @Override
122 public HasMultipleIncomingTrainsition.Match toImmutable() {
123 return isMutable() ? newMatch(fV) : this;
124 }
125
126 @Override
127 public String prettyPrint() {
128 StringBuilder result = new StringBuilder();
129 result.append("\"v\"=" + prettyPrintValue(fV));
130 return result.toString();
131 }
132
133 @Override
134 public int hashCode() {
135 return Objects.hash(fV);
136 }
137
138 @Override
139 public boolean equals(final Object obj) {
140 if (this == obj)
141 return true;
142 if (obj == null) {
143 return false;
144 }
145 if ((obj instanceof HasMultipleIncomingTrainsition.Match)) {
146 HasMultipleIncomingTrainsition.Match other = (HasMultipleIncomingTrainsition.Match) obj;
147 return Objects.equals(fV, other.fV);
148 } else {
149 // this should be infrequent
150 if (!(obj instanceof IPatternMatch)) {
151 return false;
152 }
153 IPatternMatch otherSig = (IPatternMatch) obj;
154 return Objects.equals(specification(), otherSig.specification()) && Arrays.deepEquals(toArray(), otherSig.toArray());
155 }
156 }
157
158 @Override
159 public HasMultipleIncomingTrainsition specification() {
160 return HasMultipleIncomingTrainsition.instance();
161 }
162
163 /**
164 * Returns an empty, mutable match.
165 * Fields of the mutable match can be filled to create a partial match, usable as matcher input.
166 *
167 * @return the empty match.
168 *
169 */
170 public static HasMultipleIncomingTrainsition.Match newEmptyMatch() {
171 return new Mutable(null);
172 }
173
174 /**
175 * Returns a mutable (partial) match.
176 * Fields of the mutable match can be filled to create a partial match, usable as matcher input.
177 *
178 * @param pV the fixed value of pattern parameter v, or null if not bound.
179 * @return the new, mutable (partial) match object.
180 *
181 */
182 public static HasMultipleIncomingTrainsition.Match newMutableMatch(final Synchronization pV) {
183 return new Mutable(pV);
184 }
185
186 /**
187 * Returns a new (partial) match.
188 * This can be used e.g. to call the matcher with a partial match.
189 * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object.
190 * @param pV the fixed value of pattern parameter v, or null if not bound.
191 * @return the (partial) match object.
192 *
193 */
194 public static HasMultipleIncomingTrainsition.Match newMatch(final Synchronization pV) {
195 return new Immutable(pV);
196 }
197
198 private static final class Mutable extends HasMultipleIncomingTrainsition.Match {
199 Mutable(final Synchronization pV) {
200 super(pV);
201 }
202
203 @Override
204 public boolean isMutable() {
205 return true;
206 }
207 }
208
209 private static final class Immutable extends HasMultipleIncomingTrainsition.Match {
210 Immutable(final Synchronization pV) {
211 super(pV);
212 }
213
214 @Override
215 public boolean isMutable() {
216 return false;
217 }
218 }
219 }
220
221 /**
222 * Generated pattern matcher API of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.hasMultipleIncomingTrainsition pattern,
223 * providing pattern-specific query methods.
224 *
225 * <p>Use the pattern matcher on a given model via {@link #on(ViatraQueryEngine)},
226 * e.g. in conjunction with {@link ViatraQueryEngine#on(QueryScope)}.
227 *
228 * <p>Matches of the pattern will be represented as {@link Match}.
229 *
230 * <p>Original source:
231 * <code><pre>
232 * pattern hasMultipleIncomingTrainsition(v : Synchronization) {
233 * find transition(_, src1, v);
234 * find transition(_, src2, v);
235 * src1 != src2;
236 * }
237 * </pre></code>
238 *
239 * @see Match
240 * @see HasMultipleIncomingTrainsition
241 *
242 */
243 public static class Matcher extends BaseMatcher<HasMultipleIncomingTrainsition.Match> {
244 /**
245 * Initializes the pattern matcher within an existing VIATRA Query engine.
246 * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned.
247 *
248 * @param engine the existing VIATRA Query engine in which this matcher will be created.
249 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
250 *
251 */
252 public static HasMultipleIncomingTrainsition.Matcher on(final ViatraQueryEngine engine) {
253 // check if matcher already exists
254 Matcher matcher = engine.getExistingMatcher(querySpecification());
255 if (matcher == null) {
256 matcher = (Matcher)engine.getMatcher(querySpecification());
257 }
258 return matcher;
259 }
260
261 /**
262 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
263 * @return an initialized matcher
264 * @noreference This method is for internal matcher initialization by the framework, do not call it manually.
265 *
266 */
267 public static HasMultipleIncomingTrainsition.Matcher create() {
268 return new Matcher();
269 }
270
271 private final static int POSITION_V = 0;
272
273 private final static Logger LOGGER = ViatraQueryLoggingUtil.getLogger(HasMultipleIncomingTrainsition.Matcher.class);
274
275 /**
276 * Initializes the pattern matcher within an existing VIATRA Query engine.
277 * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned.
278 *
279 * @param engine the existing VIATRA Query engine in which this matcher will be created.
280 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
281 *
282 */
283 private Matcher() {
284 super(querySpecification());
285 }
286
287 /**
288 * Returns the set of all matches of the pattern that conform to the given fixed values of some parameters.
289 * @param pV the fixed value of pattern parameter v, or null if not bound.
290 * @return matches represented as a Match object.
291 *
292 */
293 public Collection<HasMultipleIncomingTrainsition.Match> getAllMatches(final Synchronization pV) {
294 return rawStreamAllMatches(new Object[]{pV}).collect(Collectors.toSet());
295 }
296
297 /**
298 * Returns a stream of all matches of the pattern that conform to the given fixed values of some parameters.
299 * </p>
300 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
301 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
302 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
303 * @param pV the fixed value of pattern parameter v, or null if not bound.
304 * @return a stream of matches represented as a Match object.
305 *
306 */
307 public Stream<HasMultipleIncomingTrainsition.Match> streamAllMatches(final Synchronization pV) {
308 return rawStreamAllMatches(new Object[]{pV});
309 }
310
311 /**
312 * Returns an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters.
313 * Neither determinism nor randomness of selection is guaranteed.
314 * @param pV the fixed value of pattern parameter v, or null if not bound.
315 * @return a match represented as a Match object, or null if no match is found.
316 *
317 */
318 public Optional<HasMultipleIncomingTrainsition.Match> getOneArbitraryMatch(final Synchronization pV) {
319 return rawGetOneArbitraryMatch(new Object[]{pV});
320 }
321
322 /**
323 * Indicates whether the given combination of specified pattern parameters constitute a valid pattern match,
324 * under any possible substitution of the unspecified parameters (if any).
325 * @param pV the fixed value of pattern parameter v, or null if not bound.
326 * @return true if the input is a valid (partial) match of the pattern.
327 *
328 */
329 public boolean hasMatch(final Synchronization pV) {
330 return rawHasMatch(new Object[]{pV});
331 }
332
333 /**
334 * Returns the number of all matches of the pattern that conform to the given fixed values of some parameters.
335 * @param pV the fixed value of pattern parameter v, or null if not bound.
336 * @return the number of pattern matches found.
337 *
338 */
339 public int countMatches(final Synchronization pV) {
340 return rawCountMatches(new Object[]{pV});
341 }
342
343 /**
344 * Executes the given processor on an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters.
345 * Neither determinism nor randomness of selection is guaranteed.
346 * @param pV the fixed value of pattern parameter v, or null if not bound.
347 * @param processor the action that will process the selected match.
348 * @return true if the pattern has at least one match with the given parameter values, false if the processor was not invoked
349 *
350 */
351 public boolean forOneArbitraryMatch(final Synchronization pV, final Consumer<? super HasMultipleIncomingTrainsition.Match> processor) {
352 return rawForOneArbitraryMatch(new Object[]{pV}, processor);
353 }
354
355 /**
356 * Returns a new (partial) match.
357 * This can be used e.g. to call the matcher with a partial match.
358 * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object.
359 * @param pV the fixed value of pattern parameter v, or null if not bound.
360 * @return the (partial) match object.
361 *
362 */
363 public HasMultipleIncomingTrainsition.Match newMatch(final Synchronization pV) {
364 return HasMultipleIncomingTrainsition.Match.newMatch(pV);
365 }
366
367 /**
368 * Retrieve the set of values that occur in matches for v.
369 * @return the Set of all values or empty set if there are no matches
370 *
371 */
372 protected Stream<Synchronization> rawStreamAllValuesOfv(final Object[] parameters) {
373 return rawStreamAllValues(POSITION_V, parameters).map(Synchronization.class::cast);
374 }
375
376 /**
377 * Retrieve the set of values that occur in matches for v.
378 * @return the Set of all values or empty set if there are no matches
379 *
380 */
381 public Set<Synchronization> getAllValuesOfv() {
382 return rawStreamAllValuesOfv(emptyArray()).collect(Collectors.toSet());
383 }
384
385 /**
386 * Retrieve the set of values that occur in matches for v.
387 * @return the Set of all values or empty set if there are no matches
388 *
389 */
390 public Stream<Synchronization> streamAllValuesOfv() {
391 return rawStreamAllValuesOfv(emptyArray());
392 }
393
394 @Override
395 protected HasMultipleIncomingTrainsition.Match tupleToMatch(final Tuple t) {
396 try {
397 return HasMultipleIncomingTrainsition.Match.newMatch((Synchronization) t.get(POSITION_V));
398 } catch(ClassCastException e) {
399 LOGGER.error("Element(s) in tuple not properly typed!",e);
400 return null;
401 }
402 }
403
404 @Override
405 protected HasMultipleIncomingTrainsition.Match arrayToMatch(final Object[] match) {
406 try {
407 return HasMultipleIncomingTrainsition.Match.newMatch((Synchronization) match[POSITION_V]);
408 } catch(ClassCastException e) {
409 LOGGER.error("Element(s) in array not properly typed!",e);
410 return null;
411 }
412 }
413
414 @Override
415 protected HasMultipleIncomingTrainsition.Match arrayToMatchMutable(final Object[] match) {
416 try {
417 return HasMultipleIncomingTrainsition.Match.newMutableMatch((Synchronization) match[POSITION_V]);
418 } catch(ClassCastException e) {
419 LOGGER.error("Element(s) in array not properly typed!",e);
420 return null;
421 }
422 }
423
424 /**
425 * @return the singleton instance of the query specification of this pattern
426 * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded
427 *
428 */
429 public static IQuerySpecification<HasMultipleIncomingTrainsition.Matcher> querySpecification() {
430 return HasMultipleIncomingTrainsition.instance();
431 }
432 }
433
434 private HasMultipleIncomingTrainsition() {
435 super(GeneratedPQuery.INSTANCE);
436 }
437
438 /**
439 * @return the singleton instance of the query specification
440 * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded
441 *
442 */
443 public static HasMultipleIncomingTrainsition instance() {
444 try{
445 return LazyHolder.INSTANCE;
446 } catch (ExceptionInInitializerError err) {
447 throw processInitializerError(err);
448 }
449 }
450
451 @Override
452 protected HasMultipleIncomingTrainsition.Matcher instantiate(final ViatraQueryEngine engine) {
453 return HasMultipleIncomingTrainsition.Matcher.on(engine);
454 }
455
456 @Override
457 public HasMultipleIncomingTrainsition.Matcher instantiate() {
458 return HasMultipleIncomingTrainsition.Matcher.create();
459 }
460
461 @Override
462 public HasMultipleIncomingTrainsition.Match newEmptyMatch() {
463 return HasMultipleIncomingTrainsition.Match.newEmptyMatch();
464 }
465
466 @Override
467 public HasMultipleIncomingTrainsition.Match newMatch(final Object... parameters) {
468 return HasMultipleIncomingTrainsition.Match.newMatch((ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization) parameters[0]);
469 }
470
471 /**
472 * Inner class allowing the singleton instance of {@link JvmGenericType: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.HasMultipleIncomingTrainsition (visibility: PUBLIC, simpleName: HasMultipleIncomingTrainsition, identifier: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.HasMultipleIncomingTrainsition, deprecated: <unset>) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)} to be created
473 * <b>not</b> at the class load time of the outer class,
474 * but rather at the first call to {@link JvmGenericType: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.HasMultipleIncomingTrainsition (visibility: PUBLIC, simpleName: HasMultipleIncomingTrainsition, identifier: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.HasMultipleIncomingTrainsition, deprecated: <unset>) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)#instance()}.
475 *
476 * <p> This workaround is required e.g. to support recursion.
477 *
478 */
479 private static class LazyHolder {
480 private final static HasMultipleIncomingTrainsition INSTANCE = new HasMultipleIncomingTrainsition();
481
482 /**
483 * Statically initializes the query specification <b>after</b> the field {@link #INSTANCE} is assigned.
484 * This initialization order is required to support indirect recursion.
485 *
486 * <p> The static initializer is defined using a helper field to work around limitations of the code generator.
487 *
488 */
489 private final static Object STATIC_INITIALIZER = ensureInitialized();
490
491 public static Object ensureInitialized() {
492 INSTANCE.ensureInitializedInternal();
493 return null;
494 }
495 }
496
497 private static class GeneratedPQuery extends BaseGeneratedEMFPQuery {
498 private final static HasMultipleIncomingTrainsition.GeneratedPQuery INSTANCE = new GeneratedPQuery();
499
500 private final PParameter parameter_v = new PParameter("v", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "Synchronization")), PParameterDirection.INOUT);
501
502 private final List<PParameter> parameters = Arrays.asList(parameter_v);
503
504 private GeneratedPQuery() {
505 super(PVisibility.PUBLIC);
506 }
507
508 @Override
509 public String getFullyQualifiedName() {
510 return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.hasMultipleIncomingTrainsition";
511 }
512
513 @Override
514 public List<String> getParameterNames() {
515 return Arrays.asList("v");
516 }
517
518 @Override
519 public List<PParameter> getParameters() {
520 return parameters;
521 }
522
523 @Override
524 public Set<PBody> doGetContainedBodies() {
525 setEvaluationHints(new QueryEvaluationHint(null, QueryEvaluationHint.BackendRequirement.UNSPECIFIED));
526 Set<PBody> bodies = new LinkedHashSet<>();
527 {
528 PBody body = new PBody(this);
529 PVariable var_v = body.getOrCreateVariableByName("v");
530 PVariable var___0_ = body.getOrCreateVariableByName("_<0>");
531 PVariable var_src1 = body.getOrCreateVariableByName("src1");
532 PVariable var___1_ = body.getOrCreateVariableByName("_<1>");
533 PVariable var_src2 = body.getOrCreateVariableByName("src2");
534 new TypeConstraint(body, Tuples.flatTupleOf(var_v), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Synchronization")));
535 body.setSymbolicParameters(Arrays.<ExportedParameter>asList(
536 new ExportedParameter(body, var_v, parameter_v)
537 ));
538 // find transition(_, src1, v)
539 new PositivePatternCall(body, Tuples.flatTupleOf(var___0_, var_src1, var_v), Transition.instance().getInternalQueryRepresentation());
540 // find transition(_, src2, v)
541 new PositivePatternCall(body, Tuples.flatTupleOf(var___1_, var_src2, var_v), Transition.instance().getInternalQueryRepresentation());
542 // src1 != src2
543 new Inequality(body, var_src1, var_src2);
544 bodies.add(body);
545 }
546 return bodies;
547 }
548 }
549}
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/HasMultipleOutgoingTrainsition.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/HasMultipleOutgoingTrainsition.java
new file mode 100644
index 00000000..115b93e1
--- /dev/null
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/HasMultipleOutgoingTrainsition.java
@@ -0,0 +1,549 @@
1/**
2 * Generated from platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduPatterns.vql
3 */
4package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries;
5
6import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization;
7import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.Transition;
8import java.util.Arrays;
9import java.util.Collection;
10import java.util.LinkedHashSet;
11import java.util.List;
12import java.util.Objects;
13import java.util.Optional;
14import java.util.Set;
15import java.util.function.Consumer;
16import java.util.stream.Collectors;
17import java.util.stream.Stream;
18import org.apache.log4j.Logger;
19import org.eclipse.emf.ecore.EClass;
20import org.eclipse.viatra.query.runtime.api.IPatternMatch;
21import org.eclipse.viatra.query.runtime.api.IQuerySpecification;
22import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine;
23import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFPQuery;
24import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFQuerySpecification;
25import org.eclipse.viatra.query.runtime.api.impl.BaseMatcher;
26import org.eclipse.viatra.query.runtime.api.impl.BasePatternMatch;
27import org.eclipse.viatra.query.runtime.emf.types.EClassTransitiveInstancesKey;
28import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint;
29import org.eclipse.viatra.query.runtime.matchers.psystem.PBody;
30import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable;
31import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExportedParameter;
32import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.Inequality;
33import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.PositivePatternCall;
34import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint;
35import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter;
36import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameterDirection;
37import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PVisibility;
38import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple;
39import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples;
40import org.eclipse.viatra.query.runtime.util.ViatraQueryLoggingUtil;
41
42/**
43 * A pattern-specific query specification that can instantiate Matcher in a type-safe way.
44 *
45 * <p>Original source:
46 * <code><pre>
47 * pattern hasMultipleOutgoingTrainsition(v : Synchronization) {
48 * find transition(_, v, trg1);
49 * find transition(_, v, trg2);
50 * trg1 != trg2;
51 * }
52 * </pre></code>
53 *
54 * @see Matcher
55 * @see Match
56 *
57 */
58@SuppressWarnings("all")
59public final class HasMultipleOutgoingTrainsition extends BaseGeneratedEMFQuerySpecification<HasMultipleOutgoingTrainsition.Matcher> {
60 /**
61 * Pattern-specific match representation of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.hasMultipleOutgoingTrainsition pattern,
62 * to be used in conjunction with {@link Matcher}.
63 *
64 * <p>Class fields correspond to parameters of the pattern. Fields with value null are considered unassigned.
65 * Each instance is a (possibly partial) substitution of pattern parameters,
66 * usable to represent a match of the pattern in the result of a query,
67 * or to specify the bound (fixed) input parameters when issuing a query.
68 *
69 * @see Matcher
70 *
71 */
72 public static abstract class Match extends BasePatternMatch {
73 private Synchronization fV;
74
75 private static List<String> parameterNames = makeImmutableList("v");
76
77 private Match(final Synchronization pV) {
78 this.fV = pV;
79 }
80
81 @Override
82 public Object get(final String parameterName) {
83 if ("v".equals(parameterName)) return this.fV;
84 return null;
85 }
86
87 public Synchronization getV() {
88 return this.fV;
89 }
90
91 @Override
92 public boolean set(final String parameterName, final Object newValue) {
93 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
94 if ("v".equals(parameterName) ) {
95 this.fV = (Synchronization) newValue;
96 return true;
97 }
98 return false;
99 }
100
101 public void setV(final Synchronization pV) {
102 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
103 this.fV = pV;
104 }
105
106 @Override
107 public String patternName() {
108 return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.hasMultipleOutgoingTrainsition";
109 }
110
111 @Override
112 public List<String> parameterNames() {
113 return HasMultipleOutgoingTrainsition.Match.parameterNames;
114 }
115
116 @Override
117 public Object[] toArray() {
118 return new Object[]{fV};
119 }
120
121 @Override
122 public HasMultipleOutgoingTrainsition.Match toImmutable() {
123 return isMutable() ? newMatch(fV) : this;
124 }
125
126 @Override
127 public String prettyPrint() {
128 StringBuilder result = new StringBuilder();
129 result.append("\"v\"=" + prettyPrintValue(fV));
130 return result.toString();
131 }
132
133 @Override
134 public int hashCode() {
135 return Objects.hash(fV);
136 }
137
138 @Override
139 public boolean equals(final Object obj) {
140 if (this == obj)
141 return true;
142 if (obj == null) {
143 return false;
144 }
145 if ((obj instanceof HasMultipleOutgoingTrainsition.Match)) {
146 HasMultipleOutgoingTrainsition.Match other = (HasMultipleOutgoingTrainsition.Match) obj;
147 return Objects.equals(fV, other.fV);
148 } else {
149 // this should be infrequent
150 if (!(obj instanceof IPatternMatch)) {
151 return false;
152 }
153 IPatternMatch otherSig = (IPatternMatch) obj;
154 return Objects.equals(specification(), otherSig.specification()) && Arrays.deepEquals(toArray(), otherSig.toArray());
155 }
156 }
157
158 @Override
159 public HasMultipleOutgoingTrainsition specification() {
160 return HasMultipleOutgoingTrainsition.instance();
161 }
162
163 /**
164 * Returns an empty, mutable match.
165 * Fields of the mutable match can be filled to create a partial match, usable as matcher input.
166 *
167 * @return the empty match.
168 *
169 */
170 public static HasMultipleOutgoingTrainsition.Match newEmptyMatch() {
171 return new Mutable(null);
172 }
173
174 /**
175 * Returns a mutable (partial) match.
176 * Fields of the mutable match can be filled to create a partial match, usable as matcher input.
177 *
178 * @param pV the fixed value of pattern parameter v, or null if not bound.
179 * @return the new, mutable (partial) match object.
180 *
181 */
182 public static HasMultipleOutgoingTrainsition.Match newMutableMatch(final Synchronization pV) {
183 return new Mutable(pV);
184 }
185
186 /**
187 * Returns a new (partial) match.
188 * This can be used e.g. to call the matcher with a partial match.
189 * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object.
190 * @param pV the fixed value of pattern parameter v, or null if not bound.
191 * @return the (partial) match object.
192 *
193 */
194 public static HasMultipleOutgoingTrainsition.Match newMatch(final Synchronization pV) {
195 return new Immutable(pV);
196 }
197
198 private static final class Mutable extends HasMultipleOutgoingTrainsition.Match {
199 Mutable(final Synchronization pV) {
200 super(pV);
201 }
202
203 @Override
204 public boolean isMutable() {
205 return true;
206 }
207 }
208
209 private static final class Immutable extends HasMultipleOutgoingTrainsition.Match {
210 Immutable(final Synchronization pV) {
211 super(pV);
212 }
213
214 @Override
215 public boolean isMutable() {
216 return false;
217 }
218 }
219 }
220
221 /**
222 * Generated pattern matcher API of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.hasMultipleOutgoingTrainsition pattern,
223 * providing pattern-specific query methods.
224 *
225 * <p>Use the pattern matcher on a given model via {@link #on(ViatraQueryEngine)},
226 * e.g. in conjunction with {@link ViatraQueryEngine#on(QueryScope)}.
227 *
228 * <p>Matches of the pattern will be represented as {@link Match}.
229 *
230 * <p>Original source:
231 * <code><pre>
232 * pattern hasMultipleOutgoingTrainsition(v : Synchronization) {
233 * find transition(_, v, trg1);
234 * find transition(_, v, trg2);
235 * trg1 != trg2;
236 * }
237 * </pre></code>
238 *
239 * @see Match
240 * @see HasMultipleOutgoingTrainsition
241 *
242 */
243 public static class Matcher extends BaseMatcher<HasMultipleOutgoingTrainsition.Match> {
244 /**
245 * Initializes the pattern matcher within an existing VIATRA Query engine.
246 * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned.
247 *
248 * @param engine the existing VIATRA Query engine in which this matcher will be created.
249 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
250 *
251 */
252 public static HasMultipleOutgoingTrainsition.Matcher on(final ViatraQueryEngine engine) {
253 // check if matcher already exists
254 Matcher matcher = engine.getExistingMatcher(querySpecification());
255 if (matcher == null) {
256 matcher = (Matcher)engine.getMatcher(querySpecification());
257 }
258 return matcher;
259 }
260
261 /**
262 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
263 * @return an initialized matcher
264 * @noreference This method is for internal matcher initialization by the framework, do not call it manually.
265 *
266 */
267 public static HasMultipleOutgoingTrainsition.Matcher create() {
268 return new Matcher();
269 }
270
271 private final static int POSITION_V = 0;
272
273 private final static Logger LOGGER = ViatraQueryLoggingUtil.getLogger(HasMultipleOutgoingTrainsition.Matcher.class);
274
275 /**
276 * Initializes the pattern matcher within an existing VIATRA Query engine.
277 * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned.
278 *
279 * @param engine the existing VIATRA Query engine in which this matcher will be created.
280 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
281 *
282 */
283 private Matcher() {
284 super(querySpecification());
285 }
286
287 /**
288 * Returns the set of all matches of the pattern that conform to the given fixed values of some parameters.
289 * @param pV the fixed value of pattern parameter v, or null if not bound.
290 * @return matches represented as a Match object.
291 *
292 */
293 public Collection<HasMultipleOutgoingTrainsition.Match> getAllMatches(final Synchronization pV) {
294 return rawStreamAllMatches(new Object[]{pV}).collect(Collectors.toSet());
295 }
296
297 /**
298 * Returns a stream of all matches of the pattern that conform to the given fixed values of some parameters.
299 * </p>
300 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
301 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
302 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
303 * @param pV the fixed value of pattern parameter v, or null if not bound.
304 * @return a stream of matches represented as a Match object.
305 *
306 */
307 public Stream<HasMultipleOutgoingTrainsition.Match> streamAllMatches(final Synchronization pV) {
308 return rawStreamAllMatches(new Object[]{pV});
309 }
310
311 /**
312 * Returns an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters.
313 * Neither determinism nor randomness of selection is guaranteed.
314 * @param pV the fixed value of pattern parameter v, or null if not bound.
315 * @return a match represented as a Match object, or null if no match is found.
316 *
317 */
318 public Optional<HasMultipleOutgoingTrainsition.Match> getOneArbitraryMatch(final Synchronization pV) {
319 return rawGetOneArbitraryMatch(new Object[]{pV});
320 }
321
322 /**
323 * Indicates whether the given combination of specified pattern parameters constitute a valid pattern match,
324 * under any possible substitution of the unspecified parameters (if any).
325 * @param pV the fixed value of pattern parameter v, or null if not bound.
326 * @return true if the input is a valid (partial) match of the pattern.
327 *
328 */
329 public boolean hasMatch(final Synchronization pV) {
330 return rawHasMatch(new Object[]{pV});
331 }
332
333 /**
334 * Returns the number of all matches of the pattern that conform to the given fixed values of some parameters.
335 * @param pV the fixed value of pattern parameter v, or null if not bound.
336 * @return the number of pattern matches found.
337 *
338 */
339 public int countMatches(final Synchronization pV) {
340 return rawCountMatches(new Object[]{pV});
341 }
342
343 /**
344 * Executes the given processor on an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters.
345 * Neither determinism nor randomness of selection is guaranteed.
346 * @param pV the fixed value of pattern parameter v, or null if not bound.
347 * @param processor the action that will process the selected match.
348 * @return true if the pattern has at least one match with the given parameter values, false if the processor was not invoked
349 *
350 */
351 public boolean forOneArbitraryMatch(final Synchronization pV, final Consumer<? super HasMultipleOutgoingTrainsition.Match> processor) {
352 return rawForOneArbitraryMatch(new Object[]{pV}, processor);
353 }
354
355 /**
356 * Returns a new (partial) match.
357 * This can be used e.g. to call the matcher with a partial match.
358 * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object.
359 * @param pV the fixed value of pattern parameter v, or null if not bound.
360 * @return the (partial) match object.
361 *
362 */
363 public HasMultipleOutgoingTrainsition.Match newMatch(final Synchronization pV) {
364 return HasMultipleOutgoingTrainsition.Match.newMatch(pV);
365 }
366
367 /**
368 * Retrieve the set of values that occur in matches for v.
369 * @return the Set of all values or empty set if there are no matches
370 *
371 */
372 protected Stream<Synchronization> rawStreamAllValuesOfv(final Object[] parameters) {
373 return rawStreamAllValues(POSITION_V, parameters).map(Synchronization.class::cast);
374 }
375
376 /**
377 * Retrieve the set of values that occur in matches for v.
378 * @return the Set of all values or empty set if there are no matches
379 *
380 */
381 public Set<Synchronization> getAllValuesOfv() {
382 return rawStreamAllValuesOfv(emptyArray()).collect(Collectors.toSet());
383 }
384
385 /**
386 * Retrieve the set of values that occur in matches for v.
387 * @return the Set of all values or empty set if there are no matches
388 *
389 */
390 public Stream<Synchronization> streamAllValuesOfv() {
391 return rawStreamAllValuesOfv(emptyArray());
392 }
393
394 @Override
395 protected HasMultipleOutgoingTrainsition.Match tupleToMatch(final Tuple t) {
396 try {
397 return HasMultipleOutgoingTrainsition.Match.newMatch((Synchronization) t.get(POSITION_V));
398 } catch(ClassCastException e) {
399 LOGGER.error("Element(s) in tuple not properly typed!",e);
400 return null;
401 }
402 }
403
404 @Override
405 protected HasMultipleOutgoingTrainsition.Match arrayToMatch(final Object[] match) {
406 try {
407 return HasMultipleOutgoingTrainsition.Match.newMatch((Synchronization) match[POSITION_V]);
408 } catch(ClassCastException e) {
409 LOGGER.error("Element(s) in array not properly typed!",e);
410 return null;
411 }
412 }
413
414 @Override
415 protected HasMultipleOutgoingTrainsition.Match arrayToMatchMutable(final Object[] match) {
416 try {
417 return HasMultipleOutgoingTrainsition.Match.newMutableMatch((Synchronization) match[POSITION_V]);
418 } catch(ClassCastException e) {
419 LOGGER.error("Element(s) in array not properly typed!",e);
420 return null;
421 }
422 }
423
424 /**
425 * @return the singleton instance of the query specification of this pattern
426 * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded
427 *
428 */
429 public static IQuerySpecification<HasMultipleOutgoingTrainsition.Matcher> querySpecification() {
430 return HasMultipleOutgoingTrainsition.instance();
431 }
432 }
433
434 private HasMultipleOutgoingTrainsition() {
435 super(GeneratedPQuery.INSTANCE);
436 }
437
438 /**
439 * @return the singleton instance of the query specification
440 * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded
441 *
442 */
443 public static HasMultipleOutgoingTrainsition instance() {
444 try{
445 return LazyHolder.INSTANCE;
446 } catch (ExceptionInInitializerError err) {
447 throw processInitializerError(err);
448 }
449 }
450
451 @Override
452 protected HasMultipleOutgoingTrainsition.Matcher instantiate(final ViatraQueryEngine engine) {
453 return HasMultipleOutgoingTrainsition.Matcher.on(engine);
454 }
455
456 @Override
457 public HasMultipleOutgoingTrainsition.Matcher instantiate() {
458 return HasMultipleOutgoingTrainsition.Matcher.create();
459 }
460
461 @Override
462 public HasMultipleOutgoingTrainsition.Match newEmptyMatch() {
463 return HasMultipleOutgoingTrainsition.Match.newEmptyMatch();
464 }
465
466 @Override
467 public HasMultipleOutgoingTrainsition.Match newMatch(final Object... parameters) {
468 return HasMultipleOutgoingTrainsition.Match.newMatch((ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization) parameters[0]);
469 }
470
471 /**
472 * Inner class allowing the singleton instance of {@link JvmGenericType: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.HasMultipleOutgoingTrainsition (visibility: PUBLIC, simpleName: HasMultipleOutgoingTrainsition, identifier: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.HasMultipleOutgoingTrainsition, deprecated: <unset>) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)} to be created
473 * <b>not</b> at the class load time of the outer class,
474 * but rather at the first call to {@link JvmGenericType: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.HasMultipleOutgoingTrainsition (visibility: PUBLIC, simpleName: HasMultipleOutgoingTrainsition, identifier: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.HasMultipleOutgoingTrainsition, deprecated: <unset>) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)#instance()}.
475 *
476 * <p> This workaround is required e.g. to support recursion.
477 *
478 */
479 private static class LazyHolder {
480 private final static HasMultipleOutgoingTrainsition INSTANCE = new HasMultipleOutgoingTrainsition();
481
482 /**
483 * Statically initializes the query specification <b>after</b> the field {@link #INSTANCE} is assigned.
484 * This initialization order is required to support indirect recursion.
485 *
486 * <p> The static initializer is defined using a helper field to work around limitations of the code generator.
487 *
488 */
489 private final static Object STATIC_INITIALIZER = ensureInitialized();
490
491 public static Object ensureInitialized() {
492 INSTANCE.ensureInitializedInternal();
493 return null;
494 }
495 }
496
497 private static class GeneratedPQuery extends BaseGeneratedEMFPQuery {
498 private final static HasMultipleOutgoingTrainsition.GeneratedPQuery INSTANCE = new GeneratedPQuery();
499
500 private final PParameter parameter_v = new PParameter("v", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "Synchronization")), PParameterDirection.INOUT);
501
502 private final List<PParameter> parameters = Arrays.asList(parameter_v);
503
504 private GeneratedPQuery() {
505 super(PVisibility.PUBLIC);
506 }
507
508 @Override
509 public String getFullyQualifiedName() {
510 return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.hasMultipleOutgoingTrainsition";
511 }
512
513 @Override
514 public List<String> getParameterNames() {
515 return Arrays.asList("v");
516 }
517
518 @Override
519 public List<PParameter> getParameters() {
520 return parameters;
521 }
522
523 @Override
524 public Set<PBody> doGetContainedBodies() {
525 setEvaluationHints(new QueryEvaluationHint(null, QueryEvaluationHint.BackendRequirement.UNSPECIFIED));
526 Set<PBody> bodies = new LinkedHashSet<>();
527 {
528 PBody body = new PBody(this);
529 PVariable var_v = body.getOrCreateVariableByName("v");
530 PVariable var___0_ = body.getOrCreateVariableByName("_<0>");
531 PVariable var_trg1 = body.getOrCreateVariableByName("trg1");
532 PVariable var___1_ = body.getOrCreateVariableByName("_<1>");
533 PVariable var_trg2 = body.getOrCreateVariableByName("trg2");
534 new TypeConstraint(body, Tuples.flatTupleOf(var_v), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Synchronization")));
535 body.setSymbolicParameters(Arrays.<ExportedParameter>asList(
536 new ExportedParameter(body, var_v, parameter_v)
537 ));
538 // find transition(_, v, trg1)
539 new PositivePatternCall(body, Tuples.flatTupleOf(var___0_, var_v, var_trg1), Transition.instance().getInternalQueryRepresentation());
540 // find transition(_, v, trg2)
541 new PositivePatternCall(body, Tuples.flatTupleOf(var___1_, var_v, var_trg2), Transition.instance().getInternalQueryRepresentation());
542 // trg1 != trg2
543 new Inequality(body, var_trg1, var_trg2);
544 bodies.add(body);
545 }
546 return bodies;
547 }
548 }
549}
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/HasMultipleRegions.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/HasMultipleRegions.java
new file mode 100644
index 00000000..5542ccbb
--- /dev/null
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/HasMultipleRegions.java
@@ -0,0 +1,555 @@
1/**
2 * Generated from platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduPatterns.vql
3 */
4package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries;
5
6import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.CompositeElement;
7import java.util.Arrays;
8import java.util.Collection;
9import java.util.LinkedHashSet;
10import java.util.List;
11import java.util.Objects;
12import java.util.Optional;
13import java.util.Set;
14import java.util.function.Consumer;
15import java.util.stream.Collectors;
16import java.util.stream.Stream;
17import org.apache.log4j.Logger;
18import org.eclipse.emf.ecore.EClass;
19import org.eclipse.viatra.query.runtime.api.IPatternMatch;
20import org.eclipse.viatra.query.runtime.api.IQuerySpecification;
21import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine;
22import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFPQuery;
23import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFQuerySpecification;
24import org.eclipse.viatra.query.runtime.api.impl.BaseMatcher;
25import org.eclipse.viatra.query.runtime.api.impl.BasePatternMatch;
26import org.eclipse.viatra.query.runtime.emf.types.EClassTransitiveInstancesKey;
27import org.eclipse.viatra.query.runtime.emf.types.EStructuralFeatureInstancesKey;
28import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint;
29import org.eclipse.viatra.query.runtime.matchers.psystem.PBody;
30import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable;
31import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.Equality;
32import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExportedParameter;
33import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.Inequality;
34import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint;
35import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter;
36import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameterDirection;
37import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PVisibility;
38import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple;
39import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples;
40import org.eclipse.viatra.query.runtime.util.ViatraQueryLoggingUtil;
41
42/**
43 * A pattern-specific query specification that can instantiate Matcher in a type-safe way.
44 *
45 * <p>Original source:
46 * <code><pre>
47 * pattern hasMultipleRegions(composite: CompositeElement) {
48 * CompositeElement.regions(composite,region1);
49 * CompositeElement.regions(composite,region2);
50 * region1 != region2;
51 * }
52 * </pre></code>
53 *
54 * @see Matcher
55 * @see Match
56 *
57 */
58@SuppressWarnings("all")
59public final class HasMultipleRegions extends BaseGeneratedEMFQuerySpecification<HasMultipleRegions.Matcher> {
60 /**
61 * Pattern-specific match representation of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.hasMultipleRegions pattern,
62 * to be used in conjunction with {@link Matcher}.
63 *
64 * <p>Class fields correspond to parameters of the pattern. Fields with value null are considered unassigned.
65 * Each instance is a (possibly partial) substitution of pattern parameters,
66 * usable to represent a match of the pattern in the result of a query,
67 * or to specify the bound (fixed) input parameters when issuing a query.
68 *
69 * @see Matcher
70 *
71 */
72 public static abstract class Match extends BasePatternMatch {
73 private CompositeElement fComposite;
74
75 private static List<String> parameterNames = makeImmutableList("composite");
76
77 private Match(final CompositeElement pComposite) {
78 this.fComposite = pComposite;
79 }
80
81 @Override
82 public Object get(final String parameterName) {
83 if ("composite".equals(parameterName)) return this.fComposite;
84 return null;
85 }
86
87 public CompositeElement getComposite() {
88 return this.fComposite;
89 }
90
91 @Override
92 public boolean set(final String parameterName, final Object newValue) {
93 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
94 if ("composite".equals(parameterName) ) {
95 this.fComposite = (CompositeElement) newValue;
96 return true;
97 }
98 return false;
99 }
100
101 public void setComposite(final CompositeElement pComposite) {
102 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
103 this.fComposite = pComposite;
104 }
105
106 @Override
107 public String patternName() {
108 return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.hasMultipleRegions";
109 }
110
111 @Override
112 public List<String> parameterNames() {
113 return HasMultipleRegions.Match.parameterNames;
114 }
115
116 @Override
117 public Object[] toArray() {
118 return new Object[]{fComposite};
119 }
120
121 @Override
122 public HasMultipleRegions.Match toImmutable() {
123 return isMutable() ? newMatch(fComposite) : this;
124 }
125
126 @Override
127 public String prettyPrint() {
128 StringBuilder result = new StringBuilder();
129 result.append("\"composite\"=" + prettyPrintValue(fComposite));
130 return result.toString();
131 }
132
133 @Override
134 public int hashCode() {
135 return Objects.hash(fComposite);
136 }
137
138 @Override
139 public boolean equals(final Object obj) {
140 if (this == obj)
141 return true;
142 if (obj == null) {
143 return false;
144 }
145 if ((obj instanceof HasMultipleRegions.Match)) {
146 HasMultipleRegions.Match other = (HasMultipleRegions.Match) obj;
147 return Objects.equals(fComposite, other.fComposite);
148 } else {
149 // this should be infrequent
150 if (!(obj instanceof IPatternMatch)) {
151 return false;
152 }
153 IPatternMatch otherSig = (IPatternMatch) obj;
154 return Objects.equals(specification(), otherSig.specification()) && Arrays.deepEquals(toArray(), otherSig.toArray());
155 }
156 }
157
158 @Override
159 public HasMultipleRegions specification() {
160 return HasMultipleRegions.instance();
161 }
162
163 /**
164 * Returns an empty, mutable match.
165 * Fields of the mutable match can be filled to create a partial match, usable as matcher input.
166 *
167 * @return the empty match.
168 *
169 */
170 public static HasMultipleRegions.Match newEmptyMatch() {
171 return new Mutable(null);
172 }
173
174 /**
175 * Returns a mutable (partial) match.
176 * Fields of the mutable match can be filled to create a partial match, usable as matcher input.
177 *
178 * @param pComposite the fixed value of pattern parameter composite, or null if not bound.
179 * @return the new, mutable (partial) match object.
180 *
181 */
182 public static HasMultipleRegions.Match newMutableMatch(final CompositeElement pComposite) {
183 return new Mutable(pComposite);
184 }
185
186 /**
187 * Returns a new (partial) match.
188 * This can be used e.g. to call the matcher with a partial match.
189 * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object.
190 * @param pComposite the fixed value of pattern parameter composite, or null if not bound.
191 * @return the (partial) match object.
192 *
193 */
194 public static HasMultipleRegions.Match newMatch(final CompositeElement pComposite) {
195 return new Immutable(pComposite);
196 }
197
198 private static final class Mutable extends HasMultipleRegions.Match {
199 Mutable(final CompositeElement pComposite) {
200 super(pComposite);
201 }
202
203 @Override
204 public boolean isMutable() {
205 return true;
206 }
207 }
208
209 private static final class Immutable extends HasMultipleRegions.Match {
210 Immutable(final CompositeElement pComposite) {
211 super(pComposite);
212 }
213
214 @Override
215 public boolean isMutable() {
216 return false;
217 }
218 }
219 }
220
221 /**
222 * Generated pattern matcher API of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.hasMultipleRegions pattern,
223 * providing pattern-specific query methods.
224 *
225 * <p>Use the pattern matcher on a given model via {@link #on(ViatraQueryEngine)},
226 * e.g. in conjunction with {@link ViatraQueryEngine#on(QueryScope)}.
227 *
228 * <p>Matches of the pattern will be represented as {@link Match}.
229 *
230 * <p>Original source:
231 * <code><pre>
232 * pattern hasMultipleRegions(composite: CompositeElement) {
233 * CompositeElement.regions(composite,region1);
234 * CompositeElement.regions(composite,region2);
235 * region1 != region2;
236 * }
237 * </pre></code>
238 *
239 * @see Match
240 * @see HasMultipleRegions
241 *
242 */
243 public static class Matcher extends BaseMatcher<HasMultipleRegions.Match> {
244 /**
245 * Initializes the pattern matcher within an existing VIATRA Query engine.
246 * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned.
247 *
248 * @param engine the existing VIATRA Query engine in which this matcher will be created.
249 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
250 *
251 */
252 public static HasMultipleRegions.Matcher on(final ViatraQueryEngine engine) {
253 // check if matcher already exists
254 Matcher matcher = engine.getExistingMatcher(querySpecification());
255 if (matcher == null) {
256 matcher = (Matcher)engine.getMatcher(querySpecification());
257 }
258 return matcher;
259 }
260
261 /**
262 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
263 * @return an initialized matcher
264 * @noreference This method is for internal matcher initialization by the framework, do not call it manually.
265 *
266 */
267 public static HasMultipleRegions.Matcher create() {
268 return new Matcher();
269 }
270
271 private final static int POSITION_COMPOSITE = 0;
272
273 private final static Logger LOGGER = ViatraQueryLoggingUtil.getLogger(HasMultipleRegions.Matcher.class);
274
275 /**
276 * Initializes the pattern matcher within an existing VIATRA Query engine.
277 * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned.
278 *
279 * @param engine the existing VIATRA Query engine in which this matcher will be created.
280 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
281 *
282 */
283 private Matcher() {
284 super(querySpecification());
285 }
286
287 /**
288 * Returns the set of all matches of the pattern that conform to the given fixed values of some parameters.
289 * @param pComposite the fixed value of pattern parameter composite, or null if not bound.
290 * @return matches represented as a Match object.
291 *
292 */
293 public Collection<HasMultipleRegions.Match> getAllMatches(final CompositeElement pComposite) {
294 return rawStreamAllMatches(new Object[]{pComposite}).collect(Collectors.toSet());
295 }
296
297 /**
298 * Returns a stream of all matches of the pattern that conform to the given fixed values of some parameters.
299 * </p>
300 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
301 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
302 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
303 * @param pComposite the fixed value of pattern parameter composite, or null if not bound.
304 * @return a stream of matches represented as a Match object.
305 *
306 */
307 public Stream<HasMultipleRegions.Match> streamAllMatches(final CompositeElement pComposite) {
308 return rawStreamAllMatches(new Object[]{pComposite});
309 }
310
311 /**
312 * Returns an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters.
313 * Neither determinism nor randomness of selection is guaranteed.
314 * @param pComposite the fixed value of pattern parameter composite, or null if not bound.
315 * @return a match represented as a Match object, or null if no match is found.
316 *
317 */
318 public Optional<HasMultipleRegions.Match> getOneArbitraryMatch(final CompositeElement pComposite) {
319 return rawGetOneArbitraryMatch(new Object[]{pComposite});
320 }
321
322 /**
323 * Indicates whether the given combination of specified pattern parameters constitute a valid pattern match,
324 * under any possible substitution of the unspecified parameters (if any).
325 * @param pComposite the fixed value of pattern parameter composite, or null if not bound.
326 * @return true if the input is a valid (partial) match of the pattern.
327 *
328 */
329 public boolean hasMatch(final CompositeElement pComposite) {
330 return rawHasMatch(new Object[]{pComposite});
331 }
332
333 /**
334 * Returns the number of all matches of the pattern that conform to the given fixed values of some parameters.
335 * @param pComposite the fixed value of pattern parameter composite, or null if not bound.
336 * @return the number of pattern matches found.
337 *
338 */
339 public int countMatches(final CompositeElement pComposite) {
340 return rawCountMatches(new Object[]{pComposite});
341 }
342
343 /**
344 * Executes the given processor on an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters.
345 * Neither determinism nor randomness of selection is guaranteed.
346 * @param pComposite the fixed value of pattern parameter composite, or null if not bound.
347 * @param processor the action that will process the selected match.
348 * @return true if the pattern has at least one match with the given parameter values, false if the processor was not invoked
349 *
350 */
351 public boolean forOneArbitraryMatch(final CompositeElement pComposite, final Consumer<? super HasMultipleRegions.Match> processor) {
352 return rawForOneArbitraryMatch(new Object[]{pComposite}, processor);
353 }
354
355 /**
356 * Returns a new (partial) match.
357 * This can be used e.g. to call the matcher with a partial match.
358 * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object.
359 * @param pComposite the fixed value of pattern parameter composite, or null if not bound.
360 * @return the (partial) match object.
361 *
362 */
363 public HasMultipleRegions.Match newMatch(final CompositeElement pComposite) {
364 return HasMultipleRegions.Match.newMatch(pComposite);
365 }
366
367 /**
368 * Retrieve the set of values that occur in matches for composite.
369 * @return the Set of all values or empty set if there are no matches
370 *
371 */
372 protected Stream<CompositeElement> rawStreamAllValuesOfcomposite(final Object[] parameters) {
373 return rawStreamAllValues(POSITION_COMPOSITE, parameters).map(CompositeElement.class::cast);
374 }
375
376 /**
377 * Retrieve the set of values that occur in matches for composite.
378 * @return the Set of all values or empty set if there are no matches
379 *
380 */
381 public Set<CompositeElement> getAllValuesOfcomposite() {
382 return rawStreamAllValuesOfcomposite(emptyArray()).collect(Collectors.toSet());
383 }
384
385 /**
386 * Retrieve the set of values that occur in matches for composite.
387 * @return the Set of all values or empty set if there are no matches
388 *
389 */
390 public Stream<CompositeElement> streamAllValuesOfcomposite() {
391 return rawStreamAllValuesOfcomposite(emptyArray());
392 }
393
394 @Override
395 protected HasMultipleRegions.Match tupleToMatch(final Tuple t) {
396 try {
397 return HasMultipleRegions.Match.newMatch((CompositeElement) t.get(POSITION_COMPOSITE));
398 } catch(ClassCastException e) {
399 LOGGER.error("Element(s) in tuple not properly typed!",e);
400 return null;
401 }
402 }
403
404 @Override
405 protected HasMultipleRegions.Match arrayToMatch(final Object[] match) {
406 try {
407 return HasMultipleRegions.Match.newMatch((CompositeElement) match[POSITION_COMPOSITE]);
408 } catch(ClassCastException e) {
409 LOGGER.error("Element(s) in array not properly typed!",e);
410 return null;
411 }
412 }
413
414 @Override
415 protected HasMultipleRegions.Match arrayToMatchMutable(final Object[] match) {
416 try {
417 return HasMultipleRegions.Match.newMutableMatch((CompositeElement) match[POSITION_COMPOSITE]);
418 } catch(ClassCastException e) {
419 LOGGER.error("Element(s) in array not properly typed!",e);
420 return null;
421 }
422 }
423
424 /**
425 * @return the singleton instance of the query specification of this pattern
426 * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded
427 *
428 */
429 public static IQuerySpecification<HasMultipleRegions.Matcher> querySpecification() {
430 return HasMultipleRegions.instance();
431 }
432 }
433
434 private HasMultipleRegions() {
435 super(GeneratedPQuery.INSTANCE);
436 }
437
438 /**
439 * @return the singleton instance of the query specification
440 * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded
441 *
442 */
443 public static HasMultipleRegions instance() {
444 try{
445 return LazyHolder.INSTANCE;
446 } catch (ExceptionInInitializerError err) {
447 throw processInitializerError(err);
448 }
449 }
450
451 @Override
452 protected HasMultipleRegions.Matcher instantiate(final ViatraQueryEngine engine) {
453 return HasMultipleRegions.Matcher.on(engine);
454 }
455
456 @Override
457 public HasMultipleRegions.Matcher instantiate() {
458 return HasMultipleRegions.Matcher.create();
459 }
460
461 @Override
462 public HasMultipleRegions.Match newEmptyMatch() {
463 return HasMultipleRegions.Match.newEmptyMatch();
464 }
465
466 @Override
467 public HasMultipleRegions.Match newMatch(final Object... parameters) {
468 return HasMultipleRegions.Match.newMatch((ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.CompositeElement) parameters[0]);
469 }
470
471 /**
472 * Inner class allowing the singleton instance of {@link JvmGenericType: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.HasMultipleRegions (visibility: PUBLIC, simpleName: HasMultipleRegions, identifier: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.HasMultipleRegions, deprecated: <unset>) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)} to be created
473 * <b>not</b> at the class load time of the outer class,
474 * but rather at the first call to {@link JvmGenericType: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.HasMultipleRegions (visibility: PUBLIC, simpleName: HasMultipleRegions, identifier: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.HasMultipleRegions, deprecated: <unset>) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)#instance()}.
475 *
476 * <p> This workaround is required e.g. to support recursion.
477 *
478 */
479 private static class LazyHolder {
480 private final static HasMultipleRegions INSTANCE = new HasMultipleRegions();
481
482 /**
483 * Statically initializes the query specification <b>after</b> the field {@link #INSTANCE} is assigned.
484 * This initialization order is required to support indirect recursion.
485 *
486 * <p> The static initializer is defined using a helper field to work around limitations of the code generator.
487 *
488 */
489 private final static Object STATIC_INITIALIZER = ensureInitialized();
490
491 public static Object ensureInitialized() {
492 INSTANCE.ensureInitializedInternal();
493 return null;
494 }
495 }
496
497 private static class GeneratedPQuery extends BaseGeneratedEMFPQuery {
498 private final static HasMultipleRegions.GeneratedPQuery INSTANCE = new GeneratedPQuery();
499
500 private final PParameter parameter_composite = new PParameter("composite", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.CompositeElement", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "CompositeElement")), PParameterDirection.INOUT);
501
502 private final List<PParameter> parameters = Arrays.asList(parameter_composite);
503
504 private GeneratedPQuery() {
505 super(PVisibility.PUBLIC);
506 }
507
508 @Override
509 public String getFullyQualifiedName() {
510 return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.hasMultipleRegions";
511 }
512
513 @Override
514 public List<String> getParameterNames() {
515 return Arrays.asList("composite");
516 }
517
518 @Override
519 public List<PParameter> getParameters() {
520 return parameters;
521 }
522
523 @Override
524 public Set<PBody> doGetContainedBodies() {
525 setEvaluationHints(new QueryEvaluationHint(null, QueryEvaluationHint.BackendRequirement.UNSPECIFIED));
526 Set<PBody> bodies = new LinkedHashSet<>();
527 {
528 PBody body = new PBody(this);
529 PVariable var_composite = body.getOrCreateVariableByName("composite");
530 PVariable var_region1 = body.getOrCreateVariableByName("region1");
531 PVariable var_region2 = body.getOrCreateVariableByName("region2");
532 new TypeConstraint(body, Tuples.flatTupleOf(var_composite), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "CompositeElement")));
533 body.setSymbolicParameters(Arrays.<ExportedParameter>asList(
534 new ExportedParameter(body, var_composite, parameter_composite)
535 ));
536 // CompositeElement.regions(composite,region1)
537 new TypeConstraint(body, Tuples.flatTupleOf(var_composite), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "CompositeElement")));
538 PVariable var__virtual_0_ = body.getOrCreateVariableByName(".virtual{0}");
539 new TypeConstraint(body, Tuples.flatTupleOf(var_composite, var__virtual_0_), new EStructuralFeatureInstancesKey(getFeatureLiteral("YakinduMetamodel", "CompositeElement", "regions")));
540 new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_0_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Region")));
541 new Equality(body, var__virtual_0_, var_region1);
542 // CompositeElement.regions(composite,region2)
543 new TypeConstraint(body, Tuples.flatTupleOf(var_composite), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "CompositeElement")));
544 PVariable var__virtual_1_ = body.getOrCreateVariableByName(".virtual{1}");
545 new TypeConstraint(body, Tuples.flatTupleOf(var_composite, var__virtual_1_), new EStructuralFeatureInstancesKey(getFeatureLiteral("YakinduMetamodel", "CompositeElement", "regions")));
546 new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_1_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Region")));
547 new Equality(body, var__virtual_1_, var_region2);
548 // region1 != region2
549 new Inequality(body, var_region1, var_region2);
550 bodies.add(body);
551 }
552 return bodies;
553 }
554 }
555}
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/IncomingToEntry.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/IncomingToEntry.java
new file mode 100644
index 00000000..ed8ca3e5
--- /dev/null
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/IncomingToEntry.java
@@ -0,0 +1,703 @@
1/**
2 * Generated from platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduPatterns.vql
3 */
4package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries;
5
6import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Entry;
7import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition;
8import java.util.Arrays;
9import java.util.Collection;
10import java.util.LinkedHashSet;
11import java.util.List;
12import java.util.Objects;
13import java.util.Optional;
14import java.util.Set;
15import java.util.function.Consumer;
16import java.util.stream.Collectors;
17import java.util.stream.Stream;
18import org.apache.log4j.Logger;
19import org.eclipse.emf.ecore.EClass;
20import org.eclipse.viatra.query.runtime.api.IPatternMatch;
21import org.eclipse.viatra.query.runtime.api.IQuerySpecification;
22import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine;
23import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFPQuery;
24import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFQuerySpecification;
25import org.eclipse.viatra.query.runtime.api.impl.BaseMatcher;
26import org.eclipse.viatra.query.runtime.api.impl.BasePatternMatch;
27import org.eclipse.viatra.query.runtime.emf.types.EClassTransitiveInstancesKey;
28import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint;
29import org.eclipse.viatra.query.runtime.matchers.psystem.PBody;
30import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable;
31import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.PAnnotation;
32import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.ParameterReference;
33import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExportedParameter;
34import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.PositivePatternCall;
35import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint;
36import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter;
37import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameterDirection;
38import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PVisibility;
39import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple;
40import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples;
41import org.eclipse.viatra.query.runtime.util.ViatraQueryLoggingUtil;
42
43/**
44 * A pattern-specific query specification that can instantiate Matcher in a type-safe way.
45 *
46 * <p>Original source:
47 * <code><pre>
48 * {@literal @}Constraint(severity="error", message="error", key = {e})
49 * pattern incomingToEntry(t : Transition, e : Entry) {
50 * find transition(t, _, e);
51 * }
52 * </pre></code>
53 *
54 * @see Matcher
55 * @see Match
56 *
57 */
58@SuppressWarnings("all")
59public final class IncomingToEntry extends BaseGeneratedEMFQuerySpecification<IncomingToEntry.Matcher> {
60 /**
61 * Pattern-specific match representation of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.incomingToEntry pattern,
62 * to be used in conjunction with {@link Matcher}.
63 *
64 * <p>Class fields correspond to parameters of the pattern. Fields with value null are considered unassigned.
65 * Each instance is a (possibly partial) substitution of pattern parameters,
66 * usable to represent a match of the pattern in the result of a query,
67 * or to specify the bound (fixed) input parameters when issuing a query.
68 *
69 * @see Matcher
70 *
71 */
72 public static abstract class Match extends BasePatternMatch {
73 private Transition fT;
74
75 private Entry fE;
76
77 private static List<String> parameterNames = makeImmutableList("t", "e");
78
79 private Match(final Transition pT, final Entry pE) {
80 this.fT = pT;
81 this.fE = pE;
82 }
83
84 @Override
85 public Object get(final String parameterName) {
86 if ("t".equals(parameterName)) return this.fT;
87 if ("e".equals(parameterName)) return this.fE;
88 return null;
89 }
90
91 public Transition getT() {
92 return this.fT;
93 }
94
95 public Entry getE() {
96 return this.fE;
97 }
98
99 @Override
100 public boolean set(final String parameterName, final Object newValue) {
101 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
102 if ("t".equals(parameterName) ) {
103 this.fT = (Transition) newValue;
104 return true;
105 }
106 if ("e".equals(parameterName) ) {
107 this.fE = (Entry) newValue;
108 return true;
109 }
110 return false;
111 }
112
113 public void setT(final Transition pT) {
114 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
115 this.fT = pT;
116 }
117
118 public void setE(final Entry pE) {
119 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
120 this.fE = pE;
121 }
122
123 @Override
124 public String patternName() {
125 return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.incomingToEntry";
126 }
127
128 @Override
129 public List<String> parameterNames() {
130 return IncomingToEntry.Match.parameterNames;
131 }
132
133 @Override
134 public Object[] toArray() {
135 return new Object[]{fT, fE};
136 }
137
138 @Override
139 public IncomingToEntry.Match toImmutable() {
140 return isMutable() ? newMatch(fT, fE) : this;
141 }
142
143 @Override
144 public String prettyPrint() {
145 StringBuilder result = new StringBuilder();
146 result.append("\"t\"=" + prettyPrintValue(fT) + ", ");
147 result.append("\"e\"=" + prettyPrintValue(fE));
148 return result.toString();
149 }
150
151 @Override
152 public int hashCode() {
153 return Objects.hash(fT, fE);
154 }
155
156 @Override
157 public boolean equals(final Object obj) {
158 if (this == obj)
159 return true;
160 if (obj == null) {
161 return false;
162 }
163 if ((obj instanceof IncomingToEntry.Match)) {
164 IncomingToEntry.Match other = (IncomingToEntry.Match) obj;
165 return Objects.equals(fT, other.fT) && Objects.equals(fE, other.fE);
166 } else {
167 // this should be infrequent
168 if (!(obj instanceof IPatternMatch)) {
169 return false;
170 }
171 IPatternMatch otherSig = (IPatternMatch) obj;
172 return Objects.equals(specification(), otherSig.specification()) && Arrays.deepEquals(toArray(), otherSig.toArray());
173 }
174 }
175
176 @Override
177 public IncomingToEntry specification() {
178 return IncomingToEntry.instance();
179 }
180
181 /**
182 * Returns an empty, mutable match.
183 * Fields of the mutable match can be filled to create a partial match, usable as matcher input.
184 *
185 * @return the empty match.
186 *
187 */
188 public static IncomingToEntry.Match newEmptyMatch() {
189 return new Mutable(null, null);
190 }
191
192 /**
193 * Returns a mutable (partial) match.
194 * Fields of the mutable match can be filled to create a partial match, usable as matcher input.
195 *
196 * @param pT the fixed value of pattern parameter t, or null if not bound.
197 * @param pE the fixed value of pattern parameter e, or null if not bound.
198 * @return the new, mutable (partial) match object.
199 *
200 */
201 public static IncomingToEntry.Match newMutableMatch(final Transition pT, final Entry pE) {
202 return new Mutable(pT, pE);
203 }
204
205 /**
206 * Returns a new (partial) match.
207 * This can be used e.g. to call the matcher with a partial match.
208 * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object.
209 * @param pT the fixed value of pattern parameter t, or null if not bound.
210 * @param pE the fixed value of pattern parameter e, or null if not bound.
211 * @return the (partial) match object.
212 *
213 */
214 public static IncomingToEntry.Match newMatch(final Transition pT, final Entry pE) {
215 return new Immutable(pT, pE);
216 }
217
218 private static final class Mutable extends IncomingToEntry.Match {
219 Mutable(final Transition pT, final Entry pE) {
220 super(pT, pE);
221 }
222
223 @Override
224 public boolean isMutable() {
225 return true;
226 }
227 }
228
229 private static final class Immutable extends IncomingToEntry.Match {
230 Immutable(final Transition pT, final Entry pE) {
231 super(pT, pE);
232 }
233
234 @Override
235 public boolean isMutable() {
236 return false;
237 }
238 }
239 }
240
241 /**
242 * Generated pattern matcher API of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.incomingToEntry pattern,
243 * providing pattern-specific query methods.
244 *
245 * <p>Use the pattern matcher on a given model via {@link #on(ViatraQueryEngine)},
246 * e.g. in conjunction with {@link ViatraQueryEngine#on(QueryScope)}.
247 *
248 * <p>Matches of the pattern will be represented as {@link Match}.
249 *
250 * <p>Original source:
251 * <code><pre>
252 * {@literal @}Constraint(severity="error", message="error", key = {e})
253 * pattern incomingToEntry(t : Transition, e : Entry) {
254 * find transition(t, _, e);
255 * }
256 * </pre></code>
257 *
258 * @see Match
259 * @see IncomingToEntry
260 *
261 */
262 public static class Matcher extends BaseMatcher<IncomingToEntry.Match> {
263 /**
264 * Initializes the pattern matcher within an existing VIATRA Query engine.
265 * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned.
266 *
267 * @param engine the existing VIATRA Query engine in which this matcher will be created.
268 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
269 *
270 */
271 public static IncomingToEntry.Matcher on(final ViatraQueryEngine engine) {
272 // check if matcher already exists
273 Matcher matcher = engine.getExistingMatcher(querySpecification());
274 if (matcher == null) {
275 matcher = (Matcher)engine.getMatcher(querySpecification());
276 }
277 return matcher;
278 }
279
280 /**
281 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
282 * @return an initialized matcher
283 * @noreference This method is for internal matcher initialization by the framework, do not call it manually.
284 *
285 */
286 public static IncomingToEntry.Matcher create() {
287 return new Matcher();
288 }
289
290 private final static int POSITION_T = 0;
291
292 private final static int POSITION_E = 1;
293
294 private final static Logger LOGGER = ViatraQueryLoggingUtil.getLogger(IncomingToEntry.Matcher.class);
295
296 /**
297 * Initializes the pattern matcher within an existing VIATRA Query engine.
298 * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned.
299 *
300 * @param engine the existing VIATRA Query engine in which this matcher will be created.
301 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
302 *
303 */
304 private Matcher() {
305 super(querySpecification());
306 }
307
308 /**
309 * Returns the set of all matches of the pattern that conform to the given fixed values of some parameters.
310 * @param pT the fixed value of pattern parameter t, or null if not bound.
311 * @param pE the fixed value of pattern parameter e, or null if not bound.
312 * @return matches represented as a Match object.
313 *
314 */
315 public Collection<IncomingToEntry.Match> getAllMatches(final Transition pT, final Entry pE) {
316 return rawStreamAllMatches(new Object[]{pT, pE}).collect(Collectors.toSet());
317 }
318
319 /**
320 * Returns a stream of all matches of the pattern that conform to the given fixed values of some parameters.
321 * </p>
322 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
323 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
324 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
325 * @param pT the fixed value of pattern parameter t, or null if not bound.
326 * @param pE the fixed value of pattern parameter e, or null if not bound.
327 * @return a stream of matches represented as a Match object.
328 *
329 */
330 public Stream<IncomingToEntry.Match> streamAllMatches(final Transition pT, final Entry pE) {
331 return rawStreamAllMatches(new Object[]{pT, pE});
332 }
333
334 /**
335 * Returns an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters.
336 * Neither determinism nor randomness of selection is guaranteed.
337 * @param pT the fixed value of pattern parameter t, or null if not bound.
338 * @param pE the fixed value of pattern parameter e, or null if not bound.
339 * @return a match represented as a Match object, or null if no match is found.
340 *
341 */
342 public Optional<IncomingToEntry.Match> getOneArbitraryMatch(final Transition pT, final Entry pE) {
343 return rawGetOneArbitraryMatch(new Object[]{pT, pE});
344 }
345
346 /**
347 * Indicates whether the given combination of specified pattern parameters constitute a valid pattern match,
348 * under any possible substitution of the unspecified parameters (if any).
349 * @param pT the fixed value of pattern parameter t, or null if not bound.
350 * @param pE the fixed value of pattern parameter e, or null if not bound.
351 * @return true if the input is a valid (partial) match of the pattern.
352 *
353 */
354 public boolean hasMatch(final Transition pT, final Entry pE) {
355 return rawHasMatch(new Object[]{pT, pE});
356 }
357
358 /**
359 * Returns the number of all matches of the pattern that conform to the given fixed values of some parameters.
360 * @param pT the fixed value of pattern parameter t, or null if not bound.
361 * @param pE the fixed value of pattern parameter e, or null if not bound.
362 * @return the number of pattern matches found.
363 *
364 */
365 public int countMatches(final Transition pT, final Entry pE) {
366 return rawCountMatches(new Object[]{pT, pE});
367 }
368
369 /**
370 * Executes the given processor on an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters.
371 * Neither determinism nor randomness of selection is guaranteed.
372 * @param pT the fixed value of pattern parameter t, or null if not bound.
373 * @param pE the fixed value of pattern parameter e, or null if not bound.
374 * @param processor the action that will process the selected match.
375 * @return true if the pattern has at least one match with the given parameter values, false if the processor was not invoked
376 *
377 */
378 public boolean forOneArbitraryMatch(final Transition pT, final Entry pE, final Consumer<? super IncomingToEntry.Match> processor) {
379 return rawForOneArbitraryMatch(new Object[]{pT, pE}, processor);
380 }
381
382 /**
383 * Returns a new (partial) match.
384 * This can be used e.g. to call the matcher with a partial match.
385 * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object.
386 * @param pT the fixed value of pattern parameter t, or null if not bound.
387 * @param pE the fixed value of pattern parameter e, or null if not bound.
388 * @return the (partial) match object.
389 *
390 */
391 public IncomingToEntry.Match newMatch(final Transition pT, final Entry pE) {
392 return IncomingToEntry.Match.newMatch(pT, pE);
393 }
394
395 /**
396 * Retrieve the set of values that occur in matches for t.
397 * @return the Set of all values or empty set if there are no matches
398 *
399 */
400 protected Stream<Transition> rawStreamAllValuesOft(final Object[] parameters) {
401 return rawStreamAllValues(POSITION_T, parameters).map(Transition.class::cast);
402 }
403
404 /**
405 * Retrieve the set of values that occur in matches for t.
406 * @return the Set of all values or empty set if there are no matches
407 *
408 */
409 public Set<Transition> getAllValuesOft() {
410 return rawStreamAllValuesOft(emptyArray()).collect(Collectors.toSet());
411 }
412
413 /**
414 * Retrieve the set of values that occur in matches for t.
415 * @return the Set of all values or empty set if there are no matches
416 *
417 */
418 public Stream<Transition> streamAllValuesOft() {
419 return rawStreamAllValuesOft(emptyArray());
420 }
421
422 /**
423 * Retrieve the set of values that occur in matches for t.
424 * </p>
425 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
426 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
427 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
428 *
429 * @return the Stream of all values or empty set if there are no matches
430 *
431 */
432 public Stream<Transition> streamAllValuesOft(final IncomingToEntry.Match partialMatch) {
433 return rawStreamAllValuesOft(partialMatch.toArray());
434 }
435
436 /**
437 * Retrieve the set of values that occur in matches for t.
438 * </p>
439 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
440 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
441 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
442 *
443 * @return the Stream of all values or empty set if there are no matches
444 *
445 */
446 public Stream<Transition> streamAllValuesOft(final Entry pE) {
447 return rawStreamAllValuesOft(new Object[]{null, pE});
448 }
449
450 /**
451 * Retrieve the set of values that occur in matches for t.
452 * @return the Set of all values or empty set if there are no matches
453 *
454 */
455 public Set<Transition> getAllValuesOft(final IncomingToEntry.Match partialMatch) {
456 return rawStreamAllValuesOft(partialMatch.toArray()).collect(Collectors.toSet());
457 }
458
459 /**
460 * Retrieve the set of values that occur in matches for t.
461 * @return the Set of all values or empty set if there are no matches
462 *
463 */
464 public Set<Transition> getAllValuesOft(final Entry pE) {
465 return rawStreamAllValuesOft(new Object[]{null, pE}).collect(Collectors.toSet());
466 }
467
468 /**
469 * Retrieve the set of values that occur in matches for e.
470 * @return the Set of all values or empty set if there are no matches
471 *
472 */
473 protected Stream<Entry> rawStreamAllValuesOfe(final Object[] parameters) {
474 return rawStreamAllValues(POSITION_E, parameters).map(Entry.class::cast);
475 }
476
477 /**
478 * Retrieve the set of values that occur in matches for e.
479 * @return the Set of all values or empty set if there are no matches
480 *
481 */
482 public Set<Entry> getAllValuesOfe() {
483 return rawStreamAllValuesOfe(emptyArray()).collect(Collectors.toSet());
484 }
485
486 /**
487 * Retrieve the set of values that occur in matches for e.
488 * @return the Set of all values or empty set if there are no matches
489 *
490 */
491 public Stream<Entry> streamAllValuesOfe() {
492 return rawStreamAllValuesOfe(emptyArray());
493 }
494
495 /**
496 * Retrieve the set of values that occur in matches for e.
497 * </p>
498 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
499 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
500 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
501 *
502 * @return the Stream of all values or empty set if there are no matches
503 *
504 */
505 public Stream<Entry> streamAllValuesOfe(final IncomingToEntry.Match partialMatch) {
506 return rawStreamAllValuesOfe(partialMatch.toArray());
507 }
508
509 /**
510 * Retrieve the set of values that occur in matches for e.
511 * </p>
512 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
513 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
514 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
515 *
516 * @return the Stream of all values or empty set if there are no matches
517 *
518 */
519 public Stream<Entry> streamAllValuesOfe(final Transition pT) {
520 return rawStreamAllValuesOfe(new Object[]{pT, null});
521 }
522
523 /**
524 * Retrieve the set of values that occur in matches for e.
525 * @return the Set of all values or empty set if there are no matches
526 *
527 */
528 public Set<Entry> getAllValuesOfe(final IncomingToEntry.Match partialMatch) {
529 return rawStreamAllValuesOfe(partialMatch.toArray()).collect(Collectors.toSet());
530 }
531
532 /**
533 * Retrieve the set of values that occur in matches for e.
534 * @return the Set of all values or empty set if there are no matches
535 *
536 */
537 public Set<Entry> getAllValuesOfe(final Transition pT) {
538 return rawStreamAllValuesOfe(new Object[]{pT, null}).collect(Collectors.toSet());
539 }
540
541 @Override
542 protected IncomingToEntry.Match tupleToMatch(final Tuple t) {
543 try {
544 return IncomingToEntry.Match.newMatch((Transition) t.get(POSITION_T), (Entry) t.get(POSITION_E));
545 } catch(ClassCastException e) {
546 LOGGER.error("Element(s) in tuple not properly typed!",e);
547 return null;
548 }
549 }
550
551 @Override
552 protected IncomingToEntry.Match arrayToMatch(final Object[] match) {
553 try {
554 return IncomingToEntry.Match.newMatch((Transition) match[POSITION_T], (Entry) match[POSITION_E]);
555 } catch(ClassCastException e) {
556 LOGGER.error("Element(s) in array not properly typed!",e);
557 return null;
558 }
559 }
560
561 @Override
562 protected IncomingToEntry.Match arrayToMatchMutable(final Object[] match) {
563 try {
564 return IncomingToEntry.Match.newMutableMatch((Transition) match[POSITION_T], (Entry) match[POSITION_E]);
565 } catch(ClassCastException e) {
566 LOGGER.error("Element(s) in array not properly typed!",e);
567 return null;
568 }
569 }
570
571 /**
572 * @return the singleton instance of the query specification of this pattern
573 * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded
574 *
575 */
576 public static IQuerySpecification<IncomingToEntry.Matcher> querySpecification() {
577 return IncomingToEntry.instance();
578 }
579 }
580
581 private IncomingToEntry() {
582 super(GeneratedPQuery.INSTANCE);
583 }
584
585 /**
586 * @return the singleton instance of the query specification
587 * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded
588 *
589 */
590 public static IncomingToEntry instance() {
591 try{
592 return LazyHolder.INSTANCE;
593 } catch (ExceptionInInitializerError err) {
594 throw processInitializerError(err);
595 }
596 }
597
598 @Override
599 protected IncomingToEntry.Matcher instantiate(final ViatraQueryEngine engine) {
600 return IncomingToEntry.Matcher.on(engine);
601 }
602
603 @Override
604 public IncomingToEntry.Matcher instantiate() {
605 return IncomingToEntry.Matcher.create();
606 }
607
608 @Override
609 public IncomingToEntry.Match newEmptyMatch() {
610 return IncomingToEntry.Match.newEmptyMatch();
611 }
612
613 @Override
614 public IncomingToEntry.Match newMatch(final Object... parameters) {
615 return IncomingToEntry.Match.newMatch((ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition) parameters[0], (ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Entry) parameters[1]);
616 }
617
618 /**
619 * Inner class allowing the singleton instance of {@link JvmGenericType: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.IncomingToEntry (visibility: PUBLIC, simpleName: IncomingToEntry, identifier: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.IncomingToEntry, deprecated: <unset>) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)} to be created
620 * <b>not</b> at the class load time of the outer class,
621 * but rather at the first call to {@link JvmGenericType: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.IncomingToEntry (visibility: PUBLIC, simpleName: IncomingToEntry, identifier: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.IncomingToEntry, deprecated: <unset>) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)#instance()}.
622 *
623 * <p> This workaround is required e.g. to support recursion.
624 *
625 */
626 private static class LazyHolder {
627 private final static IncomingToEntry INSTANCE = new IncomingToEntry();
628
629 /**
630 * Statically initializes the query specification <b>after</b> the field {@link #INSTANCE} is assigned.
631 * This initialization order is required to support indirect recursion.
632 *
633 * <p> The static initializer is defined using a helper field to work around limitations of the code generator.
634 *
635 */
636 private final static Object STATIC_INITIALIZER = ensureInitialized();
637
638 public static Object ensureInitialized() {
639 INSTANCE.ensureInitializedInternal();
640 return null;
641 }
642 }
643
644 private static class GeneratedPQuery extends BaseGeneratedEMFPQuery {
645 private final static IncomingToEntry.GeneratedPQuery INSTANCE = new GeneratedPQuery();
646
647 private final PParameter parameter_t = new PParameter("t", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "Transition")), PParameterDirection.INOUT);
648
649 private final PParameter parameter_e = new PParameter("e", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Entry", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "Entry")), PParameterDirection.INOUT);
650
651 private final List<PParameter> parameters = Arrays.asList(parameter_t, parameter_e);
652
653 private GeneratedPQuery() {
654 super(PVisibility.PUBLIC);
655 }
656
657 @Override
658 public String getFullyQualifiedName() {
659 return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.incomingToEntry";
660 }
661
662 @Override
663 public List<String> getParameterNames() {
664 return Arrays.asList("t","e");
665 }
666
667 @Override
668 public List<PParameter> getParameters() {
669 return parameters;
670 }
671
672 @Override
673 public Set<PBody> doGetContainedBodies() {
674 setEvaluationHints(new QueryEvaluationHint(null, QueryEvaluationHint.BackendRequirement.UNSPECIFIED));
675 Set<PBody> bodies = new LinkedHashSet<>();
676 {
677 PBody body = new PBody(this);
678 PVariable var_t = body.getOrCreateVariableByName("t");
679 PVariable var_e = body.getOrCreateVariableByName("e");
680 PVariable var___0_ = body.getOrCreateVariableByName("_<0>");
681 new TypeConstraint(body, Tuples.flatTupleOf(var_t), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Transition")));
682 new TypeConstraint(body, Tuples.flatTupleOf(var_e), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Entry")));
683 body.setSymbolicParameters(Arrays.<ExportedParameter>asList(
684 new ExportedParameter(body, var_t, parameter_t),
685 new ExportedParameter(body, var_e, parameter_e)
686 ));
687 // find transition(t, _, e)
688 new PositivePatternCall(body, Tuples.flatTupleOf(var_t, var___0_, var_e), ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.Transition.instance().getInternalQueryRepresentation());
689 bodies.add(body);
690 }
691 {
692 PAnnotation annotation = new PAnnotation("Constraint");
693 annotation.addAttribute("severity", "error");
694 annotation.addAttribute("message", "error");
695 annotation.addAttribute("key", Arrays.asList(new Object[] {
696 new ParameterReference("e")
697 }));
698 addAnnotation(annotation);
699 }
700 return bodies;
701 }
702 }
703}
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/MultipleTransitionFromEntry.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/MultipleTransitionFromEntry.java
new file mode 100644
index 00000000..e4c1bac5
--- /dev/null
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/MultipleTransitionFromEntry.java
@@ -0,0 +1,827 @@
1/**
2 * Generated from platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduPatterns.vql
3 */
4package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries;
5
6import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Entry;
7import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition;
8import java.util.Arrays;
9import java.util.Collection;
10import java.util.LinkedHashSet;
11import java.util.List;
12import java.util.Objects;
13import java.util.Optional;
14import java.util.Set;
15import java.util.function.Consumer;
16import java.util.stream.Collectors;
17import java.util.stream.Stream;
18import org.apache.log4j.Logger;
19import org.eclipse.emf.ecore.EClass;
20import org.eclipse.viatra.query.runtime.api.IPatternMatch;
21import org.eclipse.viatra.query.runtime.api.IQuerySpecification;
22import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine;
23import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFPQuery;
24import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFQuerySpecification;
25import org.eclipse.viatra.query.runtime.api.impl.BaseMatcher;
26import org.eclipse.viatra.query.runtime.api.impl.BasePatternMatch;
27import org.eclipse.viatra.query.runtime.emf.types.EClassTransitiveInstancesKey;
28import org.eclipse.viatra.query.runtime.emf.types.EStructuralFeatureInstancesKey;
29import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint;
30import org.eclipse.viatra.query.runtime.matchers.psystem.PBody;
31import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable;
32import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.PAnnotation;
33import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.ParameterReference;
34import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.Equality;
35import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExportedParameter;
36import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.Inequality;
37import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint;
38import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter;
39import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameterDirection;
40import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PVisibility;
41import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple;
42import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples;
43import org.eclipse.viatra.query.runtime.util.ViatraQueryLoggingUtil;
44
45/**
46 * A pattern-specific query specification that can instantiate Matcher in a type-safe way.
47 *
48 * <p>Original source:
49 * <code><pre>
50 * {@literal @}Constraint(severity="error", message="error", key = {e})
51 * pattern multipleTransitionFromEntry(e : Entry, t1 : Transition, t2: Transition) {
52 * Entry.outgoingTransitions(e,t1);
53 * Entry.outgoingTransitions(e,t2);
54 * t1!=t2;
55 * }
56 * </pre></code>
57 *
58 * @see Matcher
59 * @see Match
60 *
61 */
62@SuppressWarnings("all")
63public final class MultipleTransitionFromEntry extends BaseGeneratedEMFQuerySpecification<MultipleTransitionFromEntry.Matcher> {
64 /**
65 * Pattern-specific match representation of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.multipleTransitionFromEntry pattern,
66 * to be used in conjunction with {@link Matcher}.
67 *
68 * <p>Class fields correspond to parameters of the pattern. Fields with value null are considered unassigned.
69 * Each instance is a (possibly partial) substitution of pattern parameters,
70 * usable to represent a match of the pattern in the result of a query,
71 * or to specify the bound (fixed) input parameters when issuing a query.
72 *
73 * @see Matcher
74 *
75 */
76 public static abstract class Match extends BasePatternMatch {
77 private Entry fE;
78
79 private Transition fT1;
80
81 private Transition fT2;
82
83 private static List<String> parameterNames = makeImmutableList("e", "t1", "t2");
84
85 private Match(final Entry pE, final Transition pT1, final Transition pT2) {
86 this.fE = pE;
87 this.fT1 = pT1;
88 this.fT2 = pT2;
89 }
90
91 @Override
92 public Object get(final String parameterName) {
93 if ("e".equals(parameterName)) return this.fE;
94 if ("t1".equals(parameterName)) return this.fT1;
95 if ("t2".equals(parameterName)) return this.fT2;
96 return null;
97 }
98
99 public Entry getE() {
100 return this.fE;
101 }
102
103 public Transition getT1() {
104 return this.fT1;
105 }
106
107 public Transition getT2() {
108 return this.fT2;
109 }
110
111 @Override
112 public boolean set(final String parameterName, final Object newValue) {
113 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
114 if ("e".equals(parameterName) ) {
115 this.fE = (Entry) newValue;
116 return true;
117 }
118 if ("t1".equals(parameterName) ) {
119 this.fT1 = (Transition) newValue;
120 return true;
121 }
122 if ("t2".equals(parameterName) ) {
123 this.fT2 = (Transition) newValue;
124 return true;
125 }
126 return false;
127 }
128
129 public void setE(final Entry pE) {
130 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
131 this.fE = pE;
132 }
133
134 public void setT1(final Transition pT1) {
135 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
136 this.fT1 = pT1;
137 }
138
139 public void setT2(final Transition pT2) {
140 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
141 this.fT2 = pT2;
142 }
143
144 @Override
145 public String patternName() {
146 return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.multipleTransitionFromEntry";
147 }
148
149 @Override
150 public List<String> parameterNames() {
151 return MultipleTransitionFromEntry.Match.parameterNames;
152 }
153
154 @Override
155 public Object[] toArray() {
156 return new Object[]{fE, fT1, fT2};
157 }
158
159 @Override
160 public MultipleTransitionFromEntry.Match toImmutable() {
161 return isMutable() ? newMatch(fE, fT1, fT2) : this;
162 }
163
164 @Override
165 public String prettyPrint() {
166 StringBuilder result = new StringBuilder();
167 result.append("\"e\"=" + prettyPrintValue(fE) + ", ");
168 result.append("\"t1\"=" + prettyPrintValue(fT1) + ", ");
169 result.append("\"t2\"=" + prettyPrintValue(fT2));
170 return result.toString();
171 }
172
173 @Override
174 public int hashCode() {
175 return Objects.hash(fE, fT1, fT2);
176 }
177
178 @Override
179 public boolean equals(final Object obj) {
180 if (this == obj)
181 return true;
182 if (obj == null) {
183 return false;
184 }
185 if ((obj instanceof MultipleTransitionFromEntry.Match)) {
186 MultipleTransitionFromEntry.Match other = (MultipleTransitionFromEntry.Match) obj;
187 return Objects.equals(fE, other.fE) && Objects.equals(fT1, other.fT1) && Objects.equals(fT2, other.fT2);
188 } else {
189 // this should be infrequent
190 if (!(obj instanceof IPatternMatch)) {
191 return false;
192 }
193 IPatternMatch otherSig = (IPatternMatch) obj;
194 return Objects.equals(specification(), otherSig.specification()) && Arrays.deepEquals(toArray(), otherSig.toArray());
195 }
196 }
197
198 @Override
199 public MultipleTransitionFromEntry specification() {
200 return MultipleTransitionFromEntry.instance();
201 }
202
203 /**
204 * Returns an empty, mutable match.
205 * Fields of the mutable match can be filled to create a partial match, usable as matcher input.
206 *
207 * @return the empty match.
208 *
209 */
210 public static MultipleTransitionFromEntry.Match newEmptyMatch() {
211 return new Mutable(null, null, null);
212 }
213
214 /**
215 * Returns a mutable (partial) match.
216 * Fields of the mutable match can be filled to create a partial match, usable as matcher input.
217 *
218 * @param pE the fixed value of pattern parameter e, or null if not bound.
219 * @param pT1 the fixed value of pattern parameter t1, or null if not bound.
220 * @param pT2 the fixed value of pattern parameter t2, or null if not bound.
221 * @return the new, mutable (partial) match object.
222 *
223 */
224 public static MultipleTransitionFromEntry.Match newMutableMatch(final Entry pE, final Transition pT1, final Transition pT2) {
225 return new Mutable(pE, pT1, pT2);
226 }
227
228 /**
229 * Returns a new (partial) match.
230 * This can be used e.g. to call the matcher with a partial match.
231 * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object.
232 * @param pE the fixed value of pattern parameter e, or null if not bound.
233 * @param pT1 the fixed value of pattern parameter t1, or null if not bound.
234 * @param pT2 the fixed value of pattern parameter t2, or null if not bound.
235 * @return the (partial) match object.
236 *
237 */
238 public static MultipleTransitionFromEntry.Match newMatch(final Entry pE, final Transition pT1, final Transition pT2) {
239 return new Immutable(pE, pT1, pT2);
240 }
241
242 private static final class Mutable extends MultipleTransitionFromEntry.Match {
243 Mutable(final Entry pE, final Transition pT1, final Transition pT2) {
244 super(pE, pT1, pT2);
245 }
246
247 @Override
248 public boolean isMutable() {
249 return true;
250 }
251 }
252
253 private static final class Immutable extends MultipleTransitionFromEntry.Match {
254 Immutable(final Entry pE, final Transition pT1, final Transition pT2) {
255 super(pE, pT1, pT2);
256 }
257
258 @Override
259 public boolean isMutable() {
260 return false;
261 }
262 }
263 }
264
265 /**
266 * Generated pattern matcher API of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.multipleTransitionFromEntry pattern,
267 * providing pattern-specific query methods.
268 *
269 * <p>Use the pattern matcher on a given model via {@link #on(ViatraQueryEngine)},
270 * e.g. in conjunction with {@link ViatraQueryEngine#on(QueryScope)}.
271 *
272 * <p>Matches of the pattern will be represented as {@link Match}.
273 *
274 * <p>Original source:
275 * <code><pre>
276 * {@literal @}Constraint(severity="error", message="error", key = {e})
277 * pattern multipleTransitionFromEntry(e : Entry, t1 : Transition, t2: Transition) {
278 * Entry.outgoingTransitions(e,t1);
279 * Entry.outgoingTransitions(e,t2);
280 * t1!=t2;
281 * }
282 * </pre></code>
283 *
284 * @see Match
285 * @see MultipleTransitionFromEntry
286 *
287 */
288 public static class Matcher extends BaseMatcher<MultipleTransitionFromEntry.Match> {
289 /**
290 * Initializes the pattern matcher within an existing VIATRA Query engine.
291 * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned.
292 *
293 * @param engine the existing VIATRA Query engine in which this matcher will be created.
294 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
295 *
296 */
297 public static MultipleTransitionFromEntry.Matcher on(final ViatraQueryEngine engine) {
298 // check if matcher already exists
299 Matcher matcher = engine.getExistingMatcher(querySpecification());
300 if (matcher == null) {
301 matcher = (Matcher)engine.getMatcher(querySpecification());
302 }
303 return matcher;
304 }
305
306 /**
307 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
308 * @return an initialized matcher
309 * @noreference This method is for internal matcher initialization by the framework, do not call it manually.
310 *
311 */
312 public static MultipleTransitionFromEntry.Matcher create() {
313 return new Matcher();
314 }
315
316 private final static int POSITION_E = 0;
317
318 private final static int POSITION_T1 = 1;
319
320 private final static int POSITION_T2 = 2;
321
322 private final static Logger LOGGER = ViatraQueryLoggingUtil.getLogger(MultipleTransitionFromEntry.Matcher.class);
323
324 /**
325 * Initializes the pattern matcher within an existing VIATRA Query engine.
326 * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned.
327 *
328 * @param engine the existing VIATRA Query engine in which this matcher will be created.
329 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
330 *
331 */
332 private Matcher() {
333 super(querySpecification());
334 }
335
336 /**
337 * Returns the set of all matches of the pattern that conform to the given fixed values of some parameters.
338 * @param pE the fixed value of pattern parameter e, or null if not bound.
339 * @param pT1 the fixed value of pattern parameter t1, or null if not bound.
340 * @param pT2 the fixed value of pattern parameter t2, or null if not bound.
341 * @return matches represented as a Match object.
342 *
343 */
344 public Collection<MultipleTransitionFromEntry.Match> getAllMatches(final Entry pE, final Transition pT1, final Transition pT2) {
345 return rawStreamAllMatches(new Object[]{pE, pT1, pT2}).collect(Collectors.toSet());
346 }
347
348 /**
349 * Returns a stream of all matches of the pattern that conform to the given fixed values of some parameters.
350 * </p>
351 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
352 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
353 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
354 * @param pE the fixed value of pattern parameter e, or null if not bound.
355 * @param pT1 the fixed value of pattern parameter t1, or null if not bound.
356 * @param pT2 the fixed value of pattern parameter t2, or null if not bound.
357 * @return a stream of matches represented as a Match object.
358 *
359 */
360 public Stream<MultipleTransitionFromEntry.Match> streamAllMatches(final Entry pE, final Transition pT1, final Transition pT2) {
361 return rawStreamAllMatches(new Object[]{pE, pT1, pT2});
362 }
363
364 /**
365 * Returns an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters.
366 * Neither determinism nor randomness of selection is guaranteed.
367 * @param pE the fixed value of pattern parameter e, or null if not bound.
368 * @param pT1 the fixed value of pattern parameter t1, or null if not bound.
369 * @param pT2 the fixed value of pattern parameter t2, or null if not bound.
370 * @return a match represented as a Match object, or null if no match is found.
371 *
372 */
373 public Optional<MultipleTransitionFromEntry.Match> getOneArbitraryMatch(final Entry pE, final Transition pT1, final Transition pT2) {
374 return rawGetOneArbitraryMatch(new Object[]{pE, pT1, pT2});
375 }
376
377 /**
378 * Indicates whether the given combination of specified pattern parameters constitute a valid pattern match,
379 * under any possible substitution of the unspecified parameters (if any).
380 * @param pE the fixed value of pattern parameter e, or null if not bound.
381 * @param pT1 the fixed value of pattern parameter t1, or null if not bound.
382 * @param pT2 the fixed value of pattern parameter t2, or null if not bound.
383 * @return true if the input is a valid (partial) match of the pattern.
384 *
385 */
386 public boolean hasMatch(final Entry pE, final Transition pT1, final Transition pT2) {
387 return rawHasMatch(new Object[]{pE, pT1, pT2});
388 }
389
390 /**
391 * Returns the number of all matches of the pattern that conform to the given fixed values of some parameters.
392 * @param pE the fixed value of pattern parameter e, or null if not bound.
393 * @param pT1 the fixed value of pattern parameter t1, or null if not bound.
394 * @param pT2 the fixed value of pattern parameter t2, or null if not bound.
395 * @return the number of pattern matches found.
396 *
397 */
398 public int countMatches(final Entry pE, final Transition pT1, final Transition pT2) {
399 return rawCountMatches(new Object[]{pE, pT1, pT2});
400 }
401
402 /**
403 * Executes the given processor on an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters.
404 * Neither determinism nor randomness of selection is guaranteed.
405 * @param pE the fixed value of pattern parameter e, or null if not bound.
406 * @param pT1 the fixed value of pattern parameter t1, or null if not bound.
407 * @param pT2 the fixed value of pattern parameter t2, or null if not bound.
408 * @param processor the action that will process the selected match.
409 * @return true if the pattern has at least one match with the given parameter values, false if the processor was not invoked
410 *
411 */
412 public boolean forOneArbitraryMatch(final Entry pE, final Transition pT1, final Transition pT2, final Consumer<? super MultipleTransitionFromEntry.Match> processor) {
413 return rawForOneArbitraryMatch(new Object[]{pE, pT1, pT2}, processor);
414 }
415
416 /**
417 * Returns a new (partial) match.
418 * This can be used e.g. to call the matcher with a partial match.
419 * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object.
420 * @param pE the fixed value of pattern parameter e, or null if not bound.
421 * @param pT1 the fixed value of pattern parameter t1, or null if not bound.
422 * @param pT2 the fixed value of pattern parameter t2, or null if not bound.
423 * @return the (partial) match object.
424 *
425 */
426 public MultipleTransitionFromEntry.Match newMatch(final Entry pE, final Transition pT1, final Transition pT2) {
427 return MultipleTransitionFromEntry.Match.newMatch(pE, pT1, pT2);
428 }
429
430 /**
431 * Retrieve the set of values that occur in matches for e.
432 * @return the Set of all values or empty set if there are no matches
433 *
434 */
435 protected Stream<Entry> rawStreamAllValuesOfe(final Object[] parameters) {
436 return rawStreamAllValues(POSITION_E, parameters).map(Entry.class::cast);
437 }
438
439 /**
440 * Retrieve the set of values that occur in matches for e.
441 * @return the Set of all values or empty set if there are no matches
442 *
443 */
444 public Set<Entry> getAllValuesOfe() {
445 return rawStreamAllValuesOfe(emptyArray()).collect(Collectors.toSet());
446 }
447
448 /**
449 * Retrieve the set of values that occur in matches for e.
450 * @return the Set of all values or empty set if there are no matches
451 *
452 */
453 public Stream<Entry> streamAllValuesOfe() {
454 return rawStreamAllValuesOfe(emptyArray());
455 }
456
457 /**
458 * Retrieve the set of values that occur in matches for e.
459 * </p>
460 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
461 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
462 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
463 *
464 * @return the Stream of all values or empty set if there are no matches
465 *
466 */
467 public Stream<Entry> streamAllValuesOfe(final MultipleTransitionFromEntry.Match partialMatch) {
468 return rawStreamAllValuesOfe(partialMatch.toArray());
469 }
470
471 /**
472 * Retrieve the set of values that occur in matches for e.
473 * </p>
474 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
475 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
476 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
477 *
478 * @return the Stream of all values or empty set if there are no matches
479 *
480 */
481 public Stream<Entry> streamAllValuesOfe(final Transition pT1, final Transition pT2) {
482 return rawStreamAllValuesOfe(new Object[]{null, pT1, pT2});
483 }
484
485 /**
486 * Retrieve the set of values that occur in matches for e.
487 * @return the Set of all values or empty set if there are no matches
488 *
489 */
490 public Set<Entry> getAllValuesOfe(final MultipleTransitionFromEntry.Match partialMatch) {
491 return rawStreamAllValuesOfe(partialMatch.toArray()).collect(Collectors.toSet());
492 }
493
494 /**
495 * Retrieve the set of values that occur in matches for e.
496 * @return the Set of all values or empty set if there are no matches
497 *
498 */
499 public Set<Entry> getAllValuesOfe(final Transition pT1, final Transition pT2) {
500 return rawStreamAllValuesOfe(new Object[]{null, pT1, pT2}).collect(Collectors.toSet());
501 }
502
503 /**
504 * Retrieve the set of values that occur in matches for t1.
505 * @return the Set of all values or empty set if there are no matches
506 *
507 */
508 protected Stream<Transition> rawStreamAllValuesOft1(final Object[] parameters) {
509 return rawStreamAllValues(POSITION_T1, parameters).map(Transition.class::cast);
510 }
511
512 /**
513 * Retrieve the set of values that occur in matches for t1.
514 * @return the Set of all values or empty set if there are no matches
515 *
516 */
517 public Set<Transition> getAllValuesOft1() {
518 return rawStreamAllValuesOft1(emptyArray()).collect(Collectors.toSet());
519 }
520
521 /**
522 * Retrieve the set of values that occur in matches for t1.
523 * @return the Set of all values or empty set if there are no matches
524 *
525 */
526 public Stream<Transition> streamAllValuesOft1() {
527 return rawStreamAllValuesOft1(emptyArray());
528 }
529
530 /**
531 * Retrieve the set of values that occur in matches for t1.
532 * </p>
533 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
534 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
535 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
536 *
537 * @return the Stream of all values or empty set if there are no matches
538 *
539 */
540 public Stream<Transition> streamAllValuesOft1(final MultipleTransitionFromEntry.Match partialMatch) {
541 return rawStreamAllValuesOft1(partialMatch.toArray());
542 }
543
544 /**
545 * Retrieve the set of values that occur in matches for t1.
546 * </p>
547 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
548 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
549 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
550 *
551 * @return the Stream of all values or empty set if there are no matches
552 *
553 */
554 public Stream<Transition> streamAllValuesOft1(final Entry pE, final Transition pT2) {
555 return rawStreamAllValuesOft1(new Object[]{pE, null, pT2});
556 }
557
558 /**
559 * Retrieve the set of values that occur in matches for t1.
560 * @return the Set of all values or empty set if there are no matches
561 *
562 */
563 public Set<Transition> getAllValuesOft1(final MultipleTransitionFromEntry.Match partialMatch) {
564 return rawStreamAllValuesOft1(partialMatch.toArray()).collect(Collectors.toSet());
565 }
566
567 /**
568 * Retrieve the set of values that occur in matches for t1.
569 * @return the Set of all values or empty set if there are no matches
570 *
571 */
572 public Set<Transition> getAllValuesOft1(final Entry pE, final Transition pT2) {
573 return rawStreamAllValuesOft1(new Object[]{pE, null, pT2}).collect(Collectors.toSet());
574 }
575
576 /**
577 * Retrieve the set of values that occur in matches for t2.
578 * @return the Set of all values or empty set if there are no matches
579 *
580 */
581 protected Stream<Transition> rawStreamAllValuesOft2(final Object[] parameters) {
582 return rawStreamAllValues(POSITION_T2, parameters).map(Transition.class::cast);
583 }
584
585 /**
586 * Retrieve the set of values that occur in matches for t2.
587 * @return the Set of all values or empty set if there are no matches
588 *
589 */
590 public Set<Transition> getAllValuesOft2() {
591 return rawStreamAllValuesOft2(emptyArray()).collect(Collectors.toSet());
592 }
593
594 /**
595 * Retrieve the set of values that occur in matches for t2.
596 * @return the Set of all values or empty set if there are no matches
597 *
598 */
599 public Stream<Transition> streamAllValuesOft2() {
600 return rawStreamAllValuesOft2(emptyArray());
601 }
602
603 /**
604 * Retrieve the set of values that occur in matches for t2.
605 * </p>
606 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
607 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
608 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
609 *
610 * @return the Stream of all values or empty set if there are no matches
611 *
612 */
613 public Stream<Transition> streamAllValuesOft2(final MultipleTransitionFromEntry.Match partialMatch) {
614 return rawStreamAllValuesOft2(partialMatch.toArray());
615 }
616
617 /**
618 * Retrieve the set of values that occur in matches for t2.
619 * </p>
620 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
621 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
622 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
623 *
624 * @return the Stream of all values or empty set if there are no matches
625 *
626 */
627 public Stream<Transition> streamAllValuesOft2(final Entry pE, final Transition pT1) {
628 return rawStreamAllValuesOft2(new Object[]{pE, pT1, null});
629 }
630
631 /**
632 * Retrieve the set of values that occur in matches for t2.
633 * @return the Set of all values or empty set if there are no matches
634 *
635 */
636 public Set<Transition> getAllValuesOft2(final MultipleTransitionFromEntry.Match partialMatch) {
637 return rawStreamAllValuesOft2(partialMatch.toArray()).collect(Collectors.toSet());
638 }
639
640 /**
641 * Retrieve the set of values that occur in matches for t2.
642 * @return the Set of all values or empty set if there are no matches
643 *
644 */
645 public Set<Transition> getAllValuesOft2(final Entry pE, final Transition pT1) {
646 return rawStreamAllValuesOft2(new Object[]{pE, pT1, null}).collect(Collectors.toSet());
647 }
648
649 @Override
650 protected MultipleTransitionFromEntry.Match tupleToMatch(final Tuple t) {
651 try {
652 return MultipleTransitionFromEntry.Match.newMatch((Entry) t.get(POSITION_E), (Transition) t.get(POSITION_T1), (Transition) t.get(POSITION_T2));
653 } catch(ClassCastException e) {
654 LOGGER.error("Element(s) in tuple not properly typed!",e);
655 return null;
656 }
657 }
658
659 @Override
660 protected MultipleTransitionFromEntry.Match arrayToMatch(final Object[] match) {
661 try {
662 return MultipleTransitionFromEntry.Match.newMatch((Entry) match[POSITION_E], (Transition) match[POSITION_T1], (Transition) match[POSITION_T2]);
663 } catch(ClassCastException e) {
664 LOGGER.error("Element(s) in array not properly typed!",e);
665 return null;
666 }
667 }
668
669 @Override
670 protected MultipleTransitionFromEntry.Match arrayToMatchMutable(final Object[] match) {
671 try {
672 return MultipleTransitionFromEntry.Match.newMutableMatch((Entry) match[POSITION_E], (Transition) match[POSITION_T1], (Transition) match[POSITION_T2]);
673 } catch(ClassCastException e) {
674 LOGGER.error("Element(s) in array not properly typed!",e);
675 return null;
676 }
677 }
678
679 /**
680 * @return the singleton instance of the query specification of this pattern
681 * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded
682 *
683 */
684 public static IQuerySpecification<MultipleTransitionFromEntry.Matcher> querySpecification() {
685 return MultipleTransitionFromEntry.instance();
686 }
687 }
688
689 private MultipleTransitionFromEntry() {
690 super(GeneratedPQuery.INSTANCE);
691 }
692
693 /**
694 * @return the singleton instance of the query specification
695 * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded
696 *
697 */
698 public static MultipleTransitionFromEntry instance() {
699 try{
700 return LazyHolder.INSTANCE;
701 } catch (ExceptionInInitializerError err) {
702 throw processInitializerError(err);
703 }
704 }
705
706 @Override
707 protected MultipleTransitionFromEntry.Matcher instantiate(final ViatraQueryEngine engine) {
708 return MultipleTransitionFromEntry.Matcher.on(engine);
709 }
710
711 @Override
712 public MultipleTransitionFromEntry.Matcher instantiate() {
713 return MultipleTransitionFromEntry.Matcher.create();
714 }
715
716 @Override
717 public MultipleTransitionFromEntry.Match newEmptyMatch() {
718 return MultipleTransitionFromEntry.Match.newEmptyMatch();
719 }
720
721 @Override
722 public MultipleTransitionFromEntry.Match newMatch(final Object... parameters) {
723 return MultipleTransitionFromEntry.Match.newMatch((ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Entry) parameters[0], (ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition) parameters[1], (ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition) parameters[2]);
724 }
725
726 /**
727 * Inner class allowing the singleton instance of {@link JvmGenericType: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.MultipleTransitionFromEntry (visibility: PUBLIC, simpleName: MultipleTransitionFromEntry, identifier: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.MultipleTransitionFromEntry, deprecated: <unset>) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)} to be created
728 * <b>not</b> at the class load time of the outer class,
729 * but rather at the first call to {@link JvmGenericType: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.MultipleTransitionFromEntry (visibility: PUBLIC, simpleName: MultipleTransitionFromEntry, identifier: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.MultipleTransitionFromEntry, deprecated: <unset>) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)#instance()}.
730 *
731 * <p> This workaround is required e.g. to support recursion.
732 *
733 */
734 private static class LazyHolder {
735 private final static MultipleTransitionFromEntry INSTANCE = new MultipleTransitionFromEntry();
736
737 /**
738 * Statically initializes the query specification <b>after</b> the field {@link #INSTANCE} is assigned.
739 * This initialization order is required to support indirect recursion.
740 *
741 * <p> The static initializer is defined using a helper field to work around limitations of the code generator.
742 *
743 */
744 private final static Object STATIC_INITIALIZER = ensureInitialized();
745
746 public static Object ensureInitialized() {
747 INSTANCE.ensureInitializedInternal();
748 return null;
749 }
750 }
751
752 private static class GeneratedPQuery extends BaseGeneratedEMFPQuery {
753 private final static MultipleTransitionFromEntry.GeneratedPQuery INSTANCE = new GeneratedPQuery();
754
755 private final PParameter parameter_e = new PParameter("e", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Entry", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "Entry")), PParameterDirection.INOUT);
756
757 private final PParameter parameter_t1 = new PParameter("t1", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "Transition")), PParameterDirection.INOUT);
758
759 private final PParameter parameter_t2 = new PParameter("t2", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "Transition")), PParameterDirection.INOUT);
760
761 private final List<PParameter> parameters = Arrays.asList(parameter_e, parameter_t1, parameter_t2);
762
763 private GeneratedPQuery() {
764 super(PVisibility.PUBLIC);
765 }
766
767 @Override
768 public String getFullyQualifiedName() {
769 return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.multipleTransitionFromEntry";
770 }
771
772 @Override
773 public List<String> getParameterNames() {
774 return Arrays.asList("e","t1","t2");
775 }
776
777 @Override
778 public List<PParameter> getParameters() {
779 return parameters;
780 }
781
782 @Override
783 public Set<PBody> doGetContainedBodies() {
784 setEvaluationHints(new QueryEvaluationHint(null, QueryEvaluationHint.BackendRequirement.UNSPECIFIED));
785 Set<PBody> bodies = new LinkedHashSet<>();
786 {
787 PBody body = new PBody(this);
788 PVariable var_e = body.getOrCreateVariableByName("e");
789 PVariable var_t1 = body.getOrCreateVariableByName("t1");
790 PVariable var_t2 = body.getOrCreateVariableByName("t2");
791 new TypeConstraint(body, Tuples.flatTupleOf(var_e), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Entry")));
792 new TypeConstraint(body, Tuples.flatTupleOf(var_t1), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Transition")));
793 new TypeConstraint(body, Tuples.flatTupleOf(var_t2), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Transition")));
794 body.setSymbolicParameters(Arrays.<ExportedParameter>asList(
795 new ExportedParameter(body, var_e, parameter_e),
796 new ExportedParameter(body, var_t1, parameter_t1),
797 new ExportedParameter(body, var_t2, parameter_t2)
798 ));
799 // Entry.outgoingTransitions(e,t1)
800 new TypeConstraint(body, Tuples.flatTupleOf(var_e), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Entry")));
801 PVariable var__virtual_0_ = body.getOrCreateVariableByName(".virtual{0}");
802 new TypeConstraint(body, Tuples.flatTupleOf(var_e, var__virtual_0_), new EStructuralFeatureInstancesKey(getFeatureLiteral("YakinduMetamodel", "Vertex", "outgoingTransitions")));
803 new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_0_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Transition")));
804 new Equality(body, var__virtual_0_, var_t1);
805 // Entry.outgoingTransitions(e,t2)
806 new TypeConstraint(body, Tuples.flatTupleOf(var_e), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Entry")));
807 PVariable var__virtual_1_ = body.getOrCreateVariableByName(".virtual{1}");
808 new TypeConstraint(body, Tuples.flatTupleOf(var_e, var__virtual_1_), new EStructuralFeatureInstancesKey(getFeatureLiteral("YakinduMetamodel", "Vertex", "outgoingTransitions")));
809 new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_1_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Transition")));
810 new Equality(body, var__virtual_1_, var_t2);
811 // t1!=t2
812 new Inequality(body, var_t1, var_t2);
813 bodies.add(body);
814 }
815 {
816 PAnnotation annotation = new PAnnotation("Constraint");
817 annotation.addAttribute("severity", "error");
818 annotation.addAttribute("message", "error");
819 annotation.addAttribute("key", Arrays.asList(new Object[] {
820 new ParameterReference("e")
821 }));
822 addAnnotation(annotation);
823 }
824 return bodies;
825 }
826 }
827}
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/NoEntryInRegion.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/NoEntryInRegion.java
new file mode 100644
index 00000000..c1f7df4a
--- /dev/null
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/NoEntryInRegion.java
@@ -0,0 +1,550 @@
1/**
2 * Generated from platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduPatterns.vql
3 */
4package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries;
5
6import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Region;
7import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.EntryInRegion;
8import java.util.Arrays;
9import java.util.Collection;
10import java.util.LinkedHashSet;
11import java.util.List;
12import java.util.Objects;
13import java.util.Optional;
14import java.util.Set;
15import java.util.function.Consumer;
16import java.util.stream.Collectors;
17import java.util.stream.Stream;
18import org.apache.log4j.Logger;
19import org.eclipse.emf.ecore.EClass;
20import org.eclipse.viatra.query.runtime.api.IPatternMatch;
21import org.eclipse.viatra.query.runtime.api.IQuerySpecification;
22import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine;
23import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFPQuery;
24import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFQuerySpecification;
25import org.eclipse.viatra.query.runtime.api.impl.BaseMatcher;
26import org.eclipse.viatra.query.runtime.api.impl.BasePatternMatch;
27import org.eclipse.viatra.query.runtime.emf.types.EClassTransitiveInstancesKey;
28import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint;
29import org.eclipse.viatra.query.runtime.matchers.psystem.PBody;
30import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable;
31import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.PAnnotation;
32import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.ParameterReference;
33import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExportedParameter;
34import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.NegativePatternCall;
35import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint;
36import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter;
37import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameterDirection;
38import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PVisibility;
39import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple;
40import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples;
41import org.eclipse.viatra.query.runtime.util.ViatraQueryLoggingUtil;
42
43/**
44 * A pattern-specific query specification that can instantiate Matcher in a type-safe way.
45 *
46 * <p>Original source:
47 * <code><pre>
48 * {@literal @}Constraint(severity="error", message="error", key = {r1})
49 * pattern noEntryInRegion(r1 : Region) {
50 * neg find entryInRegion(r1, _);
51 * }
52 * </pre></code>
53 *
54 * @see Matcher
55 * @see Match
56 *
57 */
58@SuppressWarnings("all")
59public final class NoEntryInRegion extends BaseGeneratedEMFQuerySpecification<NoEntryInRegion.Matcher> {
60 /**
61 * Pattern-specific match representation of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.noEntryInRegion pattern,
62 * to be used in conjunction with {@link Matcher}.
63 *
64 * <p>Class fields correspond to parameters of the pattern. Fields with value null are considered unassigned.
65 * Each instance is a (possibly partial) substitution of pattern parameters,
66 * usable to represent a match of the pattern in the result of a query,
67 * or to specify the bound (fixed) input parameters when issuing a query.
68 *
69 * @see Matcher
70 *
71 */
72 public static abstract class Match extends BasePatternMatch {
73 private Region fR1;
74
75 private static List<String> parameterNames = makeImmutableList("r1");
76
77 private Match(final Region pR1) {
78 this.fR1 = pR1;
79 }
80
81 @Override
82 public Object get(final String parameterName) {
83 if ("r1".equals(parameterName)) return this.fR1;
84 return null;
85 }
86
87 public Region getR1() {
88 return this.fR1;
89 }
90
91 @Override
92 public boolean set(final String parameterName, final Object newValue) {
93 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
94 if ("r1".equals(parameterName) ) {
95 this.fR1 = (Region) newValue;
96 return true;
97 }
98 return false;
99 }
100
101 public void setR1(final Region pR1) {
102 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
103 this.fR1 = pR1;
104 }
105
106 @Override
107 public String patternName() {
108 return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.noEntryInRegion";
109 }
110
111 @Override
112 public List<String> parameterNames() {
113 return NoEntryInRegion.Match.parameterNames;
114 }
115
116 @Override
117 public Object[] toArray() {
118 return new Object[]{fR1};
119 }
120
121 @Override
122 public NoEntryInRegion.Match toImmutable() {
123 return isMutable() ? newMatch(fR1) : this;
124 }
125
126 @Override
127 public String prettyPrint() {
128 StringBuilder result = new StringBuilder();
129 result.append("\"r1\"=" + prettyPrintValue(fR1));
130 return result.toString();
131 }
132
133 @Override
134 public int hashCode() {
135 return Objects.hash(fR1);
136 }
137
138 @Override
139 public boolean equals(final Object obj) {
140 if (this == obj)
141 return true;
142 if (obj == null) {
143 return false;
144 }
145 if ((obj instanceof NoEntryInRegion.Match)) {
146 NoEntryInRegion.Match other = (NoEntryInRegion.Match) obj;
147 return Objects.equals(fR1, other.fR1);
148 } else {
149 // this should be infrequent
150 if (!(obj instanceof IPatternMatch)) {
151 return false;
152 }
153 IPatternMatch otherSig = (IPatternMatch) obj;
154 return Objects.equals(specification(), otherSig.specification()) && Arrays.deepEquals(toArray(), otherSig.toArray());
155 }
156 }
157
158 @Override
159 public NoEntryInRegion specification() {
160 return NoEntryInRegion.instance();
161 }
162
163 /**
164 * Returns an empty, mutable match.
165 * Fields of the mutable match can be filled to create a partial match, usable as matcher input.
166 *
167 * @return the empty match.
168 *
169 */
170 public static NoEntryInRegion.Match newEmptyMatch() {
171 return new Mutable(null);
172 }
173
174 /**
175 * Returns a mutable (partial) match.
176 * Fields of the mutable match can be filled to create a partial match, usable as matcher input.
177 *
178 * @param pR1 the fixed value of pattern parameter r1, or null if not bound.
179 * @return the new, mutable (partial) match object.
180 *
181 */
182 public static NoEntryInRegion.Match newMutableMatch(final Region pR1) {
183 return new Mutable(pR1);
184 }
185
186 /**
187 * Returns a new (partial) match.
188 * This can be used e.g. to call the matcher with a partial match.
189 * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object.
190 * @param pR1 the fixed value of pattern parameter r1, or null if not bound.
191 * @return the (partial) match object.
192 *
193 */
194 public static NoEntryInRegion.Match newMatch(final Region pR1) {
195 return new Immutable(pR1);
196 }
197
198 private static final class Mutable extends NoEntryInRegion.Match {
199 Mutable(final Region pR1) {
200 super(pR1);
201 }
202
203 @Override
204 public boolean isMutable() {
205 return true;
206 }
207 }
208
209 private static final class Immutable extends NoEntryInRegion.Match {
210 Immutable(final Region pR1) {
211 super(pR1);
212 }
213
214 @Override
215 public boolean isMutable() {
216 return false;
217 }
218 }
219 }
220
221 /**
222 * Generated pattern matcher API of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.noEntryInRegion pattern,
223 * providing pattern-specific query methods.
224 *
225 * <p>Use the pattern matcher on a given model via {@link #on(ViatraQueryEngine)},
226 * e.g. in conjunction with {@link ViatraQueryEngine#on(QueryScope)}.
227 *
228 * <p>Matches of the pattern will be represented as {@link Match}.
229 *
230 * <p>Original source:
231 * <code><pre>
232 * {@literal @}Constraint(severity="error", message="error", key = {r1})
233 * pattern noEntryInRegion(r1 : Region) {
234 * neg find entryInRegion(r1, _);
235 * }
236 * </pre></code>
237 *
238 * @see Match
239 * @see NoEntryInRegion
240 *
241 */
242 public static class Matcher extends BaseMatcher<NoEntryInRegion.Match> {
243 /**
244 * Initializes the pattern matcher within an existing VIATRA Query engine.
245 * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned.
246 *
247 * @param engine the existing VIATRA Query engine in which this matcher will be created.
248 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
249 *
250 */
251 public static NoEntryInRegion.Matcher on(final ViatraQueryEngine engine) {
252 // check if matcher already exists
253 Matcher matcher = engine.getExistingMatcher(querySpecification());
254 if (matcher == null) {
255 matcher = (Matcher)engine.getMatcher(querySpecification());
256 }
257 return matcher;
258 }
259
260 /**
261 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
262 * @return an initialized matcher
263 * @noreference This method is for internal matcher initialization by the framework, do not call it manually.
264 *
265 */
266 public static NoEntryInRegion.Matcher create() {
267 return new Matcher();
268 }
269
270 private final static int POSITION_R1 = 0;
271
272 private final static Logger LOGGER = ViatraQueryLoggingUtil.getLogger(NoEntryInRegion.Matcher.class);
273
274 /**
275 * Initializes the pattern matcher within an existing VIATRA Query engine.
276 * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned.
277 *
278 * @param engine the existing VIATRA Query engine in which this matcher will be created.
279 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
280 *
281 */
282 private Matcher() {
283 super(querySpecification());
284 }
285
286 /**
287 * Returns the set of all matches of the pattern that conform to the given fixed values of some parameters.
288 * @param pR1 the fixed value of pattern parameter r1, or null if not bound.
289 * @return matches represented as a Match object.
290 *
291 */
292 public Collection<NoEntryInRegion.Match> getAllMatches(final Region pR1) {
293 return rawStreamAllMatches(new Object[]{pR1}).collect(Collectors.toSet());
294 }
295
296 /**
297 * Returns a stream of all matches of the pattern that conform to the given fixed values of some parameters.
298 * </p>
299 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
300 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
301 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
302 * @param pR1 the fixed value of pattern parameter r1, or null if not bound.
303 * @return a stream of matches represented as a Match object.
304 *
305 */
306 public Stream<NoEntryInRegion.Match> streamAllMatches(final Region pR1) {
307 return rawStreamAllMatches(new Object[]{pR1});
308 }
309
310 /**
311 * Returns an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters.
312 * Neither determinism nor randomness of selection is guaranteed.
313 * @param pR1 the fixed value of pattern parameter r1, or null if not bound.
314 * @return a match represented as a Match object, or null if no match is found.
315 *
316 */
317 public Optional<NoEntryInRegion.Match> getOneArbitraryMatch(final Region pR1) {
318 return rawGetOneArbitraryMatch(new Object[]{pR1});
319 }
320
321 /**
322 * Indicates whether the given combination of specified pattern parameters constitute a valid pattern match,
323 * under any possible substitution of the unspecified parameters (if any).
324 * @param pR1 the fixed value of pattern parameter r1, or null if not bound.
325 * @return true if the input is a valid (partial) match of the pattern.
326 *
327 */
328 public boolean hasMatch(final Region pR1) {
329 return rawHasMatch(new Object[]{pR1});
330 }
331
332 /**
333 * Returns the number of all matches of the pattern that conform to the given fixed values of some parameters.
334 * @param pR1 the fixed value of pattern parameter r1, or null if not bound.
335 * @return the number of pattern matches found.
336 *
337 */
338 public int countMatches(final Region pR1) {
339 return rawCountMatches(new Object[]{pR1});
340 }
341
342 /**
343 * Executes the given processor on an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters.
344 * Neither determinism nor randomness of selection is guaranteed.
345 * @param pR1 the fixed value of pattern parameter r1, or null if not bound.
346 * @param processor the action that will process the selected match.
347 * @return true if the pattern has at least one match with the given parameter values, false if the processor was not invoked
348 *
349 */
350 public boolean forOneArbitraryMatch(final Region pR1, final Consumer<? super NoEntryInRegion.Match> processor) {
351 return rawForOneArbitraryMatch(new Object[]{pR1}, processor);
352 }
353
354 /**
355 * Returns a new (partial) match.
356 * This can be used e.g. to call the matcher with a partial match.
357 * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object.
358 * @param pR1 the fixed value of pattern parameter r1, or null if not bound.
359 * @return the (partial) match object.
360 *
361 */
362 public NoEntryInRegion.Match newMatch(final Region pR1) {
363 return NoEntryInRegion.Match.newMatch(pR1);
364 }
365
366 /**
367 * Retrieve the set of values that occur in matches for r1.
368 * @return the Set of all values or empty set if there are no matches
369 *
370 */
371 protected Stream<Region> rawStreamAllValuesOfr1(final Object[] parameters) {
372 return rawStreamAllValues(POSITION_R1, parameters).map(Region.class::cast);
373 }
374
375 /**
376 * Retrieve the set of values that occur in matches for r1.
377 * @return the Set of all values or empty set if there are no matches
378 *
379 */
380 public Set<Region> getAllValuesOfr1() {
381 return rawStreamAllValuesOfr1(emptyArray()).collect(Collectors.toSet());
382 }
383
384 /**
385 * Retrieve the set of values that occur in matches for r1.
386 * @return the Set of all values or empty set if there are no matches
387 *
388 */
389 public Stream<Region> streamAllValuesOfr1() {
390 return rawStreamAllValuesOfr1(emptyArray());
391 }
392
393 @Override
394 protected NoEntryInRegion.Match tupleToMatch(final Tuple t) {
395 try {
396 return NoEntryInRegion.Match.newMatch((Region) t.get(POSITION_R1));
397 } catch(ClassCastException e) {
398 LOGGER.error("Element(s) in tuple not properly typed!",e);
399 return null;
400 }
401 }
402
403 @Override
404 protected NoEntryInRegion.Match arrayToMatch(final Object[] match) {
405 try {
406 return NoEntryInRegion.Match.newMatch((Region) match[POSITION_R1]);
407 } catch(ClassCastException e) {
408 LOGGER.error("Element(s) in array not properly typed!",e);
409 return null;
410 }
411 }
412
413 @Override
414 protected NoEntryInRegion.Match arrayToMatchMutable(final Object[] match) {
415 try {
416 return NoEntryInRegion.Match.newMutableMatch((Region) match[POSITION_R1]);
417 } catch(ClassCastException e) {
418 LOGGER.error("Element(s) in array not properly typed!",e);
419 return null;
420 }
421 }
422
423 /**
424 * @return the singleton instance of the query specification of this pattern
425 * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded
426 *
427 */
428 public static IQuerySpecification<NoEntryInRegion.Matcher> querySpecification() {
429 return NoEntryInRegion.instance();
430 }
431 }
432
433 private NoEntryInRegion() {
434 super(GeneratedPQuery.INSTANCE);
435 }
436
437 /**
438 * @return the singleton instance of the query specification
439 * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded
440 *
441 */
442 public static NoEntryInRegion instance() {
443 try{
444 return LazyHolder.INSTANCE;
445 } catch (ExceptionInInitializerError err) {
446 throw processInitializerError(err);
447 }
448 }
449
450 @Override
451 protected NoEntryInRegion.Matcher instantiate(final ViatraQueryEngine engine) {
452 return NoEntryInRegion.Matcher.on(engine);
453 }
454
455 @Override
456 public NoEntryInRegion.Matcher instantiate() {
457 return NoEntryInRegion.Matcher.create();
458 }
459
460 @Override
461 public NoEntryInRegion.Match newEmptyMatch() {
462 return NoEntryInRegion.Match.newEmptyMatch();
463 }
464
465 @Override
466 public NoEntryInRegion.Match newMatch(final Object... parameters) {
467 return NoEntryInRegion.Match.newMatch((ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Region) parameters[0]);
468 }
469
470 /**
471 * Inner class allowing the singleton instance of {@link JvmGenericType: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.NoEntryInRegion (visibility: PUBLIC, simpleName: NoEntryInRegion, identifier: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.NoEntryInRegion, deprecated: <unset>) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)} to be created
472 * <b>not</b> at the class load time of the outer class,
473 * but rather at the first call to {@link JvmGenericType: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.NoEntryInRegion (visibility: PUBLIC, simpleName: NoEntryInRegion, identifier: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.NoEntryInRegion, deprecated: <unset>) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)#instance()}.
474 *
475 * <p> This workaround is required e.g. to support recursion.
476 *
477 */
478 private static class LazyHolder {
479 private final static NoEntryInRegion INSTANCE = new NoEntryInRegion();
480
481 /**
482 * Statically initializes the query specification <b>after</b> the field {@link #INSTANCE} is assigned.
483 * This initialization order is required to support indirect recursion.
484 *
485 * <p> The static initializer is defined using a helper field to work around limitations of the code generator.
486 *
487 */
488 private final static Object STATIC_INITIALIZER = ensureInitialized();
489
490 public static Object ensureInitialized() {
491 INSTANCE.ensureInitializedInternal();
492 return null;
493 }
494 }
495
496 private static class GeneratedPQuery extends BaseGeneratedEMFPQuery {
497 private final static NoEntryInRegion.GeneratedPQuery INSTANCE = new GeneratedPQuery();
498
499 private final PParameter parameter_r1 = new PParameter("r1", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Region", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "Region")), PParameterDirection.INOUT);
500
501 private final List<PParameter> parameters = Arrays.asList(parameter_r1);
502
503 private GeneratedPQuery() {
504 super(PVisibility.PUBLIC);
505 }
506
507 @Override
508 public String getFullyQualifiedName() {
509 return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.noEntryInRegion";
510 }
511
512 @Override
513 public List<String> getParameterNames() {
514 return Arrays.asList("r1");
515 }
516
517 @Override
518 public List<PParameter> getParameters() {
519 return parameters;
520 }
521
522 @Override
523 public Set<PBody> doGetContainedBodies() {
524 setEvaluationHints(new QueryEvaluationHint(null, QueryEvaluationHint.BackendRequirement.UNSPECIFIED));
525 Set<PBody> bodies = new LinkedHashSet<>();
526 {
527 PBody body = new PBody(this);
528 PVariable var_r1 = body.getOrCreateVariableByName("r1");
529 PVariable var___0_ = body.getOrCreateVariableByName("_<0>");
530 new TypeConstraint(body, Tuples.flatTupleOf(var_r1), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Region")));
531 body.setSymbolicParameters(Arrays.<ExportedParameter>asList(
532 new ExportedParameter(body, var_r1, parameter_r1)
533 ));
534 // neg find entryInRegion(r1, _)
535 new NegativePatternCall(body, Tuples.flatTupleOf(var_r1, var___0_), EntryInRegion.instance().getInternalQueryRepresentation());
536 bodies.add(body);
537 }
538 {
539 PAnnotation annotation = new PAnnotation("Constraint");
540 annotation.addAttribute("severity", "error");
541 annotation.addAttribute("message", "error");
542 annotation.addAttribute("key", Arrays.asList(new Object[] {
543 new ParameterReference("r1")
544 }));
545 addAnnotation(annotation);
546 }
547 return bodies;
548 }
549 }
550}
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/NoOutgoingTransitionFromEntry.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/NoOutgoingTransitionFromEntry.java
new file mode 100644
index 00000000..d9a3de50
--- /dev/null
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/NoOutgoingTransitionFromEntry.java
@@ -0,0 +1,551 @@
1/**
2 * Generated from platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduPatterns.vql
3 */
4package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries;
5
6import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Entry;
7import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.Transition;
8import java.util.Arrays;
9import java.util.Collection;
10import java.util.LinkedHashSet;
11import java.util.List;
12import java.util.Objects;
13import java.util.Optional;
14import java.util.Set;
15import java.util.function.Consumer;
16import java.util.stream.Collectors;
17import java.util.stream.Stream;
18import org.apache.log4j.Logger;
19import org.eclipse.emf.ecore.EClass;
20import org.eclipse.viatra.query.runtime.api.IPatternMatch;
21import org.eclipse.viatra.query.runtime.api.IQuerySpecification;
22import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine;
23import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFPQuery;
24import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFQuerySpecification;
25import org.eclipse.viatra.query.runtime.api.impl.BaseMatcher;
26import org.eclipse.viatra.query.runtime.api.impl.BasePatternMatch;
27import org.eclipse.viatra.query.runtime.emf.types.EClassTransitiveInstancesKey;
28import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint;
29import org.eclipse.viatra.query.runtime.matchers.psystem.PBody;
30import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable;
31import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.PAnnotation;
32import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.ParameterReference;
33import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExportedParameter;
34import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.NegativePatternCall;
35import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint;
36import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter;
37import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameterDirection;
38import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PVisibility;
39import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple;
40import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples;
41import org.eclipse.viatra.query.runtime.util.ViatraQueryLoggingUtil;
42
43/**
44 * A pattern-specific query specification that can instantiate Matcher in a type-safe way.
45 *
46 * <p>Original source:
47 * <code><pre>
48 * {@literal @}Constraint(severity="error", message="error", key = {e})
49 * pattern noOutgoingTransitionFromEntry(e : Entry) {
50 * neg find transition(_, e, _);
51 * }
52 * </pre></code>
53 *
54 * @see Matcher
55 * @see Match
56 *
57 */
58@SuppressWarnings("all")
59public final class NoOutgoingTransitionFromEntry extends BaseGeneratedEMFQuerySpecification<NoOutgoingTransitionFromEntry.Matcher> {
60 /**
61 * Pattern-specific match representation of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.noOutgoingTransitionFromEntry pattern,
62 * to be used in conjunction with {@link Matcher}.
63 *
64 * <p>Class fields correspond to parameters of the pattern. Fields with value null are considered unassigned.
65 * Each instance is a (possibly partial) substitution of pattern parameters,
66 * usable to represent a match of the pattern in the result of a query,
67 * or to specify the bound (fixed) input parameters when issuing a query.
68 *
69 * @see Matcher
70 *
71 */
72 public static abstract class Match extends BasePatternMatch {
73 private Entry fE;
74
75 private static List<String> parameterNames = makeImmutableList("e");
76
77 private Match(final Entry pE) {
78 this.fE = pE;
79 }
80
81 @Override
82 public Object get(final String parameterName) {
83 if ("e".equals(parameterName)) return this.fE;
84 return null;
85 }
86
87 public Entry getE() {
88 return this.fE;
89 }
90
91 @Override
92 public boolean set(final String parameterName, final Object newValue) {
93 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
94 if ("e".equals(parameterName) ) {
95 this.fE = (Entry) newValue;
96 return true;
97 }
98 return false;
99 }
100
101 public void setE(final Entry pE) {
102 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
103 this.fE = pE;
104 }
105
106 @Override
107 public String patternName() {
108 return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.noOutgoingTransitionFromEntry";
109 }
110
111 @Override
112 public List<String> parameterNames() {
113 return NoOutgoingTransitionFromEntry.Match.parameterNames;
114 }
115
116 @Override
117 public Object[] toArray() {
118 return new Object[]{fE};
119 }
120
121 @Override
122 public NoOutgoingTransitionFromEntry.Match toImmutable() {
123 return isMutable() ? newMatch(fE) : this;
124 }
125
126 @Override
127 public String prettyPrint() {
128 StringBuilder result = new StringBuilder();
129 result.append("\"e\"=" + prettyPrintValue(fE));
130 return result.toString();
131 }
132
133 @Override
134 public int hashCode() {
135 return Objects.hash(fE);
136 }
137
138 @Override
139 public boolean equals(final Object obj) {
140 if (this == obj)
141 return true;
142 if (obj == null) {
143 return false;
144 }
145 if ((obj instanceof NoOutgoingTransitionFromEntry.Match)) {
146 NoOutgoingTransitionFromEntry.Match other = (NoOutgoingTransitionFromEntry.Match) obj;
147 return Objects.equals(fE, other.fE);
148 } else {
149 // this should be infrequent
150 if (!(obj instanceof IPatternMatch)) {
151 return false;
152 }
153 IPatternMatch otherSig = (IPatternMatch) obj;
154 return Objects.equals(specification(), otherSig.specification()) && Arrays.deepEquals(toArray(), otherSig.toArray());
155 }
156 }
157
158 @Override
159 public NoOutgoingTransitionFromEntry specification() {
160 return NoOutgoingTransitionFromEntry.instance();
161 }
162
163 /**
164 * Returns an empty, mutable match.
165 * Fields of the mutable match can be filled to create a partial match, usable as matcher input.
166 *
167 * @return the empty match.
168 *
169 */
170 public static NoOutgoingTransitionFromEntry.Match newEmptyMatch() {
171 return new Mutable(null);
172 }
173
174 /**
175 * Returns a mutable (partial) match.
176 * Fields of the mutable match can be filled to create a partial match, usable as matcher input.
177 *
178 * @param pE the fixed value of pattern parameter e, or null if not bound.
179 * @return the new, mutable (partial) match object.
180 *
181 */
182 public static NoOutgoingTransitionFromEntry.Match newMutableMatch(final Entry pE) {
183 return new Mutable(pE);
184 }
185
186 /**
187 * Returns a new (partial) match.
188 * This can be used e.g. to call the matcher with a partial match.
189 * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object.
190 * @param pE the fixed value of pattern parameter e, or null if not bound.
191 * @return the (partial) match object.
192 *
193 */
194 public static NoOutgoingTransitionFromEntry.Match newMatch(final Entry pE) {
195 return new Immutable(pE);
196 }
197
198 private static final class Mutable extends NoOutgoingTransitionFromEntry.Match {
199 Mutable(final Entry pE) {
200 super(pE);
201 }
202
203 @Override
204 public boolean isMutable() {
205 return true;
206 }
207 }
208
209 private static final class Immutable extends NoOutgoingTransitionFromEntry.Match {
210 Immutable(final Entry pE) {
211 super(pE);
212 }
213
214 @Override
215 public boolean isMutable() {
216 return false;
217 }
218 }
219 }
220
221 /**
222 * Generated pattern matcher API of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.noOutgoingTransitionFromEntry pattern,
223 * providing pattern-specific query methods.
224 *
225 * <p>Use the pattern matcher on a given model via {@link #on(ViatraQueryEngine)},
226 * e.g. in conjunction with {@link ViatraQueryEngine#on(QueryScope)}.
227 *
228 * <p>Matches of the pattern will be represented as {@link Match}.
229 *
230 * <p>Original source:
231 * <code><pre>
232 * {@literal @}Constraint(severity="error", message="error", key = {e})
233 * pattern noOutgoingTransitionFromEntry(e : Entry) {
234 * neg find transition(_, e, _);
235 * }
236 * </pre></code>
237 *
238 * @see Match
239 * @see NoOutgoingTransitionFromEntry
240 *
241 */
242 public static class Matcher extends BaseMatcher<NoOutgoingTransitionFromEntry.Match> {
243 /**
244 * Initializes the pattern matcher within an existing VIATRA Query engine.
245 * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned.
246 *
247 * @param engine the existing VIATRA Query engine in which this matcher will be created.
248 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
249 *
250 */
251 public static NoOutgoingTransitionFromEntry.Matcher on(final ViatraQueryEngine engine) {
252 // check if matcher already exists
253 Matcher matcher = engine.getExistingMatcher(querySpecification());
254 if (matcher == null) {
255 matcher = (Matcher)engine.getMatcher(querySpecification());
256 }
257 return matcher;
258 }
259
260 /**
261 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
262 * @return an initialized matcher
263 * @noreference This method is for internal matcher initialization by the framework, do not call it manually.
264 *
265 */
266 public static NoOutgoingTransitionFromEntry.Matcher create() {
267 return new Matcher();
268 }
269
270 private final static int POSITION_E = 0;
271
272 private final static Logger LOGGER = ViatraQueryLoggingUtil.getLogger(NoOutgoingTransitionFromEntry.Matcher.class);
273
274 /**
275 * Initializes the pattern matcher within an existing VIATRA Query engine.
276 * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned.
277 *
278 * @param engine the existing VIATRA Query engine in which this matcher will be created.
279 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
280 *
281 */
282 private Matcher() {
283 super(querySpecification());
284 }
285
286 /**
287 * Returns the set of all matches of the pattern that conform to the given fixed values of some parameters.
288 * @param pE the fixed value of pattern parameter e, or null if not bound.
289 * @return matches represented as a Match object.
290 *
291 */
292 public Collection<NoOutgoingTransitionFromEntry.Match> getAllMatches(final Entry pE) {
293 return rawStreamAllMatches(new Object[]{pE}).collect(Collectors.toSet());
294 }
295
296 /**
297 * Returns a stream of all matches of the pattern that conform to the given fixed values of some parameters.
298 * </p>
299 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
300 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
301 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
302 * @param pE the fixed value of pattern parameter e, or null if not bound.
303 * @return a stream of matches represented as a Match object.
304 *
305 */
306 public Stream<NoOutgoingTransitionFromEntry.Match> streamAllMatches(final Entry pE) {
307 return rawStreamAllMatches(new Object[]{pE});
308 }
309
310 /**
311 * Returns an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters.
312 * Neither determinism nor randomness of selection is guaranteed.
313 * @param pE the fixed value of pattern parameter e, or null if not bound.
314 * @return a match represented as a Match object, or null if no match is found.
315 *
316 */
317 public Optional<NoOutgoingTransitionFromEntry.Match> getOneArbitraryMatch(final Entry pE) {
318 return rawGetOneArbitraryMatch(new Object[]{pE});
319 }
320
321 /**
322 * Indicates whether the given combination of specified pattern parameters constitute a valid pattern match,
323 * under any possible substitution of the unspecified parameters (if any).
324 * @param pE the fixed value of pattern parameter e, or null if not bound.
325 * @return true if the input is a valid (partial) match of the pattern.
326 *
327 */
328 public boolean hasMatch(final Entry pE) {
329 return rawHasMatch(new Object[]{pE});
330 }
331
332 /**
333 * Returns the number of all matches of the pattern that conform to the given fixed values of some parameters.
334 * @param pE the fixed value of pattern parameter e, or null if not bound.
335 * @return the number of pattern matches found.
336 *
337 */
338 public int countMatches(final Entry pE) {
339 return rawCountMatches(new Object[]{pE});
340 }
341
342 /**
343 * Executes the given processor on an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters.
344 * Neither determinism nor randomness of selection is guaranteed.
345 * @param pE the fixed value of pattern parameter e, or null if not bound.
346 * @param processor the action that will process the selected match.
347 * @return true if the pattern has at least one match with the given parameter values, false if the processor was not invoked
348 *
349 */
350 public boolean forOneArbitraryMatch(final Entry pE, final Consumer<? super NoOutgoingTransitionFromEntry.Match> processor) {
351 return rawForOneArbitraryMatch(new Object[]{pE}, processor);
352 }
353
354 /**
355 * Returns a new (partial) match.
356 * This can be used e.g. to call the matcher with a partial match.
357 * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object.
358 * @param pE the fixed value of pattern parameter e, or null if not bound.
359 * @return the (partial) match object.
360 *
361 */
362 public NoOutgoingTransitionFromEntry.Match newMatch(final Entry pE) {
363 return NoOutgoingTransitionFromEntry.Match.newMatch(pE);
364 }
365
366 /**
367 * Retrieve the set of values that occur in matches for e.
368 * @return the Set of all values or empty set if there are no matches
369 *
370 */
371 protected Stream<Entry> rawStreamAllValuesOfe(final Object[] parameters) {
372 return rawStreamAllValues(POSITION_E, parameters).map(Entry.class::cast);
373 }
374
375 /**
376 * Retrieve the set of values that occur in matches for e.
377 * @return the Set of all values or empty set if there are no matches
378 *
379 */
380 public Set<Entry> getAllValuesOfe() {
381 return rawStreamAllValuesOfe(emptyArray()).collect(Collectors.toSet());
382 }
383
384 /**
385 * Retrieve the set of values that occur in matches for e.
386 * @return the Set of all values or empty set if there are no matches
387 *
388 */
389 public Stream<Entry> streamAllValuesOfe() {
390 return rawStreamAllValuesOfe(emptyArray());
391 }
392
393 @Override
394 protected NoOutgoingTransitionFromEntry.Match tupleToMatch(final Tuple t) {
395 try {
396 return NoOutgoingTransitionFromEntry.Match.newMatch((Entry) t.get(POSITION_E));
397 } catch(ClassCastException e) {
398 LOGGER.error("Element(s) in tuple not properly typed!",e);
399 return null;
400 }
401 }
402
403 @Override
404 protected NoOutgoingTransitionFromEntry.Match arrayToMatch(final Object[] match) {
405 try {
406 return NoOutgoingTransitionFromEntry.Match.newMatch((Entry) match[POSITION_E]);
407 } catch(ClassCastException e) {
408 LOGGER.error("Element(s) in array not properly typed!",e);
409 return null;
410 }
411 }
412
413 @Override
414 protected NoOutgoingTransitionFromEntry.Match arrayToMatchMutable(final Object[] match) {
415 try {
416 return NoOutgoingTransitionFromEntry.Match.newMutableMatch((Entry) match[POSITION_E]);
417 } catch(ClassCastException e) {
418 LOGGER.error("Element(s) in array not properly typed!",e);
419 return null;
420 }
421 }
422
423 /**
424 * @return the singleton instance of the query specification of this pattern
425 * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded
426 *
427 */
428 public static IQuerySpecification<NoOutgoingTransitionFromEntry.Matcher> querySpecification() {
429 return NoOutgoingTransitionFromEntry.instance();
430 }
431 }
432
433 private NoOutgoingTransitionFromEntry() {
434 super(GeneratedPQuery.INSTANCE);
435 }
436
437 /**
438 * @return the singleton instance of the query specification
439 * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded
440 *
441 */
442 public static NoOutgoingTransitionFromEntry instance() {
443 try{
444 return LazyHolder.INSTANCE;
445 } catch (ExceptionInInitializerError err) {
446 throw processInitializerError(err);
447 }
448 }
449
450 @Override
451 protected NoOutgoingTransitionFromEntry.Matcher instantiate(final ViatraQueryEngine engine) {
452 return NoOutgoingTransitionFromEntry.Matcher.on(engine);
453 }
454
455 @Override
456 public NoOutgoingTransitionFromEntry.Matcher instantiate() {
457 return NoOutgoingTransitionFromEntry.Matcher.create();
458 }
459
460 @Override
461 public NoOutgoingTransitionFromEntry.Match newEmptyMatch() {
462 return NoOutgoingTransitionFromEntry.Match.newEmptyMatch();
463 }
464
465 @Override
466 public NoOutgoingTransitionFromEntry.Match newMatch(final Object... parameters) {
467 return NoOutgoingTransitionFromEntry.Match.newMatch((ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Entry) parameters[0]);
468 }
469
470 /**
471 * Inner class allowing the singleton instance of {@link JvmGenericType: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.NoOutgoingTransitionFromEntry (visibility: PUBLIC, simpleName: NoOutgoingTransitionFromEntry, identifier: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.NoOutgoingTransitionFromEntry, deprecated: <unset>) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)} to be created
472 * <b>not</b> at the class load time of the outer class,
473 * but rather at the first call to {@link JvmGenericType: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.NoOutgoingTransitionFromEntry (visibility: PUBLIC, simpleName: NoOutgoingTransitionFromEntry, identifier: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.NoOutgoingTransitionFromEntry, deprecated: <unset>) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)#instance()}.
474 *
475 * <p> This workaround is required e.g. to support recursion.
476 *
477 */
478 private static class LazyHolder {
479 private final static NoOutgoingTransitionFromEntry INSTANCE = new NoOutgoingTransitionFromEntry();
480
481 /**
482 * Statically initializes the query specification <b>after</b> the field {@link #INSTANCE} is assigned.
483 * This initialization order is required to support indirect recursion.
484 *
485 * <p> The static initializer is defined using a helper field to work around limitations of the code generator.
486 *
487 */
488 private final static Object STATIC_INITIALIZER = ensureInitialized();
489
490 public static Object ensureInitialized() {
491 INSTANCE.ensureInitializedInternal();
492 return null;
493 }
494 }
495
496 private static class GeneratedPQuery extends BaseGeneratedEMFPQuery {
497 private final static NoOutgoingTransitionFromEntry.GeneratedPQuery INSTANCE = new GeneratedPQuery();
498
499 private final PParameter parameter_e = new PParameter("e", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Entry", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "Entry")), PParameterDirection.INOUT);
500
501 private final List<PParameter> parameters = Arrays.asList(parameter_e);
502
503 private GeneratedPQuery() {
504 super(PVisibility.PUBLIC);
505 }
506
507 @Override
508 public String getFullyQualifiedName() {
509 return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.noOutgoingTransitionFromEntry";
510 }
511
512 @Override
513 public List<String> getParameterNames() {
514 return Arrays.asList("e");
515 }
516
517 @Override
518 public List<PParameter> getParameters() {
519 return parameters;
520 }
521
522 @Override
523 public Set<PBody> doGetContainedBodies() {
524 setEvaluationHints(new QueryEvaluationHint(null, QueryEvaluationHint.BackendRequirement.UNSPECIFIED));
525 Set<PBody> bodies = new LinkedHashSet<>();
526 {
527 PBody body = new PBody(this);
528 PVariable var_e = body.getOrCreateVariableByName("e");
529 PVariable var___0_ = body.getOrCreateVariableByName("_<0>");
530 PVariable var___1_ = body.getOrCreateVariableByName("_<1>");
531 new TypeConstraint(body, Tuples.flatTupleOf(var_e), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Entry")));
532 body.setSymbolicParameters(Arrays.<ExportedParameter>asList(
533 new ExportedParameter(body, var_e, parameter_e)
534 ));
535 // neg find transition(_, e, _)
536 new NegativePatternCall(body, Tuples.flatTupleOf(var___0_, var_e, var___1_), Transition.instance().getInternalQueryRepresentation());
537 bodies.add(body);
538 }
539 {
540 PAnnotation annotation = new PAnnotation("Constraint");
541 annotation.addAttribute("severity", "error");
542 annotation.addAttribute("message", "error");
543 annotation.addAttribute("key", Arrays.asList(new Object[] {
544 new ParameterReference("e")
545 }));
546 addAnnotation(annotation);
547 }
548 return bodies;
549 }
550 }
551}
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/NoStateInRegion.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/NoStateInRegion.java
new file mode 100644
index 00000000..841339ae
--- /dev/null
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/NoStateInRegion.java
@@ -0,0 +1,558 @@
1/**
2 * Generated from platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduPatterns.vql
3 */
4package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries;
5
6import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Region;
7import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.StateInRegion;
8import java.util.Arrays;
9import java.util.Collection;
10import java.util.LinkedHashSet;
11import java.util.List;
12import java.util.Objects;
13import java.util.Optional;
14import java.util.Set;
15import java.util.function.Consumer;
16import java.util.stream.Collectors;
17import java.util.stream.Stream;
18import org.apache.log4j.Logger;
19import org.eclipse.emf.ecore.EClass;
20import org.eclipse.viatra.query.runtime.api.IPatternMatch;
21import org.eclipse.viatra.query.runtime.api.IQuerySpecification;
22import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine;
23import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFPQuery;
24import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFQuerySpecification;
25import org.eclipse.viatra.query.runtime.api.impl.BaseMatcher;
26import org.eclipse.viatra.query.runtime.api.impl.BasePatternMatch;
27import org.eclipse.viatra.query.runtime.emf.types.EClassTransitiveInstancesKey;
28import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint;
29import org.eclipse.viatra.query.runtime.matchers.psystem.PBody;
30import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable;
31import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.PAnnotation;
32import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.ParameterReference;
33import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExportedParameter;
34import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.NegativePatternCall;
35import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint;
36import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter;
37import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameterDirection;
38import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PVisibility;
39import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple;
40import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples;
41import org.eclipse.viatra.query.runtime.util.ViatraQueryLoggingUtil;
42
43/**
44 * A pattern-specific query specification that can instantiate Matcher in a type-safe way.
45 *
46 * <p>Original source:
47 * <code><pre>
48 * /////////
49 * // State vs Region
50 * /////////
51 *
52 * {@literal @}Constraint(severity="error", message="error", key = {region})
53 * pattern noStateInRegion(region: Region) {
54 * neg find StateInRegion(region,_);
55 * }
56 * </pre></code>
57 *
58 * @see Matcher
59 * @see Match
60 *
61 */
62@SuppressWarnings("all")
63public final class NoStateInRegion extends BaseGeneratedEMFQuerySpecification<NoStateInRegion.Matcher> {
64 /**
65 * Pattern-specific match representation of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.noStateInRegion pattern,
66 * to be used in conjunction with {@link Matcher}.
67 *
68 * <p>Class fields correspond to parameters of the pattern. Fields with value null are considered unassigned.
69 * Each instance is a (possibly partial) substitution of pattern parameters,
70 * usable to represent a match of the pattern in the result of a query,
71 * or to specify the bound (fixed) input parameters when issuing a query.
72 *
73 * @see Matcher
74 *
75 */
76 public static abstract class Match extends BasePatternMatch {
77 private Region fRegion;
78
79 private static List<String> parameterNames = makeImmutableList("region");
80
81 private Match(final Region pRegion) {
82 this.fRegion = pRegion;
83 }
84
85 @Override
86 public Object get(final String parameterName) {
87 if ("region".equals(parameterName)) return this.fRegion;
88 return null;
89 }
90
91 public Region getRegion() {
92 return this.fRegion;
93 }
94
95 @Override
96 public boolean set(final String parameterName, final Object newValue) {
97 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
98 if ("region".equals(parameterName) ) {
99 this.fRegion = (Region) newValue;
100 return true;
101 }
102 return false;
103 }
104
105 public void setRegion(final Region pRegion) {
106 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
107 this.fRegion = pRegion;
108 }
109
110 @Override
111 public String patternName() {
112 return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.noStateInRegion";
113 }
114
115 @Override
116 public List<String> parameterNames() {
117 return NoStateInRegion.Match.parameterNames;
118 }
119
120 @Override
121 public Object[] toArray() {
122 return new Object[]{fRegion};
123 }
124
125 @Override
126 public NoStateInRegion.Match toImmutable() {
127 return isMutable() ? newMatch(fRegion) : this;
128 }
129
130 @Override
131 public String prettyPrint() {
132 StringBuilder result = new StringBuilder();
133 result.append("\"region\"=" + prettyPrintValue(fRegion));
134 return result.toString();
135 }
136
137 @Override
138 public int hashCode() {
139 return Objects.hash(fRegion);
140 }
141
142 @Override
143 public boolean equals(final Object obj) {
144 if (this == obj)
145 return true;
146 if (obj == null) {
147 return false;
148 }
149 if ((obj instanceof NoStateInRegion.Match)) {
150 NoStateInRegion.Match other = (NoStateInRegion.Match) obj;
151 return Objects.equals(fRegion, other.fRegion);
152 } else {
153 // this should be infrequent
154 if (!(obj instanceof IPatternMatch)) {
155 return false;
156 }
157 IPatternMatch otherSig = (IPatternMatch) obj;
158 return Objects.equals(specification(), otherSig.specification()) && Arrays.deepEquals(toArray(), otherSig.toArray());
159 }
160 }
161
162 @Override
163 public NoStateInRegion specification() {
164 return NoStateInRegion.instance();
165 }
166
167 /**
168 * Returns an empty, mutable match.
169 * Fields of the mutable match can be filled to create a partial match, usable as matcher input.
170 *
171 * @return the empty match.
172 *
173 */
174 public static NoStateInRegion.Match newEmptyMatch() {
175 return new Mutable(null);
176 }
177
178 /**
179 * Returns a mutable (partial) match.
180 * Fields of the mutable match can be filled to create a partial match, usable as matcher input.
181 *
182 * @param pRegion the fixed value of pattern parameter region, or null if not bound.
183 * @return the new, mutable (partial) match object.
184 *
185 */
186 public static NoStateInRegion.Match newMutableMatch(final Region pRegion) {
187 return new Mutable(pRegion);
188 }
189
190 /**
191 * Returns a new (partial) match.
192 * This can be used e.g. to call the matcher with a partial match.
193 * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object.
194 * @param pRegion the fixed value of pattern parameter region, or null if not bound.
195 * @return the (partial) match object.
196 *
197 */
198 public static NoStateInRegion.Match newMatch(final Region pRegion) {
199 return new Immutable(pRegion);
200 }
201
202 private static final class Mutable extends NoStateInRegion.Match {
203 Mutable(final Region pRegion) {
204 super(pRegion);
205 }
206
207 @Override
208 public boolean isMutable() {
209 return true;
210 }
211 }
212
213 private static final class Immutable extends NoStateInRegion.Match {
214 Immutable(final Region pRegion) {
215 super(pRegion);
216 }
217
218 @Override
219 public boolean isMutable() {
220 return false;
221 }
222 }
223 }
224
225 /**
226 * Generated pattern matcher API of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.noStateInRegion pattern,
227 * providing pattern-specific query methods.
228 *
229 * <p>Use the pattern matcher on a given model via {@link #on(ViatraQueryEngine)},
230 * e.g. in conjunction with {@link ViatraQueryEngine#on(QueryScope)}.
231 *
232 * <p>Matches of the pattern will be represented as {@link Match}.
233 *
234 * <p>Original source:
235 * <code><pre>
236 * /////////
237 * // State vs Region
238 * /////////
239 *
240 * {@literal @}Constraint(severity="error", message="error", key = {region})
241 * pattern noStateInRegion(region: Region) {
242 * neg find StateInRegion(region,_);
243 * }
244 * </pre></code>
245 *
246 * @see Match
247 * @see NoStateInRegion
248 *
249 */
250 public static class Matcher extends BaseMatcher<NoStateInRegion.Match> {
251 /**
252 * Initializes the pattern matcher within an existing VIATRA Query engine.
253 * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned.
254 *
255 * @param engine the existing VIATRA Query engine in which this matcher will be created.
256 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
257 *
258 */
259 public static NoStateInRegion.Matcher on(final ViatraQueryEngine engine) {
260 // check if matcher already exists
261 Matcher matcher = engine.getExistingMatcher(querySpecification());
262 if (matcher == null) {
263 matcher = (Matcher)engine.getMatcher(querySpecification());
264 }
265 return matcher;
266 }
267
268 /**
269 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
270 * @return an initialized matcher
271 * @noreference This method is for internal matcher initialization by the framework, do not call it manually.
272 *
273 */
274 public static NoStateInRegion.Matcher create() {
275 return new Matcher();
276 }
277
278 private final static int POSITION_REGION = 0;
279
280 private final static Logger LOGGER = ViatraQueryLoggingUtil.getLogger(NoStateInRegion.Matcher.class);
281
282 /**
283 * Initializes the pattern matcher within an existing VIATRA Query engine.
284 * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned.
285 *
286 * @param engine the existing VIATRA Query engine in which this matcher will be created.
287 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
288 *
289 */
290 private Matcher() {
291 super(querySpecification());
292 }
293
294 /**
295 * Returns the set of all matches of the pattern that conform to the given fixed values of some parameters.
296 * @param pRegion the fixed value of pattern parameter region, or null if not bound.
297 * @return matches represented as a Match object.
298 *
299 */
300 public Collection<NoStateInRegion.Match> getAllMatches(final Region pRegion) {
301 return rawStreamAllMatches(new Object[]{pRegion}).collect(Collectors.toSet());
302 }
303
304 /**
305 * Returns a stream of all matches of the pattern that conform to the given fixed values of some parameters.
306 * </p>
307 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
308 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
309 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
310 * @param pRegion the fixed value of pattern parameter region, or null if not bound.
311 * @return a stream of matches represented as a Match object.
312 *
313 */
314 public Stream<NoStateInRegion.Match> streamAllMatches(final Region pRegion) {
315 return rawStreamAllMatches(new Object[]{pRegion});
316 }
317
318 /**
319 * Returns an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters.
320 * Neither determinism nor randomness of selection is guaranteed.
321 * @param pRegion the fixed value of pattern parameter region, or null if not bound.
322 * @return a match represented as a Match object, or null if no match is found.
323 *
324 */
325 public Optional<NoStateInRegion.Match> getOneArbitraryMatch(final Region pRegion) {
326 return rawGetOneArbitraryMatch(new Object[]{pRegion});
327 }
328
329 /**
330 * Indicates whether the given combination of specified pattern parameters constitute a valid pattern match,
331 * under any possible substitution of the unspecified parameters (if any).
332 * @param pRegion the fixed value of pattern parameter region, or null if not bound.
333 * @return true if the input is a valid (partial) match of the pattern.
334 *
335 */
336 public boolean hasMatch(final Region pRegion) {
337 return rawHasMatch(new Object[]{pRegion});
338 }
339
340 /**
341 * Returns the number of all matches of the pattern that conform to the given fixed values of some parameters.
342 * @param pRegion the fixed value of pattern parameter region, or null if not bound.
343 * @return the number of pattern matches found.
344 *
345 */
346 public int countMatches(final Region pRegion) {
347 return rawCountMatches(new Object[]{pRegion});
348 }
349
350 /**
351 * Executes the given processor on an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters.
352 * Neither determinism nor randomness of selection is guaranteed.
353 * @param pRegion the fixed value of pattern parameter region, or null if not bound.
354 * @param processor the action that will process the selected match.
355 * @return true if the pattern has at least one match with the given parameter values, false if the processor was not invoked
356 *
357 */
358 public boolean forOneArbitraryMatch(final Region pRegion, final Consumer<? super NoStateInRegion.Match> processor) {
359 return rawForOneArbitraryMatch(new Object[]{pRegion}, processor);
360 }
361
362 /**
363 * Returns a new (partial) match.
364 * This can be used e.g. to call the matcher with a partial match.
365 * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object.
366 * @param pRegion the fixed value of pattern parameter region, or null if not bound.
367 * @return the (partial) match object.
368 *
369 */
370 public NoStateInRegion.Match newMatch(final Region pRegion) {
371 return NoStateInRegion.Match.newMatch(pRegion);
372 }
373
374 /**
375 * Retrieve the set of values that occur in matches for region.
376 * @return the Set of all values or empty set if there are no matches
377 *
378 */
379 protected Stream<Region> rawStreamAllValuesOfregion(final Object[] parameters) {
380 return rawStreamAllValues(POSITION_REGION, parameters).map(Region.class::cast);
381 }
382
383 /**
384 * Retrieve the set of values that occur in matches for region.
385 * @return the Set of all values or empty set if there are no matches
386 *
387 */
388 public Set<Region> getAllValuesOfregion() {
389 return rawStreamAllValuesOfregion(emptyArray()).collect(Collectors.toSet());
390 }
391
392 /**
393 * Retrieve the set of values that occur in matches for region.
394 * @return the Set of all values or empty set if there are no matches
395 *
396 */
397 public Stream<Region> streamAllValuesOfregion() {
398 return rawStreamAllValuesOfregion(emptyArray());
399 }
400
401 @Override
402 protected NoStateInRegion.Match tupleToMatch(final Tuple t) {
403 try {
404 return NoStateInRegion.Match.newMatch((Region) t.get(POSITION_REGION));
405 } catch(ClassCastException e) {
406 LOGGER.error("Element(s) in tuple not properly typed!",e);
407 return null;
408 }
409 }
410
411 @Override
412 protected NoStateInRegion.Match arrayToMatch(final Object[] match) {
413 try {
414 return NoStateInRegion.Match.newMatch((Region) match[POSITION_REGION]);
415 } catch(ClassCastException e) {
416 LOGGER.error("Element(s) in array not properly typed!",e);
417 return null;
418 }
419 }
420
421 @Override
422 protected NoStateInRegion.Match arrayToMatchMutable(final Object[] match) {
423 try {
424 return NoStateInRegion.Match.newMutableMatch((Region) match[POSITION_REGION]);
425 } catch(ClassCastException e) {
426 LOGGER.error("Element(s) in array not properly typed!",e);
427 return null;
428 }
429 }
430
431 /**
432 * @return the singleton instance of the query specification of this pattern
433 * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded
434 *
435 */
436 public static IQuerySpecification<NoStateInRegion.Matcher> querySpecification() {
437 return NoStateInRegion.instance();
438 }
439 }
440
441 private NoStateInRegion() {
442 super(GeneratedPQuery.INSTANCE);
443 }
444
445 /**
446 * @return the singleton instance of the query specification
447 * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded
448 *
449 */
450 public static NoStateInRegion instance() {
451 try{
452 return LazyHolder.INSTANCE;
453 } catch (ExceptionInInitializerError err) {
454 throw processInitializerError(err);
455 }
456 }
457
458 @Override
459 protected NoStateInRegion.Matcher instantiate(final ViatraQueryEngine engine) {
460 return NoStateInRegion.Matcher.on(engine);
461 }
462
463 @Override
464 public NoStateInRegion.Matcher instantiate() {
465 return NoStateInRegion.Matcher.create();
466 }
467
468 @Override
469 public NoStateInRegion.Match newEmptyMatch() {
470 return NoStateInRegion.Match.newEmptyMatch();
471 }
472
473 @Override
474 public NoStateInRegion.Match newMatch(final Object... parameters) {
475 return NoStateInRegion.Match.newMatch((ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Region) parameters[0]);
476 }
477
478 /**
479 * Inner class allowing the singleton instance of {@link JvmGenericType: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.NoStateInRegion (visibility: PUBLIC, simpleName: NoStateInRegion, identifier: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.NoStateInRegion, deprecated: <unset>) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)} to be created
480 * <b>not</b> at the class load time of the outer class,
481 * but rather at the first call to {@link JvmGenericType: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.NoStateInRegion (visibility: PUBLIC, simpleName: NoStateInRegion, identifier: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.NoStateInRegion, deprecated: <unset>) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)#instance()}.
482 *
483 * <p> This workaround is required e.g. to support recursion.
484 *
485 */
486 private static class LazyHolder {
487 private final static NoStateInRegion INSTANCE = new NoStateInRegion();
488
489 /**
490 * Statically initializes the query specification <b>after</b> the field {@link #INSTANCE} is assigned.
491 * This initialization order is required to support indirect recursion.
492 *
493 * <p> The static initializer is defined using a helper field to work around limitations of the code generator.
494 *
495 */
496 private final static Object STATIC_INITIALIZER = ensureInitialized();
497
498 public static Object ensureInitialized() {
499 INSTANCE.ensureInitializedInternal();
500 return null;
501 }
502 }
503
504 private static class GeneratedPQuery extends BaseGeneratedEMFPQuery {
505 private final static NoStateInRegion.GeneratedPQuery INSTANCE = new GeneratedPQuery();
506
507 private final PParameter parameter_region = new PParameter("region", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Region", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "Region")), PParameterDirection.INOUT);
508
509 private final List<PParameter> parameters = Arrays.asList(parameter_region);
510
511 private GeneratedPQuery() {
512 super(PVisibility.PUBLIC);
513 }
514
515 @Override
516 public String getFullyQualifiedName() {
517 return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.noStateInRegion";
518 }
519
520 @Override
521 public List<String> getParameterNames() {
522 return Arrays.asList("region");
523 }
524
525 @Override
526 public List<PParameter> getParameters() {
527 return parameters;
528 }
529
530 @Override
531 public Set<PBody> doGetContainedBodies() {
532 setEvaluationHints(new QueryEvaluationHint(null, QueryEvaluationHint.BackendRequirement.UNSPECIFIED));
533 Set<PBody> bodies = new LinkedHashSet<>();
534 {
535 PBody body = new PBody(this);
536 PVariable var_region = body.getOrCreateVariableByName("region");
537 PVariable var___0_ = body.getOrCreateVariableByName("_<0>");
538 new TypeConstraint(body, Tuples.flatTupleOf(var_region), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Region")));
539 body.setSymbolicParameters(Arrays.<ExportedParameter>asList(
540 new ExportedParameter(body, var_region, parameter_region)
541 ));
542 // neg find StateInRegion(region,_)
543 new NegativePatternCall(body, Tuples.flatTupleOf(var_region, var___0_), StateInRegion.instance().getInternalQueryRepresentation());
544 bodies.add(body);
545 }
546 {
547 PAnnotation annotation = new PAnnotation("Constraint");
548 annotation.addAttribute("severity", "error");
549 annotation.addAttribute("message", "error");
550 annotation.addAttribute("key", Arrays.asList(new Object[] {
551 new ParameterReference("region")
552 }));
553 addAnnotation(annotation);
554 }
555 return bodies;
556 }
557 }
558}
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/NotSynchronizingStates.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/NotSynchronizingStates.java
new file mode 100644
index 00000000..b9a60ca9
--- /dev/null
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/NotSynchronizingStates.java
@@ -0,0 +1,554 @@
1/**
2 * Generated from platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduPatterns.vql
3 */
4package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries;
5
6import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization;
7import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.HasMultipleIncomingTrainsition;
8import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.HasMultipleOutgoingTrainsition;
9import java.util.Arrays;
10import java.util.Collection;
11import java.util.LinkedHashSet;
12import java.util.List;
13import java.util.Objects;
14import java.util.Optional;
15import java.util.Set;
16import java.util.function.Consumer;
17import java.util.stream.Collectors;
18import java.util.stream.Stream;
19import org.apache.log4j.Logger;
20import org.eclipse.emf.ecore.EClass;
21import org.eclipse.viatra.query.runtime.api.IPatternMatch;
22import org.eclipse.viatra.query.runtime.api.IQuerySpecification;
23import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine;
24import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFPQuery;
25import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFQuerySpecification;
26import org.eclipse.viatra.query.runtime.api.impl.BaseMatcher;
27import org.eclipse.viatra.query.runtime.api.impl.BasePatternMatch;
28import org.eclipse.viatra.query.runtime.emf.types.EClassTransitiveInstancesKey;
29import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint;
30import org.eclipse.viatra.query.runtime.matchers.psystem.PBody;
31import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable;
32import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.PAnnotation;
33import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.ParameterReference;
34import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExportedParameter;
35import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.NegativePatternCall;
36import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint;
37import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter;
38import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameterDirection;
39import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PVisibility;
40import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple;
41import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples;
42import org.eclipse.viatra.query.runtime.util.ViatraQueryLoggingUtil;
43
44/**
45 * A pattern-specific query specification that can instantiate Matcher in a type-safe way.
46 *
47 * <p>Original source:
48 * <code><pre>
49 * {@literal @}Constraint(severity="error", message="error", key = {s})
50 * pattern notSynchronizingStates(s : Synchronization) {
51 * neg find hasMultipleOutgoingTrainsition(s);
52 * neg find hasMultipleIncomingTrainsition(s);
53 * }
54 * </pre></code>
55 *
56 * @see Matcher
57 * @see Match
58 *
59 */
60@SuppressWarnings("all")
61public final class NotSynchronizingStates extends BaseGeneratedEMFQuerySpecification<NotSynchronizingStates.Matcher> {
62 /**
63 * Pattern-specific match representation of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.notSynchronizingStates pattern,
64 * to be used in conjunction with {@link Matcher}.
65 *
66 * <p>Class fields correspond to parameters of the pattern. Fields with value null are considered unassigned.
67 * Each instance is a (possibly partial) substitution of pattern parameters,
68 * usable to represent a match of the pattern in the result of a query,
69 * or to specify the bound (fixed) input parameters when issuing a query.
70 *
71 * @see Matcher
72 *
73 */
74 public static abstract class Match extends BasePatternMatch {
75 private Synchronization fS;
76
77 private static List<String> parameterNames = makeImmutableList("s");
78
79 private Match(final Synchronization pS) {
80 this.fS = pS;
81 }
82
83 @Override
84 public Object get(final String parameterName) {
85 if ("s".equals(parameterName)) return this.fS;
86 return null;
87 }
88
89 public Synchronization getS() {
90 return this.fS;
91 }
92
93 @Override
94 public boolean set(final String parameterName, final Object newValue) {
95 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
96 if ("s".equals(parameterName) ) {
97 this.fS = (Synchronization) newValue;
98 return true;
99 }
100 return false;
101 }
102
103 public void setS(final Synchronization pS) {
104 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
105 this.fS = pS;
106 }
107
108 @Override
109 public String patternName() {
110 return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.notSynchronizingStates";
111 }
112
113 @Override
114 public List<String> parameterNames() {
115 return NotSynchronizingStates.Match.parameterNames;
116 }
117
118 @Override
119 public Object[] toArray() {
120 return new Object[]{fS};
121 }
122
123 @Override
124 public NotSynchronizingStates.Match toImmutable() {
125 return isMutable() ? newMatch(fS) : this;
126 }
127
128 @Override
129 public String prettyPrint() {
130 StringBuilder result = new StringBuilder();
131 result.append("\"s\"=" + prettyPrintValue(fS));
132 return result.toString();
133 }
134
135 @Override
136 public int hashCode() {
137 return Objects.hash(fS);
138 }
139
140 @Override
141 public boolean equals(final Object obj) {
142 if (this == obj)
143 return true;
144 if (obj == null) {
145 return false;
146 }
147 if ((obj instanceof NotSynchronizingStates.Match)) {
148 NotSynchronizingStates.Match other = (NotSynchronizingStates.Match) obj;
149 return Objects.equals(fS, other.fS);
150 } else {
151 // this should be infrequent
152 if (!(obj instanceof IPatternMatch)) {
153 return false;
154 }
155 IPatternMatch otherSig = (IPatternMatch) obj;
156 return Objects.equals(specification(), otherSig.specification()) && Arrays.deepEquals(toArray(), otherSig.toArray());
157 }
158 }
159
160 @Override
161 public NotSynchronizingStates specification() {
162 return NotSynchronizingStates.instance();
163 }
164
165 /**
166 * Returns an empty, mutable match.
167 * Fields of the mutable match can be filled to create a partial match, usable as matcher input.
168 *
169 * @return the empty match.
170 *
171 */
172 public static NotSynchronizingStates.Match newEmptyMatch() {
173 return new Mutable(null);
174 }
175
176 /**
177 * Returns a mutable (partial) match.
178 * Fields of the mutable match can be filled to create a partial match, usable as matcher input.
179 *
180 * @param pS the fixed value of pattern parameter s, or null if not bound.
181 * @return the new, mutable (partial) match object.
182 *
183 */
184 public static NotSynchronizingStates.Match newMutableMatch(final Synchronization pS) {
185 return new Mutable(pS);
186 }
187
188 /**
189 * Returns a new (partial) match.
190 * This can be used e.g. to call the matcher with a partial match.
191 * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object.
192 * @param pS the fixed value of pattern parameter s, or null if not bound.
193 * @return the (partial) match object.
194 *
195 */
196 public static NotSynchronizingStates.Match newMatch(final Synchronization pS) {
197 return new Immutable(pS);
198 }
199
200 private static final class Mutable extends NotSynchronizingStates.Match {
201 Mutable(final Synchronization pS) {
202 super(pS);
203 }
204
205 @Override
206 public boolean isMutable() {
207 return true;
208 }
209 }
210
211 private static final class Immutable extends NotSynchronizingStates.Match {
212 Immutable(final Synchronization pS) {
213 super(pS);
214 }
215
216 @Override
217 public boolean isMutable() {
218 return false;
219 }
220 }
221 }
222
223 /**
224 * Generated pattern matcher API of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.notSynchronizingStates pattern,
225 * providing pattern-specific query methods.
226 *
227 * <p>Use the pattern matcher on a given model via {@link #on(ViatraQueryEngine)},
228 * e.g. in conjunction with {@link ViatraQueryEngine#on(QueryScope)}.
229 *
230 * <p>Matches of the pattern will be represented as {@link Match}.
231 *
232 * <p>Original source:
233 * <code><pre>
234 * {@literal @}Constraint(severity="error", message="error", key = {s})
235 * pattern notSynchronizingStates(s : Synchronization) {
236 * neg find hasMultipleOutgoingTrainsition(s);
237 * neg find hasMultipleIncomingTrainsition(s);
238 * }
239 * </pre></code>
240 *
241 * @see Match
242 * @see NotSynchronizingStates
243 *
244 */
245 public static class Matcher extends BaseMatcher<NotSynchronizingStates.Match> {
246 /**
247 * Initializes the pattern matcher within an existing VIATRA Query engine.
248 * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned.
249 *
250 * @param engine the existing VIATRA Query engine in which this matcher will be created.
251 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
252 *
253 */
254 public static NotSynchronizingStates.Matcher on(final ViatraQueryEngine engine) {
255 // check if matcher already exists
256 Matcher matcher = engine.getExistingMatcher(querySpecification());
257 if (matcher == null) {
258 matcher = (Matcher)engine.getMatcher(querySpecification());
259 }
260 return matcher;
261 }
262
263 /**
264 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
265 * @return an initialized matcher
266 * @noreference This method is for internal matcher initialization by the framework, do not call it manually.
267 *
268 */
269 public static NotSynchronizingStates.Matcher create() {
270 return new Matcher();
271 }
272
273 private final static int POSITION_S = 0;
274
275 private final static Logger LOGGER = ViatraQueryLoggingUtil.getLogger(NotSynchronizingStates.Matcher.class);
276
277 /**
278 * Initializes the pattern matcher within an existing VIATRA Query engine.
279 * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned.
280 *
281 * @param engine the existing VIATRA Query engine in which this matcher will be created.
282 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
283 *
284 */
285 private Matcher() {
286 super(querySpecification());
287 }
288
289 /**
290 * Returns the set of all matches of the pattern that conform to the given fixed values of some parameters.
291 * @param pS the fixed value of pattern parameter s, or null if not bound.
292 * @return matches represented as a Match object.
293 *
294 */
295 public Collection<NotSynchronizingStates.Match> getAllMatches(final Synchronization pS) {
296 return rawStreamAllMatches(new Object[]{pS}).collect(Collectors.toSet());
297 }
298
299 /**
300 * Returns a stream of all matches of the pattern that conform to the given fixed values of some parameters.
301 * </p>
302 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
303 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
304 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
305 * @param pS the fixed value of pattern parameter s, or null if not bound.
306 * @return a stream of matches represented as a Match object.
307 *
308 */
309 public Stream<NotSynchronizingStates.Match> streamAllMatches(final Synchronization pS) {
310 return rawStreamAllMatches(new Object[]{pS});
311 }
312
313 /**
314 * Returns an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters.
315 * Neither determinism nor randomness of selection is guaranteed.
316 * @param pS the fixed value of pattern parameter s, or null if not bound.
317 * @return a match represented as a Match object, or null if no match is found.
318 *
319 */
320 public Optional<NotSynchronizingStates.Match> getOneArbitraryMatch(final Synchronization pS) {
321 return rawGetOneArbitraryMatch(new Object[]{pS});
322 }
323
324 /**
325 * Indicates whether the given combination of specified pattern parameters constitute a valid pattern match,
326 * under any possible substitution of the unspecified parameters (if any).
327 * @param pS the fixed value of pattern parameter s, or null if not bound.
328 * @return true if the input is a valid (partial) match of the pattern.
329 *
330 */
331 public boolean hasMatch(final Synchronization pS) {
332 return rawHasMatch(new Object[]{pS});
333 }
334
335 /**
336 * Returns the number of all matches of the pattern that conform to the given fixed values of some parameters.
337 * @param pS the fixed value of pattern parameter s, or null if not bound.
338 * @return the number of pattern matches found.
339 *
340 */
341 public int countMatches(final Synchronization pS) {
342 return rawCountMatches(new Object[]{pS});
343 }
344
345 /**
346 * Executes the given processor on an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters.
347 * Neither determinism nor randomness of selection is guaranteed.
348 * @param pS the fixed value of pattern parameter s, or null if not bound.
349 * @param processor the action that will process the selected match.
350 * @return true if the pattern has at least one match with the given parameter values, false if the processor was not invoked
351 *
352 */
353 public boolean forOneArbitraryMatch(final Synchronization pS, final Consumer<? super NotSynchronizingStates.Match> processor) {
354 return rawForOneArbitraryMatch(new Object[]{pS}, processor);
355 }
356
357 /**
358 * Returns a new (partial) match.
359 * This can be used e.g. to call the matcher with a partial match.
360 * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object.
361 * @param pS the fixed value of pattern parameter s, or null if not bound.
362 * @return the (partial) match object.
363 *
364 */
365 public NotSynchronizingStates.Match newMatch(final Synchronization pS) {
366 return NotSynchronizingStates.Match.newMatch(pS);
367 }
368
369 /**
370 * Retrieve the set of values that occur in matches for s.
371 * @return the Set of all values or empty set if there are no matches
372 *
373 */
374 protected Stream<Synchronization> rawStreamAllValuesOfs(final Object[] parameters) {
375 return rawStreamAllValues(POSITION_S, parameters).map(Synchronization.class::cast);
376 }
377
378 /**
379 * Retrieve the set of values that occur in matches for s.
380 * @return the Set of all values or empty set if there are no matches
381 *
382 */
383 public Set<Synchronization> getAllValuesOfs() {
384 return rawStreamAllValuesOfs(emptyArray()).collect(Collectors.toSet());
385 }
386
387 /**
388 * Retrieve the set of values that occur in matches for s.
389 * @return the Set of all values or empty set if there are no matches
390 *
391 */
392 public Stream<Synchronization> streamAllValuesOfs() {
393 return rawStreamAllValuesOfs(emptyArray());
394 }
395
396 @Override
397 protected NotSynchronizingStates.Match tupleToMatch(final Tuple t) {
398 try {
399 return NotSynchronizingStates.Match.newMatch((Synchronization) t.get(POSITION_S));
400 } catch(ClassCastException e) {
401 LOGGER.error("Element(s) in tuple not properly typed!",e);
402 return null;
403 }
404 }
405
406 @Override
407 protected NotSynchronizingStates.Match arrayToMatch(final Object[] match) {
408 try {
409 return NotSynchronizingStates.Match.newMatch((Synchronization) match[POSITION_S]);
410 } catch(ClassCastException e) {
411 LOGGER.error("Element(s) in array not properly typed!",e);
412 return null;
413 }
414 }
415
416 @Override
417 protected NotSynchronizingStates.Match arrayToMatchMutable(final Object[] match) {
418 try {
419 return NotSynchronizingStates.Match.newMutableMatch((Synchronization) match[POSITION_S]);
420 } catch(ClassCastException e) {
421 LOGGER.error("Element(s) in array not properly typed!",e);
422 return null;
423 }
424 }
425
426 /**
427 * @return the singleton instance of the query specification of this pattern
428 * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded
429 *
430 */
431 public static IQuerySpecification<NotSynchronizingStates.Matcher> querySpecification() {
432 return NotSynchronizingStates.instance();
433 }
434 }
435
436 private NotSynchronizingStates() {
437 super(GeneratedPQuery.INSTANCE);
438 }
439
440 /**
441 * @return the singleton instance of the query specification
442 * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded
443 *
444 */
445 public static NotSynchronizingStates instance() {
446 try{
447 return LazyHolder.INSTANCE;
448 } catch (ExceptionInInitializerError err) {
449 throw processInitializerError(err);
450 }
451 }
452
453 @Override
454 protected NotSynchronizingStates.Matcher instantiate(final ViatraQueryEngine engine) {
455 return NotSynchronizingStates.Matcher.on(engine);
456 }
457
458 @Override
459 public NotSynchronizingStates.Matcher instantiate() {
460 return NotSynchronizingStates.Matcher.create();
461 }
462
463 @Override
464 public NotSynchronizingStates.Match newEmptyMatch() {
465 return NotSynchronizingStates.Match.newEmptyMatch();
466 }
467
468 @Override
469 public NotSynchronizingStates.Match newMatch(final Object... parameters) {
470 return NotSynchronizingStates.Match.newMatch((ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization) parameters[0]);
471 }
472
473 /**
474 * Inner class allowing the singleton instance of {@link JvmGenericType: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.NotSynchronizingStates (visibility: PUBLIC, simpleName: NotSynchronizingStates, identifier: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.NotSynchronizingStates, deprecated: <unset>) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)} to be created
475 * <b>not</b> at the class load time of the outer class,
476 * but rather at the first call to {@link JvmGenericType: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.NotSynchronizingStates (visibility: PUBLIC, simpleName: NotSynchronizingStates, identifier: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.NotSynchronizingStates, deprecated: <unset>) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)#instance()}.
477 *
478 * <p> This workaround is required e.g. to support recursion.
479 *
480 */
481 private static class LazyHolder {
482 private final static NotSynchronizingStates INSTANCE = new NotSynchronizingStates();
483
484 /**
485 * Statically initializes the query specification <b>after</b> the field {@link #INSTANCE} is assigned.
486 * This initialization order is required to support indirect recursion.
487 *
488 * <p> The static initializer is defined using a helper field to work around limitations of the code generator.
489 *
490 */
491 private final static Object STATIC_INITIALIZER = ensureInitialized();
492
493 public static Object ensureInitialized() {
494 INSTANCE.ensureInitializedInternal();
495 return null;
496 }
497 }
498
499 private static class GeneratedPQuery extends BaseGeneratedEMFPQuery {
500 private final static NotSynchronizingStates.GeneratedPQuery INSTANCE = new GeneratedPQuery();
501
502 private final PParameter parameter_s = new PParameter("s", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "Synchronization")), PParameterDirection.INOUT);
503
504 private final List<PParameter> parameters = Arrays.asList(parameter_s);
505
506 private GeneratedPQuery() {
507 super(PVisibility.PUBLIC);
508 }
509
510 @Override
511 public String getFullyQualifiedName() {
512 return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.notSynchronizingStates";
513 }
514
515 @Override
516 public List<String> getParameterNames() {
517 return Arrays.asList("s");
518 }
519
520 @Override
521 public List<PParameter> getParameters() {
522 return parameters;
523 }
524
525 @Override
526 public Set<PBody> doGetContainedBodies() {
527 setEvaluationHints(new QueryEvaluationHint(null, QueryEvaluationHint.BackendRequirement.UNSPECIFIED));
528 Set<PBody> bodies = new LinkedHashSet<>();
529 {
530 PBody body = new PBody(this);
531 PVariable var_s = body.getOrCreateVariableByName("s");
532 new TypeConstraint(body, Tuples.flatTupleOf(var_s), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Synchronization")));
533 body.setSymbolicParameters(Arrays.<ExportedParameter>asList(
534 new ExportedParameter(body, var_s, parameter_s)
535 ));
536 // neg find hasMultipleOutgoingTrainsition(s)
537 new NegativePatternCall(body, Tuples.flatTupleOf(var_s), HasMultipleOutgoingTrainsition.instance().getInternalQueryRepresentation());
538 // neg find hasMultipleIncomingTrainsition(s)
539 new NegativePatternCall(body, Tuples.flatTupleOf(var_s), HasMultipleIncomingTrainsition.instance().getInternalQueryRepresentation());
540 bodies.add(body);
541 }
542 {
543 PAnnotation annotation = new PAnnotation("Constraint");
544 annotation.addAttribute("severity", "error");
545 annotation.addAttribute("message", "error");
546 annotation.addAttribute("key", Arrays.asList(new Object[] {
547 new ParameterReference("s")
548 }));
549 addAnnotation(annotation);
550 }
551 return bodies;
552 }
553 }
554}
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/OutgoingFromExit.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/OutgoingFromExit.java
new file mode 100644
index 00000000..10f0e056
--- /dev/null
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/OutgoingFromExit.java
@@ -0,0 +1,715 @@
1/**
2 * Generated from platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduPatterns.vql
3 */
4package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries;
5
6import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Exit;
7import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition;
8import java.util.Arrays;
9import java.util.Collection;
10import java.util.LinkedHashSet;
11import java.util.List;
12import java.util.Objects;
13import java.util.Optional;
14import java.util.Set;
15import java.util.function.Consumer;
16import java.util.stream.Collectors;
17import java.util.stream.Stream;
18import org.apache.log4j.Logger;
19import org.eclipse.emf.ecore.EClass;
20import org.eclipse.viatra.query.runtime.api.IPatternMatch;
21import org.eclipse.viatra.query.runtime.api.IQuerySpecification;
22import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine;
23import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFPQuery;
24import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFQuerySpecification;
25import org.eclipse.viatra.query.runtime.api.impl.BaseMatcher;
26import org.eclipse.viatra.query.runtime.api.impl.BasePatternMatch;
27import org.eclipse.viatra.query.runtime.emf.types.EClassTransitiveInstancesKey;
28import org.eclipse.viatra.query.runtime.emf.types.EStructuralFeatureInstancesKey;
29import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint;
30import org.eclipse.viatra.query.runtime.matchers.psystem.PBody;
31import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable;
32import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.PAnnotation;
33import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.ParameterReference;
34import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.Equality;
35import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExportedParameter;
36import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint;
37import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter;
38import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameterDirection;
39import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PVisibility;
40import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple;
41import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples;
42import org.eclipse.viatra.query.runtime.util.ViatraQueryLoggingUtil;
43
44/**
45 * A pattern-specific query specification that can instantiate Matcher in a type-safe way.
46 *
47 * <p>Original source:
48 * <code><pre>
49 * /////////
50 * // Exit
51 * /////////
52 *
53 * {@literal @}Constraint(severity="error", message="error", key = {e})
54 * pattern outgoingFromExit(t : Transition, e : Exit) {
55 * Exit.outgoingTransitions(e,t);
56 * }
57 * </pre></code>
58 *
59 * @see Matcher
60 * @see Match
61 *
62 */
63@SuppressWarnings("all")
64public final class OutgoingFromExit extends BaseGeneratedEMFQuerySpecification<OutgoingFromExit.Matcher> {
65 /**
66 * Pattern-specific match representation of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.outgoingFromExit pattern,
67 * to be used in conjunction with {@link Matcher}.
68 *
69 * <p>Class fields correspond to parameters of the pattern. Fields with value null are considered unassigned.
70 * Each instance is a (possibly partial) substitution of pattern parameters,
71 * usable to represent a match of the pattern in the result of a query,
72 * or to specify the bound (fixed) input parameters when issuing a query.
73 *
74 * @see Matcher
75 *
76 */
77 public static abstract class Match extends BasePatternMatch {
78 private Transition fT;
79
80 private Exit fE;
81
82 private static List<String> parameterNames = makeImmutableList("t", "e");
83
84 private Match(final Transition pT, final Exit pE) {
85 this.fT = pT;
86 this.fE = pE;
87 }
88
89 @Override
90 public Object get(final String parameterName) {
91 if ("t".equals(parameterName)) return this.fT;
92 if ("e".equals(parameterName)) return this.fE;
93 return null;
94 }
95
96 public Transition getT() {
97 return this.fT;
98 }
99
100 public Exit getE() {
101 return this.fE;
102 }
103
104 @Override
105 public boolean set(final String parameterName, final Object newValue) {
106 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
107 if ("t".equals(parameterName) ) {
108 this.fT = (Transition) newValue;
109 return true;
110 }
111 if ("e".equals(parameterName) ) {
112 this.fE = (Exit) newValue;
113 return true;
114 }
115 return false;
116 }
117
118 public void setT(final Transition pT) {
119 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
120 this.fT = pT;
121 }
122
123 public void setE(final Exit pE) {
124 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
125 this.fE = pE;
126 }
127
128 @Override
129 public String patternName() {
130 return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.outgoingFromExit";
131 }
132
133 @Override
134 public List<String> parameterNames() {
135 return OutgoingFromExit.Match.parameterNames;
136 }
137
138 @Override
139 public Object[] toArray() {
140 return new Object[]{fT, fE};
141 }
142
143 @Override
144 public OutgoingFromExit.Match toImmutable() {
145 return isMutable() ? newMatch(fT, fE) : this;
146 }
147
148 @Override
149 public String prettyPrint() {
150 StringBuilder result = new StringBuilder();
151 result.append("\"t\"=" + prettyPrintValue(fT) + ", ");
152 result.append("\"e\"=" + prettyPrintValue(fE));
153 return result.toString();
154 }
155
156 @Override
157 public int hashCode() {
158 return Objects.hash(fT, fE);
159 }
160
161 @Override
162 public boolean equals(final Object obj) {
163 if (this == obj)
164 return true;
165 if (obj == null) {
166 return false;
167 }
168 if ((obj instanceof OutgoingFromExit.Match)) {
169 OutgoingFromExit.Match other = (OutgoingFromExit.Match) obj;
170 return Objects.equals(fT, other.fT) && Objects.equals(fE, other.fE);
171 } else {
172 // this should be infrequent
173 if (!(obj instanceof IPatternMatch)) {
174 return false;
175 }
176 IPatternMatch otherSig = (IPatternMatch) obj;
177 return Objects.equals(specification(), otherSig.specification()) && Arrays.deepEquals(toArray(), otherSig.toArray());
178 }
179 }
180
181 @Override
182 public OutgoingFromExit specification() {
183 return OutgoingFromExit.instance();
184 }
185
186 /**
187 * Returns an empty, mutable match.
188 * Fields of the mutable match can be filled to create a partial match, usable as matcher input.
189 *
190 * @return the empty match.
191 *
192 */
193 public static OutgoingFromExit.Match newEmptyMatch() {
194 return new Mutable(null, null);
195 }
196
197 /**
198 * Returns a mutable (partial) match.
199 * Fields of the mutable match can be filled to create a partial match, usable as matcher input.
200 *
201 * @param pT the fixed value of pattern parameter t, or null if not bound.
202 * @param pE the fixed value of pattern parameter e, or null if not bound.
203 * @return the new, mutable (partial) match object.
204 *
205 */
206 public static OutgoingFromExit.Match newMutableMatch(final Transition pT, final Exit pE) {
207 return new Mutable(pT, pE);
208 }
209
210 /**
211 * Returns a new (partial) match.
212 * This can be used e.g. to call the matcher with a partial match.
213 * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object.
214 * @param pT the fixed value of pattern parameter t, or null if not bound.
215 * @param pE the fixed value of pattern parameter e, or null if not bound.
216 * @return the (partial) match object.
217 *
218 */
219 public static OutgoingFromExit.Match newMatch(final Transition pT, final Exit pE) {
220 return new Immutable(pT, pE);
221 }
222
223 private static final class Mutable extends OutgoingFromExit.Match {
224 Mutable(final Transition pT, final Exit pE) {
225 super(pT, pE);
226 }
227
228 @Override
229 public boolean isMutable() {
230 return true;
231 }
232 }
233
234 private static final class Immutable extends OutgoingFromExit.Match {
235 Immutable(final Transition pT, final Exit pE) {
236 super(pT, pE);
237 }
238
239 @Override
240 public boolean isMutable() {
241 return false;
242 }
243 }
244 }
245
246 /**
247 * Generated pattern matcher API of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.outgoingFromExit pattern,
248 * providing pattern-specific query methods.
249 *
250 * <p>Use the pattern matcher on a given model via {@link #on(ViatraQueryEngine)},
251 * e.g. in conjunction with {@link ViatraQueryEngine#on(QueryScope)}.
252 *
253 * <p>Matches of the pattern will be represented as {@link Match}.
254 *
255 * <p>Original source:
256 * <code><pre>
257 * /////////
258 * // Exit
259 * /////////
260 *
261 * {@literal @}Constraint(severity="error", message="error", key = {e})
262 * pattern outgoingFromExit(t : Transition, e : Exit) {
263 * Exit.outgoingTransitions(e,t);
264 * }
265 * </pre></code>
266 *
267 * @see Match
268 * @see OutgoingFromExit
269 *
270 */
271 public static class Matcher extends BaseMatcher<OutgoingFromExit.Match> {
272 /**
273 * Initializes the pattern matcher within an existing VIATRA Query engine.
274 * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned.
275 *
276 * @param engine the existing VIATRA Query engine in which this matcher will be created.
277 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
278 *
279 */
280 public static OutgoingFromExit.Matcher on(final ViatraQueryEngine engine) {
281 // check if matcher already exists
282 Matcher matcher = engine.getExistingMatcher(querySpecification());
283 if (matcher == null) {
284 matcher = (Matcher)engine.getMatcher(querySpecification());
285 }
286 return matcher;
287 }
288
289 /**
290 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
291 * @return an initialized matcher
292 * @noreference This method is for internal matcher initialization by the framework, do not call it manually.
293 *
294 */
295 public static OutgoingFromExit.Matcher create() {
296 return new Matcher();
297 }
298
299 private final static int POSITION_T = 0;
300
301 private final static int POSITION_E = 1;
302
303 private final static Logger LOGGER = ViatraQueryLoggingUtil.getLogger(OutgoingFromExit.Matcher.class);
304
305 /**
306 * Initializes the pattern matcher within an existing VIATRA Query engine.
307 * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned.
308 *
309 * @param engine the existing VIATRA Query engine in which this matcher will be created.
310 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
311 *
312 */
313 private Matcher() {
314 super(querySpecification());
315 }
316
317 /**
318 * Returns the set of all matches of the pattern that conform to the given fixed values of some parameters.
319 * @param pT the fixed value of pattern parameter t, or null if not bound.
320 * @param pE the fixed value of pattern parameter e, or null if not bound.
321 * @return matches represented as a Match object.
322 *
323 */
324 public Collection<OutgoingFromExit.Match> getAllMatches(final Transition pT, final Exit pE) {
325 return rawStreamAllMatches(new Object[]{pT, pE}).collect(Collectors.toSet());
326 }
327
328 /**
329 * Returns a stream of all matches of the pattern that conform to the given fixed values of some parameters.
330 * </p>
331 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
332 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
333 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
334 * @param pT the fixed value of pattern parameter t, or null if not bound.
335 * @param pE the fixed value of pattern parameter e, or null if not bound.
336 * @return a stream of matches represented as a Match object.
337 *
338 */
339 public Stream<OutgoingFromExit.Match> streamAllMatches(final Transition pT, final Exit pE) {
340 return rawStreamAllMatches(new Object[]{pT, pE});
341 }
342
343 /**
344 * Returns an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters.
345 * Neither determinism nor randomness of selection is guaranteed.
346 * @param pT the fixed value of pattern parameter t, or null if not bound.
347 * @param pE the fixed value of pattern parameter e, or null if not bound.
348 * @return a match represented as a Match object, or null if no match is found.
349 *
350 */
351 public Optional<OutgoingFromExit.Match> getOneArbitraryMatch(final Transition pT, final Exit pE) {
352 return rawGetOneArbitraryMatch(new Object[]{pT, pE});
353 }
354
355 /**
356 * Indicates whether the given combination of specified pattern parameters constitute a valid pattern match,
357 * under any possible substitution of the unspecified parameters (if any).
358 * @param pT the fixed value of pattern parameter t, or null if not bound.
359 * @param pE the fixed value of pattern parameter e, or null if not bound.
360 * @return true if the input is a valid (partial) match of the pattern.
361 *
362 */
363 public boolean hasMatch(final Transition pT, final Exit pE) {
364 return rawHasMatch(new Object[]{pT, pE});
365 }
366
367 /**
368 * Returns the number of all matches of the pattern that conform to the given fixed values of some parameters.
369 * @param pT the fixed value of pattern parameter t, or null if not bound.
370 * @param pE the fixed value of pattern parameter e, or null if not bound.
371 * @return the number of pattern matches found.
372 *
373 */
374 public int countMatches(final Transition pT, final Exit pE) {
375 return rawCountMatches(new Object[]{pT, pE});
376 }
377
378 /**
379 * Executes the given processor on an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters.
380 * Neither determinism nor randomness of selection is guaranteed.
381 * @param pT the fixed value of pattern parameter t, or null if not bound.
382 * @param pE the fixed value of pattern parameter e, or null if not bound.
383 * @param processor the action that will process the selected match.
384 * @return true if the pattern has at least one match with the given parameter values, false if the processor was not invoked
385 *
386 */
387 public boolean forOneArbitraryMatch(final Transition pT, final Exit pE, final Consumer<? super OutgoingFromExit.Match> processor) {
388 return rawForOneArbitraryMatch(new Object[]{pT, pE}, processor);
389 }
390
391 /**
392 * Returns a new (partial) match.
393 * This can be used e.g. to call the matcher with a partial match.
394 * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object.
395 * @param pT the fixed value of pattern parameter t, or null if not bound.
396 * @param pE the fixed value of pattern parameter e, or null if not bound.
397 * @return the (partial) match object.
398 *
399 */
400 public OutgoingFromExit.Match newMatch(final Transition pT, final Exit pE) {
401 return OutgoingFromExit.Match.newMatch(pT, pE);
402 }
403
404 /**
405 * Retrieve the set of values that occur in matches for t.
406 * @return the Set of all values or empty set if there are no matches
407 *
408 */
409 protected Stream<Transition> rawStreamAllValuesOft(final Object[] parameters) {
410 return rawStreamAllValues(POSITION_T, parameters).map(Transition.class::cast);
411 }
412
413 /**
414 * Retrieve the set of values that occur in matches for t.
415 * @return the Set of all values or empty set if there are no matches
416 *
417 */
418 public Set<Transition> getAllValuesOft() {
419 return rawStreamAllValuesOft(emptyArray()).collect(Collectors.toSet());
420 }
421
422 /**
423 * Retrieve the set of values that occur in matches for t.
424 * @return the Set of all values or empty set if there are no matches
425 *
426 */
427 public Stream<Transition> streamAllValuesOft() {
428 return rawStreamAllValuesOft(emptyArray());
429 }
430
431 /**
432 * Retrieve the set of values that occur in matches for t.
433 * </p>
434 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
435 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
436 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
437 *
438 * @return the Stream of all values or empty set if there are no matches
439 *
440 */
441 public Stream<Transition> streamAllValuesOft(final OutgoingFromExit.Match partialMatch) {
442 return rawStreamAllValuesOft(partialMatch.toArray());
443 }
444
445 /**
446 * Retrieve the set of values that occur in matches for t.
447 * </p>
448 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
449 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
450 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
451 *
452 * @return the Stream of all values or empty set if there are no matches
453 *
454 */
455 public Stream<Transition> streamAllValuesOft(final Exit pE) {
456 return rawStreamAllValuesOft(new Object[]{null, pE});
457 }
458
459 /**
460 * Retrieve the set of values that occur in matches for t.
461 * @return the Set of all values or empty set if there are no matches
462 *
463 */
464 public Set<Transition> getAllValuesOft(final OutgoingFromExit.Match partialMatch) {
465 return rawStreamAllValuesOft(partialMatch.toArray()).collect(Collectors.toSet());
466 }
467
468 /**
469 * Retrieve the set of values that occur in matches for t.
470 * @return the Set of all values or empty set if there are no matches
471 *
472 */
473 public Set<Transition> getAllValuesOft(final Exit pE) {
474 return rawStreamAllValuesOft(new Object[]{null, pE}).collect(Collectors.toSet());
475 }
476
477 /**
478 * Retrieve the set of values that occur in matches for e.
479 * @return the Set of all values or empty set if there are no matches
480 *
481 */
482 protected Stream<Exit> rawStreamAllValuesOfe(final Object[] parameters) {
483 return rawStreamAllValues(POSITION_E, parameters).map(Exit.class::cast);
484 }
485
486 /**
487 * Retrieve the set of values that occur in matches for e.
488 * @return the Set of all values or empty set if there are no matches
489 *
490 */
491 public Set<Exit> getAllValuesOfe() {
492 return rawStreamAllValuesOfe(emptyArray()).collect(Collectors.toSet());
493 }
494
495 /**
496 * Retrieve the set of values that occur in matches for e.
497 * @return the Set of all values or empty set if there are no matches
498 *
499 */
500 public Stream<Exit> streamAllValuesOfe() {
501 return rawStreamAllValuesOfe(emptyArray());
502 }
503
504 /**
505 * Retrieve the set of values that occur in matches for e.
506 * </p>
507 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
508 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
509 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
510 *
511 * @return the Stream of all values or empty set if there are no matches
512 *
513 */
514 public Stream<Exit> streamAllValuesOfe(final OutgoingFromExit.Match partialMatch) {
515 return rawStreamAllValuesOfe(partialMatch.toArray());
516 }
517
518 /**
519 * Retrieve the set of values that occur in matches for e.
520 * </p>
521 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
522 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
523 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
524 *
525 * @return the Stream of all values or empty set if there are no matches
526 *
527 */
528 public Stream<Exit> streamAllValuesOfe(final Transition pT) {
529 return rawStreamAllValuesOfe(new Object[]{pT, null});
530 }
531
532 /**
533 * Retrieve the set of values that occur in matches for e.
534 * @return the Set of all values or empty set if there are no matches
535 *
536 */
537 public Set<Exit> getAllValuesOfe(final OutgoingFromExit.Match partialMatch) {
538 return rawStreamAllValuesOfe(partialMatch.toArray()).collect(Collectors.toSet());
539 }
540
541 /**
542 * Retrieve the set of values that occur in matches for e.
543 * @return the Set of all values or empty set if there are no matches
544 *
545 */
546 public Set<Exit> getAllValuesOfe(final Transition pT) {
547 return rawStreamAllValuesOfe(new Object[]{pT, null}).collect(Collectors.toSet());
548 }
549
550 @Override
551 protected OutgoingFromExit.Match tupleToMatch(final Tuple t) {
552 try {
553 return OutgoingFromExit.Match.newMatch((Transition) t.get(POSITION_T), (Exit) t.get(POSITION_E));
554 } catch(ClassCastException e) {
555 LOGGER.error("Element(s) in tuple not properly typed!",e);
556 return null;
557 }
558 }
559
560 @Override
561 protected OutgoingFromExit.Match arrayToMatch(final Object[] match) {
562 try {
563 return OutgoingFromExit.Match.newMatch((Transition) match[POSITION_T], (Exit) match[POSITION_E]);
564 } catch(ClassCastException e) {
565 LOGGER.error("Element(s) in array not properly typed!",e);
566 return null;
567 }
568 }
569
570 @Override
571 protected OutgoingFromExit.Match arrayToMatchMutable(final Object[] match) {
572 try {
573 return OutgoingFromExit.Match.newMutableMatch((Transition) match[POSITION_T], (Exit) match[POSITION_E]);
574 } catch(ClassCastException e) {
575 LOGGER.error("Element(s) in array not properly typed!",e);
576 return null;
577 }
578 }
579
580 /**
581 * @return the singleton instance of the query specification of this pattern
582 * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded
583 *
584 */
585 public static IQuerySpecification<OutgoingFromExit.Matcher> querySpecification() {
586 return OutgoingFromExit.instance();
587 }
588 }
589
590 private OutgoingFromExit() {
591 super(GeneratedPQuery.INSTANCE);
592 }
593
594 /**
595 * @return the singleton instance of the query specification
596 * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded
597 *
598 */
599 public static OutgoingFromExit instance() {
600 try{
601 return LazyHolder.INSTANCE;
602 } catch (ExceptionInInitializerError err) {
603 throw processInitializerError(err);
604 }
605 }
606
607 @Override
608 protected OutgoingFromExit.Matcher instantiate(final ViatraQueryEngine engine) {
609 return OutgoingFromExit.Matcher.on(engine);
610 }
611
612 @Override
613 public OutgoingFromExit.Matcher instantiate() {
614 return OutgoingFromExit.Matcher.create();
615 }
616
617 @Override
618 public OutgoingFromExit.Match newEmptyMatch() {
619 return OutgoingFromExit.Match.newEmptyMatch();
620 }
621
622 @Override
623 public OutgoingFromExit.Match newMatch(final Object... parameters) {
624 return OutgoingFromExit.Match.newMatch((ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition) parameters[0], (ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Exit) parameters[1]);
625 }
626
627 /**
628 * Inner class allowing the singleton instance of {@link JvmGenericType: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.OutgoingFromExit (visibility: PUBLIC, simpleName: OutgoingFromExit, identifier: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.OutgoingFromExit, deprecated: <unset>) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)} to be created
629 * <b>not</b> at the class load time of the outer class,
630 * but rather at the first call to {@link JvmGenericType: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.OutgoingFromExit (visibility: PUBLIC, simpleName: OutgoingFromExit, identifier: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.OutgoingFromExit, deprecated: <unset>) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)#instance()}.
631 *
632 * <p> This workaround is required e.g. to support recursion.
633 *
634 */
635 private static class LazyHolder {
636 private final static OutgoingFromExit INSTANCE = new OutgoingFromExit();
637
638 /**
639 * Statically initializes the query specification <b>after</b> the field {@link #INSTANCE} is assigned.
640 * This initialization order is required to support indirect recursion.
641 *
642 * <p> The static initializer is defined using a helper field to work around limitations of the code generator.
643 *
644 */
645 private final static Object STATIC_INITIALIZER = ensureInitialized();
646
647 public static Object ensureInitialized() {
648 INSTANCE.ensureInitializedInternal();
649 return null;
650 }
651 }
652
653 private static class GeneratedPQuery extends BaseGeneratedEMFPQuery {
654 private final static OutgoingFromExit.GeneratedPQuery INSTANCE = new GeneratedPQuery();
655
656 private final PParameter parameter_t = new PParameter("t", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "Transition")), PParameterDirection.INOUT);
657
658 private final PParameter parameter_e = new PParameter("e", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Exit", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "Exit")), PParameterDirection.INOUT);
659
660 private final List<PParameter> parameters = Arrays.asList(parameter_t, parameter_e);
661
662 private GeneratedPQuery() {
663 super(PVisibility.PUBLIC);
664 }
665
666 @Override
667 public String getFullyQualifiedName() {
668 return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.outgoingFromExit";
669 }
670
671 @Override
672 public List<String> getParameterNames() {
673 return Arrays.asList("t","e");
674 }
675
676 @Override
677 public List<PParameter> getParameters() {
678 return parameters;
679 }
680
681 @Override
682 public Set<PBody> doGetContainedBodies() {
683 setEvaluationHints(new QueryEvaluationHint(null, QueryEvaluationHint.BackendRequirement.UNSPECIFIED));
684 Set<PBody> bodies = new LinkedHashSet<>();
685 {
686 PBody body = new PBody(this);
687 PVariable var_t = body.getOrCreateVariableByName("t");
688 PVariable var_e = body.getOrCreateVariableByName("e");
689 new TypeConstraint(body, Tuples.flatTupleOf(var_t), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Transition")));
690 new TypeConstraint(body, Tuples.flatTupleOf(var_e), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Exit")));
691 body.setSymbolicParameters(Arrays.<ExportedParameter>asList(
692 new ExportedParameter(body, var_t, parameter_t),
693 new ExportedParameter(body, var_e, parameter_e)
694 ));
695 // Exit.outgoingTransitions(e,t)
696 new TypeConstraint(body, Tuples.flatTupleOf(var_e), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Exit")));
697 PVariable var__virtual_0_ = body.getOrCreateVariableByName(".virtual{0}");
698 new TypeConstraint(body, Tuples.flatTupleOf(var_e, var__virtual_0_), new EStructuralFeatureInstancesKey(getFeatureLiteral("YakinduMetamodel", "Vertex", "outgoingTransitions")));
699 new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_0_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Transition")));
700 new Equality(body, var__virtual_0_, var_t);
701 bodies.add(body);
702 }
703 {
704 PAnnotation annotation = new PAnnotation("Constraint");
705 annotation.addAttribute("severity", "error");
706 annotation.addAttribute("message", "error");
707 annotation.addAttribute("key", Arrays.asList(new Object[] {
708 new ParameterReference("e")
709 }));
710 addAnnotation(annotation);
711 }
712 return bodies;
713 }
714 }
715}
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/OutgoingFromFinal.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/OutgoingFromFinal.java
new file mode 100644
index 00000000..fbac352b
--- /dev/null
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/OutgoingFromFinal.java
@@ -0,0 +1,715 @@
1/**
2 * Generated from platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduPatterns.vql
3 */
4package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries;
5
6import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.FinalState;
7import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition;
8import java.util.Arrays;
9import java.util.Collection;
10import java.util.LinkedHashSet;
11import java.util.List;
12import java.util.Objects;
13import java.util.Optional;
14import java.util.Set;
15import java.util.function.Consumer;
16import java.util.stream.Collectors;
17import java.util.stream.Stream;
18import org.apache.log4j.Logger;
19import org.eclipse.emf.ecore.EClass;
20import org.eclipse.viatra.query.runtime.api.IPatternMatch;
21import org.eclipse.viatra.query.runtime.api.IQuerySpecification;
22import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine;
23import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFPQuery;
24import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFQuerySpecification;
25import org.eclipse.viatra.query.runtime.api.impl.BaseMatcher;
26import org.eclipse.viatra.query.runtime.api.impl.BasePatternMatch;
27import org.eclipse.viatra.query.runtime.emf.types.EClassTransitiveInstancesKey;
28import org.eclipse.viatra.query.runtime.emf.types.EStructuralFeatureInstancesKey;
29import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint;
30import org.eclipse.viatra.query.runtime.matchers.psystem.PBody;
31import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable;
32import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.PAnnotation;
33import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.ParameterReference;
34import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.Equality;
35import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExportedParameter;
36import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint;
37import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter;
38import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameterDirection;
39import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PVisibility;
40import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple;
41import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples;
42import org.eclipse.viatra.query.runtime.util.ViatraQueryLoggingUtil;
43
44/**
45 * A pattern-specific query specification that can instantiate Matcher in a type-safe way.
46 *
47 * <p>Original source:
48 * <code><pre>
49 * /////////
50 * // Final
51 * /////////
52 *
53 * {@literal @}Constraint(severity="error", message="error", key = {f})
54 * pattern outgoingFromFinal(t : Transition, f : FinalState) {
55 * FinalState.outgoingTransitions(f,t);
56 * }
57 * </pre></code>
58 *
59 * @see Matcher
60 * @see Match
61 *
62 */
63@SuppressWarnings("all")
64public final class OutgoingFromFinal extends BaseGeneratedEMFQuerySpecification<OutgoingFromFinal.Matcher> {
65 /**
66 * Pattern-specific match representation of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.outgoingFromFinal pattern,
67 * to be used in conjunction with {@link Matcher}.
68 *
69 * <p>Class fields correspond to parameters of the pattern. Fields with value null are considered unassigned.
70 * Each instance is a (possibly partial) substitution of pattern parameters,
71 * usable to represent a match of the pattern in the result of a query,
72 * or to specify the bound (fixed) input parameters when issuing a query.
73 *
74 * @see Matcher
75 *
76 */
77 public static abstract class Match extends BasePatternMatch {
78 private Transition fT;
79
80 private FinalState fF;
81
82 private static List<String> parameterNames = makeImmutableList("t", "f");
83
84 private Match(final Transition pT, final FinalState pF) {
85 this.fT = pT;
86 this.fF = pF;
87 }
88
89 @Override
90 public Object get(final String parameterName) {
91 if ("t".equals(parameterName)) return this.fT;
92 if ("f".equals(parameterName)) return this.fF;
93 return null;
94 }
95
96 public Transition getT() {
97 return this.fT;
98 }
99
100 public FinalState getF() {
101 return this.fF;
102 }
103
104 @Override
105 public boolean set(final String parameterName, final Object newValue) {
106 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
107 if ("t".equals(parameterName) ) {
108 this.fT = (Transition) newValue;
109 return true;
110 }
111 if ("f".equals(parameterName) ) {
112 this.fF = (FinalState) newValue;
113 return true;
114 }
115 return false;
116 }
117
118 public void setT(final Transition pT) {
119 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
120 this.fT = pT;
121 }
122
123 public void setF(final FinalState pF) {
124 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
125 this.fF = pF;
126 }
127
128 @Override
129 public String patternName() {
130 return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.outgoingFromFinal";
131 }
132
133 @Override
134 public List<String> parameterNames() {
135 return OutgoingFromFinal.Match.parameterNames;
136 }
137
138 @Override
139 public Object[] toArray() {
140 return new Object[]{fT, fF};
141 }
142
143 @Override
144 public OutgoingFromFinal.Match toImmutable() {
145 return isMutable() ? newMatch(fT, fF) : this;
146 }
147
148 @Override
149 public String prettyPrint() {
150 StringBuilder result = new StringBuilder();
151 result.append("\"t\"=" + prettyPrintValue(fT) + ", ");
152 result.append("\"f\"=" + prettyPrintValue(fF));
153 return result.toString();
154 }
155
156 @Override
157 public int hashCode() {
158 return Objects.hash(fT, fF);
159 }
160
161 @Override
162 public boolean equals(final Object obj) {
163 if (this == obj)
164 return true;
165 if (obj == null) {
166 return false;
167 }
168 if ((obj instanceof OutgoingFromFinal.Match)) {
169 OutgoingFromFinal.Match other = (OutgoingFromFinal.Match) obj;
170 return Objects.equals(fT, other.fT) && Objects.equals(fF, other.fF);
171 } else {
172 // this should be infrequent
173 if (!(obj instanceof IPatternMatch)) {
174 return false;
175 }
176 IPatternMatch otherSig = (IPatternMatch) obj;
177 return Objects.equals(specification(), otherSig.specification()) && Arrays.deepEquals(toArray(), otherSig.toArray());
178 }
179 }
180
181 @Override
182 public OutgoingFromFinal specification() {
183 return OutgoingFromFinal.instance();
184 }
185
186 /**
187 * Returns an empty, mutable match.
188 * Fields of the mutable match can be filled to create a partial match, usable as matcher input.
189 *
190 * @return the empty match.
191 *
192 */
193 public static OutgoingFromFinal.Match newEmptyMatch() {
194 return new Mutable(null, null);
195 }
196
197 /**
198 * Returns a mutable (partial) match.
199 * Fields of the mutable match can be filled to create a partial match, usable as matcher input.
200 *
201 * @param pT the fixed value of pattern parameter t, or null if not bound.
202 * @param pF the fixed value of pattern parameter f, or null if not bound.
203 * @return the new, mutable (partial) match object.
204 *
205 */
206 public static OutgoingFromFinal.Match newMutableMatch(final Transition pT, final FinalState pF) {
207 return new Mutable(pT, pF);
208 }
209
210 /**
211 * Returns a new (partial) match.
212 * This can be used e.g. to call the matcher with a partial match.
213 * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object.
214 * @param pT the fixed value of pattern parameter t, or null if not bound.
215 * @param pF the fixed value of pattern parameter f, or null if not bound.
216 * @return the (partial) match object.
217 *
218 */
219 public static OutgoingFromFinal.Match newMatch(final Transition pT, final FinalState pF) {
220 return new Immutable(pT, pF);
221 }
222
223 private static final class Mutable extends OutgoingFromFinal.Match {
224 Mutable(final Transition pT, final FinalState pF) {
225 super(pT, pF);
226 }
227
228 @Override
229 public boolean isMutable() {
230 return true;
231 }
232 }
233
234 private static final class Immutable extends OutgoingFromFinal.Match {
235 Immutable(final Transition pT, final FinalState pF) {
236 super(pT, pF);
237 }
238
239 @Override
240 public boolean isMutable() {
241 return false;
242 }
243 }
244 }
245
246 /**
247 * Generated pattern matcher API of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.outgoingFromFinal pattern,
248 * providing pattern-specific query methods.
249 *
250 * <p>Use the pattern matcher on a given model via {@link #on(ViatraQueryEngine)},
251 * e.g. in conjunction with {@link ViatraQueryEngine#on(QueryScope)}.
252 *
253 * <p>Matches of the pattern will be represented as {@link Match}.
254 *
255 * <p>Original source:
256 * <code><pre>
257 * /////////
258 * // Final
259 * /////////
260 *
261 * {@literal @}Constraint(severity="error", message="error", key = {f})
262 * pattern outgoingFromFinal(t : Transition, f : FinalState) {
263 * FinalState.outgoingTransitions(f,t);
264 * }
265 * </pre></code>
266 *
267 * @see Match
268 * @see OutgoingFromFinal
269 *
270 */
271 public static class Matcher extends BaseMatcher<OutgoingFromFinal.Match> {
272 /**
273 * Initializes the pattern matcher within an existing VIATRA Query engine.
274 * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned.
275 *
276 * @param engine the existing VIATRA Query engine in which this matcher will be created.
277 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
278 *
279 */
280 public static OutgoingFromFinal.Matcher on(final ViatraQueryEngine engine) {
281 // check if matcher already exists
282 Matcher matcher = engine.getExistingMatcher(querySpecification());
283 if (matcher == null) {
284 matcher = (Matcher)engine.getMatcher(querySpecification());
285 }
286 return matcher;
287 }
288
289 /**
290 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
291 * @return an initialized matcher
292 * @noreference This method is for internal matcher initialization by the framework, do not call it manually.
293 *
294 */
295 public static OutgoingFromFinal.Matcher create() {
296 return new Matcher();
297 }
298
299 private final static int POSITION_T = 0;
300
301 private final static int POSITION_F = 1;
302
303 private final static Logger LOGGER = ViatraQueryLoggingUtil.getLogger(OutgoingFromFinal.Matcher.class);
304
305 /**
306 * Initializes the pattern matcher within an existing VIATRA Query engine.
307 * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned.
308 *
309 * @param engine the existing VIATRA Query engine in which this matcher will be created.
310 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
311 *
312 */
313 private Matcher() {
314 super(querySpecification());
315 }
316
317 /**
318 * Returns the set of all matches of the pattern that conform to the given fixed values of some parameters.
319 * @param pT the fixed value of pattern parameter t, or null if not bound.
320 * @param pF the fixed value of pattern parameter f, or null if not bound.
321 * @return matches represented as a Match object.
322 *
323 */
324 public Collection<OutgoingFromFinal.Match> getAllMatches(final Transition pT, final FinalState pF) {
325 return rawStreamAllMatches(new Object[]{pT, pF}).collect(Collectors.toSet());
326 }
327
328 /**
329 * Returns a stream of all matches of the pattern that conform to the given fixed values of some parameters.
330 * </p>
331 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
332 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
333 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
334 * @param pT the fixed value of pattern parameter t, or null if not bound.
335 * @param pF the fixed value of pattern parameter f, or null if not bound.
336 * @return a stream of matches represented as a Match object.
337 *
338 */
339 public Stream<OutgoingFromFinal.Match> streamAllMatches(final Transition pT, final FinalState pF) {
340 return rawStreamAllMatches(new Object[]{pT, pF});
341 }
342
343 /**
344 * Returns an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters.
345 * Neither determinism nor randomness of selection is guaranteed.
346 * @param pT the fixed value of pattern parameter t, or null if not bound.
347 * @param pF the fixed value of pattern parameter f, or null if not bound.
348 * @return a match represented as a Match object, or null if no match is found.
349 *
350 */
351 public Optional<OutgoingFromFinal.Match> getOneArbitraryMatch(final Transition pT, final FinalState pF) {
352 return rawGetOneArbitraryMatch(new Object[]{pT, pF});
353 }
354
355 /**
356 * Indicates whether the given combination of specified pattern parameters constitute a valid pattern match,
357 * under any possible substitution of the unspecified parameters (if any).
358 * @param pT the fixed value of pattern parameter t, or null if not bound.
359 * @param pF the fixed value of pattern parameter f, or null if not bound.
360 * @return true if the input is a valid (partial) match of the pattern.
361 *
362 */
363 public boolean hasMatch(final Transition pT, final FinalState pF) {
364 return rawHasMatch(new Object[]{pT, pF});
365 }
366
367 /**
368 * Returns the number of all matches of the pattern that conform to the given fixed values of some parameters.
369 * @param pT the fixed value of pattern parameter t, or null if not bound.
370 * @param pF the fixed value of pattern parameter f, or null if not bound.
371 * @return the number of pattern matches found.
372 *
373 */
374 public int countMatches(final Transition pT, final FinalState pF) {
375 return rawCountMatches(new Object[]{pT, pF});
376 }
377
378 /**
379 * Executes the given processor on an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters.
380 * Neither determinism nor randomness of selection is guaranteed.
381 * @param pT the fixed value of pattern parameter t, or null if not bound.
382 * @param pF the fixed value of pattern parameter f, or null if not bound.
383 * @param processor the action that will process the selected match.
384 * @return true if the pattern has at least one match with the given parameter values, false if the processor was not invoked
385 *
386 */
387 public boolean forOneArbitraryMatch(final Transition pT, final FinalState pF, final Consumer<? super OutgoingFromFinal.Match> processor) {
388 return rawForOneArbitraryMatch(new Object[]{pT, pF}, processor);
389 }
390
391 /**
392 * Returns a new (partial) match.
393 * This can be used e.g. to call the matcher with a partial match.
394 * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object.
395 * @param pT the fixed value of pattern parameter t, or null if not bound.
396 * @param pF the fixed value of pattern parameter f, or null if not bound.
397 * @return the (partial) match object.
398 *
399 */
400 public OutgoingFromFinal.Match newMatch(final Transition pT, final FinalState pF) {
401 return OutgoingFromFinal.Match.newMatch(pT, pF);
402 }
403
404 /**
405 * Retrieve the set of values that occur in matches for t.
406 * @return the Set of all values or empty set if there are no matches
407 *
408 */
409 protected Stream<Transition> rawStreamAllValuesOft(final Object[] parameters) {
410 return rawStreamAllValues(POSITION_T, parameters).map(Transition.class::cast);
411 }
412
413 /**
414 * Retrieve the set of values that occur in matches for t.
415 * @return the Set of all values or empty set if there are no matches
416 *
417 */
418 public Set<Transition> getAllValuesOft() {
419 return rawStreamAllValuesOft(emptyArray()).collect(Collectors.toSet());
420 }
421
422 /**
423 * Retrieve the set of values that occur in matches for t.
424 * @return the Set of all values or empty set if there are no matches
425 *
426 */
427 public Stream<Transition> streamAllValuesOft() {
428 return rawStreamAllValuesOft(emptyArray());
429 }
430
431 /**
432 * Retrieve the set of values that occur in matches for t.
433 * </p>
434 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
435 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
436 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
437 *
438 * @return the Stream of all values or empty set if there are no matches
439 *
440 */
441 public Stream<Transition> streamAllValuesOft(final OutgoingFromFinal.Match partialMatch) {
442 return rawStreamAllValuesOft(partialMatch.toArray());
443 }
444
445 /**
446 * Retrieve the set of values that occur in matches for t.
447 * </p>
448 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
449 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
450 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
451 *
452 * @return the Stream of all values or empty set if there are no matches
453 *
454 */
455 public Stream<Transition> streamAllValuesOft(final FinalState pF) {
456 return rawStreamAllValuesOft(new Object[]{null, pF});
457 }
458
459 /**
460 * Retrieve the set of values that occur in matches for t.
461 * @return the Set of all values or empty set if there are no matches
462 *
463 */
464 public Set<Transition> getAllValuesOft(final OutgoingFromFinal.Match partialMatch) {
465 return rawStreamAllValuesOft(partialMatch.toArray()).collect(Collectors.toSet());
466 }
467
468 /**
469 * Retrieve the set of values that occur in matches for t.
470 * @return the Set of all values or empty set if there are no matches
471 *
472 */
473 public Set<Transition> getAllValuesOft(final FinalState pF) {
474 return rawStreamAllValuesOft(new Object[]{null, pF}).collect(Collectors.toSet());
475 }
476
477 /**
478 * Retrieve the set of values that occur in matches for f.
479 * @return the Set of all values or empty set if there are no matches
480 *
481 */
482 protected Stream<FinalState> rawStreamAllValuesOff(final Object[] parameters) {
483 return rawStreamAllValues(POSITION_F, parameters).map(FinalState.class::cast);
484 }
485
486 /**
487 * Retrieve the set of values that occur in matches for f.
488 * @return the Set of all values or empty set if there are no matches
489 *
490 */
491 public Set<FinalState> getAllValuesOff() {
492 return rawStreamAllValuesOff(emptyArray()).collect(Collectors.toSet());
493 }
494
495 /**
496 * Retrieve the set of values that occur in matches for f.
497 * @return the Set of all values or empty set if there are no matches
498 *
499 */
500 public Stream<FinalState> streamAllValuesOff() {
501 return rawStreamAllValuesOff(emptyArray());
502 }
503
504 /**
505 * Retrieve the set of values that occur in matches for f.
506 * </p>
507 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
508 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
509 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
510 *
511 * @return the Stream of all values or empty set if there are no matches
512 *
513 */
514 public Stream<FinalState> streamAllValuesOff(final OutgoingFromFinal.Match partialMatch) {
515 return rawStreamAllValuesOff(partialMatch.toArray());
516 }
517
518 /**
519 * Retrieve the set of values that occur in matches for f.
520 * </p>
521 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
522 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
523 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
524 *
525 * @return the Stream of all values or empty set if there are no matches
526 *
527 */
528 public Stream<FinalState> streamAllValuesOff(final Transition pT) {
529 return rawStreamAllValuesOff(new Object[]{pT, null});
530 }
531
532 /**
533 * Retrieve the set of values that occur in matches for f.
534 * @return the Set of all values or empty set if there are no matches
535 *
536 */
537 public Set<FinalState> getAllValuesOff(final OutgoingFromFinal.Match partialMatch) {
538 return rawStreamAllValuesOff(partialMatch.toArray()).collect(Collectors.toSet());
539 }
540
541 /**
542 * Retrieve the set of values that occur in matches for f.
543 * @return the Set of all values or empty set if there are no matches
544 *
545 */
546 public Set<FinalState> getAllValuesOff(final Transition pT) {
547 return rawStreamAllValuesOff(new Object[]{pT, null}).collect(Collectors.toSet());
548 }
549
550 @Override
551 protected OutgoingFromFinal.Match tupleToMatch(final Tuple t) {
552 try {
553 return OutgoingFromFinal.Match.newMatch((Transition) t.get(POSITION_T), (FinalState) t.get(POSITION_F));
554 } catch(ClassCastException e) {
555 LOGGER.error("Element(s) in tuple not properly typed!",e);
556 return null;
557 }
558 }
559
560 @Override
561 protected OutgoingFromFinal.Match arrayToMatch(final Object[] match) {
562 try {
563 return OutgoingFromFinal.Match.newMatch((Transition) match[POSITION_T], (FinalState) match[POSITION_F]);
564 } catch(ClassCastException e) {
565 LOGGER.error("Element(s) in array not properly typed!",e);
566 return null;
567 }
568 }
569
570 @Override
571 protected OutgoingFromFinal.Match arrayToMatchMutable(final Object[] match) {
572 try {
573 return OutgoingFromFinal.Match.newMutableMatch((Transition) match[POSITION_T], (FinalState) match[POSITION_F]);
574 } catch(ClassCastException e) {
575 LOGGER.error("Element(s) in array not properly typed!",e);
576 return null;
577 }
578 }
579
580 /**
581 * @return the singleton instance of the query specification of this pattern
582 * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded
583 *
584 */
585 public static IQuerySpecification<OutgoingFromFinal.Matcher> querySpecification() {
586 return OutgoingFromFinal.instance();
587 }
588 }
589
590 private OutgoingFromFinal() {
591 super(GeneratedPQuery.INSTANCE);
592 }
593
594 /**
595 * @return the singleton instance of the query specification
596 * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded
597 *
598 */
599 public static OutgoingFromFinal instance() {
600 try{
601 return LazyHolder.INSTANCE;
602 } catch (ExceptionInInitializerError err) {
603 throw processInitializerError(err);
604 }
605 }
606
607 @Override
608 protected OutgoingFromFinal.Matcher instantiate(final ViatraQueryEngine engine) {
609 return OutgoingFromFinal.Matcher.on(engine);
610 }
611
612 @Override
613 public OutgoingFromFinal.Matcher instantiate() {
614 return OutgoingFromFinal.Matcher.create();
615 }
616
617 @Override
618 public OutgoingFromFinal.Match newEmptyMatch() {
619 return OutgoingFromFinal.Match.newEmptyMatch();
620 }
621
622 @Override
623 public OutgoingFromFinal.Match newMatch(final Object... parameters) {
624 return OutgoingFromFinal.Match.newMatch((ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition) parameters[0], (ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.FinalState) parameters[1]);
625 }
626
627 /**
628 * Inner class allowing the singleton instance of {@link JvmGenericType: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.OutgoingFromFinal (visibility: PUBLIC, simpleName: OutgoingFromFinal, identifier: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.OutgoingFromFinal, deprecated: <unset>) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)} to be created
629 * <b>not</b> at the class load time of the outer class,
630 * but rather at the first call to {@link JvmGenericType: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.OutgoingFromFinal (visibility: PUBLIC, simpleName: OutgoingFromFinal, identifier: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.OutgoingFromFinal, deprecated: <unset>) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)#instance()}.
631 *
632 * <p> This workaround is required e.g. to support recursion.
633 *
634 */
635 private static class LazyHolder {
636 private final static OutgoingFromFinal INSTANCE = new OutgoingFromFinal();
637
638 /**
639 * Statically initializes the query specification <b>after</b> the field {@link #INSTANCE} is assigned.
640 * This initialization order is required to support indirect recursion.
641 *
642 * <p> The static initializer is defined using a helper field to work around limitations of the code generator.
643 *
644 */
645 private final static Object STATIC_INITIALIZER = ensureInitialized();
646
647 public static Object ensureInitialized() {
648 INSTANCE.ensureInitializedInternal();
649 return null;
650 }
651 }
652
653 private static class GeneratedPQuery extends BaseGeneratedEMFPQuery {
654 private final static OutgoingFromFinal.GeneratedPQuery INSTANCE = new GeneratedPQuery();
655
656 private final PParameter parameter_t = new PParameter("t", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "Transition")), PParameterDirection.INOUT);
657
658 private final PParameter parameter_f = new PParameter("f", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.FinalState", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "FinalState")), PParameterDirection.INOUT);
659
660 private final List<PParameter> parameters = Arrays.asList(parameter_t, parameter_f);
661
662 private GeneratedPQuery() {
663 super(PVisibility.PUBLIC);
664 }
665
666 @Override
667 public String getFullyQualifiedName() {
668 return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.outgoingFromFinal";
669 }
670
671 @Override
672 public List<String> getParameterNames() {
673 return Arrays.asList("t","f");
674 }
675
676 @Override
677 public List<PParameter> getParameters() {
678 return parameters;
679 }
680
681 @Override
682 public Set<PBody> doGetContainedBodies() {
683 setEvaluationHints(new QueryEvaluationHint(null, QueryEvaluationHint.BackendRequirement.UNSPECIFIED));
684 Set<PBody> bodies = new LinkedHashSet<>();
685 {
686 PBody body = new PBody(this);
687 PVariable var_t = body.getOrCreateVariableByName("t");
688 PVariable var_f = body.getOrCreateVariableByName("f");
689 new TypeConstraint(body, Tuples.flatTupleOf(var_t), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Transition")));
690 new TypeConstraint(body, Tuples.flatTupleOf(var_f), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "FinalState")));
691 body.setSymbolicParameters(Arrays.<ExportedParameter>asList(
692 new ExportedParameter(body, var_t, parameter_t),
693 new ExportedParameter(body, var_f, parameter_f)
694 ));
695 // FinalState.outgoingTransitions(f,t)
696 new TypeConstraint(body, Tuples.flatTupleOf(var_f), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "FinalState")));
697 PVariable var__virtual_0_ = body.getOrCreateVariableByName(".virtual{0}");
698 new TypeConstraint(body, Tuples.flatTupleOf(var_f, var__virtual_0_), new EStructuralFeatureInstancesKey(getFeatureLiteral("YakinduMetamodel", "Vertex", "outgoingTransitions")));
699 new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_0_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Transition")));
700 new Equality(body, var__virtual_0_, var_t);
701 bodies.add(body);
702 }
703 {
704 PAnnotation annotation = new PAnnotation("Constraint");
705 annotation.addAttribute("severity", "error");
706 annotation.addAttribute("message", "error");
707 annotation.addAttribute("key", Arrays.asList(new Object[] {
708 new ParameterReference("f")
709 }));
710 addAnnotation(annotation);
711 }
712 return bodies;
713 }
714 }
715}
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/StateInRegion.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/StateInRegion.java
new file mode 100644
index 00000000..0d1fd0e6
--- /dev/null
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/StateInRegion.java
@@ -0,0 +1,694 @@
1/**
2 * Generated from platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduPatterns.vql
3 */
4package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries;
5
6import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Region;
7import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.State;
8import java.util.Arrays;
9import java.util.Collection;
10import java.util.LinkedHashSet;
11import java.util.List;
12import java.util.Objects;
13import java.util.Optional;
14import java.util.Set;
15import java.util.function.Consumer;
16import java.util.stream.Collectors;
17import java.util.stream.Stream;
18import org.apache.log4j.Logger;
19import org.eclipse.emf.ecore.EClass;
20import org.eclipse.viatra.query.runtime.api.IPatternMatch;
21import org.eclipse.viatra.query.runtime.api.IQuerySpecification;
22import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine;
23import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFPQuery;
24import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFQuerySpecification;
25import org.eclipse.viatra.query.runtime.api.impl.BaseMatcher;
26import org.eclipse.viatra.query.runtime.api.impl.BasePatternMatch;
27import org.eclipse.viatra.query.runtime.emf.types.EClassTransitiveInstancesKey;
28import org.eclipse.viatra.query.runtime.emf.types.EStructuralFeatureInstancesKey;
29import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint;
30import org.eclipse.viatra.query.runtime.matchers.psystem.PBody;
31import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable;
32import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.Equality;
33import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExportedParameter;
34import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint;
35import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter;
36import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameterDirection;
37import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PVisibility;
38import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple;
39import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples;
40import org.eclipse.viatra.query.runtime.util.ViatraQueryLoggingUtil;
41
42/**
43 * A pattern-specific query specification that can instantiate Matcher in a type-safe way.
44 *
45 * <p>Original source:
46 * <code><pre>
47 * pattern StateInRegion(region: Region, state: State) {
48 * Region.vertices(region,state);
49 * }
50 * </pre></code>
51 *
52 * @see Matcher
53 * @see Match
54 *
55 */
56@SuppressWarnings("all")
57public final class StateInRegion extends BaseGeneratedEMFQuerySpecification<StateInRegion.Matcher> {
58 /**
59 * Pattern-specific match representation of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.StateInRegion pattern,
60 * to be used in conjunction with {@link Matcher}.
61 *
62 * <p>Class fields correspond to parameters of the pattern. Fields with value null are considered unassigned.
63 * Each instance is a (possibly partial) substitution of pattern parameters,
64 * usable to represent a match of the pattern in the result of a query,
65 * or to specify the bound (fixed) input parameters when issuing a query.
66 *
67 * @see Matcher
68 *
69 */
70 public static abstract class Match extends BasePatternMatch {
71 private Region fRegion;
72
73 private State fState;
74
75 private static List<String> parameterNames = makeImmutableList("region", "state");
76
77 private Match(final Region pRegion, final State pState) {
78 this.fRegion = pRegion;
79 this.fState = pState;
80 }
81
82 @Override
83 public Object get(final String parameterName) {
84 if ("region".equals(parameterName)) return this.fRegion;
85 if ("state".equals(parameterName)) return this.fState;
86 return null;
87 }
88
89 public Region getRegion() {
90 return this.fRegion;
91 }
92
93 public State getState() {
94 return this.fState;
95 }
96
97 @Override
98 public boolean set(final String parameterName, final Object newValue) {
99 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
100 if ("region".equals(parameterName) ) {
101 this.fRegion = (Region) newValue;
102 return true;
103 }
104 if ("state".equals(parameterName) ) {
105 this.fState = (State) newValue;
106 return true;
107 }
108 return false;
109 }
110
111 public void setRegion(final Region pRegion) {
112 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
113 this.fRegion = pRegion;
114 }
115
116 public void setState(final State pState) {
117 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
118 this.fState = pState;
119 }
120
121 @Override
122 public String patternName() {
123 return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.StateInRegion";
124 }
125
126 @Override
127 public List<String> parameterNames() {
128 return StateInRegion.Match.parameterNames;
129 }
130
131 @Override
132 public Object[] toArray() {
133 return new Object[]{fRegion, fState};
134 }
135
136 @Override
137 public StateInRegion.Match toImmutable() {
138 return isMutable() ? newMatch(fRegion, fState) : this;
139 }
140
141 @Override
142 public String prettyPrint() {
143 StringBuilder result = new StringBuilder();
144 result.append("\"region\"=" + prettyPrintValue(fRegion) + ", ");
145 result.append("\"state\"=" + prettyPrintValue(fState));
146 return result.toString();
147 }
148
149 @Override
150 public int hashCode() {
151 return Objects.hash(fRegion, fState);
152 }
153
154 @Override
155 public boolean equals(final Object obj) {
156 if (this == obj)
157 return true;
158 if (obj == null) {
159 return false;
160 }
161 if ((obj instanceof StateInRegion.Match)) {
162 StateInRegion.Match other = (StateInRegion.Match) obj;
163 return Objects.equals(fRegion, other.fRegion) && Objects.equals(fState, other.fState);
164 } else {
165 // this should be infrequent
166 if (!(obj instanceof IPatternMatch)) {
167 return false;
168 }
169 IPatternMatch otherSig = (IPatternMatch) obj;
170 return Objects.equals(specification(), otherSig.specification()) && Arrays.deepEquals(toArray(), otherSig.toArray());
171 }
172 }
173
174 @Override
175 public StateInRegion specification() {
176 return StateInRegion.instance();
177 }
178
179 /**
180 * Returns an empty, mutable match.
181 * Fields of the mutable match can be filled to create a partial match, usable as matcher input.
182 *
183 * @return the empty match.
184 *
185 */
186 public static StateInRegion.Match newEmptyMatch() {
187 return new Mutable(null, null);
188 }
189
190 /**
191 * Returns a mutable (partial) match.
192 * Fields of the mutable match can be filled to create a partial match, usable as matcher input.
193 *
194 * @param pRegion the fixed value of pattern parameter region, or null if not bound.
195 * @param pState the fixed value of pattern parameter state, or null if not bound.
196 * @return the new, mutable (partial) match object.
197 *
198 */
199 public static StateInRegion.Match newMutableMatch(final Region pRegion, final State pState) {
200 return new Mutable(pRegion, pState);
201 }
202
203 /**
204 * Returns a new (partial) match.
205 * This can be used e.g. to call the matcher with a partial match.
206 * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object.
207 * @param pRegion the fixed value of pattern parameter region, or null if not bound.
208 * @param pState the fixed value of pattern parameter state, or null if not bound.
209 * @return the (partial) match object.
210 *
211 */
212 public static StateInRegion.Match newMatch(final Region pRegion, final State pState) {
213 return new Immutable(pRegion, pState);
214 }
215
216 private static final class Mutable extends StateInRegion.Match {
217 Mutable(final Region pRegion, final State pState) {
218 super(pRegion, pState);
219 }
220
221 @Override
222 public boolean isMutable() {
223 return true;
224 }
225 }
226
227 private static final class Immutable extends StateInRegion.Match {
228 Immutable(final Region pRegion, final State pState) {
229 super(pRegion, pState);
230 }
231
232 @Override
233 public boolean isMutable() {
234 return false;
235 }
236 }
237 }
238
239 /**
240 * Generated pattern matcher API of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.StateInRegion pattern,
241 * providing pattern-specific query methods.
242 *
243 * <p>Use the pattern matcher on a given model via {@link #on(ViatraQueryEngine)},
244 * e.g. in conjunction with {@link ViatraQueryEngine#on(QueryScope)}.
245 *
246 * <p>Matches of the pattern will be represented as {@link Match}.
247 *
248 * <p>Original source:
249 * <code><pre>
250 * pattern StateInRegion(region: Region, state: State) {
251 * Region.vertices(region,state);
252 * }
253 * </pre></code>
254 *
255 * @see Match
256 * @see StateInRegion
257 *
258 */
259 public static class Matcher extends BaseMatcher<StateInRegion.Match> {
260 /**
261 * Initializes the pattern matcher within an existing VIATRA Query engine.
262 * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned.
263 *
264 * @param engine the existing VIATRA Query engine in which this matcher will be created.
265 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
266 *
267 */
268 public static StateInRegion.Matcher on(final ViatraQueryEngine engine) {
269 // check if matcher already exists
270 Matcher matcher = engine.getExistingMatcher(querySpecification());
271 if (matcher == null) {
272 matcher = (Matcher)engine.getMatcher(querySpecification());
273 }
274 return matcher;
275 }
276
277 /**
278 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
279 * @return an initialized matcher
280 * @noreference This method is for internal matcher initialization by the framework, do not call it manually.
281 *
282 */
283 public static StateInRegion.Matcher create() {
284 return new Matcher();
285 }
286
287 private final static int POSITION_REGION = 0;
288
289 private final static int POSITION_STATE = 1;
290
291 private final static Logger LOGGER = ViatraQueryLoggingUtil.getLogger(StateInRegion.Matcher.class);
292
293 /**
294 * Initializes the pattern matcher within an existing VIATRA Query engine.
295 * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned.
296 *
297 * @param engine the existing VIATRA Query engine in which this matcher will be created.
298 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
299 *
300 */
301 private Matcher() {
302 super(querySpecification());
303 }
304
305 /**
306 * Returns the set of all matches of the pattern that conform to the given fixed values of some parameters.
307 * @param pRegion the fixed value of pattern parameter region, or null if not bound.
308 * @param pState the fixed value of pattern parameter state, or null if not bound.
309 * @return matches represented as a Match object.
310 *
311 */
312 public Collection<StateInRegion.Match> getAllMatches(final Region pRegion, final State pState) {
313 return rawStreamAllMatches(new Object[]{pRegion, pState}).collect(Collectors.toSet());
314 }
315
316 /**
317 * Returns a stream of all matches of the pattern that conform to the given fixed values of some parameters.
318 * </p>
319 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
320 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
321 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
322 * @param pRegion the fixed value of pattern parameter region, or null if not bound.
323 * @param pState the fixed value of pattern parameter state, or null if not bound.
324 * @return a stream of matches represented as a Match object.
325 *
326 */
327 public Stream<StateInRegion.Match> streamAllMatches(final Region pRegion, final State pState) {
328 return rawStreamAllMatches(new Object[]{pRegion, pState});
329 }
330
331 /**
332 * Returns an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters.
333 * Neither determinism nor randomness of selection is guaranteed.
334 * @param pRegion the fixed value of pattern parameter region, or null if not bound.
335 * @param pState the fixed value of pattern parameter state, or null if not bound.
336 * @return a match represented as a Match object, or null if no match is found.
337 *
338 */
339 public Optional<StateInRegion.Match> getOneArbitraryMatch(final Region pRegion, final State pState) {
340 return rawGetOneArbitraryMatch(new Object[]{pRegion, pState});
341 }
342
343 /**
344 * Indicates whether the given combination of specified pattern parameters constitute a valid pattern match,
345 * under any possible substitution of the unspecified parameters (if any).
346 * @param pRegion the fixed value of pattern parameter region, or null if not bound.
347 * @param pState the fixed value of pattern parameter state, or null if not bound.
348 * @return true if the input is a valid (partial) match of the pattern.
349 *
350 */
351 public boolean hasMatch(final Region pRegion, final State pState) {
352 return rawHasMatch(new Object[]{pRegion, pState});
353 }
354
355 /**
356 * Returns the number of all matches of the pattern that conform to the given fixed values of some parameters.
357 * @param pRegion the fixed value of pattern parameter region, or null if not bound.
358 * @param pState the fixed value of pattern parameter state, or null if not bound.
359 * @return the number of pattern matches found.
360 *
361 */
362 public int countMatches(final Region pRegion, final State pState) {
363 return rawCountMatches(new Object[]{pRegion, pState});
364 }
365
366 /**
367 * Executes the given processor on an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters.
368 * Neither determinism nor randomness of selection is guaranteed.
369 * @param pRegion the fixed value of pattern parameter region, or null if not bound.
370 * @param pState the fixed value of pattern parameter state, or null if not bound.
371 * @param processor the action that will process the selected match.
372 * @return true if the pattern has at least one match with the given parameter values, false if the processor was not invoked
373 *
374 */
375 public boolean forOneArbitraryMatch(final Region pRegion, final State pState, final Consumer<? super StateInRegion.Match> processor) {
376 return rawForOneArbitraryMatch(new Object[]{pRegion, pState}, processor);
377 }
378
379 /**
380 * Returns a new (partial) match.
381 * This can be used e.g. to call the matcher with a partial match.
382 * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object.
383 * @param pRegion the fixed value of pattern parameter region, or null if not bound.
384 * @param pState the fixed value of pattern parameter state, or null if not bound.
385 * @return the (partial) match object.
386 *
387 */
388 public StateInRegion.Match newMatch(final Region pRegion, final State pState) {
389 return StateInRegion.Match.newMatch(pRegion, pState);
390 }
391
392 /**
393 * Retrieve the set of values that occur in matches for region.
394 * @return the Set of all values or empty set if there are no matches
395 *
396 */
397 protected Stream<Region> rawStreamAllValuesOfregion(final Object[] parameters) {
398 return rawStreamAllValues(POSITION_REGION, parameters).map(Region.class::cast);
399 }
400
401 /**
402 * Retrieve the set of values that occur in matches for region.
403 * @return the Set of all values or empty set if there are no matches
404 *
405 */
406 public Set<Region> getAllValuesOfregion() {
407 return rawStreamAllValuesOfregion(emptyArray()).collect(Collectors.toSet());
408 }
409
410 /**
411 * Retrieve the set of values that occur in matches for region.
412 * @return the Set of all values or empty set if there are no matches
413 *
414 */
415 public Stream<Region> streamAllValuesOfregion() {
416 return rawStreamAllValuesOfregion(emptyArray());
417 }
418
419 /**
420 * Retrieve the set of values that occur in matches for region.
421 * </p>
422 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
423 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
424 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
425 *
426 * @return the Stream of all values or empty set if there are no matches
427 *
428 */
429 public Stream<Region> streamAllValuesOfregion(final StateInRegion.Match partialMatch) {
430 return rawStreamAllValuesOfregion(partialMatch.toArray());
431 }
432
433 /**
434 * Retrieve the set of values that occur in matches for region.
435 * </p>
436 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
437 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
438 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
439 *
440 * @return the Stream of all values or empty set if there are no matches
441 *
442 */
443 public Stream<Region> streamAllValuesOfregion(final State pState) {
444 return rawStreamAllValuesOfregion(new Object[]{null, pState});
445 }
446
447 /**
448 * Retrieve the set of values that occur in matches for region.
449 * @return the Set of all values or empty set if there are no matches
450 *
451 */
452 public Set<Region> getAllValuesOfregion(final StateInRegion.Match partialMatch) {
453 return rawStreamAllValuesOfregion(partialMatch.toArray()).collect(Collectors.toSet());
454 }
455
456 /**
457 * Retrieve the set of values that occur in matches for region.
458 * @return the Set of all values or empty set if there are no matches
459 *
460 */
461 public Set<Region> getAllValuesOfregion(final State pState) {
462 return rawStreamAllValuesOfregion(new Object[]{null, pState}).collect(Collectors.toSet());
463 }
464
465 /**
466 * Retrieve the set of values that occur in matches for state.
467 * @return the Set of all values or empty set if there are no matches
468 *
469 */
470 protected Stream<State> rawStreamAllValuesOfstate(final Object[] parameters) {
471 return rawStreamAllValues(POSITION_STATE, parameters).map(State.class::cast);
472 }
473
474 /**
475 * Retrieve the set of values that occur in matches for state.
476 * @return the Set of all values or empty set if there are no matches
477 *
478 */
479 public Set<State> getAllValuesOfstate() {
480 return rawStreamAllValuesOfstate(emptyArray()).collect(Collectors.toSet());
481 }
482
483 /**
484 * Retrieve the set of values that occur in matches for state.
485 * @return the Set of all values or empty set if there are no matches
486 *
487 */
488 public Stream<State> streamAllValuesOfstate() {
489 return rawStreamAllValuesOfstate(emptyArray());
490 }
491
492 /**
493 * Retrieve the set of values that occur in matches for state.
494 * </p>
495 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
496 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
497 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
498 *
499 * @return the Stream of all values or empty set if there are no matches
500 *
501 */
502 public Stream<State> streamAllValuesOfstate(final StateInRegion.Match partialMatch) {
503 return rawStreamAllValuesOfstate(partialMatch.toArray());
504 }
505
506 /**
507 * Retrieve the set of values that occur in matches for state.
508 * </p>
509 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
510 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
511 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
512 *
513 * @return the Stream of all values or empty set if there are no matches
514 *
515 */
516 public Stream<State> streamAllValuesOfstate(final Region pRegion) {
517 return rawStreamAllValuesOfstate(new Object[]{pRegion, null});
518 }
519
520 /**
521 * Retrieve the set of values that occur in matches for state.
522 * @return the Set of all values or empty set if there are no matches
523 *
524 */
525 public Set<State> getAllValuesOfstate(final StateInRegion.Match partialMatch) {
526 return rawStreamAllValuesOfstate(partialMatch.toArray()).collect(Collectors.toSet());
527 }
528
529 /**
530 * Retrieve the set of values that occur in matches for state.
531 * @return the Set of all values or empty set if there are no matches
532 *
533 */
534 public Set<State> getAllValuesOfstate(final Region pRegion) {
535 return rawStreamAllValuesOfstate(new Object[]{pRegion, null}).collect(Collectors.toSet());
536 }
537
538 @Override
539 protected StateInRegion.Match tupleToMatch(final Tuple t) {
540 try {
541 return StateInRegion.Match.newMatch((Region) t.get(POSITION_REGION), (State) t.get(POSITION_STATE));
542 } catch(ClassCastException e) {
543 LOGGER.error("Element(s) in tuple not properly typed!",e);
544 return null;
545 }
546 }
547
548 @Override
549 protected StateInRegion.Match arrayToMatch(final Object[] match) {
550 try {
551 return StateInRegion.Match.newMatch((Region) match[POSITION_REGION], (State) match[POSITION_STATE]);
552 } catch(ClassCastException e) {
553 LOGGER.error("Element(s) in array not properly typed!",e);
554 return null;
555 }
556 }
557
558 @Override
559 protected StateInRegion.Match arrayToMatchMutable(final Object[] match) {
560 try {
561 return StateInRegion.Match.newMutableMatch((Region) match[POSITION_REGION], (State) match[POSITION_STATE]);
562 } catch(ClassCastException e) {
563 LOGGER.error("Element(s) in array not properly typed!",e);
564 return null;
565 }
566 }
567
568 /**
569 * @return the singleton instance of the query specification of this pattern
570 * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded
571 *
572 */
573 public static IQuerySpecification<StateInRegion.Matcher> querySpecification() {
574 return StateInRegion.instance();
575 }
576 }
577
578 private StateInRegion() {
579 super(GeneratedPQuery.INSTANCE);
580 }
581
582 /**
583 * @return the singleton instance of the query specification
584 * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded
585 *
586 */
587 public static StateInRegion instance() {
588 try{
589 return LazyHolder.INSTANCE;
590 } catch (ExceptionInInitializerError err) {
591 throw processInitializerError(err);
592 }
593 }
594
595 @Override
596 protected StateInRegion.Matcher instantiate(final ViatraQueryEngine engine) {
597 return StateInRegion.Matcher.on(engine);
598 }
599
600 @Override
601 public StateInRegion.Matcher instantiate() {
602 return StateInRegion.Matcher.create();
603 }
604
605 @Override
606 public StateInRegion.Match newEmptyMatch() {
607 return StateInRegion.Match.newEmptyMatch();
608 }
609
610 @Override
611 public StateInRegion.Match newMatch(final Object... parameters) {
612 return StateInRegion.Match.newMatch((ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Region) parameters[0], (ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.State) parameters[1]);
613 }
614
615 /**
616 * Inner class allowing the singleton instance of {@link JvmGenericType: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.StateInRegion (visibility: PUBLIC, simpleName: StateInRegion, identifier: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.StateInRegion, deprecated: <unset>) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)} to be created
617 * <b>not</b> at the class load time of the outer class,
618 * but rather at the first call to {@link JvmGenericType: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.StateInRegion (visibility: PUBLIC, simpleName: StateInRegion, identifier: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.StateInRegion, deprecated: <unset>) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)#instance()}.
619 *
620 * <p> This workaround is required e.g. to support recursion.
621 *
622 */
623 private static class LazyHolder {
624 private final static StateInRegion INSTANCE = new StateInRegion();
625
626 /**
627 * Statically initializes the query specification <b>after</b> the field {@link #INSTANCE} is assigned.
628 * This initialization order is required to support indirect recursion.
629 *
630 * <p> The static initializer is defined using a helper field to work around limitations of the code generator.
631 *
632 */
633 private final static Object STATIC_INITIALIZER = ensureInitialized();
634
635 public static Object ensureInitialized() {
636 INSTANCE.ensureInitializedInternal();
637 return null;
638 }
639 }
640
641 private static class GeneratedPQuery extends BaseGeneratedEMFPQuery {
642 private final static StateInRegion.GeneratedPQuery INSTANCE = new GeneratedPQuery();
643
644 private final PParameter parameter_region = new PParameter("region", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Region", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "Region")), PParameterDirection.INOUT);
645
646 private final PParameter parameter_state = new PParameter("state", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.State", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "State")), PParameterDirection.INOUT);
647
648 private final List<PParameter> parameters = Arrays.asList(parameter_region, parameter_state);
649
650 private GeneratedPQuery() {
651 super(PVisibility.PUBLIC);
652 }
653
654 @Override
655 public String getFullyQualifiedName() {
656 return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.StateInRegion";
657 }
658
659 @Override
660 public List<String> getParameterNames() {
661 return Arrays.asList("region","state");
662 }
663
664 @Override
665 public List<PParameter> getParameters() {
666 return parameters;
667 }
668
669 @Override
670 public Set<PBody> doGetContainedBodies() {
671 setEvaluationHints(new QueryEvaluationHint(null, QueryEvaluationHint.BackendRequirement.UNSPECIFIED));
672 Set<PBody> bodies = new LinkedHashSet<>();
673 {
674 PBody body = new PBody(this);
675 PVariable var_region = body.getOrCreateVariableByName("region");
676 PVariable var_state = body.getOrCreateVariableByName("state");
677 new TypeConstraint(body, Tuples.flatTupleOf(var_region), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Region")));
678 new TypeConstraint(body, Tuples.flatTupleOf(var_state), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "State")));
679 body.setSymbolicParameters(Arrays.<ExportedParameter>asList(
680 new ExportedParameter(body, var_region, parameter_region),
681 new ExportedParameter(body, var_state, parameter_state)
682 ));
683 // Region.vertices(region,state)
684 new TypeConstraint(body, Tuples.flatTupleOf(var_region), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Region")));
685 PVariable var__virtual_0_ = body.getOrCreateVariableByName(".virtual{0}");
686 new TypeConstraint(body, Tuples.flatTupleOf(var_region, var__virtual_0_), new EStructuralFeatureInstancesKey(getFeatureLiteral("YakinduMetamodel", "Region", "vertices")));
687 new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_0_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Vertex")));
688 new Equality(body, var__virtual_0_, var_state);
689 bodies.add(body);
690 }
691 return bodies;
692 }
693 }
694}
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/SynchHasNoIncoming.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/SynchHasNoIncoming.java
new file mode 100644
index 00000000..d59ab2d9
--- /dev/null
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/SynchHasNoIncoming.java
@@ -0,0 +1,551 @@
1/**
2 * Generated from platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduPatterns.vql
3 */
4package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries;
5
6import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization;
7import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.Transition;
8import java.util.Arrays;
9import java.util.Collection;
10import java.util.LinkedHashSet;
11import java.util.List;
12import java.util.Objects;
13import java.util.Optional;
14import java.util.Set;
15import java.util.function.Consumer;
16import java.util.stream.Collectors;
17import java.util.stream.Stream;
18import org.apache.log4j.Logger;
19import org.eclipse.emf.ecore.EClass;
20import org.eclipse.viatra.query.runtime.api.IPatternMatch;
21import org.eclipse.viatra.query.runtime.api.IQuerySpecification;
22import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine;
23import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFPQuery;
24import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFQuerySpecification;
25import org.eclipse.viatra.query.runtime.api.impl.BaseMatcher;
26import org.eclipse.viatra.query.runtime.api.impl.BasePatternMatch;
27import org.eclipse.viatra.query.runtime.emf.types.EClassTransitiveInstancesKey;
28import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint;
29import org.eclipse.viatra.query.runtime.matchers.psystem.PBody;
30import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable;
31import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.PAnnotation;
32import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.ParameterReference;
33import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExportedParameter;
34import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.NegativePatternCall;
35import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint;
36import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter;
37import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameterDirection;
38import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PVisibility;
39import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple;
40import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples;
41import org.eclipse.viatra.query.runtime.util.ViatraQueryLoggingUtil;
42
43/**
44 * A pattern-specific query specification that can instantiate Matcher in a type-safe way.
45 *
46 * <p>Original source:
47 * <code><pre>
48 * {@literal @}Constraint(severity="error", message="error", key = {s})
49 * pattern synchHasNoIncoming(s : Synchronization) {
50 * neg find transition(_, _, s);
51 * }
52 * </pre></code>
53 *
54 * @see Matcher
55 * @see Match
56 *
57 */
58@SuppressWarnings("all")
59public final class SynchHasNoIncoming extends BaseGeneratedEMFQuerySpecification<SynchHasNoIncoming.Matcher> {
60 /**
61 * Pattern-specific match representation of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.synchHasNoIncoming pattern,
62 * to be used in conjunction with {@link Matcher}.
63 *
64 * <p>Class fields correspond to parameters of the pattern. Fields with value null are considered unassigned.
65 * Each instance is a (possibly partial) substitution of pattern parameters,
66 * usable to represent a match of the pattern in the result of a query,
67 * or to specify the bound (fixed) input parameters when issuing a query.
68 *
69 * @see Matcher
70 *
71 */
72 public static abstract class Match extends BasePatternMatch {
73 private Synchronization fS;
74
75 private static List<String> parameterNames = makeImmutableList("s");
76
77 private Match(final Synchronization pS) {
78 this.fS = pS;
79 }
80
81 @Override
82 public Object get(final String parameterName) {
83 if ("s".equals(parameterName)) return this.fS;
84 return null;
85 }
86
87 public Synchronization getS() {
88 return this.fS;
89 }
90
91 @Override
92 public boolean set(final String parameterName, final Object newValue) {
93 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
94 if ("s".equals(parameterName) ) {
95 this.fS = (Synchronization) newValue;
96 return true;
97 }
98 return false;
99 }
100
101 public void setS(final Synchronization pS) {
102 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
103 this.fS = pS;
104 }
105
106 @Override
107 public String patternName() {
108 return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.synchHasNoIncoming";
109 }
110
111 @Override
112 public List<String> parameterNames() {
113 return SynchHasNoIncoming.Match.parameterNames;
114 }
115
116 @Override
117 public Object[] toArray() {
118 return new Object[]{fS};
119 }
120
121 @Override
122 public SynchHasNoIncoming.Match toImmutable() {
123 return isMutable() ? newMatch(fS) : this;
124 }
125
126 @Override
127 public String prettyPrint() {
128 StringBuilder result = new StringBuilder();
129 result.append("\"s\"=" + prettyPrintValue(fS));
130 return result.toString();
131 }
132
133 @Override
134 public int hashCode() {
135 return Objects.hash(fS);
136 }
137
138 @Override
139 public boolean equals(final Object obj) {
140 if (this == obj)
141 return true;
142 if (obj == null) {
143 return false;
144 }
145 if ((obj instanceof SynchHasNoIncoming.Match)) {
146 SynchHasNoIncoming.Match other = (SynchHasNoIncoming.Match) obj;
147 return Objects.equals(fS, other.fS);
148 } else {
149 // this should be infrequent
150 if (!(obj instanceof IPatternMatch)) {
151 return false;
152 }
153 IPatternMatch otherSig = (IPatternMatch) obj;
154 return Objects.equals(specification(), otherSig.specification()) && Arrays.deepEquals(toArray(), otherSig.toArray());
155 }
156 }
157
158 @Override
159 public SynchHasNoIncoming specification() {
160 return SynchHasNoIncoming.instance();
161 }
162
163 /**
164 * Returns an empty, mutable match.
165 * Fields of the mutable match can be filled to create a partial match, usable as matcher input.
166 *
167 * @return the empty match.
168 *
169 */
170 public static SynchHasNoIncoming.Match newEmptyMatch() {
171 return new Mutable(null);
172 }
173
174 /**
175 * Returns a mutable (partial) match.
176 * Fields of the mutable match can be filled to create a partial match, usable as matcher input.
177 *
178 * @param pS the fixed value of pattern parameter s, or null if not bound.
179 * @return the new, mutable (partial) match object.
180 *
181 */
182 public static SynchHasNoIncoming.Match newMutableMatch(final Synchronization pS) {
183 return new Mutable(pS);
184 }
185
186 /**
187 * Returns a new (partial) match.
188 * This can be used e.g. to call the matcher with a partial match.
189 * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object.
190 * @param pS the fixed value of pattern parameter s, or null if not bound.
191 * @return the (partial) match object.
192 *
193 */
194 public static SynchHasNoIncoming.Match newMatch(final Synchronization pS) {
195 return new Immutable(pS);
196 }
197
198 private static final class Mutable extends SynchHasNoIncoming.Match {
199 Mutable(final Synchronization pS) {
200 super(pS);
201 }
202
203 @Override
204 public boolean isMutable() {
205 return true;
206 }
207 }
208
209 private static final class Immutable extends SynchHasNoIncoming.Match {
210 Immutable(final Synchronization pS) {
211 super(pS);
212 }
213
214 @Override
215 public boolean isMutable() {
216 return false;
217 }
218 }
219 }
220
221 /**
222 * Generated pattern matcher API of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.synchHasNoIncoming pattern,
223 * providing pattern-specific query methods.
224 *
225 * <p>Use the pattern matcher on a given model via {@link #on(ViatraQueryEngine)},
226 * e.g. in conjunction with {@link ViatraQueryEngine#on(QueryScope)}.
227 *
228 * <p>Matches of the pattern will be represented as {@link Match}.
229 *
230 * <p>Original source:
231 * <code><pre>
232 * {@literal @}Constraint(severity="error", message="error", key = {s})
233 * pattern synchHasNoIncoming(s : Synchronization) {
234 * neg find transition(_, _, s);
235 * }
236 * </pre></code>
237 *
238 * @see Match
239 * @see SynchHasNoIncoming
240 *
241 */
242 public static class Matcher extends BaseMatcher<SynchHasNoIncoming.Match> {
243 /**
244 * Initializes the pattern matcher within an existing VIATRA Query engine.
245 * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned.
246 *
247 * @param engine the existing VIATRA Query engine in which this matcher will be created.
248 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
249 *
250 */
251 public static SynchHasNoIncoming.Matcher on(final ViatraQueryEngine engine) {
252 // check if matcher already exists
253 Matcher matcher = engine.getExistingMatcher(querySpecification());
254 if (matcher == null) {
255 matcher = (Matcher)engine.getMatcher(querySpecification());
256 }
257 return matcher;
258 }
259
260 /**
261 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
262 * @return an initialized matcher
263 * @noreference This method is for internal matcher initialization by the framework, do not call it manually.
264 *
265 */
266 public static SynchHasNoIncoming.Matcher create() {
267 return new Matcher();
268 }
269
270 private final static int POSITION_S = 0;
271
272 private final static Logger LOGGER = ViatraQueryLoggingUtil.getLogger(SynchHasNoIncoming.Matcher.class);
273
274 /**
275 * Initializes the pattern matcher within an existing VIATRA Query engine.
276 * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned.
277 *
278 * @param engine the existing VIATRA Query engine in which this matcher will be created.
279 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
280 *
281 */
282 private Matcher() {
283 super(querySpecification());
284 }
285
286 /**
287 * Returns the set of all matches of the pattern that conform to the given fixed values of some parameters.
288 * @param pS the fixed value of pattern parameter s, or null if not bound.
289 * @return matches represented as a Match object.
290 *
291 */
292 public Collection<SynchHasNoIncoming.Match> getAllMatches(final Synchronization pS) {
293 return rawStreamAllMatches(new Object[]{pS}).collect(Collectors.toSet());
294 }
295
296 /**
297 * Returns a stream of all matches of the pattern that conform to the given fixed values of some parameters.
298 * </p>
299 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
300 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
301 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
302 * @param pS the fixed value of pattern parameter s, or null if not bound.
303 * @return a stream of matches represented as a Match object.
304 *
305 */
306 public Stream<SynchHasNoIncoming.Match> streamAllMatches(final Synchronization pS) {
307 return rawStreamAllMatches(new Object[]{pS});
308 }
309
310 /**
311 * Returns an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters.
312 * Neither determinism nor randomness of selection is guaranteed.
313 * @param pS the fixed value of pattern parameter s, or null if not bound.
314 * @return a match represented as a Match object, or null if no match is found.
315 *
316 */
317 public Optional<SynchHasNoIncoming.Match> getOneArbitraryMatch(final Synchronization pS) {
318 return rawGetOneArbitraryMatch(new Object[]{pS});
319 }
320
321 /**
322 * Indicates whether the given combination of specified pattern parameters constitute a valid pattern match,
323 * under any possible substitution of the unspecified parameters (if any).
324 * @param pS the fixed value of pattern parameter s, or null if not bound.
325 * @return true if the input is a valid (partial) match of the pattern.
326 *
327 */
328 public boolean hasMatch(final Synchronization pS) {
329 return rawHasMatch(new Object[]{pS});
330 }
331
332 /**
333 * Returns the number of all matches of the pattern that conform to the given fixed values of some parameters.
334 * @param pS the fixed value of pattern parameter s, or null if not bound.
335 * @return the number of pattern matches found.
336 *
337 */
338 public int countMatches(final Synchronization pS) {
339 return rawCountMatches(new Object[]{pS});
340 }
341
342 /**
343 * Executes the given processor on an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters.
344 * Neither determinism nor randomness of selection is guaranteed.
345 * @param pS the fixed value of pattern parameter s, or null if not bound.
346 * @param processor the action that will process the selected match.
347 * @return true if the pattern has at least one match with the given parameter values, false if the processor was not invoked
348 *
349 */
350 public boolean forOneArbitraryMatch(final Synchronization pS, final Consumer<? super SynchHasNoIncoming.Match> processor) {
351 return rawForOneArbitraryMatch(new Object[]{pS}, processor);
352 }
353
354 /**
355 * Returns a new (partial) match.
356 * This can be used e.g. to call the matcher with a partial match.
357 * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object.
358 * @param pS the fixed value of pattern parameter s, or null if not bound.
359 * @return the (partial) match object.
360 *
361 */
362 public SynchHasNoIncoming.Match newMatch(final Synchronization pS) {
363 return SynchHasNoIncoming.Match.newMatch(pS);
364 }
365
366 /**
367 * Retrieve the set of values that occur in matches for s.
368 * @return the Set of all values or empty set if there are no matches
369 *
370 */
371 protected Stream<Synchronization> rawStreamAllValuesOfs(final Object[] parameters) {
372 return rawStreamAllValues(POSITION_S, parameters).map(Synchronization.class::cast);
373 }
374
375 /**
376 * Retrieve the set of values that occur in matches for s.
377 * @return the Set of all values or empty set if there are no matches
378 *
379 */
380 public Set<Synchronization> getAllValuesOfs() {
381 return rawStreamAllValuesOfs(emptyArray()).collect(Collectors.toSet());
382 }
383
384 /**
385 * Retrieve the set of values that occur in matches for s.
386 * @return the Set of all values or empty set if there are no matches
387 *
388 */
389 public Stream<Synchronization> streamAllValuesOfs() {
390 return rawStreamAllValuesOfs(emptyArray());
391 }
392
393 @Override
394 protected SynchHasNoIncoming.Match tupleToMatch(final Tuple t) {
395 try {
396 return SynchHasNoIncoming.Match.newMatch((Synchronization) t.get(POSITION_S));
397 } catch(ClassCastException e) {
398 LOGGER.error("Element(s) in tuple not properly typed!",e);
399 return null;
400 }
401 }
402
403 @Override
404 protected SynchHasNoIncoming.Match arrayToMatch(final Object[] match) {
405 try {
406 return SynchHasNoIncoming.Match.newMatch((Synchronization) match[POSITION_S]);
407 } catch(ClassCastException e) {
408 LOGGER.error("Element(s) in array not properly typed!",e);
409 return null;
410 }
411 }
412
413 @Override
414 protected SynchHasNoIncoming.Match arrayToMatchMutable(final Object[] match) {
415 try {
416 return SynchHasNoIncoming.Match.newMutableMatch((Synchronization) match[POSITION_S]);
417 } catch(ClassCastException e) {
418 LOGGER.error("Element(s) in array not properly typed!",e);
419 return null;
420 }
421 }
422
423 /**
424 * @return the singleton instance of the query specification of this pattern
425 * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded
426 *
427 */
428 public static IQuerySpecification<SynchHasNoIncoming.Matcher> querySpecification() {
429 return SynchHasNoIncoming.instance();
430 }
431 }
432
433 private SynchHasNoIncoming() {
434 super(GeneratedPQuery.INSTANCE);
435 }
436
437 /**
438 * @return the singleton instance of the query specification
439 * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded
440 *
441 */
442 public static SynchHasNoIncoming instance() {
443 try{
444 return LazyHolder.INSTANCE;
445 } catch (ExceptionInInitializerError err) {
446 throw processInitializerError(err);
447 }
448 }
449
450 @Override
451 protected SynchHasNoIncoming.Matcher instantiate(final ViatraQueryEngine engine) {
452 return SynchHasNoIncoming.Matcher.on(engine);
453 }
454
455 @Override
456 public SynchHasNoIncoming.Matcher instantiate() {
457 return SynchHasNoIncoming.Matcher.create();
458 }
459
460 @Override
461 public SynchHasNoIncoming.Match newEmptyMatch() {
462 return SynchHasNoIncoming.Match.newEmptyMatch();
463 }
464
465 @Override
466 public SynchHasNoIncoming.Match newMatch(final Object... parameters) {
467 return SynchHasNoIncoming.Match.newMatch((ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization) parameters[0]);
468 }
469
470 /**
471 * Inner class allowing the singleton instance of {@link JvmGenericType: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.SynchHasNoIncoming (visibility: PUBLIC, simpleName: SynchHasNoIncoming, identifier: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.SynchHasNoIncoming, deprecated: <unset>) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)} to be created
472 * <b>not</b> at the class load time of the outer class,
473 * but rather at the first call to {@link JvmGenericType: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.SynchHasNoIncoming (visibility: PUBLIC, simpleName: SynchHasNoIncoming, identifier: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.SynchHasNoIncoming, deprecated: <unset>) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)#instance()}.
474 *
475 * <p> This workaround is required e.g. to support recursion.
476 *
477 */
478 private static class LazyHolder {
479 private final static SynchHasNoIncoming INSTANCE = new SynchHasNoIncoming();
480
481 /**
482 * Statically initializes the query specification <b>after</b> the field {@link #INSTANCE} is assigned.
483 * This initialization order is required to support indirect recursion.
484 *
485 * <p> The static initializer is defined using a helper field to work around limitations of the code generator.
486 *
487 */
488 private final static Object STATIC_INITIALIZER = ensureInitialized();
489
490 public static Object ensureInitialized() {
491 INSTANCE.ensureInitializedInternal();
492 return null;
493 }
494 }
495
496 private static class GeneratedPQuery extends BaseGeneratedEMFPQuery {
497 private final static SynchHasNoIncoming.GeneratedPQuery INSTANCE = new GeneratedPQuery();
498
499 private final PParameter parameter_s = new PParameter("s", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "Synchronization")), PParameterDirection.INOUT);
500
501 private final List<PParameter> parameters = Arrays.asList(parameter_s);
502
503 private GeneratedPQuery() {
504 super(PVisibility.PUBLIC);
505 }
506
507 @Override
508 public String getFullyQualifiedName() {
509 return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.synchHasNoIncoming";
510 }
511
512 @Override
513 public List<String> getParameterNames() {
514 return Arrays.asList("s");
515 }
516
517 @Override
518 public List<PParameter> getParameters() {
519 return parameters;
520 }
521
522 @Override
523 public Set<PBody> doGetContainedBodies() {
524 setEvaluationHints(new QueryEvaluationHint(null, QueryEvaluationHint.BackendRequirement.UNSPECIFIED));
525 Set<PBody> bodies = new LinkedHashSet<>();
526 {
527 PBody body = new PBody(this);
528 PVariable var_s = body.getOrCreateVariableByName("s");
529 PVariable var___0_ = body.getOrCreateVariableByName("_<0>");
530 PVariable var___1_ = body.getOrCreateVariableByName("_<1>");
531 new TypeConstraint(body, Tuples.flatTupleOf(var_s), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Synchronization")));
532 body.setSymbolicParameters(Arrays.<ExportedParameter>asList(
533 new ExportedParameter(body, var_s, parameter_s)
534 ));
535 // neg find transition(_, _, s)
536 new NegativePatternCall(body, Tuples.flatTupleOf(var___0_, var___1_, var_s), Transition.instance().getInternalQueryRepresentation());
537 bodies.add(body);
538 }
539 {
540 PAnnotation annotation = new PAnnotation("Constraint");
541 annotation.addAttribute("severity", "error");
542 annotation.addAttribute("message", "error");
543 annotation.addAttribute("key", Arrays.asList(new Object[] {
544 new ParameterReference("s")
545 }));
546 addAnnotation(annotation);
547 }
548 return bodies;
549 }
550 }
551}
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/SynchHasNoOutgoing.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/SynchHasNoOutgoing.java
new file mode 100644
index 00000000..e3ff69bd
--- /dev/null
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/SynchHasNoOutgoing.java
@@ -0,0 +1,559 @@
1/**
2 * Generated from platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduPatterns.vql
3 */
4package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries;
5
6import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization;
7import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.Transition;
8import java.util.Arrays;
9import java.util.Collection;
10import java.util.LinkedHashSet;
11import java.util.List;
12import java.util.Objects;
13import java.util.Optional;
14import java.util.Set;
15import java.util.function.Consumer;
16import java.util.stream.Collectors;
17import java.util.stream.Stream;
18import org.apache.log4j.Logger;
19import org.eclipse.emf.ecore.EClass;
20import org.eclipse.viatra.query.runtime.api.IPatternMatch;
21import org.eclipse.viatra.query.runtime.api.IQuerySpecification;
22import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine;
23import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFPQuery;
24import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFQuerySpecification;
25import org.eclipse.viatra.query.runtime.api.impl.BaseMatcher;
26import org.eclipse.viatra.query.runtime.api.impl.BasePatternMatch;
27import org.eclipse.viatra.query.runtime.emf.types.EClassTransitiveInstancesKey;
28import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint;
29import org.eclipse.viatra.query.runtime.matchers.psystem.PBody;
30import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable;
31import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.PAnnotation;
32import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.ParameterReference;
33import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExportedParameter;
34import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.NegativePatternCall;
35import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint;
36import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter;
37import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameterDirection;
38import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PVisibility;
39import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple;
40import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples;
41import org.eclipse.viatra.query.runtime.util.ViatraQueryLoggingUtil;
42
43/**
44 * A pattern-specific query specification that can instantiate Matcher in a type-safe way.
45 *
46 * <p>Original source:
47 * <code><pre>
48 * /////////
49 * // Synchronization
50 * /////////
51 *
52 * {@literal @}Constraint(severity="error", message="error", key = {s})
53 * pattern synchHasNoOutgoing(s : Synchronization) {
54 * neg find transition(_, s, _);
55 * }
56 * </pre></code>
57 *
58 * @see Matcher
59 * @see Match
60 *
61 */
62@SuppressWarnings("all")
63public final class SynchHasNoOutgoing extends BaseGeneratedEMFQuerySpecification<SynchHasNoOutgoing.Matcher> {
64 /**
65 * Pattern-specific match representation of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.synchHasNoOutgoing pattern,
66 * to be used in conjunction with {@link Matcher}.
67 *
68 * <p>Class fields correspond to parameters of the pattern. Fields with value null are considered unassigned.
69 * Each instance is a (possibly partial) substitution of pattern parameters,
70 * usable to represent a match of the pattern in the result of a query,
71 * or to specify the bound (fixed) input parameters when issuing a query.
72 *
73 * @see Matcher
74 *
75 */
76 public static abstract class Match extends BasePatternMatch {
77 private Synchronization fS;
78
79 private static List<String> parameterNames = makeImmutableList("s");
80
81 private Match(final Synchronization pS) {
82 this.fS = pS;
83 }
84
85 @Override
86 public Object get(final String parameterName) {
87 if ("s".equals(parameterName)) return this.fS;
88 return null;
89 }
90
91 public Synchronization getS() {
92 return this.fS;
93 }
94
95 @Override
96 public boolean set(final String parameterName, final Object newValue) {
97 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
98 if ("s".equals(parameterName) ) {
99 this.fS = (Synchronization) newValue;
100 return true;
101 }
102 return false;
103 }
104
105 public void setS(final Synchronization pS) {
106 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
107 this.fS = pS;
108 }
109
110 @Override
111 public String patternName() {
112 return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.synchHasNoOutgoing";
113 }
114
115 @Override
116 public List<String> parameterNames() {
117 return SynchHasNoOutgoing.Match.parameterNames;
118 }
119
120 @Override
121 public Object[] toArray() {
122 return new Object[]{fS};
123 }
124
125 @Override
126 public SynchHasNoOutgoing.Match toImmutable() {
127 return isMutable() ? newMatch(fS) : this;
128 }
129
130 @Override
131 public String prettyPrint() {
132 StringBuilder result = new StringBuilder();
133 result.append("\"s\"=" + prettyPrintValue(fS));
134 return result.toString();
135 }
136
137 @Override
138 public int hashCode() {
139 return Objects.hash(fS);
140 }
141
142 @Override
143 public boolean equals(final Object obj) {
144 if (this == obj)
145 return true;
146 if (obj == null) {
147 return false;
148 }
149 if ((obj instanceof SynchHasNoOutgoing.Match)) {
150 SynchHasNoOutgoing.Match other = (SynchHasNoOutgoing.Match) obj;
151 return Objects.equals(fS, other.fS);
152 } else {
153 // this should be infrequent
154 if (!(obj instanceof IPatternMatch)) {
155 return false;
156 }
157 IPatternMatch otherSig = (IPatternMatch) obj;
158 return Objects.equals(specification(), otherSig.specification()) && Arrays.deepEquals(toArray(), otherSig.toArray());
159 }
160 }
161
162 @Override
163 public SynchHasNoOutgoing specification() {
164 return SynchHasNoOutgoing.instance();
165 }
166
167 /**
168 * Returns an empty, mutable match.
169 * Fields of the mutable match can be filled to create a partial match, usable as matcher input.
170 *
171 * @return the empty match.
172 *
173 */
174 public static SynchHasNoOutgoing.Match newEmptyMatch() {
175 return new Mutable(null);
176 }
177
178 /**
179 * Returns a mutable (partial) match.
180 * Fields of the mutable match can be filled to create a partial match, usable as matcher input.
181 *
182 * @param pS the fixed value of pattern parameter s, or null if not bound.
183 * @return the new, mutable (partial) match object.
184 *
185 */
186 public static SynchHasNoOutgoing.Match newMutableMatch(final Synchronization pS) {
187 return new Mutable(pS);
188 }
189
190 /**
191 * Returns a new (partial) match.
192 * This can be used e.g. to call the matcher with a partial match.
193 * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object.
194 * @param pS the fixed value of pattern parameter s, or null if not bound.
195 * @return the (partial) match object.
196 *
197 */
198 public static SynchHasNoOutgoing.Match newMatch(final Synchronization pS) {
199 return new Immutable(pS);
200 }
201
202 private static final class Mutable extends SynchHasNoOutgoing.Match {
203 Mutable(final Synchronization pS) {
204 super(pS);
205 }
206
207 @Override
208 public boolean isMutable() {
209 return true;
210 }
211 }
212
213 private static final class Immutable extends SynchHasNoOutgoing.Match {
214 Immutable(final Synchronization pS) {
215 super(pS);
216 }
217
218 @Override
219 public boolean isMutable() {
220 return false;
221 }
222 }
223 }
224
225 /**
226 * Generated pattern matcher API of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.synchHasNoOutgoing pattern,
227 * providing pattern-specific query methods.
228 *
229 * <p>Use the pattern matcher on a given model via {@link #on(ViatraQueryEngine)},
230 * e.g. in conjunction with {@link ViatraQueryEngine#on(QueryScope)}.
231 *
232 * <p>Matches of the pattern will be represented as {@link Match}.
233 *
234 * <p>Original source:
235 * <code><pre>
236 * /////////
237 * // Synchronization
238 * /////////
239 *
240 * {@literal @}Constraint(severity="error", message="error", key = {s})
241 * pattern synchHasNoOutgoing(s : Synchronization) {
242 * neg find transition(_, s, _);
243 * }
244 * </pre></code>
245 *
246 * @see Match
247 * @see SynchHasNoOutgoing
248 *
249 */
250 public static class Matcher extends BaseMatcher<SynchHasNoOutgoing.Match> {
251 /**
252 * Initializes the pattern matcher within an existing VIATRA Query engine.
253 * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned.
254 *
255 * @param engine the existing VIATRA Query engine in which this matcher will be created.
256 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
257 *
258 */
259 public static SynchHasNoOutgoing.Matcher on(final ViatraQueryEngine engine) {
260 // check if matcher already exists
261 Matcher matcher = engine.getExistingMatcher(querySpecification());
262 if (matcher == null) {
263 matcher = (Matcher)engine.getMatcher(querySpecification());
264 }
265 return matcher;
266 }
267
268 /**
269 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
270 * @return an initialized matcher
271 * @noreference This method is for internal matcher initialization by the framework, do not call it manually.
272 *
273 */
274 public static SynchHasNoOutgoing.Matcher create() {
275 return new Matcher();
276 }
277
278 private final static int POSITION_S = 0;
279
280 private final static Logger LOGGER = ViatraQueryLoggingUtil.getLogger(SynchHasNoOutgoing.Matcher.class);
281
282 /**
283 * Initializes the pattern matcher within an existing VIATRA Query engine.
284 * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned.
285 *
286 * @param engine the existing VIATRA Query engine in which this matcher will be created.
287 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
288 *
289 */
290 private Matcher() {
291 super(querySpecification());
292 }
293
294 /**
295 * Returns the set of all matches of the pattern that conform to the given fixed values of some parameters.
296 * @param pS the fixed value of pattern parameter s, or null if not bound.
297 * @return matches represented as a Match object.
298 *
299 */
300 public Collection<SynchHasNoOutgoing.Match> getAllMatches(final Synchronization pS) {
301 return rawStreamAllMatches(new Object[]{pS}).collect(Collectors.toSet());
302 }
303
304 /**
305 * Returns a stream of all matches of the pattern that conform to the given fixed values of some parameters.
306 * </p>
307 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
308 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
309 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
310 * @param pS the fixed value of pattern parameter s, or null if not bound.
311 * @return a stream of matches represented as a Match object.
312 *
313 */
314 public Stream<SynchHasNoOutgoing.Match> streamAllMatches(final Synchronization pS) {
315 return rawStreamAllMatches(new Object[]{pS});
316 }
317
318 /**
319 * Returns an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters.
320 * Neither determinism nor randomness of selection is guaranteed.
321 * @param pS the fixed value of pattern parameter s, or null if not bound.
322 * @return a match represented as a Match object, or null if no match is found.
323 *
324 */
325 public Optional<SynchHasNoOutgoing.Match> getOneArbitraryMatch(final Synchronization pS) {
326 return rawGetOneArbitraryMatch(new Object[]{pS});
327 }
328
329 /**
330 * Indicates whether the given combination of specified pattern parameters constitute a valid pattern match,
331 * under any possible substitution of the unspecified parameters (if any).
332 * @param pS the fixed value of pattern parameter s, or null if not bound.
333 * @return true if the input is a valid (partial) match of the pattern.
334 *
335 */
336 public boolean hasMatch(final Synchronization pS) {
337 return rawHasMatch(new Object[]{pS});
338 }
339
340 /**
341 * Returns the number of all matches of the pattern that conform to the given fixed values of some parameters.
342 * @param pS the fixed value of pattern parameter s, or null if not bound.
343 * @return the number of pattern matches found.
344 *
345 */
346 public int countMatches(final Synchronization pS) {
347 return rawCountMatches(new Object[]{pS});
348 }
349
350 /**
351 * Executes the given processor on an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters.
352 * Neither determinism nor randomness of selection is guaranteed.
353 * @param pS the fixed value of pattern parameter s, or null if not bound.
354 * @param processor the action that will process the selected match.
355 * @return true if the pattern has at least one match with the given parameter values, false if the processor was not invoked
356 *
357 */
358 public boolean forOneArbitraryMatch(final Synchronization pS, final Consumer<? super SynchHasNoOutgoing.Match> processor) {
359 return rawForOneArbitraryMatch(new Object[]{pS}, processor);
360 }
361
362 /**
363 * Returns a new (partial) match.
364 * This can be used e.g. to call the matcher with a partial match.
365 * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object.
366 * @param pS the fixed value of pattern parameter s, or null if not bound.
367 * @return the (partial) match object.
368 *
369 */
370 public SynchHasNoOutgoing.Match newMatch(final Synchronization pS) {
371 return SynchHasNoOutgoing.Match.newMatch(pS);
372 }
373
374 /**
375 * Retrieve the set of values that occur in matches for s.
376 * @return the Set of all values or empty set if there are no matches
377 *
378 */
379 protected Stream<Synchronization> rawStreamAllValuesOfs(final Object[] parameters) {
380 return rawStreamAllValues(POSITION_S, parameters).map(Synchronization.class::cast);
381 }
382
383 /**
384 * Retrieve the set of values that occur in matches for s.
385 * @return the Set of all values or empty set if there are no matches
386 *
387 */
388 public Set<Synchronization> getAllValuesOfs() {
389 return rawStreamAllValuesOfs(emptyArray()).collect(Collectors.toSet());
390 }
391
392 /**
393 * Retrieve the set of values that occur in matches for s.
394 * @return the Set of all values or empty set if there are no matches
395 *
396 */
397 public Stream<Synchronization> streamAllValuesOfs() {
398 return rawStreamAllValuesOfs(emptyArray());
399 }
400
401 @Override
402 protected SynchHasNoOutgoing.Match tupleToMatch(final Tuple t) {
403 try {
404 return SynchHasNoOutgoing.Match.newMatch((Synchronization) t.get(POSITION_S));
405 } catch(ClassCastException e) {
406 LOGGER.error("Element(s) in tuple not properly typed!",e);
407 return null;
408 }
409 }
410
411 @Override
412 protected SynchHasNoOutgoing.Match arrayToMatch(final Object[] match) {
413 try {
414 return SynchHasNoOutgoing.Match.newMatch((Synchronization) match[POSITION_S]);
415 } catch(ClassCastException e) {
416 LOGGER.error("Element(s) in array not properly typed!",e);
417 return null;
418 }
419 }
420
421 @Override
422 protected SynchHasNoOutgoing.Match arrayToMatchMutable(final Object[] match) {
423 try {
424 return SynchHasNoOutgoing.Match.newMutableMatch((Synchronization) match[POSITION_S]);
425 } catch(ClassCastException e) {
426 LOGGER.error("Element(s) in array not properly typed!",e);
427 return null;
428 }
429 }
430
431 /**
432 * @return the singleton instance of the query specification of this pattern
433 * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded
434 *
435 */
436 public static IQuerySpecification<SynchHasNoOutgoing.Matcher> querySpecification() {
437 return SynchHasNoOutgoing.instance();
438 }
439 }
440
441 private SynchHasNoOutgoing() {
442 super(GeneratedPQuery.INSTANCE);
443 }
444
445 /**
446 * @return the singleton instance of the query specification
447 * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded
448 *
449 */
450 public static SynchHasNoOutgoing instance() {
451 try{
452 return LazyHolder.INSTANCE;
453 } catch (ExceptionInInitializerError err) {
454 throw processInitializerError(err);
455 }
456 }
457
458 @Override
459 protected SynchHasNoOutgoing.Matcher instantiate(final ViatraQueryEngine engine) {
460 return SynchHasNoOutgoing.Matcher.on(engine);
461 }
462
463 @Override
464 public SynchHasNoOutgoing.Matcher instantiate() {
465 return SynchHasNoOutgoing.Matcher.create();
466 }
467
468 @Override
469 public SynchHasNoOutgoing.Match newEmptyMatch() {
470 return SynchHasNoOutgoing.Match.newEmptyMatch();
471 }
472
473 @Override
474 public SynchHasNoOutgoing.Match newMatch(final Object... parameters) {
475 return SynchHasNoOutgoing.Match.newMatch((ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization) parameters[0]);
476 }
477
478 /**
479 * Inner class allowing the singleton instance of {@link JvmGenericType: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.SynchHasNoOutgoing (visibility: PUBLIC, simpleName: SynchHasNoOutgoing, identifier: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.SynchHasNoOutgoing, deprecated: <unset>) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)} to be created
480 * <b>not</b> at the class load time of the outer class,
481 * but rather at the first call to {@link JvmGenericType: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.SynchHasNoOutgoing (visibility: PUBLIC, simpleName: SynchHasNoOutgoing, identifier: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.SynchHasNoOutgoing, deprecated: <unset>) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)#instance()}.
482 *
483 * <p> This workaround is required e.g. to support recursion.
484 *
485 */
486 private static class LazyHolder {
487 private final static SynchHasNoOutgoing INSTANCE = new SynchHasNoOutgoing();
488
489 /**
490 * Statically initializes the query specification <b>after</b> the field {@link #INSTANCE} is assigned.
491 * This initialization order is required to support indirect recursion.
492 *
493 * <p> The static initializer is defined using a helper field to work around limitations of the code generator.
494 *
495 */
496 private final static Object STATIC_INITIALIZER = ensureInitialized();
497
498 public static Object ensureInitialized() {
499 INSTANCE.ensureInitializedInternal();
500 return null;
501 }
502 }
503
504 private static class GeneratedPQuery extends BaseGeneratedEMFPQuery {
505 private final static SynchHasNoOutgoing.GeneratedPQuery INSTANCE = new GeneratedPQuery();
506
507 private final PParameter parameter_s = new PParameter("s", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "Synchronization")), PParameterDirection.INOUT);
508
509 private final List<PParameter> parameters = Arrays.asList(parameter_s);
510
511 private GeneratedPQuery() {
512 super(PVisibility.PUBLIC);
513 }
514
515 @Override
516 public String getFullyQualifiedName() {
517 return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.synchHasNoOutgoing";
518 }
519
520 @Override
521 public List<String> getParameterNames() {
522 return Arrays.asList("s");
523 }
524
525 @Override
526 public List<PParameter> getParameters() {
527 return parameters;
528 }
529
530 @Override
531 public Set<PBody> doGetContainedBodies() {
532 setEvaluationHints(new QueryEvaluationHint(null, QueryEvaluationHint.BackendRequirement.UNSPECIFIED));
533 Set<PBody> bodies = new LinkedHashSet<>();
534 {
535 PBody body = new PBody(this);
536 PVariable var_s = body.getOrCreateVariableByName("s");
537 PVariable var___0_ = body.getOrCreateVariableByName("_<0>");
538 PVariable var___1_ = body.getOrCreateVariableByName("_<1>");
539 new TypeConstraint(body, Tuples.flatTupleOf(var_s), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Synchronization")));
540 body.setSymbolicParameters(Arrays.<ExportedParameter>asList(
541 new ExportedParameter(body, var_s, parameter_s)
542 ));
543 // neg find transition(_, s, _)
544 new NegativePatternCall(body, Tuples.flatTupleOf(var___0_, var_s, var___1_), Transition.instance().getInternalQueryRepresentation());
545 bodies.add(body);
546 }
547 {
548 PAnnotation annotation = new PAnnotation("Constraint");
549 annotation.addAttribute("severity", "error");
550 annotation.addAttribute("message", "error");
551 annotation.addAttribute("key", Arrays.asList(new Object[] {
552 new ParameterReference("s")
553 }));
554 addAnnotation(annotation);
555 }
556 return bodies;
557 }
558 }
559}
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/SynchThree.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/SynchThree.java
new file mode 100644
index 00000000..228db3a0
--- /dev/null
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/SynchThree.java
@@ -0,0 +1,639 @@
1/**
2 * Generated from platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduPatterns.vql
3 */
4package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries;
5
6import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization;
7import java.util.Arrays;
8import java.util.Collection;
9import java.util.LinkedHashSet;
10import java.util.List;
11import java.util.Objects;
12import java.util.Optional;
13import java.util.Set;
14import java.util.function.Consumer;
15import java.util.stream.Collectors;
16import java.util.stream.Stream;
17import org.apache.log4j.Logger;
18import org.eclipse.emf.ecore.EClass;
19import org.eclipse.viatra.query.runtime.api.IPatternMatch;
20import org.eclipse.viatra.query.runtime.api.IQuerySpecification;
21import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine;
22import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFPQuery;
23import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFQuerySpecification;
24import org.eclipse.viatra.query.runtime.api.impl.BaseMatcher;
25import org.eclipse.viatra.query.runtime.api.impl.BasePatternMatch;
26import org.eclipse.viatra.query.runtime.emf.types.EClassTransitiveInstancesKey;
27import org.eclipse.viatra.query.runtime.emf.types.EStructuralFeatureInstancesKey;
28import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint;
29import org.eclipse.viatra.query.runtime.matchers.psystem.PBody;
30import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable;
31import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.PAnnotation;
32import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.ParameterReference;
33import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.Equality;
34import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExportedParameter;
35import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.Inequality;
36import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint;
37import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter;
38import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameterDirection;
39import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PVisibility;
40import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple;
41import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples;
42import org.eclipse.viatra.query.runtime.util.ViatraQueryLoggingUtil;
43
44/**
45 * A pattern-specific query specification that can instantiate Matcher in a type-safe way.
46 *
47 * <p>Original source:
48 * <code><pre>
49 * Simplifying model generation
50 *
51 * {@literal @}Constraint(severity="error", message="error", key = {s})
52 * pattern synchThree(s: Synchronization) {
53 * Transition.target(t1,s);
54 * Transition.target(t2,s);
55 * Transition.target(t3,s);
56 * t1!=t2;
57 * t2!=t3;
58 * t1!=t3;
59 * } or {
60 * Transition.source(t1,s);
61 * Transition.source(t2,s);
62 * Transition.source(t3,s);
63 * t1!=t2;
64 * t2!=t3;
65 * t1!=t3;
66 * }
67 * </pre></code>
68 *
69 * @see Matcher
70 * @see Match
71 *
72 */
73@SuppressWarnings("all")
74public final class SynchThree extends BaseGeneratedEMFQuerySpecification<SynchThree.Matcher> {
75 /**
76 * Pattern-specific match representation of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.synchThree pattern,
77 * to be used in conjunction with {@link Matcher}.
78 *
79 * <p>Class fields correspond to parameters of the pattern. Fields with value null are considered unassigned.
80 * Each instance is a (possibly partial) substitution of pattern parameters,
81 * usable to represent a match of the pattern in the result of a query,
82 * or to specify the bound (fixed) input parameters when issuing a query.
83 *
84 * @see Matcher
85 *
86 */
87 public static abstract class Match extends BasePatternMatch {
88 private Synchronization fS;
89
90 private static List<String> parameterNames = makeImmutableList("s");
91
92 private Match(final Synchronization pS) {
93 this.fS = pS;
94 }
95
96 @Override
97 public Object get(final String parameterName) {
98 if ("s".equals(parameterName)) return this.fS;
99 return null;
100 }
101
102 public Synchronization getS() {
103 return this.fS;
104 }
105
106 @Override
107 public boolean set(final String parameterName, final Object newValue) {
108 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
109 if ("s".equals(parameterName) ) {
110 this.fS = (Synchronization) newValue;
111 return true;
112 }
113 return false;
114 }
115
116 public void setS(final Synchronization pS) {
117 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
118 this.fS = pS;
119 }
120
121 @Override
122 public String patternName() {
123 return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.synchThree";
124 }
125
126 @Override
127 public List<String> parameterNames() {
128 return SynchThree.Match.parameterNames;
129 }
130
131 @Override
132 public Object[] toArray() {
133 return new Object[]{fS};
134 }
135
136 @Override
137 public SynchThree.Match toImmutable() {
138 return isMutable() ? newMatch(fS) : this;
139 }
140
141 @Override
142 public String prettyPrint() {
143 StringBuilder result = new StringBuilder();
144 result.append("\"s\"=" + prettyPrintValue(fS));
145 return result.toString();
146 }
147
148 @Override
149 public int hashCode() {
150 return Objects.hash(fS);
151 }
152
153 @Override
154 public boolean equals(final Object obj) {
155 if (this == obj)
156 return true;
157 if (obj == null) {
158 return false;
159 }
160 if ((obj instanceof SynchThree.Match)) {
161 SynchThree.Match other = (SynchThree.Match) obj;
162 return Objects.equals(fS, other.fS);
163 } else {
164 // this should be infrequent
165 if (!(obj instanceof IPatternMatch)) {
166 return false;
167 }
168 IPatternMatch otherSig = (IPatternMatch) obj;
169 return Objects.equals(specification(), otherSig.specification()) && Arrays.deepEquals(toArray(), otherSig.toArray());
170 }
171 }
172
173 @Override
174 public SynchThree specification() {
175 return SynchThree.instance();
176 }
177
178 /**
179 * Returns an empty, mutable match.
180 * Fields of the mutable match can be filled to create a partial match, usable as matcher input.
181 *
182 * @return the empty match.
183 *
184 */
185 public static SynchThree.Match newEmptyMatch() {
186 return new Mutable(null);
187 }
188
189 /**
190 * Returns a mutable (partial) match.
191 * Fields of the mutable match can be filled to create a partial match, usable as matcher input.
192 *
193 * @param pS the fixed value of pattern parameter s, or null if not bound.
194 * @return the new, mutable (partial) match object.
195 *
196 */
197 public static SynchThree.Match newMutableMatch(final Synchronization pS) {
198 return new Mutable(pS);
199 }
200
201 /**
202 * Returns a new (partial) match.
203 * This can be used e.g. to call the matcher with a partial match.
204 * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object.
205 * @param pS the fixed value of pattern parameter s, or null if not bound.
206 * @return the (partial) match object.
207 *
208 */
209 public static SynchThree.Match newMatch(final Synchronization pS) {
210 return new Immutable(pS);
211 }
212
213 private static final class Mutable extends SynchThree.Match {
214 Mutable(final Synchronization pS) {
215 super(pS);
216 }
217
218 @Override
219 public boolean isMutable() {
220 return true;
221 }
222 }
223
224 private static final class Immutable extends SynchThree.Match {
225 Immutable(final Synchronization pS) {
226 super(pS);
227 }
228
229 @Override
230 public boolean isMutable() {
231 return false;
232 }
233 }
234 }
235
236 /**
237 * Generated pattern matcher API of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.synchThree pattern,
238 * providing pattern-specific query methods.
239 *
240 * <p>Use the pattern matcher on a given model via {@link #on(ViatraQueryEngine)},
241 * e.g. in conjunction with {@link ViatraQueryEngine#on(QueryScope)}.
242 *
243 * <p>Matches of the pattern will be represented as {@link Match}.
244 *
245 * <p>Original source:
246 * <code><pre>
247 * Simplifying model generation
248 *
249 * {@literal @}Constraint(severity="error", message="error", key = {s})
250 * pattern synchThree(s: Synchronization) {
251 * Transition.target(t1,s);
252 * Transition.target(t2,s);
253 * Transition.target(t3,s);
254 * t1!=t2;
255 * t2!=t3;
256 * t1!=t3;
257 * } or {
258 * Transition.source(t1,s);
259 * Transition.source(t2,s);
260 * Transition.source(t3,s);
261 * t1!=t2;
262 * t2!=t3;
263 * t1!=t3;
264 * }
265 * </pre></code>
266 *
267 * @see Match
268 * @see SynchThree
269 *
270 */
271 public static class Matcher extends BaseMatcher<SynchThree.Match> {
272 /**
273 * Initializes the pattern matcher within an existing VIATRA Query engine.
274 * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned.
275 *
276 * @param engine the existing VIATRA Query engine in which this matcher will be created.
277 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
278 *
279 */
280 public static SynchThree.Matcher on(final ViatraQueryEngine engine) {
281 // check if matcher already exists
282 Matcher matcher = engine.getExistingMatcher(querySpecification());
283 if (matcher == null) {
284 matcher = (Matcher)engine.getMatcher(querySpecification());
285 }
286 return matcher;
287 }
288
289 /**
290 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
291 * @return an initialized matcher
292 * @noreference This method is for internal matcher initialization by the framework, do not call it manually.
293 *
294 */
295 public static SynchThree.Matcher create() {
296 return new Matcher();
297 }
298
299 private final static int POSITION_S = 0;
300
301 private final static Logger LOGGER = ViatraQueryLoggingUtil.getLogger(SynchThree.Matcher.class);
302
303 /**
304 * Initializes the pattern matcher within an existing VIATRA Query engine.
305 * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned.
306 *
307 * @param engine the existing VIATRA Query engine in which this matcher will be created.
308 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
309 *
310 */
311 private Matcher() {
312 super(querySpecification());
313 }
314
315 /**
316 * Returns the set of all matches of the pattern that conform to the given fixed values of some parameters.
317 * @param pS the fixed value of pattern parameter s, or null if not bound.
318 * @return matches represented as a Match object.
319 *
320 */
321 public Collection<SynchThree.Match> getAllMatches(final Synchronization pS) {
322 return rawStreamAllMatches(new Object[]{pS}).collect(Collectors.toSet());
323 }
324
325 /**
326 * Returns a stream of all matches of the pattern that conform to the given fixed values of some parameters.
327 * </p>
328 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
329 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
330 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
331 * @param pS the fixed value of pattern parameter s, or null if not bound.
332 * @return a stream of matches represented as a Match object.
333 *
334 */
335 public Stream<SynchThree.Match> streamAllMatches(final Synchronization pS) {
336 return rawStreamAllMatches(new Object[]{pS});
337 }
338
339 /**
340 * Returns an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters.
341 * Neither determinism nor randomness of selection is guaranteed.
342 * @param pS the fixed value of pattern parameter s, or null if not bound.
343 * @return a match represented as a Match object, or null if no match is found.
344 *
345 */
346 public Optional<SynchThree.Match> getOneArbitraryMatch(final Synchronization pS) {
347 return rawGetOneArbitraryMatch(new Object[]{pS});
348 }
349
350 /**
351 * Indicates whether the given combination of specified pattern parameters constitute a valid pattern match,
352 * under any possible substitution of the unspecified parameters (if any).
353 * @param pS the fixed value of pattern parameter s, or null if not bound.
354 * @return true if the input is a valid (partial) match of the pattern.
355 *
356 */
357 public boolean hasMatch(final Synchronization pS) {
358 return rawHasMatch(new Object[]{pS});
359 }
360
361 /**
362 * Returns the number of all matches of the pattern that conform to the given fixed values of some parameters.
363 * @param pS the fixed value of pattern parameter s, or null if not bound.
364 * @return the number of pattern matches found.
365 *
366 */
367 public int countMatches(final Synchronization pS) {
368 return rawCountMatches(new Object[]{pS});
369 }
370
371 /**
372 * Executes the given processor on an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters.
373 * Neither determinism nor randomness of selection is guaranteed.
374 * @param pS the fixed value of pattern parameter s, or null if not bound.
375 * @param processor the action that will process the selected match.
376 * @return true if the pattern has at least one match with the given parameter values, false if the processor was not invoked
377 *
378 */
379 public boolean forOneArbitraryMatch(final Synchronization pS, final Consumer<? super SynchThree.Match> processor) {
380 return rawForOneArbitraryMatch(new Object[]{pS}, processor);
381 }
382
383 /**
384 * Returns a new (partial) match.
385 * This can be used e.g. to call the matcher with a partial match.
386 * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object.
387 * @param pS the fixed value of pattern parameter s, or null if not bound.
388 * @return the (partial) match object.
389 *
390 */
391 public SynchThree.Match newMatch(final Synchronization pS) {
392 return SynchThree.Match.newMatch(pS);
393 }
394
395 /**
396 * Retrieve the set of values that occur in matches for s.
397 * @return the Set of all values or empty set if there are no matches
398 *
399 */
400 protected Stream<Synchronization> rawStreamAllValuesOfs(final Object[] parameters) {
401 return rawStreamAllValues(POSITION_S, parameters).map(Synchronization.class::cast);
402 }
403
404 /**
405 * Retrieve the set of values that occur in matches for s.
406 * @return the Set of all values or empty set if there are no matches
407 *
408 */
409 public Set<Synchronization> getAllValuesOfs() {
410 return rawStreamAllValuesOfs(emptyArray()).collect(Collectors.toSet());
411 }
412
413 /**
414 * Retrieve the set of values that occur in matches for s.
415 * @return the Set of all values or empty set if there are no matches
416 *
417 */
418 public Stream<Synchronization> streamAllValuesOfs() {
419 return rawStreamAllValuesOfs(emptyArray());
420 }
421
422 @Override
423 protected SynchThree.Match tupleToMatch(final Tuple t) {
424 try {
425 return SynchThree.Match.newMatch((Synchronization) t.get(POSITION_S));
426 } catch(ClassCastException e) {
427 LOGGER.error("Element(s) in tuple not properly typed!",e);
428 return null;
429 }
430 }
431
432 @Override
433 protected SynchThree.Match arrayToMatch(final Object[] match) {
434 try {
435 return SynchThree.Match.newMatch((Synchronization) match[POSITION_S]);
436 } catch(ClassCastException e) {
437 LOGGER.error("Element(s) in array not properly typed!",e);
438 return null;
439 }
440 }
441
442 @Override
443 protected SynchThree.Match arrayToMatchMutable(final Object[] match) {
444 try {
445 return SynchThree.Match.newMutableMatch((Synchronization) match[POSITION_S]);
446 } catch(ClassCastException e) {
447 LOGGER.error("Element(s) in array not properly typed!",e);
448 return null;
449 }
450 }
451
452 /**
453 * @return the singleton instance of the query specification of this pattern
454 * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded
455 *
456 */
457 public static IQuerySpecification<SynchThree.Matcher> querySpecification() {
458 return SynchThree.instance();
459 }
460 }
461
462 private SynchThree() {
463 super(GeneratedPQuery.INSTANCE);
464 }
465
466 /**
467 * @return the singleton instance of the query specification
468 * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded
469 *
470 */
471 public static SynchThree instance() {
472 try{
473 return LazyHolder.INSTANCE;
474 } catch (ExceptionInInitializerError err) {
475 throw processInitializerError(err);
476 }
477 }
478
479 @Override
480 protected SynchThree.Matcher instantiate(final ViatraQueryEngine engine) {
481 return SynchThree.Matcher.on(engine);
482 }
483
484 @Override
485 public SynchThree.Matcher instantiate() {
486 return SynchThree.Matcher.create();
487 }
488
489 @Override
490 public SynchThree.Match newEmptyMatch() {
491 return SynchThree.Match.newEmptyMatch();
492 }
493
494 @Override
495 public SynchThree.Match newMatch(final Object... parameters) {
496 return SynchThree.Match.newMatch((ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization) parameters[0]);
497 }
498
499 /**
500 * Inner class allowing the singleton instance of {@link JvmGenericType: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.SynchThree (visibility: PUBLIC, simpleName: SynchThree, identifier: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.SynchThree, deprecated: <unset>) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)} to be created
501 * <b>not</b> at the class load time of the outer class,
502 * but rather at the first call to {@link JvmGenericType: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.SynchThree (visibility: PUBLIC, simpleName: SynchThree, identifier: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.SynchThree, deprecated: <unset>) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)#instance()}.
503 *
504 * <p> This workaround is required e.g. to support recursion.
505 *
506 */
507 private static class LazyHolder {
508 private final static SynchThree INSTANCE = new SynchThree();
509
510 /**
511 * Statically initializes the query specification <b>after</b> the field {@link #INSTANCE} is assigned.
512 * This initialization order is required to support indirect recursion.
513 *
514 * <p> The static initializer is defined using a helper field to work around limitations of the code generator.
515 *
516 */
517 private final static Object STATIC_INITIALIZER = ensureInitialized();
518
519 public static Object ensureInitialized() {
520 INSTANCE.ensureInitializedInternal();
521 return null;
522 }
523 }
524
525 private static class GeneratedPQuery extends BaseGeneratedEMFPQuery {
526 private final static SynchThree.GeneratedPQuery INSTANCE = new GeneratedPQuery();
527
528 private final PParameter parameter_s = new PParameter("s", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "Synchronization")), PParameterDirection.INOUT);
529
530 private final List<PParameter> parameters = Arrays.asList(parameter_s);
531
532 private GeneratedPQuery() {
533 super(PVisibility.PUBLIC);
534 }
535
536 @Override
537 public String getFullyQualifiedName() {
538 return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.synchThree";
539 }
540
541 @Override
542 public List<String> getParameterNames() {
543 return Arrays.asList("s");
544 }
545
546 @Override
547 public List<PParameter> getParameters() {
548 return parameters;
549 }
550
551 @Override
552 public Set<PBody> doGetContainedBodies() {
553 setEvaluationHints(new QueryEvaluationHint(null, QueryEvaluationHint.BackendRequirement.UNSPECIFIED));
554 Set<PBody> bodies = new LinkedHashSet<>();
555 {
556 PBody body = new PBody(this);
557 PVariable var_s = body.getOrCreateVariableByName("s");
558 PVariable var_t1 = body.getOrCreateVariableByName("t1");
559 PVariable var_t2 = body.getOrCreateVariableByName("t2");
560 PVariable var_t3 = body.getOrCreateVariableByName("t3");
561 new TypeConstraint(body, Tuples.flatTupleOf(var_s), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Synchronization")));
562 body.setSymbolicParameters(Arrays.<ExportedParameter>asList(
563 new ExportedParameter(body, var_s, parameter_s)
564 ));
565 // Transition.target(t1,s)
566 new TypeConstraint(body, Tuples.flatTupleOf(var_t1), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Transition")));
567 PVariable var__virtual_0_ = body.getOrCreateVariableByName(".virtual{0}");
568 new TypeConstraint(body, Tuples.flatTupleOf(var_t1, var__virtual_0_), new EStructuralFeatureInstancesKey(getFeatureLiteral("YakinduMetamodel", "Transition", "target")));
569 new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_0_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Vertex")));
570 new Equality(body, var__virtual_0_, var_s);
571 // Transition.target(t2,s)
572 new TypeConstraint(body, Tuples.flatTupleOf(var_t2), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Transition")));
573 PVariable var__virtual_1_ = body.getOrCreateVariableByName(".virtual{1}");
574 new TypeConstraint(body, Tuples.flatTupleOf(var_t2, var__virtual_1_), new EStructuralFeatureInstancesKey(getFeatureLiteral("YakinduMetamodel", "Transition", "target")));
575 new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_1_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Vertex")));
576 new Equality(body, var__virtual_1_, var_s);
577 // Transition.target(t3,s)
578 new TypeConstraint(body, Tuples.flatTupleOf(var_t3), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Transition")));
579 PVariable var__virtual_2_ = body.getOrCreateVariableByName(".virtual{2}");
580 new TypeConstraint(body, Tuples.flatTupleOf(var_t3, var__virtual_2_), new EStructuralFeatureInstancesKey(getFeatureLiteral("YakinduMetamodel", "Transition", "target")));
581 new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_2_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Vertex")));
582 new Equality(body, var__virtual_2_, var_s);
583 // t1!=t2
584 new Inequality(body, var_t1, var_t2);
585 // t2!=t3
586 new Inequality(body, var_t2, var_t3);
587 // t1!=t3
588 new Inequality(body, var_t1, var_t3);
589 bodies.add(body);
590 }
591 {
592 PBody body = new PBody(this);
593 PVariable var_s = body.getOrCreateVariableByName("s");
594 PVariable var_t1 = body.getOrCreateVariableByName("t1");
595 PVariable var_t2 = body.getOrCreateVariableByName("t2");
596 PVariable var_t3 = body.getOrCreateVariableByName("t3");
597 new TypeConstraint(body, Tuples.flatTupleOf(var_s), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Synchronization")));
598 body.setSymbolicParameters(Arrays.<ExportedParameter>asList(
599 new ExportedParameter(body, var_s, parameter_s)
600 ));
601 // Transition.source(t1,s)
602 new TypeConstraint(body, Tuples.flatTupleOf(var_t1), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Transition")));
603 PVariable var__virtual_0_ = body.getOrCreateVariableByName(".virtual{0}");
604 new TypeConstraint(body, Tuples.flatTupleOf(var_t1, var__virtual_0_), new EStructuralFeatureInstancesKey(getFeatureLiteral("YakinduMetamodel", "Transition", "source")));
605 new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_0_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Vertex")));
606 new Equality(body, var__virtual_0_, var_s);
607 // Transition.source(t2,s)
608 new TypeConstraint(body, Tuples.flatTupleOf(var_t2), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Transition")));
609 PVariable var__virtual_1_ = body.getOrCreateVariableByName(".virtual{1}");
610 new TypeConstraint(body, Tuples.flatTupleOf(var_t2, var__virtual_1_), new EStructuralFeatureInstancesKey(getFeatureLiteral("YakinduMetamodel", "Transition", "source")));
611 new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_1_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Vertex")));
612 new Equality(body, var__virtual_1_, var_s);
613 // Transition.source(t3,s)
614 new TypeConstraint(body, Tuples.flatTupleOf(var_t3), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Transition")));
615 PVariable var__virtual_2_ = body.getOrCreateVariableByName(".virtual{2}");
616 new TypeConstraint(body, Tuples.flatTupleOf(var_t3, var__virtual_2_), new EStructuralFeatureInstancesKey(getFeatureLiteral("YakinduMetamodel", "Transition", "source")));
617 new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_2_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Vertex")));
618 new Equality(body, var__virtual_2_, var_s);
619 // t1!=t2
620 new Inequality(body, var_t1, var_t2);
621 // t2!=t3
622 new Inequality(body, var_t2, var_t3);
623 // t1!=t3
624 new Inequality(body, var_t1, var_t3);
625 bodies.add(body);
626 }
627 {
628 PAnnotation annotation = new PAnnotation("Constraint");
629 annotation.addAttribute("severity", "error");
630 annotation.addAttribute("message", "error");
631 annotation.addAttribute("key", Arrays.asList(new Object[] {
632 new ParameterReference("s")
633 }));
634 addAnnotation(annotation);
635 }
636 return bodies;
637 }
638 }
639}
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/SynchronizedIncomingInSameRegion.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/SynchronizedIncomingInSameRegion.java
new file mode 100644
index 00000000..dabbe8c5
--- /dev/null
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/SynchronizedIncomingInSameRegion.java
@@ -0,0 +1,888 @@
1/**
2 * Generated from platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduPatterns.vql
3 */
4package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries;
5
6import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization;
7import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex;
8import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.Transition;
9import java.util.Arrays;
10import java.util.Collection;
11import java.util.LinkedHashSet;
12import java.util.List;
13import java.util.Objects;
14import java.util.Optional;
15import java.util.Set;
16import java.util.function.Consumer;
17import java.util.stream.Collectors;
18import java.util.stream.Stream;
19import org.apache.log4j.Logger;
20import org.eclipse.emf.ecore.EClass;
21import org.eclipse.viatra.query.runtime.api.IPatternMatch;
22import org.eclipse.viatra.query.runtime.api.IQuerySpecification;
23import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine;
24import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFPQuery;
25import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFQuerySpecification;
26import org.eclipse.viatra.query.runtime.api.impl.BaseMatcher;
27import org.eclipse.viatra.query.runtime.api.impl.BasePatternMatch;
28import org.eclipse.viatra.query.runtime.emf.types.EClassTransitiveInstancesKey;
29import org.eclipse.viatra.query.runtime.emf.types.EStructuralFeatureInstancesKey;
30import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint;
31import org.eclipse.viatra.query.runtime.matchers.psystem.PBody;
32import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable;
33import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.PAnnotation;
34import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.ParameterReference;
35import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.Equality;
36import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExportedParameter;
37import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.Inequality;
38import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.PositivePatternCall;
39import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint;
40import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter;
41import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameterDirection;
42import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PVisibility;
43import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple;
44import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples;
45import org.eclipse.viatra.query.runtime.util.ViatraQueryLoggingUtil;
46
47/**
48 * A pattern-specific query specification that can instantiate Matcher in a type-safe way.
49 *
50 * <p>Original source:
51 * <code><pre>
52 * {@literal @}Constraint(severity="error", message="error", key = {s})
53 * pattern SynchronizedIncomingInSameRegion(s : Synchronization, v1 : Vertex, v2 : Vertex) {
54 * find transition(t1, v1, s);
55 * find transition(t2, v2, s);
56 * t1!=t2;
57 * Region.vertices(r, v1);
58 * Region.vertices(r, v2);
59 * } or {
60 * find transition(t1, s, v1);
61 * find transition(t2, s, v2);
62 * t1!=t2;
63 * Region.vertices(r, v1);
64 * Region.vertices(r, v2);
65 * }
66 * </pre></code>
67 *
68 * @see Matcher
69 * @see Match
70 *
71 */
72@SuppressWarnings("all")
73public final class SynchronizedIncomingInSameRegion extends BaseGeneratedEMFQuerySpecification<SynchronizedIncomingInSameRegion.Matcher> {
74 /**
75 * Pattern-specific match representation of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.SynchronizedIncomingInSameRegion pattern,
76 * to be used in conjunction with {@link Matcher}.
77 *
78 * <p>Class fields correspond to parameters of the pattern. Fields with value null are considered unassigned.
79 * Each instance is a (possibly partial) substitution of pattern parameters,
80 * usable to represent a match of the pattern in the result of a query,
81 * or to specify the bound (fixed) input parameters when issuing a query.
82 *
83 * @see Matcher
84 *
85 */
86 public static abstract class Match extends BasePatternMatch {
87 private Synchronization fS;
88
89 private Vertex fV1;
90
91 private Vertex fV2;
92
93 private static List<String> parameterNames = makeImmutableList("s", "v1", "v2");
94
95 private Match(final Synchronization pS, final Vertex pV1, final Vertex pV2) {
96 this.fS = pS;
97 this.fV1 = pV1;
98 this.fV2 = pV2;
99 }
100
101 @Override
102 public Object get(final String parameterName) {
103 if ("s".equals(parameterName)) return this.fS;
104 if ("v1".equals(parameterName)) return this.fV1;
105 if ("v2".equals(parameterName)) return this.fV2;
106 return null;
107 }
108
109 public Synchronization getS() {
110 return this.fS;
111 }
112
113 public Vertex getV1() {
114 return this.fV1;
115 }
116
117 public Vertex getV2() {
118 return this.fV2;
119 }
120
121 @Override
122 public boolean set(final String parameterName, final Object newValue) {
123 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
124 if ("s".equals(parameterName) ) {
125 this.fS = (Synchronization) newValue;
126 return true;
127 }
128 if ("v1".equals(parameterName) ) {
129 this.fV1 = (Vertex) newValue;
130 return true;
131 }
132 if ("v2".equals(parameterName) ) {
133 this.fV2 = (Vertex) newValue;
134 return true;
135 }
136 return false;
137 }
138
139 public void setS(final Synchronization pS) {
140 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
141 this.fS = pS;
142 }
143
144 public void setV1(final Vertex pV1) {
145 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
146 this.fV1 = pV1;
147 }
148
149 public void setV2(final Vertex pV2) {
150 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
151 this.fV2 = pV2;
152 }
153
154 @Override
155 public String patternName() {
156 return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.SynchronizedIncomingInSameRegion";
157 }
158
159 @Override
160 public List<String> parameterNames() {
161 return SynchronizedIncomingInSameRegion.Match.parameterNames;
162 }
163
164 @Override
165 public Object[] toArray() {
166 return new Object[]{fS, fV1, fV2};
167 }
168
169 @Override
170 public SynchronizedIncomingInSameRegion.Match toImmutable() {
171 return isMutable() ? newMatch(fS, fV1, fV2) : this;
172 }
173
174 @Override
175 public String prettyPrint() {
176 StringBuilder result = new StringBuilder();
177 result.append("\"s\"=" + prettyPrintValue(fS) + ", ");
178 result.append("\"v1\"=" + prettyPrintValue(fV1) + ", ");
179 result.append("\"v2\"=" + prettyPrintValue(fV2));
180 return result.toString();
181 }
182
183 @Override
184 public int hashCode() {
185 return Objects.hash(fS, fV1, fV2);
186 }
187
188 @Override
189 public boolean equals(final Object obj) {
190 if (this == obj)
191 return true;
192 if (obj == null) {
193 return false;
194 }
195 if ((obj instanceof SynchronizedIncomingInSameRegion.Match)) {
196 SynchronizedIncomingInSameRegion.Match other = (SynchronizedIncomingInSameRegion.Match) obj;
197 return Objects.equals(fS, other.fS) && Objects.equals(fV1, other.fV1) && Objects.equals(fV2, other.fV2);
198 } else {
199 // this should be infrequent
200 if (!(obj instanceof IPatternMatch)) {
201 return false;
202 }
203 IPatternMatch otherSig = (IPatternMatch) obj;
204 return Objects.equals(specification(), otherSig.specification()) && Arrays.deepEquals(toArray(), otherSig.toArray());
205 }
206 }
207
208 @Override
209 public SynchronizedIncomingInSameRegion specification() {
210 return SynchronizedIncomingInSameRegion.instance();
211 }
212
213 /**
214 * Returns an empty, mutable match.
215 * Fields of the mutable match can be filled to create a partial match, usable as matcher input.
216 *
217 * @return the empty match.
218 *
219 */
220 public static SynchronizedIncomingInSameRegion.Match newEmptyMatch() {
221 return new Mutable(null, null, null);
222 }
223
224 /**
225 * Returns a mutable (partial) match.
226 * Fields of the mutable match can be filled to create a partial match, usable as matcher input.
227 *
228 * @param pS the fixed value of pattern parameter s, or null if not bound.
229 * @param pV1 the fixed value of pattern parameter v1, or null if not bound.
230 * @param pV2 the fixed value of pattern parameter v2, or null if not bound.
231 * @return the new, mutable (partial) match object.
232 *
233 */
234 public static SynchronizedIncomingInSameRegion.Match newMutableMatch(final Synchronization pS, final Vertex pV1, final Vertex pV2) {
235 return new Mutable(pS, pV1, pV2);
236 }
237
238 /**
239 * Returns a new (partial) match.
240 * This can be used e.g. to call the matcher with a partial match.
241 * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object.
242 * @param pS the fixed value of pattern parameter s, or null if not bound.
243 * @param pV1 the fixed value of pattern parameter v1, or null if not bound.
244 * @param pV2 the fixed value of pattern parameter v2, or null if not bound.
245 * @return the (partial) match object.
246 *
247 */
248 public static SynchronizedIncomingInSameRegion.Match newMatch(final Synchronization pS, final Vertex pV1, final Vertex pV2) {
249 return new Immutable(pS, pV1, pV2);
250 }
251
252 private static final class Mutable extends SynchronizedIncomingInSameRegion.Match {
253 Mutable(final Synchronization pS, final Vertex pV1, final Vertex pV2) {
254 super(pS, pV1, pV2);
255 }
256
257 @Override
258 public boolean isMutable() {
259 return true;
260 }
261 }
262
263 private static final class Immutable extends SynchronizedIncomingInSameRegion.Match {
264 Immutable(final Synchronization pS, final Vertex pV1, final Vertex pV2) {
265 super(pS, pV1, pV2);
266 }
267
268 @Override
269 public boolean isMutable() {
270 return false;
271 }
272 }
273 }
274
275 /**
276 * Generated pattern matcher API of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.SynchronizedIncomingInSameRegion pattern,
277 * providing pattern-specific query methods.
278 *
279 * <p>Use the pattern matcher on a given model via {@link #on(ViatraQueryEngine)},
280 * e.g. in conjunction with {@link ViatraQueryEngine#on(QueryScope)}.
281 *
282 * <p>Matches of the pattern will be represented as {@link Match}.
283 *
284 * <p>Original source:
285 * <code><pre>
286 * {@literal @}Constraint(severity="error", message="error", key = {s})
287 * pattern SynchronizedIncomingInSameRegion(s : Synchronization, v1 : Vertex, v2 : Vertex) {
288 * find transition(t1, v1, s);
289 * find transition(t2, v2, s);
290 * t1!=t2;
291 * Region.vertices(r, v1);
292 * Region.vertices(r, v2);
293 * } or {
294 * find transition(t1, s, v1);
295 * find transition(t2, s, v2);
296 * t1!=t2;
297 * Region.vertices(r, v1);
298 * Region.vertices(r, v2);
299 * }
300 * </pre></code>
301 *
302 * @see Match
303 * @see SynchronizedIncomingInSameRegion
304 *
305 */
306 public static class Matcher extends BaseMatcher<SynchronizedIncomingInSameRegion.Match> {
307 /**
308 * Initializes the pattern matcher within an existing VIATRA Query engine.
309 * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned.
310 *
311 * @param engine the existing VIATRA Query engine in which this matcher will be created.
312 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
313 *
314 */
315 public static SynchronizedIncomingInSameRegion.Matcher on(final ViatraQueryEngine engine) {
316 // check if matcher already exists
317 Matcher matcher = engine.getExistingMatcher(querySpecification());
318 if (matcher == null) {
319 matcher = (Matcher)engine.getMatcher(querySpecification());
320 }
321 return matcher;
322 }
323
324 /**
325 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
326 * @return an initialized matcher
327 * @noreference This method is for internal matcher initialization by the framework, do not call it manually.
328 *
329 */
330 public static SynchronizedIncomingInSameRegion.Matcher create() {
331 return new Matcher();
332 }
333
334 private final static int POSITION_S = 0;
335
336 private final static int POSITION_V1 = 1;
337
338 private final static int POSITION_V2 = 2;
339
340 private final static Logger LOGGER = ViatraQueryLoggingUtil.getLogger(SynchronizedIncomingInSameRegion.Matcher.class);
341
342 /**
343 * Initializes the pattern matcher within an existing VIATRA Query engine.
344 * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned.
345 *
346 * @param engine the existing VIATRA Query engine in which this matcher will be created.
347 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
348 *
349 */
350 private Matcher() {
351 super(querySpecification());
352 }
353
354 /**
355 * Returns the set of all matches of the pattern that conform to the given fixed values of some parameters.
356 * @param pS the fixed value of pattern parameter s, or null if not bound.
357 * @param pV1 the fixed value of pattern parameter v1, or null if not bound.
358 * @param pV2 the fixed value of pattern parameter v2, or null if not bound.
359 * @return matches represented as a Match object.
360 *
361 */
362 public Collection<SynchronizedIncomingInSameRegion.Match> getAllMatches(final Synchronization pS, final Vertex pV1, final Vertex pV2) {
363 return rawStreamAllMatches(new Object[]{pS, pV1, pV2}).collect(Collectors.toSet());
364 }
365
366 /**
367 * Returns a stream of all matches of the pattern that conform to the given fixed values of some parameters.
368 * </p>
369 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
370 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
371 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
372 * @param pS the fixed value of pattern parameter s, or null if not bound.
373 * @param pV1 the fixed value of pattern parameter v1, or null if not bound.
374 * @param pV2 the fixed value of pattern parameter v2, or null if not bound.
375 * @return a stream of matches represented as a Match object.
376 *
377 */
378 public Stream<SynchronizedIncomingInSameRegion.Match> streamAllMatches(final Synchronization pS, final Vertex pV1, final Vertex pV2) {
379 return rawStreamAllMatches(new Object[]{pS, pV1, pV2});
380 }
381
382 /**
383 * Returns an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters.
384 * Neither determinism nor randomness of selection is guaranteed.
385 * @param pS the fixed value of pattern parameter s, or null if not bound.
386 * @param pV1 the fixed value of pattern parameter v1, or null if not bound.
387 * @param pV2 the fixed value of pattern parameter v2, or null if not bound.
388 * @return a match represented as a Match object, or null if no match is found.
389 *
390 */
391 public Optional<SynchronizedIncomingInSameRegion.Match> getOneArbitraryMatch(final Synchronization pS, final Vertex pV1, final Vertex pV2) {
392 return rawGetOneArbitraryMatch(new Object[]{pS, pV1, pV2});
393 }
394
395 /**
396 * Indicates whether the given combination of specified pattern parameters constitute a valid pattern match,
397 * under any possible substitution of the unspecified parameters (if any).
398 * @param pS the fixed value of pattern parameter s, or null if not bound.
399 * @param pV1 the fixed value of pattern parameter v1, or null if not bound.
400 * @param pV2 the fixed value of pattern parameter v2, or null if not bound.
401 * @return true if the input is a valid (partial) match of the pattern.
402 *
403 */
404 public boolean hasMatch(final Synchronization pS, final Vertex pV1, final Vertex pV2) {
405 return rawHasMatch(new Object[]{pS, pV1, pV2});
406 }
407
408 /**
409 * Returns the number of all matches of the pattern that conform to the given fixed values of some parameters.
410 * @param pS the fixed value of pattern parameter s, or null if not bound.
411 * @param pV1 the fixed value of pattern parameter v1, or null if not bound.
412 * @param pV2 the fixed value of pattern parameter v2, or null if not bound.
413 * @return the number of pattern matches found.
414 *
415 */
416 public int countMatches(final Synchronization pS, final Vertex pV1, final Vertex pV2) {
417 return rawCountMatches(new Object[]{pS, pV1, pV2});
418 }
419
420 /**
421 * Executes the given processor on an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters.
422 * Neither determinism nor randomness of selection is guaranteed.
423 * @param pS the fixed value of pattern parameter s, or null if not bound.
424 * @param pV1 the fixed value of pattern parameter v1, or null if not bound.
425 * @param pV2 the fixed value of pattern parameter v2, or null if not bound.
426 * @param processor the action that will process the selected match.
427 * @return true if the pattern has at least one match with the given parameter values, false if the processor was not invoked
428 *
429 */
430 public boolean forOneArbitraryMatch(final Synchronization pS, final Vertex pV1, final Vertex pV2, final Consumer<? super SynchronizedIncomingInSameRegion.Match> processor) {
431 return rawForOneArbitraryMatch(new Object[]{pS, pV1, pV2}, processor);
432 }
433
434 /**
435 * Returns a new (partial) match.
436 * This can be used e.g. to call the matcher with a partial match.
437 * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object.
438 * @param pS the fixed value of pattern parameter s, or null if not bound.
439 * @param pV1 the fixed value of pattern parameter v1, or null if not bound.
440 * @param pV2 the fixed value of pattern parameter v2, or null if not bound.
441 * @return the (partial) match object.
442 *
443 */
444 public SynchronizedIncomingInSameRegion.Match newMatch(final Synchronization pS, final Vertex pV1, final Vertex pV2) {
445 return SynchronizedIncomingInSameRegion.Match.newMatch(pS, pV1, pV2);
446 }
447
448 /**
449 * Retrieve the set of values that occur in matches for s.
450 * @return the Set of all values or empty set if there are no matches
451 *
452 */
453 protected Stream<Synchronization> rawStreamAllValuesOfs(final Object[] parameters) {
454 return rawStreamAllValues(POSITION_S, parameters).map(Synchronization.class::cast);
455 }
456
457 /**
458 * Retrieve the set of values that occur in matches for s.
459 * @return the Set of all values or empty set if there are no matches
460 *
461 */
462 public Set<Synchronization> getAllValuesOfs() {
463 return rawStreamAllValuesOfs(emptyArray()).collect(Collectors.toSet());
464 }
465
466 /**
467 * Retrieve the set of values that occur in matches for s.
468 * @return the Set of all values or empty set if there are no matches
469 *
470 */
471 public Stream<Synchronization> streamAllValuesOfs() {
472 return rawStreamAllValuesOfs(emptyArray());
473 }
474
475 /**
476 * Retrieve the set of values that occur in matches for s.
477 * </p>
478 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
479 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
480 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
481 *
482 * @return the Stream of all values or empty set if there are no matches
483 *
484 */
485 public Stream<Synchronization> streamAllValuesOfs(final SynchronizedIncomingInSameRegion.Match partialMatch) {
486 return rawStreamAllValuesOfs(partialMatch.toArray());
487 }
488
489 /**
490 * Retrieve the set of values that occur in matches for s.
491 * </p>
492 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
493 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
494 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
495 *
496 * @return the Stream of all values or empty set if there are no matches
497 *
498 */
499 public Stream<Synchronization> streamAllValuesOfs(final Vertex pV1, final Vertex pV2) {
500 return rawStreamAllValuesOfs(new Object[]{null, pV1, pV2});
501 }
502
503 /**
504 * Retrieve the set of values that occur in matches for s.
505 * @return the Set of all values or empty set if there are no matches
506 *
507 */
508 public Set<Synchronization> getAllValuesOfs(final SynchronizedIncomingInSameRegion.Match partialMatch) {
509 return rawStreamAllValuesOfs(partialMatch.toArray()).collect(Collectors.toSet());
510 }
511
512 /**
513 * Retrieve the set of values that occur in matches for s.
514 * @return the Set of all values or empty set if there are no matches
515 *
516 */
517 public Set<Synchronization> getAllValuesOfs(final Vertex pV1, final Vertex pV2) {
518 return rawStreamAllValuesOfs(new Object[]{null, pV1, pV2}).collect(Collectors.toSet());
519 }
520
521 /**
522 * Retrieve the set of values that occur in matches for v1.
523 * @return the Set of all values or empty set if there are no matches
524 *
525 */
526 protected Stream<Vertex> rawStreamAllValuesOfv1(final Object[] parameters) {
527 return rawStreamAllValues(POSITION_V1, parameters).map(Vertex.class::cast);
528 }
529
530 /**
531 * Retrieve the set of values that occur in matches for v1.
532 * @return the Set of all values or empty set if there are no matches
533 *
534 */
535 public Set<Vertex> getAllValuesOfv1() {
536 return rawStreamAllValuesOfv1(emptyArray()).collect(Collectors.toSet());
537 }
538
539 /**
540 * Retrieve the set of values that occur in matches for v1.
541 * @return the Set of all values or empty set if there are no matches
542 *
543 */
544 public Stream<Vertex> streamAllValuesOfv1() {
545 return rawStreamAllValuesOfv1(emptyArray());
546 }
547
548 /**
549 * Retrieve the set of values that occur in matches for v1.
550 * </p>
551 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
552 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
553 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
554 *
555 * @return the Stream of all values or empty set if there are no matches
556 *
557 */
558 public Stream<Vertex> streamAllValuesOfv1(final SynchronizedIncomingInSameRegion.Match partialMatch) {
559 return rawStreamAllValuesOfv1(partialMatch.toArray());
560 }
561
562 /**
563 * Retrieve the set of values that occur in matches for v1.
564 * </p>
565 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
566 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
567 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
568 *
569 * @return the Stream of all values or empty set if there are no matches
570 *
571 */
572 public Stream<Vertex> streamAllValuesOfv1(final Synchronization pS, final Vertex pV2) {
573 return rawStreamAllValuesOfv1(new Object[]{pS, null, pV2});
574 }
575
576 /**
577 * Retrieve the set of values that occur in matches for v1.
578 * @return the Set of all values or empty set if there are no matches
579 *
580 */
581 public Set<Vertex> getAllValuesOfv1(final SynchronizedIncomingInSameRegion.Match partialMatch) {
582 return rawStreamAllValuesOfv1(partialMatch.toArray()).collect(Collectors.toSet());
583 }
584
585 /**
586 * Retrieve the set of values that occur in matches for v1.
587 * @return the Set of all values or empty set if there are no matches
588 *
589 */
590 public Set<Vertex> getAllValuesOfv1(final Synchronization pS, final Vertex pV2) {
591 return rawStreamAllValuesOfv1(new Object[]{pS, null, pV2}).collect(Collectors.toSet());
592 }
593
594 /**
595 * Retrieve the set of values that occur in matches for v2.
596 * @return the Set of all values or empty set if there are no matches
597 *
598 */
599 protected Stream<Vertex> rawStreamAllValuesOfv2(final Object[] parameters) {
600 return rawStreamAllValues(POSITION_V2, parameters).map(Vertex.class::cast);
601 }
602
603 /**
604 * Retrieve the set of values that occur in matches for v2.
605 * @return the Set of all values or empty set if there are no matches
606 *
607 */
608 public Set<Vertex> getAllValuesOfv2() {
609 return rawStreamAllValuesOfv2(emptyArray()).collect(Collectors.toSet());
610 }
611
612 /**
613 * Retrieve the set of values that occur in matches for v2.
614 * @return the Set of all values or empty set if there are no matches
615 *
616 */
617 public Stream<Vertex> streamAllValuesOfv2() {
618 return rawStreamAllValuesOfv2(emptyArray());
619 }
620
621 /**
622 * Retrieve the set of values that occur in matches for v2.
623 * </p>
624 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
625 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
626 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
627 *
628 * @return the Stream of all values or empty set if there are no matches
629 *
630 */
631 public Stream<Vertex> streamAllValuesOfv2(final SynchronizedIncomingInSameRegion.Match partialMatch) {
632 return rawStreamAllValuesOfv2(partialMatch.toArray());
633 }
634
635 /**
636 * Retrieve the set of values that occur in matches for v2.
637 * </p>
638 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
639 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
640 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
641 *
642 * @return the Stream of all values or empty set if there are no matches
643 *
644 */
645 public Stream<Vertex> streamAllValuesOfv2(final Synchronization pS, final Vertex pV1) {
646 return rawStreamAllValuesOfv2(new Object[]{pS, pV1, null});
647 }
648
649 /**
650 * Retrieve the set of values that occur in matches for v2.
651 * @return the Set of all values or empty set if there are no matches
652 *
653 */
654 public Set<Vertex> getAllValuesOfv2(final SynchronizedIncomingInSameRegion.Match partialMatch) {
655 return rawStreamAllValuesOfv2(partialMatch.toArray()).collect(Collectors.toSet());
656 }
657
658 /**
659 * Retrieve the set of values that occur in matches for v2.
660 * @return the Set of all values or empty set if there are no matches
661 *
662 */
663 public Set<Vertex> getAllValuesOfv2(final Synchronization pS, final Vertex pV1) {
664 return rawStreamAllValuesOfv2(new Object[]{pS, pV1, null}).collect(Collectors.toSet());
665 }
666
667 @Override
668 protected SynchronizedIncomingInSameRegion.Match tupleToMatch(final Tuple t) {
669 try {
670 return SynchronizedIncomingInSameRegion.Match.newMatch((Synchronization) t.get(POSITION_S), (Vertex) t.get(POSITION_V1), (Vertex) t.get(POSITION_V2));
671 } catch(ClassCastException e) {
672 LOGGER.error("Element(s) in tuple not properly typed!",e);
673 return null;
674 }
675 }
676
677 @Override
678 protected SynchronizedIncomingInSameRegion.Match arrayToMatch(final Object[] match) {
679 try {
680 return SynchronizedIncomingInSameRegion.Match.newMatch((Synchronization) match[POSITION_S], (Vertex) match[POSITION_V1], (Vertex) match[POSITION_V2]);
681 } catch(ClassCastException e) {
682 LOGGER.error("Element(s) in array not properly typed!",e);
683 return null;
684 }
685 }
686
687 @Override
688 protected SynchronizedIncomingInSameRegion.Match arrayToMatchMutable(final Object[] match) {
689 try {
690 return SynchronizedIncomingInSameRegion.Match.newMutableMatch((Synchronization) match[POSITION_S], (Vertex) match[POSITION_V1], (Vertex) match[POSITION_V2]);
691 } catch(ClassCastException e) {
692 LOGGER.error("Element(s) in array not properly typed!",e);
693 return null;
694 }
695 }
696
697 /**
698 * @return the singleton instance of the query specification of this pattern
699 * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded
700 *
701 */
702 public static IQuerySpecification<SynchronizedIncomingInSameRegion.Matcher> querySpecification() {
703 return SynchronizedIncomingInSameRegion.instance();
704 }
705 }
706
707 private SynchronizedIncomingInSameRegion() {
708 super(GeneratedPQuery.INSTANCE);
709 }
710
711 /**
712 * @return the singleton instance of the query specification
713 * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded
714 *
715 */
716 public static SynchronizedIncomingInSameRegion instance() {
717 try{
718 return LazyHolder.INSTANCE;
719 } catch (ExceptionInInitializerError err) {
720 throw processInitializerError(err);
721 }
722 }
723
724 @Override
725 protected SynchronizedIncomingInSameRegion.Matcher instantiate(final ViatraQueryEngine engine) {
726 return SynchronizedIncomingInSameRegion.Matcher.on(engine);
727 }
728
729 @Override
730 public SynchronizedIncomingInSameRegion.Matcher instantiate() {
731 return SynchronizedIncomingInSameRegion.Matcher.create();
732 }
733
734 @Override
735 public SynchronizedIncomingInSameRegion.Match newEmptyMatch() {
736 return SynchronizedIncomingInSameRegion.Match.newEmptyMatch();
737 }
738
739 @Override
740 public SynchronizedIncomingInSameRegion.Match newMatch(final Object... parameters) {
741 return SynchronizedIncomingInSameRegion.Match.newMatch((ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization) parameters[0], (ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex) parameters[1], (ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex) parameters[2]);
742 }
743
744 /**
745 * Inner class allowing the singleton instance of {@link JvmGenericType: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.SynchronizedIncomingInSameRegion (visibility: PUBLIC, simpleName: SynchronizedIncomingInSameRegion, identifier: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.SynchronizedIncomingInSameRegion, deprecated: <unset>) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)} to be created
746 * <b>not</b> at the class load time of the outer class,
747 * but rather at the first call to {@link JvmGenericType: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.SynchronizedIncomingInSameRegion (visibility: PUBLIC, simpleName: SynchronizedIncomingInSameRegion, identifier: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.SynchronizedIncomingInSameRegion, deprecated: <unset>) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)#instance()}.
748 *
749 * <p> This workaround is required e.g. to support recursion.
750 *
751 */
752 private static class LazyHolder {
753 private final static SynchronizedIncomingInSameRegion INSTANCE = new SynchronizedIncomingInSameRegion();
754
755 /**
756 * Statically initializes the query specification <b>after</b> the field {@link #INSTANCE} is assigned.
757 * This initialization order is required to support indirect recursion.
758 *
759 * <p> The static initializer is defined using a helper field to work around limitations of the code generator.
760 *
761 */
762 private final static Object STATIC_INITIALIZER = ensureInitialized();
763
764 public static Object ensureInitialized() {
765 INSTANCE.ensureInitializedInternal();
766 return null;
767 }
768 }
769
770 private static class GeneratedPQuery extends BaseGeneratedEMFPQuery {
771 private final static SynchronizedIncomingInSameRegion.GeneratedPQuery INSTANCE = new GeneratedPQuery();
772
773 private final PParameter parameter_s = new PParameter("s", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "Synchronization")), PParameterDirection.INOUT);
774
775 private final PParameter parameter_v1 = new PParameter("v1", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "Vertex")), PParameterDirection.INOUT);
776
777 private final PParameter parameter_v2 = new PParameter("v2", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "Vertex")), PParameterDirection.INOUT);
778
779 private final List<PParameter> parameters = Arrays.asList(parameter_s, parameter_v1, parameter_v2);
780
781 private GeneratedPQuery() {
782 super(PVisibility.PUBLIC);
783 }
784
785 @Override
786 public String getFullyQualifiedName() {
787 return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.SynchronizedIncomingInSameRegion";
788 }
789
790 @Override
791 public List<String> getParameterNames() {
792 return Arrays.asList("s","v1","v2");
793 }
794
795 @Override
796 public List<PParameter> getParameters() {
797 return parameters;
798 }
799
800 @Override
801 public Set<PBody> doGetContainedBodies() {
802 setEvaluationHints(new QueryEvaluationHint(null, QueryEvaluationHint.BackendRequirement.UNSPECIFIED));
803 Set<PBody> bodies = new LinkedHashSet<>();
804 {
805 PBody body = new PBody(this);
806 PVariable var_s = body.getOrCreateVariableByName("s");
807 PVariable var_v1 = body.getOrCreateVariableByName("v1");
808 PVariable var_v2 = body.getOrCreateVariableByName("v2");
809 PVariable var_t1 = body.getOrCreateVariableByName("t1");
810 PVariable var_t2 = body.getOrCreateVariableByName("t2");
811 PVariable var_r = body.getOrCreateVariableByName("r");
812 new TypeConstraint(body, Tuples.flatTupleOf(var_s), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Synchronization")));
813 new TypeConstraint(body, Tuples.flatTupleOf(var_v1), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Vertex")));
814 new TypeConstraint(body, Tuples.flatTupleOf(var_v2), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Vertex")));
815 body.setSymbolicParameters(Arrays.<ExportedParameter>asList(
816 new ExportedParameter(body, var_s, parameter_s),
817 new ExportedParameter(body, var_v1, parameter_v1),
818 new ExportedParameter(body, var_v2, parameter_v2)
819 ));
820 // find transition(t1, v1, s)
821 new PositivePatternCall(body, Tuples.flatTupleOf(var_t1, var_v1, var_s), Transition.instance().getInternalQueryRepresentation());
822 // find transition(t2, v2, s)
823 new PositivePatternCall(body, Tuples.flatTupleOf(var_t2, var_v2, var_s), Transition.instance().getInternalQueryRepresentation());
824 // t1!=t2
825 new Inequality(body, var_t1, var_t2);
826 // Region.vertices(r, v1)
827 new TypeConstraint(body, Tuples.flatTupleOf(var_r), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Region")));
828 PVariable var__virtual_0_ = body.getOrCreateVariableByName(".virtual{0}");
829 new TypeConstraint(body, Tuples.flatTupleOf(var_r, var__virtual_0_), new EStructuralFeatureInstancesKey(getFeatureLiteral("YakinduMetamodel", "Region", "vertices")));
830 new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_0_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Vertex")));
831 new Equality(body, var__virtual_0_, var_v1);
832 // Region.vertices(r, v2)
833 new TypeConstraint(body, Tuples.flatTupleOf(var_r), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Region")));
834 PVariable var__virtual_1_ = body.getOrCreateVariableByName(".virtual{1}");
835 new TypeConstraint(body, Tuples.flatTupleOf(var_r, var__virtual_1_), new EStructuralFeatureInstancesKey(getFeatureLiteral("YakinduMetamodel", "Region", "vertices")));
836 new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_1_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Vertex")));
837 new Equality(body, var__virtual_1_, var_v2);
838 bodies.add(body);
839 }
840 {
841 PBody body = new PBody(this);
842 PVariable var_s = body.getOrCreateVariableByName("s");
843 PVariable var_v1 = body.getOrCreateVariableByName("v1");
844 PVariable var_v2 = body.getOrCreateVariableByName("v2");
845 PVariable var_t1 = body.getOrCreateVariableByName("t1");
846 PVariable var_t2 = body.getOrCreateVariableByName("t2");
847 PVariable var_r = body.getOrCreateVariableByName("r");
848 new TypeConstraint(body, Tuples.flatTupleOf(var_s), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Synchronization")));
849 new TypeConstraint(body, Tuples.flatTupleOf(var_v1), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Vertex")));
850 new TypeConstraint(body, Tuples.flatTupleOf(var_v2), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Vertex")));
851 body.setSymbolicParameters(Arrays.<ExportedParameter>asList(
852 new ExportedParameter(body, var_s, parameter_s),
853 new ExportedParameter(body, var_v1, parameter_v1),
854 new ExportedParameter(body, var_v2, parameter_v2)
855 ));
856 // find transition(t1, s, v1)
857 new PositivePatternCall(body, Tuples.flatTupleOf(var_t1, var_s, var_v1), Transition.instance().getInternalQueryRepresentation());
858 // find transition(t2, s, v2)
859 new PositivePatternCall(body, Tuples.flatTupleOf(var_t2, var_s, var_v2), Transition.instance().getInternalQueryRepresentation());
860 // t1!=t2
861 new Inequality(body, var_t1, var_t2);
862 // Region.vertices(r, v1)
863 new TypeConstraint(body, Tuples.flatTupleOf(var_r), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Region")));
864 PVariable var__virtual_0_ = body.getOrCreateVariableByName(".virtual{0}");
865 new TypeConstraint(body, Tuples.flatTupleOf(var_r, var__virtual_0_), new EStructuralFeatureInstancesKey(getFeatureLiteral("YakinduMetamodel", "Region", "vertices")));
866 new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_0_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Vertex")));
867 new Equality(body, var__virtual_0_, var_v1);
868 // Region.vertices(r, v2)
869 new TypeConstraint(body, Tuples.flatTupleOf(var_r), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Region")));
870 PVariable var__virtual_1_ = body.getOrCreateVariableByName(".virtual{1}");
871 new TypeConstraint(body, Tuples.flatTupleOf(var_r, var__virtual_1_), new EStructuralFeatureInstancesKey(getFeatureLiteral("YakinduMetamodel", "Region", "vertices")));
872 new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_1_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Vertex")));
873 new Equality(body, var__virtual_1_, var_v2);
874 bodies.add(body);
875 }
876 {
877 PAnnotation annotation = new PAnnotation("Constraint");
878 annotation.addAttribute("severity", "error");
879 annotation.addAttribute("message", "error");
880 annotation.addAttribute("key", Arrays.asList(new Object[] {
881 new ParameterReference("s")
882 }));
883 addAnnotation(annotation);
884 }
885 return bodies;
886 }
887 }
888}
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/SynchronizedRegionDoesNotHaveMultipleRegions.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/SynchronizedRegionDoesNotHaveMultipleRegions.java
new file mode 100644
index 00000000..28eecf9c
--- /dev/null
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/SynchronizedRegionDoesNotHaveMultipleRegions.java
@@ -0,0 +1,744 @@
1/**
2 * Generated from platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduPatterns.vql
3 */
4package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries;
5
6import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization;
7import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex;
8import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.Child;
9import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.HasMultipleRegions;
10import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.Transition;
11import java.util.Arrays;
12import java.util.Collection;
13import java.util.LinkedHashSet;
14import java.util.List;
15import java.util.Objects;
16import java.util.Optional;
17import java.util.Set;
18import java.util.function.Consumer;
19import java.util.stream.Collectors;
20import java.util.stream.Stream;
21import org.apache.log4j.Logger;
22import org.eclipse.emf.ecore.EClass;
23import org.eclipse.viatra.query.runtime.api.IPatternMatch;
24import org.eclipse.viatra.query.runtime.api.IQuerySpecification;
25import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine;
26import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFPQuery;
27import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFQuerySpecification;
28import org.eclipse.viatra.query.runtime.api.impl.BaseMatcher;
29import org.eclipse.viatra.query.runtime.api.impl.BasePatternMatch;
30import org.eclipse.viatra.query.runtime.emf.types.EClassTransitiveInstancesKey;
31import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint;
32import org.eclipse.viatra.query.runtime.matchers.psystem.PBody;
33import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable;
34import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.PAnnotation;
35import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.ParameterReference;
36import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExportedParameter;
37import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.NegativePatternCall;
38import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.PositivePatternCall;
39import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint;
40import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter;
41import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameterDirection;
42import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PVisibility;
43import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple;
44import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples;
45import org.eclipse.viatra.query.runtime.util.ViatraQueryLoggingUtil;
46
47/**
48 * A pattern-specific query specification that can instantiate Matcher in a type-safe way.
49 *
50 * <p>Original source:
51 * <code><pre>
52 * {@literal @}Constraint(severity="error", message="error", key = {s})
53 * pattern SynchronizedRegionDoesNotHaveMultipleRegions(s : Synchronization, v : Vertex) {
54 * find transition(_, v, s);
55 * find child(c,v);
56 * neg find hasMultipleRegions(c);
57 * } or {
58 * find transition(_, s, v);
59 * find child(c,v);
60 * neg find hasMultipleRegions(c);
61 * }
62 * </pre></code>
63 *
64 * @see Matcher
65 * @see Match
66 *
67 */
68@SuppressWarnings("all")
69public final class SynchronizedRegionDoesNotHaveMultipleRegions extends BaseGeneratedEMFQuerySpecification<SynchronizedRegionDoesNotHaveMultipleRegions.Matcher> {
70 /**
71 * Pattern-specific match representation of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.SynchronizedRegionDoesNotHaveMultipleRegions pattern,
72 * to be used in conjunction with {@link Matcher}.
73 *
74 * <p>Class fields correspond to parameters of the pattern. Fields with value null are considered unassigned.
75 * Each instance is a (possibly partial) substitution of pattern parameters,
76 * usable to represent a match of the pattern in the result of a query,
77 * or to specify the bound (fixed) input parameters when issuing a query.
78 *
79 * @see Matcher
80 *
81 */
82 public static abstract class Match extends BasePatternMatch {
83 private Synchronization fS;
84
85 private Vertex fV;
86
87 private static List<String> parameterNames = makeImmutableList("s", "v");
88
89 private Match(final Synchronization pS, final Vertex pV) {
90 this.fS = pS;
91 this.fV = pV;
92 }
93
94 @Override
95 public Object get(final String parameterName) {
96 if ("s".equals(parameterName)) return this.fS;
97 if ("v".equals(parameterName)) return this.fV;
98 return null;
99 }
100
101 public Synchronization getS() {
102 return this.fS;
103 }
104
105 public Vertex getV() {
106 return this.fV;
107 }
108
109 @Override
110 public boolean set(final String parameterName, final Object newValue) {
111 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
112 if ("s".equals(parameterName) ) {
113 this.fS = (Synchronization) newValue;
114 return true;
115 }
116 if ("v".equals(parameterName) ) {
117 this.fV = (Vertex) newValue;
118 return true;
119 }
120 return false;
121 }
122
123 public void setS(final Synchronization pS) {
124 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
125 this.fS = pS;
126 }
127
128 public void setV(final Vertex pV) {
129 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
130 this.fV = pV;
131 }
132
133 @Override
134 public String patternName() {
135 return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.SynchronizedRegionDoesNotHaveMultipleRegions";
136 }
137
138 @Override
139 public List<String> parameterNames() {
140 return SynchronizedRegionDoesNotHaveMultipleRegions.Match.parameterNames;
141 }
142
143 @Override
144 public Object[] toArray() {
145 return new Object[]{fS, fV};
146 }
147
148 @Override
149 public SynchronizedRegionDoesNotHaveMultipleRegions.Match toImmutable() {
150 return isMutable() ? newMatch(fS, fV) : this;
151 }
152
153 @Override
154 public String prettyPrint() {
155 StringBuilder result = new StringBuilder();
156 result.append("\"s\"=" + prettyPrintValue(fS) + ", ");
157 result.append("\"v\"=" + prettyPrintValue(fV));
158 return result.toString();
159 }
160
161 @Override
162 public int hashCode() {
163 return Objects.hash(fS, fV);
164 }
165
166 @Override
167 public boolean equals(final Object obj) {
168 if (this == obj)
169 return true;
170 if (obj == null) {
171 return false;
172 }
173 if ((obj instanceof SynchronizedRegionDoesNotHaveMultipleRegions.Match)) {
174 SynchronizedRegionDoesNotHaveMultipleRegions.Match other = (SynchronizedRegionDoesNotHaveMultipleRegions.Match) obj;
175 return Objects.equals(fS, other.fS) && Objects.equals(fV, other.fV);
176 } else {
177 // this should be infrequent
178 if (!(obj instanceof IPatternMatch)) {
179 return false;
180 }
181 IPatternMatch otherSig = (IPatternMatch) obj;
182 return Objects.equals(specification(), otherSig.specification()) && Arrays.deepEquals(toArray(), otherSig.toArray());
183 }
184 }
185
186 @Override
187 public SynchronizedRegionDoesNotHaveMultipleRegions specification() {
188 return SynchronizedRegionDoesNotHaveMultipleRegions.instance();
189 }
190
191 /**
192 * Returns an empty, mutable match.
193 * Fields of the mutable match can be filled to create a partial match, usable as matcher input.
194 *
195 * @return the empty match.
196 *
197 */
198 public static SynchronizedRegionDoesNotHaveMultipleRegions.Match newEmptyMatch() {
199 return new Mutable(null, null);
200 }
201
202 /**
203 * Returns a mutable (partial) match.
204 * Fields of the mutable match can be filled to create a partial match, usable as matcher input.
205 *
206 * @param pS the fixed value of pattern parameter s, or null if not bound.
207 * @param pV the fixed value of pattern parameter v, or null if not bound.
208 * @return the new, mutable (partial) match object.
209 *
210 */
211 public static SynchronizedRegionDoesNotHaveMultipleRegions.Match newMutableMatch(final Synchronization pS, final Vertex pV) {
212 return new Mutable(pS, pV);
213 }
214
215 /**
216 * Returns a new (partial) match.
217 * This can be used e.g. to call the matcher with a partial match.
218 * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object.
219 * @param pS the fixed value of pattern parameter s, or null if not bound.
220 * @param pV the fixed value of pattern parameter v, or null if not bound.
221 * @return the (partial) match object.
222 *
223 */
224 public static SynchronizedRegionDoesNotHaveMultipleRegions.Match newMatch(final Synchronization pS, final Vertex pV) {
225 return new Immutable(pS, pV);
226 }
227
228 private static final class Mutable extends SynchronizedRegionDoesNotHaveMultipleRegions.Match {
229 Mutable(final Synchronization pS, final Vertex pV) {
230 super(pS, pV);
231 }
232
233 @Override
234 public boolean isMutable() {
235 return true;
236 }
237 }
238
239 private static final class Immutable extends SynchronizedRegionDoesNotHaveMultipleRegions.Match {
240 Immutable(final Synchronization pS, final Vertex pV) {
241 super(pS, pV);
242 }
243
244 @Override
245 public boolean isMutable() {
246 return false;
247 }
248 }
249 }
250
251 /**
252 * Generated pattern matcher API of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.SynchronizedRegionDoesNotHaveMultipleRegions pattern,
253 * providing pattern-specific query methods.
254 *
255 * <p>Use the pattern matcher on a given model via {@link #on(ViatraQueryEngine)},
256 * e.g. in conjunction with {@link ViatraQueryEngine#on(QueryScope)}.
257 *
258 * <p>Matches of the pattern will be represented as {@link Match}.
259 *
260 * <p>Original source:
261 * <code><pre>
262 * {@literal @}Constraint(severity="error", message="error", key = {s})
263 * pattern SynchronizedRegionDoesNotHaveMultipleRegions(s : Synchronization, v : Vertex) {
264 * find transition(_, v, s);
265 * find child(c,v);
266 * neg find hasMultipleRegions(c);
267 * } or {
268 * find transition(_, s, v);
269 * find child(c,v);
270 * neg find hasMultipleRegions(c);
271 * }
272 * </pre></code>
273 *
274 * @see Match
275 * @see SynchronizedRegionDoesNotHaveMultipleRegions
276 *
277 */
278 public static class Matcher extends BaseMatcher<SynchronizedRegionDoesNotHaveMultipleRegions.Match> {
279 /**
280 * Initializes the pattern matcher within an existing VIATRA Query engine.
281 * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned.
282 *
283 * @param engine the existing VIATRA Query engine in which this matcher will be created.
284 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
285 *
286 */
287 public static SynchronizedRegionDoesNotHaveMultipleRegions.Matcher on(final ViatraQueryEngine engine) {
288 // check if matcher already exists
289 Matcher matcher = engine.getExistingMatcher(querySpecification());
290 if (matcher == null) {
291 matcher = (Matcher)engine.getMatcher(querySpecification());
292 }
293 return matcher;
294 }
295
296 /**
297 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
298 * @return an initialized matcher
299 * @noreference This method is for internal matcher initialization by the framework, do not call it manually.
300 *
301 */
302 public static SynchronizedRegionDoesNotHaveMultipleRegions.Matcher create() {
303 return new Matcher();
304 }
305
306 private final static int POSITION_S = 0;
307
308 private final static int POSITION_V = 1;
309
310 private final static Logger LOGGER = ViatraQueryLoggingUtil.getLogger(SynchronizedRegionDoesNotHaveMultipleRegions.Matcher.class);
311
312 /**
313 * Initializes the pattern matcher within an existing VIATRA Query engine.
314 * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned.
315 *
316 * @param engine the existing VIATRA Query engine in which this matcher will be created.
317 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
318 *
319 */
320 private Matcher() {
321 super(querySpecification());
322 }
323
324 /**
325 * Returns the set of all matches of the pattern that conform to the given fixed values of some parameters.
326 * @param pS the fixed value of pattern parameter s, or null if not bound.
327 * @param pV the fixed value of pattern parameter v, or null if not bound.
328 * @return matches represented as a Match object.
329 *
330 */
331 public Collection<SynchronizedRegionDoesNotHaveMultipleRegions.Match> getAllMatches(final Synchronization pS, final Vertex pV) {
332 return rawStreamAllMatches(new Object[]{pS, pV}).collect(Collectors.toSet());
333 }
334
335 /**
336 * Returns a stream of all matches of the pattern that conform to the given fixed values of some parameters.
337 * </p>
338 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
339 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
340 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
341 * @param pS the fixed value of pattern parameter s, or null if not bound.
342 * @param pV the fixed value of pattern parameter v, or null if not bound.
343 * @return a stream of matches represented as a Match object.
344 *
345 */
346 public Stream<SynchronizedRegionDoesNotHaveMultipleRegions.Match> streamAllMatches(final Synchronization pS, final Vertex pV) {
347 return rawStreamAllMatches(new Object[]{pS, pV});
348 }
349
350 /**
351 * Returns an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters.
352 * Neither determinism nor randomness of selection is guaranteed.
353 * @param pS the fixed value of pattern parameter s, or null if not bound.
354 * @param pV the fixed value of pattern parameter v, or null if not bound.
355 * @return a match represented as a Match object, or null if no match is found.
356 *
357 */
358 public Optional<SynchronizedRegionDoesNotHaveMultipleRegions.Match> getOneArbitraryMatch(final Synchronization pS, final Vertex pV) {
359 return rawGetOneArbitraryMatch(new Object[]{pS, pV});
360 }
361
362 /**
363 * Indicates whether the given combination of specified pattern parameters constitute a valid pattern match,
364 * under any possible substitution of the unspecified parameters (if any).
365 * @param pS the fixed value of pattern parameter s, or null if not bound.
366 * @param pV the fixed value of pattern parameter v, or null if not bound.
367 * @return true if the input is a valid (partial) match of the pattern.
368 *
369 */
370 public boolean hasMatch(final Synchronization pS, final Vertex pV) {
371 return rawHasMatch(new Object[]{pS, pV});
372 }
373
374 /**
375 * Returns the number of all matches of the pattern that conform to the given fixed values of some parameters.
376 * @param pS the fixed value of pattern parameter s, or null if not bound.
377 * @param pV the fixed value of pattern parameter v, or null if not bound.
378 * @return the number of pattern matches found.
379 *
380 */
381 public int countMatches(final Synchronization pS, final Vertex pV) {
382 return rawCountMatches(new Object[]{pS, pV});
383 }
384
385 /**
386 * Executes the given processor on an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters.
387 * Neither determinism nor randomness of selection is guaranteed.
388 * @param pS the fixed value of pattern parameter s, or null if not bound.
389 * @param pV the fixed value of pattern parameter v, or null if not bound.
390 * @param processor the action that will process the selected match.
391 * @return true if the pattern has at least one match with the given parameter values, false if the processor was not invoked
392 *
393 */
394 public boolean forOneArbitraryMatch(final Synchronization pS, final Vertex pV, final Consumer<? super SynchronizedRegionDoesNotHaveMultipleRegions.Match> processor) {
395 return rawForOneArbitraryMatch(new Object[]{pS, pV}, processor);
396 }
397
398 /**
399 * Returns a new (partial) match.
400 * This can be used e.g. to call the matcher with a partial match.
401 * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object.
402 * @param pS the fixed value of pattern parameter s, or null if not bound.
403 * @param pV the fixed value of pattern parameter v, or null if not bound.
404 * @return the (partial) match object.
405 *
406 */
407 public SynchronizedRegionDoesNotHaveMultipleRegions.Match newMatch(final Synchronization pS, final Vertex pV) {
408 return SynchronizedRegionDoesNotHaveMultipleRegions.Match.newMatch(pS, pV);
409 }
410
411 /**
412 * Retrieve the set of values that occur in matches for s.
413 * @return the Set of all values or empty set if there are no matches
414 *
415 */
416 protected Stream<Synchronization> rawStreamAllValuesOfs(final Object[] parameters) {
417 return rawStreamAllValues(POSITION_S, parameters).map(Synchronization.class::cast);
418 }
419
420 /**
421 * Retrieve the set of values that occur in matches for s.
422 * @return the Set of all values or empty set if there are no matches
423 *
424 */
425 public Set<Synchronization> getAllValuesOfs() {
426 return rawStreamAllValuesOfs(emptyArray()).collect(Collectors.toSet());
427 }
428
429 /**
430 * Retrieve the set of values that occur in matches for s.
431 * @return the Set of all values or empty set if there are no matches
432 *
433 */
434 public Stream<Synchronization> streamAllValuesOfs() {
435 return rawStreamAllValuesOfs(emptyArray());
436 }
437
438 /**
439 * Retrieve the set of values that occur in matches for s.
440 * </p>
441 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
442 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
443 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
444 *
445 * @return the Stream of all values or empty set if there are no matches
446 *
447 */
448 public Stream<Synchronization> streamAllValuesOfs(final SynchronizedRegionDoesNotHaveMultipleRegions.Match partialMatch) {
449 return rawStreamAllValuesOfs(partialMatch.toArray());
450 }
451
452 /**
453 * Retrieve the set of values that occur in matches for s.
454 * </p>
455 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
456 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
457 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
458 *
459 * @return the Stream of all values or empty set if there are no matches
460 *
461 */
462 public Stream<Synchronization> streamAllValuesOfs(final Vertex pV) {
463 return rawStreamAllValuesOfs(new Object[]{null, pV});
464 }
465
466 /**
467 * Retrieve the set of values that occur in matches for s.
468 * @return the Set of all values or empty set if there are no matches
469 *
470 */
471 public Set<Synchronization> getAllValuesOfs(final SynchronizedRegionDoesNotHaveMultipleRegions.Match partialMatch) {
472 return rawStreamAllValuesOfs(partialMatch.toArray()).collect(Collectors.toSet());
473 }
474
475 /**
476 * Retrieve the set of values that occur in matches for s.
477 * @return the Set of all values or empty set if there are no matches
478 *
479 */
480 public Set<Synchronization> getAllValuesOfs(final Vertex pV) {
481 return rawStreamAllValuesOfs(new Object[]{null, pV}).collect(Collectors.toSet());
482 }
483
484 /**
485 * Retrieve the set of values that occur in matches for v.
486 * @return the Set of all values or empty set if there are no matches
487 *
488 */
489 protected Stream<Vertex> rawStreamAllValuesOfv(final Object[] parameters) {
490 return rawStreamAllValues(POSITION_V, parameters).map(Vertex.class::cast);
491 }
492
493 /**
494 * Retrieve the set of values that occur in matches for v.
495 * @return the Set of all values or empty set if there are no matches
496 *
497 */
498 public Set<Vertex> getAllValuesOfv() {
499 return rawStreamAllValuesOfv(emptyArray()).collect(Collectors.toSet());
500 }
501
502 /**
503 * Retrieve the set of values that occur in matches for v.
504 * @return the Set of all values or empty set if there are no matches
505 *
506 */
507 public Stream<Vertex> streamAllValuesOfv() {
508 return rawStreamAllValuesOfv(emptyArray());
509 }
510
511 /**
512 * Retrieve the set of values that occur in matches for v.
513 * </p>
514 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
515 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
516 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
517 *
518 * @return the Stream of all values or empty set if there are no matches
519 *
520 */
521 public Stream<Vertex> streamAllValuesOfv(final SynchronizedRegionDoesNotHaveMultipleRegions.Match partialMatch) {
522 return rawStreamAllValuesOfv(partialMatch.toArray());
523 }
524
525 /**
526 * Retrieve the set of values that occur in matches for v.
527 * </p>
528 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
529 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
530 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
531 *
532 * @return the Stream of all values or empty set if there are no matches
533 *
534 */
535 public Stream<Vertex> streamAllValuesOfv(final Synchronization pS) {
536 return rawStreamAllValuesOfv(new Object[]{pS, null});
537 }
538
539 /**
540 * Retrieve the set of values that occur in matches for v.
541 * @return the Set of all values or empty set if there are no matches
542 *
543 */
544 public Set<Vertex> getAllValuesOfv(final SynchronizedRegionDoesNotHaveMultipleRegions.Match partialMatch) {
545 return rawStreamAllValuesOfv(partialMatch.toArray()).collect(Collectors.toSet());
546 }
547
548 /**
549 * Retrieve the set of values that occur in matches for v.
550 * @return the Set of all values or empty set if there are no matches
551 *
552 */
553 public Set<Vertex> getAllValuesOfv(final Synchronization pS) {
554 return rawStreamAllValuesOfv(new Object[]{pS, null}).collect(Collectors.toSet());
555 }
556
557 @Override
558 protected SynchronizedRegionDoesNotHaveMultipleRegions.Match tupleToMatch(final Tuple t) {
559 try {
560 return SynchronizedRegionDoesNotHaveMultipleRegions.Match.newMatch((Synchronization) t.get(POSITION_S), (Vertex) t.get(POSITION_V));
561 } catch(ClassCastException e) {
562 LOGGER.error("Element(s) in tuple not properly typed!",e);
563 return null;
564 }
565 }
566
567 @Override
568 protected SynchronizedRegionDoesNotHaveMultipleRegions.Match arrayToMatch(final Object[] match) {
569 try {
570 return SynchronizedRegionDoesNotHaveMultipleRegions.Match.newMatch((Synchronization) match[POSITION_S], (Vertex) match[POSITION_V]);
571 } catch(ClassCastException e) {
572 LOGGER.error("Element(s) in array not properly typed!",e);
573 return null;
574 }
575 }
576
577 @Override
578 protected SynchronizedRegionDoesNotHaveMultipleRegions.Match arrayToMatchMutable(final Object[] match) {
579 try {
580 return SynchronizedRegionDoesNotHaveMultipleRegions.Match.newMutableMatch((Synchronization) match[POSITION_S], (Vertex) match[POSITION_V]);
581 } catch(ClassCastException e) {
582 LOGGER.error("Element(s) in array not properly typed!",e);
583 return null;
584 }
585 }
586
587 /**
588 * @return the singleton instance of the query specification of this pattern
589 * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded
590 *
591 */
592 public static IQuerySpecification<SynchronizedRegionDoesNotHaveMultipleRegions.Matcher> querySpecification() {
593 return SynchronizedRegionDoesNotHaveMultipleRegions.instance();
594 }
595 }
596
597 private SynchronizedRegionDoesNotHaveMultipleRegions() {
598 super(GeneratedPQuery.INSTANCE);
599 }
600
601 /**
602 * @return the singleton instance of the query specification
603 * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded
604 *
605 */
606 public static SynchronizedRegionDoesNotHaveMultipleRegions instance() {
607 try{
608 return LazyHolder.INSTANCE;
609 } catch (ExceptionInInitializerError err) {
610 throw processInitializerError(err);
611 }
612 }
613
614 @Override
615 protected SynchronizedRegionDoesNotHaveMultipleRegions.Matcher instantiate(final ViatraQueryEngine engine) {
616 return SynchronizedRegionDoesNotHaveMultipleRegions.Matcher.on(engine);
617 }
618
619 @Override
620 public SynchronizedRegionDoesNotHaveMultipleRegions.Matcher instantiate() {
621 return SynchronizedRegionDoesNotHaveMultipleRegions.Matcher.create();
622 }
623
624 @Override
625 public SynchronizedRegionDoesNotHaveMultipleRegions.Match newEmptyMatch() {
626 return SynchronizedRegionDoesNotHaveMultipleRegions.Match.newEmptyMatch();
627 }
628
629 @Override
630 public SynchronizedRegionDoesNotHaveMultipleRegions.Match newMatch(final Object... parameters) {
631 return SynchronizedRegionDoesNotHaveMultipleRegions.Match.newMatch((ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization) parameters[0], (ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex) parameters[1]);
632 }
633
634 /**
635 * Inner class allowing the singleton instance of {@link JvmGenericType: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.SynchronizedRegionDoesNotHaveMultipleRegions (visibility: PUBLIC, simpleName: SynchronizedRegionDoesNotHaveMultipleRegions, identifier: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.SynchronizedRegionDoesNotHaveMultipleRegions, deprecated: <unset>) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)} to be created
636 * <b>not</b> at the class load time of the outer class,
637 * but rather at the first call to {@link JvmGenericType: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.SynchronizedRegionDoesNotHaveMultipleRegions (visibility: PUBLIC, simpleName: SynchronizedRegionDoesNotHaveMultipleRegions, identifier: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.SynchronizedRegionDoesNotHaveMultipleRegions, deprecated: <unset>) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)#instance()}.
638 *
639 * <p> This workaround is required e.g. to support recursion.
640 *
641 */
642 private static class LazyHolder {
643 private final static SynchronizedRegionDoesNotHaveMultipleRegions INSTANCE = new SynchronizedRegionDoesNotHaveMultipleRegions();
644
645 /**
646 * Statically initializes the query specification <b>after</b> the field {@link #INSTANCE} is assigned.
647 * This initialization order is required to support indirect recursion.
648 *
649 * <p> The static initializer is defined using a helper field to work around limitations of the code generator.
650 *
651 */
652 private final static Object STATIC_INITIALIZER = ensureInitialized();
653
654 public static Object ensureInitialized() {
655 INSTANCE.ensureInitializedInternal();
656 return null;
657 }
658 }
659
660 private static class GeneratedPQuery extends BaseGeneratedEMFPQuery {
661 private final static SynchronizedRegionDoesNotHaveMultipleRegions.GeneratedPQuery INSTANCE = new GeneratedPQuery();
662
663 private final PParameter parameter_s = new PParameter("s", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "Synchronization")), PParameterDirection.INOUT);
664
665 private final PParameter parameter_v = new PParameter("v", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "Vertex")), PParameterDirection.INOUT);
666
667 private final List<PParameter> parameters = Arrays.asList(parameter_s, parameter_v);
668
669 private GeneratedPQuery() {
670 super(PVisibility.PUBLIC);
671 }
672
673 @Override
674 public String getFullyQualifiedName() {
675 return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.SynchronizedRegionDoesNotHaveMultipleRegions";
676 }
677
678 @Override
679 public List<String> getParameterNames() {
680 return Arrays.asList("s","v");
681 }
682
683 @Override
684 public List<PParameter> getParameters() {
685 return parameters;
686 }
687
688 @Override
689 public Set<PBody> doGetContainedBodies() {
690 setEvaluationHints(new QueryEvaluationHint(null, QueryEvaluationHint.BackendRequirement.UNSPECIFIED));
691 Set<PBody> bodies = new LinkedHashSet<>();
692 {
693 PBody body = new PBody(this);
694 PVariable var_s = body.getOrCreateVariableByName("s");
695 PVariable var_v = body.getOrCreateVariableByName("v");
696 PVariable var___0_ = body.getOrCreateVariableByName("_<0>");
697 PVariable var_c = body.getOrCreateVariableByName("c");
698 new TypeConstraint(body, Tuples.flatTupleOf(var_s), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Synchronization")));
699 new TypeConstraint(body, Tuples.flatTupleOf(var_v), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Vertex")));
700 body.setSymbolicParameters(Arrays.<ExportedParameter>asList(
701 new ExportedParameter(body, var_s, parameter_s),
702 new ExportedParameter(body, var_v, parameter_v)
703 ));
704 // find transition(_, v, s)
705 new PositivePatternCall(body, Tuples.flatTupleOf(var___0_, var_v, var_s), Transition.instance().getInternalQueryRepresentation());
706 // find child(c,v)
707 new PositivePatternCall(body, Tuples.flatTupleOf(var_c, var_v), Child.instance().getInternalQueryRepresentation());
708 // neg find hasMultipleRegions(c)
709 new NegativePatternCall(body, Tuples.flatTupleOf(var_c), HasMultipleRegions.instance().getInternalQueryRepresentation());
710 bodies.add(body);
711 }
712 {
713 PBody body = new PBody(this);
714 PVariable var_s = body.getOrCreateVariableByName("s");
715 PVariable var_v = body.getOrCreateVariableByName("v");
716 PVariable var___0_ = body.getOrCreateVariableByName("_<0>");
717 PVariable var_c = body.getOrCreateVariableByName("c");
718 new TypeConstraint(body, Tuples.flatTupleOf(var_s), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Synchronization")));
719 new TypeConstraint(body, Tuples.flatTupleOf(var_v), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Vertex")));
720 body.setSymbolicParameters(Arrays.<ExportedParameter>asList(
721 new ExportedParameter(body, var_s, parameter_s),
722 new ExportedParameter(body, var_v, parameter_v)
723 ));
724 // find transition(_, s, v)
725 new PositivePatternCall(body, Tuples.flatTupleOf(var___0_, var_s, var_v), Transition.instance().getInternalQueryRepresentation());
726 // find child(c,v)
727 new PositivePatternCall(body, Tuples.flatTupleOf(var_c, var_v), Child.instance().getInternalQueryRepresentation());
728 // neg find hasMultipleRegions(c)
729 new NegativePatternCall(body, Tuples.flatTupleOf(var_c), HasMultipleRegions.instance().getInternalQueryRepresentation());
730 bodies.add(body);
731 }
732 {
733 PAnnotation annotation = new PAnnotation("Constraint");
734 annotation.addAttribute("severity", "error");
735 annotation.addAttribute("message", "error");
736 annotation.addAttribute("key", Arrays.asList(new Object[] {
737 new ParameterReference("s")
738 }));
739 addAnnotation(annotation);
740 }
741 return bodies;
742 }
743 }
744}
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/SynchronizedRegionsAreNotSiblings.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/SynchronizedRegionsAreNotSiblings.java
new file mode 100644
index 00000000..160c4aa0
--- /dev/null
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/SynchronizedRegionsAreNotSiblings.java
@@ -0,0 +1,902 @@
1/**
2 * Generated from platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduPatterns.vql
3 */
4package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries;
5
6import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization;
7import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex;
8import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.Transition;
9import java.util.Arrays;
10import java.util.Collection;
11import java.util.LinkedHashSet;
12import java.util.List;
13import java.util.Objects;
14import java.util.Optional;
15import java.util.Set;
16import java.util.function.Consumer;
17import java.util.stream.Collectors;
18import java.util.stream.Stream;
19import org.apache.log4j.Logger;
20import org.eclipse.emf.ecore.EClass;
21import org.eclipse.viatra.query.runtime.api.IPatternMatch;
22import org.eclipse.viatra.query.runtime.api.IQuerySpecification;
23import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine;
24import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFPQuery;
25import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFQuerySpecification;
26import org.eclipse.viatra.query.runtime.api.impl.BaseMatcher;
27import org.eclipse.viatra.query.runtime.api.impl.BasePatternMatch;
28import org.eclipse.viatra.query.runtime.emf.types.EClassTransitiveInstancesKey;
29import org.eclipse.viatra.query.runtime.emf.types.EStructuralFeatureInstancesKey;
30import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint;
31import org.eclipse.viatra.query.runtime.matchers.psystem.PBody;
32import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable;
33import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.PAnnotation;
34import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.ParameterReference;
35import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.Equality;
36import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExportedParameter;
37import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.Inequality;
38import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.PositivePatternCall;
39import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint;
40import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter;
41import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameterDirection;
42import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PVisibility;
43import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple;
44import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples;
45import org.eclipse.viatra.query.runtime.util.ViatraQueryLoggingUtil;
46
47/**
48 * A pattern-specific query specification that can instantiate Matcher in a type-safe way.
49 *
50 * <p>Original source:
51 * <code><pre>
52 * {@literal @}Constraint(severity="error", message="error", key = {s})
53 * pattern SynchronizedRegionsAreNotSiblings(s : Synchronization, v1 : Vertex, v2 : Vertex) {
54 * find transition(_, v1, s);
55 * find transition(_, v2, s);
56 * CompositeElement.regions.vertices(r1, v1);
57 * CompositeElement.regions.vertices(r2, v2);
58 * r1 != r2;
59 * } or {
60 * find transition(_, s, v1);
61 * find transition(_, s, v2);
62 * CompositeElement.regions.vertices(r1, v1);
63 * CompositeElement.regions.vertices(r2, v2);
64 * r1 != r2;
65 * }
66 * </pre></code>
67 *
68 * @see Matcher
69 * @see Match
70 *
71 */
72@SuppressWarnings("all")
73public final class SynchronizedRegionsAreNotSiblings extends BaseGeneratedEMFQuerySpecification<SynchronizedRegionsAreNotSiblings.Matcher> {
74 /**
75 * Pattern-specific match representation of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.SynchronizedRegionsAreNotSiblings pattern,
76 * to be used in conjunction with {@link Matcher}.
77 *
78 * <p>Class fields correspond to parameters of the pattern. Fields with value null are considered unassigned.
79 * Each instance is a (possibly partial) substitution of pattern parameters,
80 * usable to represent a match of the pattern in the result of a query,
81 * or to specify the bound (fixed) input parameters when issuing a query.
82 *
83 * @see Matcher
84 *
85 */
86 public static abstract class Match extends BasePatternMatch {
87 private Synchronization fS;
88
89 private Vertex fV1;
90
91 private Vertex fV2;
92
93 private static List<String> parameterNames = makeImmutableList("s", "v1", "v2");
94
95 private Match(final Synchronization pS, final Vertex pV1, final Vertex pV2) {
96 this.fS = pS;
97 this.fV1 = pV1;
98 this.fV2 = pV2;
99 }
100
101 @Override
102 public Object get(final String parameterName) {
103 if ("s".equals(parameterName)) return this.fS;
104 if ("v1".equals(parameterName)) return this.fV1;
105 if ("v2".equals(parameterName)) return this.fV2;
106 return null;
107 }
108
109 public Synchronization getS() {
110 return this.fS;
111 }
112
113 public Vertex getV1() {
114 return this.fV1;
115 }
116
117 public Vertex getV2() {
118 return this.fV2;
119 }
120
121 @Override
122 public boolean set(final String parameterName, final Object newValue) {
123 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
124 if ("s".equals(parameterName) ) {
125 this.fS = (Synchronization) newValue;
126 return true;
127 }
128 if ("v1".equals(parameterName) ) {
129 this.fV1 = (Vertex) newValue;
130 return true;
131 }
132 if ("v2".equals(parameterName) ) {
133 this.fV2 = (Vertex) newValue;
134 return true;
135 }
136 return false;
137 }
138
139 public void setS(final Synchronization pS) {
140 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
141 this.fS = pS;
142 }
143
144 public void setV1(final Vertex pV1) {
145 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
146 this.fV1 = pV1;
147 }
148
149 public void setV2(final Vertex pV2) {
150 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
151 this.fV2 = pV2;
152 }
153
154 @Override
155 public String patternName() {
156 return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.SynchronizedRegionsAreNotSiblings";
157 }
158
159 @Override
160 public List<String> parameterNames() {
161 return SynchronizedRegionsAreNotSiblings.Match.parameterNames;
162 }
163
164 @Override
165 public Object[] toArray() {
166 return new Object[]{fS, fV1, fV2};
167 }
168
169 @Override
170 public SynchronizedRegionsAreNotSiblings.Match toImmutable() {
171 return isMutable() ? newMatch(fS, fV1, fV2) : this;
172 }
173
174 @Override
175 public String prettyPrint() {
176 StringBuilder result = new StringBuilder();
177 result.append("\"s\"=" + prettyPrintValue(fS) + ", ");
178 result.append("\"v1\"=" + prettyPrintValue(fV1) + ", ");
179 result.append("\"v2\"=" + prettyPrintValue(fV2));
180 return result.toString();
181 }
182
183 @Override
184 public int hashCode() {
185 return Objects.hash(fS, fV1, fV2);
186 }
187
188 @Override
189 public boolean equals(final Object obj) {
190 if (this == obj)
191 return true;
192 if (obj == null) {
193 return false;
194 }
195 if ((obj instanceof SynchronizedRegionsAreNotSiblings.Match)) {
196 SynchronizedRegionsAreNotSiblings.Match other = (SynchronizedRegionsAreNotSiblings.Match) obj;
197 return Objects.equals(fS, other.fS) && Objects.equals(fV1, other.fV1) && Objects.equals(fV2, other.fV2);
198 } else {
199 // this should be infrequent
200 if (!(obj instanceof IPatternMatch)) {
201 return false;
202 }
203 IPatternMatch otherSig = (IPatternMatch) obj;
204 return Objects.equals(specification(), otherSig.specification()) && Arrays.deepEquals(toArray(), otherSig.toArray());
205 }
206 }
207
208 @Override
209 public SynchronizedRegionsAreNotSiblings specification() {
210 return SynchronizedRegionsAreNotSiblings.instance();
211 }
212
213 /**
214 * Returns an empty, mutable match.
215 * Fields of the mutable match can be filled to create a partial match, usable as matcher input.
216 *
217 * @return the empty match.
218 *
219 */
220 public static SynchronizedRegionsAreNotSiblings.Match newEmptyMatch() {
221 return new Mutable(null, null, null);
222 }
223
224 /**
225 * Returns a mutable (partial) match.
226 * Fields of the mutable match can be filled to create a partial match, usable as matcher input.
227 *
228 * @param pS the fixed value of pattern parameter s, or null if not bound.
229 * @param pV1 the fixed value of pattern parameter v1, or null if not bound.
230 * @param pV2 the fixed value of pattern parameter v2, or null if not bound.
231 * @return the new, mutable (partial) match object.
232 *
233 */
234 public static SynchronizedRegionsAreNotSiblings.Match newMutableMatch(final Synchronization pS, final Vertex pV1, final Vertex pV2) {
235 return new Mutable(pS, pV1, pV2);
236 }
237
238 /**
239 * Returns a new (partial) match.
240 * This can be used e.g. to call the matcher with a partial match.
241 * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object.
242 * @param pS the fixed value of pattern parameter s, or null if not bound.
243 * @param pV1 the fixed value of pattern parameter v1, or null if not bound.
244 * @param pV2 the fixed value of pattern parameter v2, or null if not bound.
245 * @return the (partial) match object.
246 *
247 */
248 public static SynchronizedRegionsAreNotSiblings.Match newMatch(final Synchronization pS, final Vertex pV1, final Vertex pV2) {
249 return new Immutable(pS, pV1, pV2);
250 }
251
252 private static final class Mutable extends SynchronizedRegionsAreNotSiblings.Match {
253 Mutable(final Synchronization pS, final Vertex pV1, final Vertex pV2) {
254 super(pS, pV1, pV2);
255 }
256
257 @Override
258 public boolean isMutable() {
259 return true;
260 }
261 }
262
263 private static final class Immutable extends SynchronizedRegionsAreNotSiblings.Match {
264 Immutable(final Synchronization pS, final Vertex pV1, final Vertex pV2) {
265 super(pS, pV1, pV2);
266 }
267
268 @Override
269 public boolean isMutable() {
270 return false;
271 }
272 }
273 }
274
275 /**
276 * Generated pattern matcher API of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.SynchronizedRegionsAreNotSiblings pattern,
277 * providing pattern-specific query methods.
278 *
279 * <p>Use the pattern matcher on a given model via {@link #on(ViatraQueryEngine)},
280 * e.g. in conjunction with {@link ViatraQueryEngine#on(QueryScope)}.
281 *
282 * <p>Matches of the pattern will be represented as {@link Match}.
283 *
284 * <p>Original source:
285 * <code><pre>
286 * {@literal @}Constraint(severity="error", message="error", key = {s})
287 * pattern SynchronizedRegionsAreNotSiblings(s : Synchronization, v1 : Vertex, v2 : Vertex) {
288 * find transition(_, v1, s);
289 * find transition(_, v2, s);
290 * CompositeElement.regions.vertices(r1, v1);
291 * CompositeElement.regions.vertices(r2, v2);
292 * r1 != r2;
293 * } or {
294 * find transition(_, s, v1);
295 * find transition(_, s, v2);
296 * CompositeElement.regions.vertices(r1, v1);
297 * CompositeElement.regions.vertices(r2, v2);
298 * r1 != r2;
299 * }
300 * </pre></code>
301 *
302 * @see Match
303 * @see SynchronizedRegionsAreNotSiblings
304 *
305 */
306 public static class Matcher extends BaseMatcher<SynchronizedRegionsAreNotSiblings.Match> {
307 /**
308 * Initializes the pattern matcher within an existing VIATRA Query engine.
309 * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned.
310 *
311 * @param engine the existing VIATRA Query engine in which this matcher will be created.
312 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
313 *
314 */
315 public static SynchronizedRegionsAreNotSiblings.Matcher on(final ViatraQueryEngine engine) {
316 // check if matcher already exists
317 Matcher matcher = engine.getExistingMatcher(querySpecification());
318 if (matcher == null) {
319 matcher = (Matcher)engine.getMatcher(querySpecification());
320 }
321 return matcher;
322 }
323
324 /**
325 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
326 * @return an initialized matcher
327 * @noreference This method is for internal matcher initialization by the framework, do not call it manually.
328 *
329 */
330 public static SynchronizedRegionsAreNotSiblings.Matcher create() {
331 return new Matcher();
332 }
333
334 private final static int POSITION_S = 0;
335
336 private final static int POSITION_V1 = 1;
337
338 private final static int POSITION_V2 = 2;
339
340 private final static Logger LOGGER = ViatraQueryLoggingUtil.getLogger(SynchronizedRegionsAreNotSiblings.Matcher.class);
341
342 /**
343 * Initializes the pattern matcher within an existing VIATRA Query engine.
344 * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned.
345 *
346 * @param engine the existing VIATRA Query engine in which this matcher will be created.
347 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
348 *
349 */
350 private Matcher() {
351 super(querySpecification());
352 }
353
354 /**
355 * Returns the set of all matches of the pattern that conform to the given fixed values of some parameters.
356 * @param pS the fixed value of pattern parameter s, or null if not bound.
357 * @param pV1 the fixed value of pattern parameter v1, or null if not bound.
358 * @param pV2 the fixed value of pattern parameter v2, or null if not bound.
359 * @return matches represented as a Match object.
360 *
361 */
362 public Collection<SynchronizedRegionsAreNotSiblings.Match> getAllMatches(final Synchronization pS, final Vertex pV1, final Vertex pV2) {
363 return rawStreamAllMatches(new Object[]{pS, pV1, pV2}).collect(Collectors.toSet());
364 }
365
366 /**
367 * Returns a stream of all matches of the pattern that conform to the given fixed values of some parameters.
368 * </p>
369 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
370 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
371 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
372 * @param pS the fixed value of pattern parameter s, or null if not bound.
373 * @param pV1 the fixed value of pattern parameter v1, or null if not bound.
374 * @param pV2 the fixed value of pattern parameter v2, or null if not bound.
375 * @return a stream of matches represented as a Match object.
376 *
377 */
378 public Stream<SynchronizedRegionsAreNotSiblings.Match> streamAllMatches(final Synchronization pS, final Vertex pV1, final Vertex pV2) {
379 return rawStreamAllMatches(new Object[]{pS, pV1, pV2});
380 }
381
382 /**
383 * Returns an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters.
384 * Neither determinism nor randomness of selection is guaranteed.
385 * @param pS the fixed value of pattern parameter s, or null if not bound.
386 * @param pV1 the fixed value of pattern parameter v1, or null if not bound.
387 * @param pV2 the fixed value of pattern parameter v2, or null if not bound.
388 * @return a match represented as a Match object, or null if no match is found.
389 *
390 */
391 public Optional<SynchronizedRegionsAreNotSiblings.Match> getOneArbitraryMatch(final Synchronization pS, final Vertex pV1, final Vertex pV2) {
392 return rawGetOneArbitraryMatch(new Object[]{pS, pV1, pV2});
393 }
394
395 /**
396 * Indicates whether the given combination of specified pattern parameters constitute a valid pattern match,
397 * under any possible substitution of the unspecified parameters (if any).
398 * @param pS the fixed value of pattern parameter s, or null if not bound.
399 * @param pV1 the fixed value of pattern parameter v1, or null if not bound.
400 * @param pV2 the fixed value of pattern parameter v2, or null if not bound.
401 * @return true if the input is a valid (partial) match of the pattern.
402 *
403 */
404 public boolean hasMatch(final Synchronization pS, final Vertex pV1, final Vertex pV2) {
405 return rawHasMatch(new Object[]{pS, pV1, pV2});
406 }
407
408 /**
409 * Returns the number of all matches of the pattern that conform to the given fixed values of some parameters.
410 * @param pS the fixed value of pattern parameter s, or null if not bound.
411 * @param pV1 the fixed value of pattern parameter v1, or null if not bound.
412 * @param pV2 the fixed value of pattern parameter v2, or null if not bound.
413 * @return the number of pattern matches found.
414 *
415 */
416 public int countMatches(final Synchronization pS, final Vertex pV1, final Vertex pV2) {
417 return rawCountMatches(new Object[]{pS, pV1, pV2});
418 }
419
420 /**
421 * Executes the given processor on an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters.
422 * Neither determinism nor randomness of selection is guaranteed.
423 * @param pS the fixed value of pattern parameter s, or null if not bound.
424 * @param pV1 the fixed value of pattern parameter v1, or null if not bound.
425 * @param pV2 the fixed value of pattern parameter v2, or null if not bound.
426 * @param processor the action that will process the selected match.
427 * @return true if the pattern has at least one match with the given parameter values, false if the processor was not invoked
428 *
429 */
430 public boolean forOneArbitraryMatch(final Synchronization pS, final Vertex pV1, final Vertex pV2, final Consumer<? super SynchronizedRegionsAreNotSiblings.Match> processor) {
431 return rawForOneArbitraryMatch(new Object[]{pS, pV1, pV2}, processor);
432 }
433
434 /**
435 * Returns a new (partial) match.
436 * This can be used e.g. to call the matcher with a partial match.
437 * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object.
438 * @param pS the fixed value of pattern parameter s, or null if not bound.
439 * @param pV1 the fixed value of pattern parameter v1, or null if not bound.
440 * @param pV2 the fixed value of pattern parameter v2, or null if not bound.
441 * @return the (partial) match object.
442 *
443 */
444 public SynchronizedRegionsAreNotSiblings.Match newMatch(final Synchronization pS, final Vertex pV1, final Vertex pV2) {
445 return SynchronizedRegionsAreNotSiblings.Match.newMatch(pS, pV1, pV2);
446 }
447
448 /**
449 * Retrieve the set of values that occur in matches for s.
450 * @return the Set of all values or empty set if there are no matches
451 *
452 */
453 protected Stream<Synchronization> rawStreamAllValuesOfs(final Object[] parameters) {
454 return rawStreamAllValues(POSITION_S, parameters).map(Synchronization.class::cast);
455 }
456
457 /**
458 * Retrieve the set of values that occur in matches for s.
459 * @return the Set of all values or empty set if there are no matches
460 *
461 */
462 public Set<Synchronization> getAllValuesOfs() {
463 return rawStreamAllValuesOfs(emptyArray()).collect(Collectors.toSet());
464 }
465
466 /**
467 * Retrieve the set of values that occur in matches for s.
468 * @return the Set of all values or empty set if there are no matches
469 *
470 */
471 public Stream<Synchronization> streamAllValuesOfs() {
472 return rawStreamAllValuesOfs(emptyArray());
473 }
474
475 /**
476 * Retrieve the set of values that occur in matches for s.
477 * </p>
478 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
479 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
480 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
481 *
482 * @return the Stream of all values or empty set if there are no matches
483 *
484 */
485 public Stream<Synchronization> streamAllValuesOfs(final SynchronizedRegionsAreNotSiblings.Match partialMatch) {
486 return rawStreamAllValuesOfs(partialMatch.toArray());
487 }
488
489 /**
490 * Retrieve the set of values that occur in matches for s.
491 * </p>
492 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
493 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
494 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
495 *
496 * @return the Stream of all values or empty set if there are no matches
497 *
498 */
499 public Stream<Synchronization> streamAllValuesOfs(final Vertex pV1, final Vertex pV2) {
500 return rawStreamAllValuesOfs(new Object[]{null, pV1, pV2});
501 }
502
503 /**
504 * Retrieve the set of values that occur in matches for s.
505 * @return the Set of all values or empty set if there are no matches
506 *
507 */
508 public Set<Synchronization> getAllValuesOfs(final SynchronizedRegionsAreNotSiblings.Match partialMatch) {
509 return rawStreamAllValuesOfs(partialMatch.toArray()).collect(Collectors.toSet());
510 }
511
512 /**
513 * Retrieve the set of values that occur in matches for s.
514 * @return the Set of all values or empty set if there are no matches
515 *
516 */
517 public Set<Synchronization> getAllValuesOfs(final Vertex pV1, final Vertex pV2) {
518 return rawStreamAllValuesOfs(new Object[]{null, pV1, pV2}).collect(Collectors.toSet());
519 }
520
521 /**
522 * Retrieve the set of values that occur in matches for v1.
523 * @return the Set of all values or empty set if there are no matches
524 *
525 */
526 protected Stream<Vertex> rawStreamAllValuesOfv1(final Object[] parameters) {
527 return rawStreamAllValues(POSITION_V1, parameters).map(Vertex.class::cast);
528 }
529
530 /**
531 * Retrieve the set of values that occur in matches for v1.
532 * @return the Set of all values or empty set if there are no matches
533 *
534 */
535 public Set<Vertex> getAllValuesOfv1() {
536 return rawStreamAllValuesOfv1(emptyArray()).collect(Collectors.toSet());
537 }
538
539 /**
540 * Retrieve the set of values that occur in matches for v1.
541 * @return the Set of all values or empty set if there are no matches
542 *
543 */
544 public Stream<Vertex> streamAllValuesOfv1() {
545 return rawStreamAllValuesOfv1(emptyArray());
546 }
547
548 /**
549 * Retrieve the set of values that occur in matches for v1.
550 * </p>
551 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
552 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
553 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
554 *
555 * @return the Stream of all values or empty set if there are no matches
556 *
557 */
558 public Stream<Vertex> streamAllValuesOfv1(final SynchronizedRegionsAreNotSiblings.Match partialMatch) {
559 return rawStreamAllValuesOfv1(partialMatch.toArray());
560 }
561
562 /**
563 * Retrieve the set of values that occur in matches for v1.
564 * </p>
565 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
566 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
567 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
568 *
569 * @return the Stream of all values or empty set if there are no matches
570 *
571 */
572 public Stream<Vertex> streamAllValuesOfv1(final Synchronization pS, final Vertex pV2) {
573 return rawStreamAllValuesOfv1(new Object[]{pS, null, pV2});
574 }
575
576 /**
577 * Retrieve the set of values that occur in matches for v1.
578 * @return the Set of all values or empty set if there are no matches
579 *
580 */
581 public Set<Vertex> getAllValuesOfv1(final SynchronizedRegionsAreNotSiblings.Match partialMatch) {
582 return rawStreamAllValuesOfv1(partialMatch.toArray()).collect(Collectors.toSet());
583 }
584
585 /**
586 * Retrieve the set of values that occur in matches for v1.
587 * @return the Set of all values or empty set if there are no matches
588 *
589 */
590 public Set<Vertex> getAllValuesOfv1(final Synchronization pS, final Vertex pV2) {
591 return rawStreamAllValuesOfv1(new Object[]{pS, null, pV2}).collect(Collectors.toSet());
592 }
593
594 /**
595 * Retrieve the set of values that occur in matches for v2.
596 * @return the Set of all values or empty set if there are no matches
597 *
598 */
599 protected Stream<Vertex> rawStreamAllValuesOfv2(final Object[] parameters) {
600 return rawStreamAllValues(POSITION_V2, parameters).map(Vertex.class::cast);
601 }
602
603 /**
604 * Retrieve the set of values that occur in matches for v2.
605 * @return the Set of all values or empty set if there are no matches
606 *
607 */
608 public Set<Vertex> getAllValuesOfv2() {
609 return rawStreamAllValuesOfv2(emptyArray()).collect(Collectors.toSet());
610 }
611
612 /**
613 * Retrieve the set of values that occur in matches for v2.
614 * @return the Set of all values or empty set if there are no matches
615 *
616 */
617 public Stream<Vertex> streamAllValuesOfv2() {
618 return rawStreamAllValuesOfv2(emptyArray());
619 }
620
621 /**
622 * Retrieve the set of values that occur in matches for v2.
623 * </p>
624 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
625 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
626 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
627 *
628 * @return the Stream of all values or empty set if there are no matches
629 *
630 */
631 public Stream<Vertex> streamAllValuesOfv2(final SynchronizedRegionsAreNotSiblings.Match partialMatch) {
632 return rawStreamAllValuesOfv2(partialMatch.toArray());
633 }
634
635 /**
636 * Retrieve the set of values that occur in matches for v2.
637 * </p>
638 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
639 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
640 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
641 *
642 * @return the Stream of all values or empty set if there are no matches
643 *
644 */
645 public Stream<Vertex> streamAllValuesOfv2(final Synchronization pS, final Vertex pV1) {
646 return rawStreamAllValuesOfv2(new Object[]{pS, pV1, null});
647 }
648
649 /**
650 * Retrieve the set of values that occur in matches for v2.
651 * @return the Set of all values or empty set if there are no matches
652 *
653 */
654 public Set<Vertex> getAllValuesOfv2(final SynchronizedRegionsAreNotSiblings.Match partialMatch) {
655 return rawStreamAllValuesOfv2(partialMatch.toArray()).collect(Collectors.toSet());
656 }
657
658 /**
659 * Retrieve the set of values that occur in matches for v2.
660 * @return the Set of all values or empty set if there are no matches
661 *
662 */
663 public Set<Vertex> getAllValuesOfv2(final Synchronization pS, final Vertex pV1) {
664 return rawStreamAllValuesOfv2(new Object[]{pS, pV1, null}).collect(Collectors.toSet());
665 }
666
667 @Override
668 protected SynchronizedRegionsAreNotSiblings.Match tupleToMatch(final Tuple t) {
669 try {
670 return SynchronizedRegionsAreNotSiblings.Match.newMatch((Synchronization) t.get(POSITION_S), (Vertex) t.get(POSITION_V1), (Vertex) t.get(POSITION_V2));
671 } catch(ClassCastException e) {
672 LOGGER.error("Element(s) in tuple not properly typed!",e);
673 return null;
674 }
675 }
676
677 @Override
678 protected SynchronizedRegionsAreNotSiblings.Match arrayToMatch(final Object[] match) {
679 try {
680 return SynchronizedRegionsAreNotSiblings.Match.newMatch((Synchronization) match[POSITION_S], (Vertex) match[POSITION_V1], (Vertex) match[POSITION_V2]);
681 } catch(ClassCastException e) {
682 LOGGER.error("Element(s) in array not properly typed!",e);
683 return null;
684 }
685 }
686
687 @Override
688 protected SynchronizedRegionsAreNotSiblings.Match arrayToMatchMutable(final Object[] match) {
689 try {
690 return SynchronizedRegionsAreNotSiblings.Match.newMutableMatch((Synchronization) match[POSITION_S], (Vertex) match[POSITION_V1], (Vertex) match[POSITION_V2]);
691 } catch(ClassCastException e) {
692 LOGGER.error("Element(s) in array not properly typed!",e);
693 return null;
694 }
695 }
696
697 /**
698 * @return the singleton instance of the query specification of this pattern
699 * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded
700 *
701 */
702 public static IQuerySpecification<SynchronizedRegionsAreNotSiblings.Matcher> querySpecification() {
703 return SynchronizedRegionsAreNotSiblings.instance();
704 }
705 }
706
707 private SynchronizedRegionsAreNotSiblings() {
708 super(GeneratedPQuery.INSTANCE);
709 }
710
711 /**
712 * @return the singleton instance of the query specification
713 * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded
714 *
715 */
716 public static SynchronizedRegionsAreNotSiblings instance() {
717 try{
718 return LazyHolder.INSTANCE;
719 } catch (ExceptionInInitializerError err) {
720 throw processInitializerError(err);
721 }
722 }
723
724 @Override
725 protected SynchronizedRegionsAreNotSiblings.Matcher instantiate(final ViatraQueryEngine engine) {
726 return SynchronizedRegionsAreNotSiblings.Matcher.on(engine);
727 }
728
729 @Override
730 public SynchronizedRegionsAreNotSiblings.Matcher instantiate() {
731 return SynchronizedRegionsAreNotSiblings.Matcher.create();
732 }
733
734 @Override
735 public SynchronizedRegionsAreNotSiblings.Match newEmptyMatch() {
736 return SynchronizedRegionsAreNotSiblings.Match.newEmptyMatch();
737 }
738
739 @Override
740 public SynchronizedRegionsAreNotSiblings.Match newMatch(final Object... parameters) {
741 return SynchronizedRegionsAreNotSiblings.Match.newMatch((ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization) parameters[0], (ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex) parameters[1], (ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex) parameters[2]);
742 }
743
744 /**
745 * Inner class allowing the singleton instance of {@link JvmGenericType: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.SynchronizedRegionsAreNotSiblings (visibility: PUBLIC, simpleName: SynchronizedRegionsAreNotSiblings, identifier: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.SynchronizedRegionsAreNotSiblings, deprecated: <unset>) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)} to be created
746 * <b>not</b> at the class load time of the outer class,
747 * but rather at the first call to {@link JvmGenericType: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.SynchronizedRegionsAreNotSiblings (visibility: PUBLIC, simpleName: SynchronizedRegionsAreNotSiblings, identifier: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.SynchronizedRegionsAreNotSiblings, deprecated: <unset>) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)#instance()}.
748 *
749 * <p> This workaround is required e.g. to support recursion.
750 *
751 */
752 private static class LazyHolder {
753 private final static SynchronizedRegionsAreNotSiblings INSTANCE = new SynchronizedRegionsAreNotSiblings();
754
755 /**
756 * Statically initializes the query specification <b>after</b> the field {@link #INSTANCE} is assigned.
757 * This initialization order is required to support indirect recursion.
758 *
759 * <p> The static initializer is defined using a helper field to work around limitations of the code generator.
760 *
761 */
762 private final static Object STATIC_INITIALIZER = ensureInitialized();
763
764 public static Object ensureInitialized() {
765 INSTANCE.ensureInitializedInternal();
766 return null;
767 }
768 }
769
770 private static class GeneratedPQuery extends BaseGeneratedEMFPQuery {
771 private final static SynchronizedRegionsAreNotSiblings.GeneratedPQuery INSTANCE = new GeneratedPQuery();
772
773 private final PParameter parameter_s = new PParameter("s", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "Synchronization")), PParameterDirection.INOUT);
774
775 private final PParameter parameter_v1 = new PParameter("v1", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "Vertex")), PParameterDirection.INOUT);
776
777 private final PParameter parameter_v2 = new PParameter("v2", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "Vertex")), PParameterDirection.INOUT);
778
779 private final List<PParameter> parameters = Arrays.asList(parameter_s, parameter_v1, parameter_v2);
780
781 private GeneratedPQuery() {
782 super(PVisibility.PUBLIC);
783 }
784
785 @Override
786 public String getFullyQualifiedName() {
787 return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.SynchronizedRegionsAreNotSiblings";
788 }
789
790 @Override
791 public List<String> getParameterNames() {
792 return Arrays.asList("s","v1","v2");
793 }
794
795 @Override
796 public List<PParameter> getParameters() {
797 return parameters;
798 }
799
800 @Override
801 public Set<PBody> doGetContainedBodies() {
802 setEvaluationHints(new QueryEvaluationHint(null, QueryEvaluationHint.BackendRequirement.UNSPECIFIED));
803 Set<PBody> bodies = new LinkedHashSet<>();
804 {
805 PBody body = new PBody(this);
806 PVariable var_s = body.getOrCreateVariableByName("s");
807 PVariable var_v1 = body.getOrCreateVariableByName("v1");
808 PVariable var_v2 = body.getOrCreateVariableByName("v2");
809 PVariable var___0_ = body.getOrCreateVariableByName("_<0>");
810 PVariable var___1_ = body.getOrCreateVariableByName("_<1>");
811 PVariable var_r1 = body.getOrCreateVariableByName("r1");
812 PVariable var_r2 = body.getOrCreateVariableByName("r2");
813 new TypeConstraint(body, Tuples.flatTupleOf(var_s), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Synchronization")));
814 new TypeConstraint(body, Tuples.flatTupleOf(var_v1), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Vertex")));
815 new TypeConstraint(body, Tuples.flatTupleOf(var_v2), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Vertex")));
816 body.setSymbolicParameters(Arrays.<ExportedParameter>asList(
817 new ExportedParameter(body, var_s, parameter_s),
818 new ExportedParameter(body, var_v1, parameter_v1),
819 new ExportedParameter(body, var_v2, parameter_v2)
820 ));
821 // find transition(_, v1, s)
822 new PositivePatternCall(body, Tuples.flatTupleOf(var___0_, var_v1, var_s), Transition.instance().getInternalQueryRepresentation());
823 // find transition(_, v2, s)
824 new PositivePatternCall(body, Tuples.flatTupleOf(var___1_, var_v2, var_s), Transition.instance().getInternalQueryRepresentation());
825 // CompositeElement.regions.vertices(r1, v1)
826 new TypeConstraint(body, Tuples.flatTupleOf(var_r1), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "CompositeElement")));
827 PVariable var__virtual_0_ = body.getOrCreateVariableByName(".virtual{0}");
828 new TypeConstraint(body, Tuples.flatTupleOf(var_r1, var__virtual_0_), new EStructuralFeatureInstancesKey(getFeatureLiteral("YakinduMetamodel", "CompositeElement", "regions")));
829 new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_0_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Region")));
830 PVariable var__virtual_1_ = body.getOrCreateVariableByName(".virtual{1}");
831 new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_0_, var__virtual_1_), new EStructuralFeatureInstancesKey(getFeatureLiteral("YakinduMetamodel", "Region", "vertices")));
832 new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_1_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Vertex")));
833 new Equality(body, var__virtual_1_, var_v1);
834 // CompositeElement.regions.vertices(r2, v2)
835 new TypeConstraint(body, Tuples.flatTupleOf(var_r2), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "CompositeElement")));
836 PVariable var__virtual_2_ = body.getOrCreateVariableByName(".virtual{2}");
837 new TypeConstraint(body, Tuples.flatTupleOf(var_r2, var__virtual_2_), new EStructuralFeatureInstancesKey(getFeatureLiteral("YakinduMetamodel", "CompositeElement", "regions")));
838 new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_2_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Region")));
839 PVariable var__virtual_3_ = body.getOrCreateVariableByName(".virtual{3}");
840 new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_2_, var__virtual_3_), new EStructuralFeatureInstancesKey(getFeatureLiteral("YakinduMetamodel", "Region", "vertices")));
841 new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_3_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Vertex")));
842 new Equality(body, var__virtual_3_, var_v2);
843 // r1 != r2
844 new Inequality(body, var_r1, var_r2);
845 bodies.add(body);
846 }
847 {
848 PBody body = new PBody(this);
849 PVariable var_s = body.getOrCreateVariableByName("s");
850 PVariable var_v1 = body.getOrCreateVariableByName("v1");
851 PVariable var_v2 = body.getOrCreateVariableByName("v2");
852 PVariable var___0_ = body.getOrCreateVariableByName("_<0>");
853 PVariable var___1_ = body.getOrCreateVariableByName("_<1>");
854 PVariable var_r1 = body.getOrCreateVariableByName("r1");
855 PVariable var_r2 = body.getOrCreateVariableByName("r2");
856 new TypeConstraint(body, Tuples.flatTupleOf(var_s), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Synchronization")));
857 new TypeConstraint(body, Tuples.flatTupleOf(var_v1), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Vertex")));
858 new TypeConstraint(body, Tuples.flatTupleOf(var_v2), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Vertex")));
859 body.setSymbolicParameters(Arrays.<ExportedParameter>asList(
860 new ExportedParameter(body, var_s, parameter_s),
861 new ExportedParameter(body, var_v1, parameter_v1),
862 new ExportedParameter(body, var_v2, parameter_v2)
863 ));
864 // find transition(_, s, v1)
865 new PositivePatternCall(body, Tuples.flatTupleOf(var___0_, var_s, var_v1), Transition.instance().getInternalQueryRepresentation());
866 // find transition(_, s, v2)
867 new PositivePatternCall(body, Tuples.flatTupleOf(var___1_, var_s, var_v2), Transition.instance().getInternalQueryRepresentation());
868 // CompositeElement.regions.vertices(r1, v1)
869 new TypeConstraint(body, Tuples.flatTupleOf(var_r1), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "CompositeElement")));
870 PVariable var__virtual_0_ = body.getOrCreateVariableByName(".virtual{0}");
871 new TypeConstraint(body, Tuples.flatTupleOf(var_r1, var__virtual_0_), new EStructuralFeatureInstancesKey(getFeatureLiteral("YakinduMetamodel", "CompositeElement", "regions")));
872 new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_0_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Region")));
873 PVariable var__virtual_1_ = body.getOrCreateVariableByName(".virtual{1}");
874 new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_0_, var__virtual_1_), new EStructuralFeatureInstancesKey(getFeatureLiteral("YakinduMetamodel", "Region", "vertices")));
875 new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_1_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Vertex")));
876 new Equality(body, var__virtual_1_, var_v1);
877 // CompositeElement.regions.vertices(r2, v2)
878 new TypeConstraint(body, Tuples.flatTupleOf(var_r2), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "CompositeElement")));
879 PVariable var__virtual_2_ = body.getOrCreateVariableByName(".virtual{2}");
880 new TypeConstraint(body, Tuples.flatTupleOf(var_r2, var__virtual_2_), new EStructuralFeatureInstancesKey(getFeatureLiteral("YakinduMetamodel", "CompositeElement", "regions")));
881 new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_2_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Region")));
882 PVariable var__virtual_3_ = body.getOrCreateVariableByName(".virtual{3}");
883 new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_2_, var__virtual_3_), new EStructuralFeatureInstancesKey(getFeatureLiteral("YakinduMetamodel", "Region", "vertices")));
884 new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_3_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Vertex")));
885 new Equality(body, var__virtual_3_, var_v2);
886 // r1 != r2
887 new Inequality(body, var_r1, var_r2);
888 bodies.add(body);
889 }
890 {
891 PAnnotation annotation = new PAnnotation("Constraint");
892 annotation.addAttribute("severity", "error");
893 annotation.addAttribute("message", "error");
894 annotation.addAttribute("key", Arrays.asList(new Object[] {
895 new ParameterReference("s")
896 }));
897 addAnnotation(annotation);
898 }
899 return bodies;
900 }
901 }
902}
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/Transition.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/Transition.java
new file mode 100644
index 00000000..185f348e
--- /dev/null
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/Transition.java
@@ -0,0 +1,808 @@
1/**
2 * Generated from platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduPatterns.vql
3 */
4package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries;
5
6import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex;
7import java.util.Arrays;
8import java.util.Collection;
9import java.util.LinkedHashSet;
10import java.util.List;
11import java.util.Objects;
12import java.util.Optional;
13import java.util.Set;
14import java.util.function.Consumer;
15import java.util.stream.Collectors;
16import java.util.stream.Stream;
17import org.apache.log4j.Logger;
18import org.eclipse.emf.ecore.EClass;
19import org.eclipse.viatra.query.runtime.api.IPatternMatch;
20import org.eclipse.viatra.query.runtime.api.IQuerySpecification;
21import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine;
22import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFPQuery;
23import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFQuerySpecification;
24import org.eclipse.viatra.query.runtime.api.impl.BaseMatcher;
25import org.eclipse.viatra.query.runtime.api.impl.BasePatternMatch;
26import org.eclipse.viatra.query.runtime.emf.types.EClassTransitiveInstancesKey;
27import org.eclipse.viatra.query.runtime.emf.types.EStructuralFeatureInstancesKey;
28import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint;
29import org.eclipse.viatra.query.runtime.matchers.psystem.PBody;
30import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable;
31import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.Equality;
32import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExportedParameter;
33import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint;
34import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter;
35import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameterDirection;
36import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PVisibility;
37import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple;
38import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples;
39import org.eclipse.viatra.query.runtime.util.ViatraQueryLoggingUtil;
40
41/**
42 * A pattern-specific query specification that can instantiate Matcher in a type-safe way.
43 *
44 * <p>Original source:
45 * <code><pre>
46 * pattern transition(t : Transition, src : Vertex, trg : Vertex) {
47 * Transition.source(t, src);
48 * Transition.target(t, trg);
49 * }
50 * </pre></code>
51 *
52 * @see Matcher
53 * @see Match
54 *
55 */
56@SuppressWarnings("all")
57public final class Transition extends BaseGeneratedEMFQuerySpecification<Transition.Matcher> {
58 /**
59 * Pattern-specific match representation of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.transition pattern,
60 * to be used in conjunction with {@link Matcher}.
61 *
62 * <p>Class fields correspond to parameters of the pattern. Fields with value null are considered unassigned.
63 * Each instance is a (possibly partial) substitution of pattern parameters,
64 * usable to represent a match of the pattern in the result of a query,
65 * or to specify the bound (fixed) input parameters when issuing a query.
66 *
67 * @see Matcher
68 *
69 */
70 public static abstract class Match extends BasePatternMatch {
71 private ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition fT;
72
73 private Vertex fSrc;
74
75 private Vertex fTrg;
76
77 private static List<String> parameterNames = makeImmutableList("t", "src", "trg");
78
79 private Match(final ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition pT, final Vertex pSrc, final Vertex pTrg) {
80 this.fT = pT;
81 this.fSrc = pSrc;
82 this.fTrg = pTrg;
83 }
84
85 @Override
86 public Object get(final String parameterName) {
87 if ("t".equals(parameterName)) return this.fT;
88 if ("src".equals(parameterName)) return this.fSrc;
89 if ("trg".equals(parameterName)) return this.fTrg;
90 return null;
91 }
92
93 public ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition getT() {
94 return this.fT;
95 }
96
97 public Vertex getSrc() {
98 return this.fSrc;
99 }
100
101 public Vertex getTrg() {
102 return this.fTrg;
103 }
104
105 @Override
106 public boolean set(final String parameterName, final Object newValue) {
107 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
108 if ("t".equals(parameterName) ) {
109 this.fT = (ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition) newValue;
110 return true;
111 }
112 if ("src".equals(parameterName) ) {
113 this.fSrc = (Vertex) newValue;
114 return true;
115 }
116 if ("trg".equals(parameterName) ) {
117 this.fTrg = (Vertex) newValue;
118 return true;
119 }
120 return false;
121 }
122
123 public void setT(final ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition pT) {
124 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
125 this.fT = pT;
126 }
127
128 public void setSrc(final Vertex pSrc) {
129 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
130 this.fSrc = pSrc;
131 }
132
133 public void setTrg(final Vertex pTrg) {
134 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
135 this.fTrg = pTrg;
136 }
137
138 @Override
139 public String patternName() {
140 return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.transition";
141 }
142
143 @Override
144 public List<String> parameterNames() {
145 return Transition.Match.parameterNames;
146 }
147
148 @Override
149 public Object[] toArray() {
150 return new Object[]{fT, fSrc, fTrg};
151 }
152
153 @Override
154 public Transition.Match toImmutable() {
155 return isMutable() ? newMatch(fT, fSrc, fTrg) : this;
156 }
157
158 @Override
159 public String prettyPrint() {
160 StringBuilder result = new StringBuilder();
161 result.append("\"t\"=" + prettyPrintValue(fT) + ", ");
162 result.append("\"src\"=" + prettyPrintValue(fSrc) + ", ");
163 result.append("\"trg\"=" + prettyPrintValue(fTrg));
164 return result.toString();
165 }
166
167 @Override
168 public int hashCode() {
169 return Objects.hash(fT, fSrc, fTrg);
170 }
171
172 @Override
173 public boolean equals(final Object obj) {
174 if (this == obj)
175 return true;
176 if (obj == null) {
177 return false;
178 }
179 if ((obj instanceof Transition.Match)) {
180 Transition.Match other = (Transition.Match) obj;
181 return Objects.equals(fT, other.fT) && Objects.equals(fSrc, other.fSrc) && Objects.equals(fTrg, other.fTrg);
182 } else {
183 // this should be infrequent
184 if (!(obj instanceof IPatternMatch)) {
185 return false;
186 }
187 IPatternMatch otherSig = (IPatternMatch) obj;
188 return Objects.equals(specification(), otherSig.specification()) && Arrays.deepEquals(toArray(), otherSig.toArray());
189 }
190 }
191
192 @Override
193 public Transition specification() {
194 return Transition.instance();
195 }
196
197 /**
198 * Returns an empty, mutable match.
199 * Fields of the mutable match can be filled to create a partial match, usable as matcher input.
200 *
201 * @return the empty match.
202 *
203 */
204 public static Transition.Match newEmptyMatch() {
205 return new Mutable(null, null, null);
206 }
207
208 /**
209 * Returns a mutable (partial) match.
210 * Fields of the mutable match can be filled to create a partial match, usable as matcher input.
211 *
212 * @param pT the fixed value of pattern parameter t, or null if not bound.
213 * @param pSrc the fixed value of pattern parameter src, or null if not bound.
214 * @param pTrg the fixed value of pattern parameter trg, or null if not bound.
215 * @return the new, mutable (partial) match object.
216 *
217 */
218 public static Transition.Match newMutableMatch(final ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition pT, final Vertex pSrc, final Vertex pTrg) {
219 return new Mutable(pT, pSrc, pTrg);
220 }
221
222 /**
223 * Returns a new (partial) match.
224 * This can be used e.g. to call the matcher with a partial match.
225 * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object.
226 * @param pT the fixed value of pattern parameter t, or null if not bound.
227 * @param pSrc the fixed value of pattern parameter src, or null if not bound.
228 * @param pTrg the fixed value of pattern parameter trg, or null if not bound.
229 * @return the (partial) match object.
230 *
231 */
232 public static Transition.Match newMatch(final ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition pT, final Vertex pSrc, final Vertex pTrg) {
233 return new Immutable(pT, pSrc, pTrg);
234 }
235
236 private static final class Mutable extends Transition.Match {
237 Mutable(final ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition pT, final Vertex pSrc, final Vertex pTrg) {
238 super(pT, pSrc, pTrg);
239 }
240
241 @Override
242 public boolean isMutable() {
243 return true;
244 }
245 }
246
247 private static final class Immutable extends Transition.Match {
248 Immutable(final ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition pT, final Vertex pSrc, final Vertex pTrg) {
249 super(pT, pSrc, pTrg);
250 }
251
252 @Override
253 public boolean isMutable() {
254 return false;
255 }
256 }
257 }
258
259 /**
260 * Generated pattern matcher API of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.transition pattern,
261 * providing pattern-specific query methods.
262 *
263 * <p>Use the pattern matcher on a given model via {@link #on(ViatraQueryEngine)},
264 * e.g. in conjunction with {@link ViatraQueryEngine#on(QueryScope)}.
265 *
266 * <p>Matches of the pattern will be represented as {@link Match}.
267 *
268 * <p>Original source:
269 * <code><pre>
270 * pattern transition(t : Transition, src : Vertex, trg : Vertex) {
271 * Transition.source(t, src);
272 * Transition.target(t, trg);
273 * }
274 * </pre></code>
275 *
276 * @see Match
277 * @see Transition
278 *
279 */
280 public static class Matcher extends BaseMatcher<Transition.Match> {
281 /**
282 * Initializes the pattern matcher within an existing VIATRA Query engine.
283 * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned.
284 *
285 * @param engine the existing VIATRA Query engine in which this matcher will be created.
286 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
287 *
288 */
289 public static Transition.Matcher on(final ViatraQueryEngine engine) {
290 // check if matcher already exists
291 Matcher matcher = engine.getExistingMatcher(querySpecification());
292 if (matcher == null) {
293 matcher = (Matcher)engine.getMatcher(querySpecification());
294 }
295 return matcher;
296 }
297
298 /**
299 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
300 * @return an initialized matcher
301 * @noreference This method is for internal matcher initialization by the framework, do not call it manually.
302 *
303 */
304 public static Transition.Matcher create() {
305 return new Matcher();
306 }
307
308 private final static int POSITION_T = 0;
309
310 private final static int POSITION_SRC = 1;
311
312 private final static int POSITION_TRG = 2;
313
314 private final static Logger LOGGER = ViatraQueryLoggingUtil.getLogger(Transition.Matcher.class);
315
316 /**
317 * Initializes the pattern matcher within an existing VIATRA Query engine.
318 * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned.
319 *
320 * @param engine the existing VIATRA Query engine in which this matcher will be created.
321 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
322 *
323 */
324 private Matcher() {
325 super(querySpecification());
326 }
327
328 /**
329 * Returns the set of all matches of the pattern that conform to the given fixed values of some parameters.
330 * @param pT the fixed value of pattern parameter t, or null if not bound.
331 * @param pSrc the fixed value of pattern parameter src, or null if not bound.
332 * @param pTrg the fixed value of pattern parameter trg, or null if not bound.
333 * @return matches represented as a Match object.
334 *
335 */
336 public Collection<Transition.Match> getAllMatches(final ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition pT, final Vertex pSrc, final Vertex pTrg) {
337 return rawStreamAllMatches(new Object[]{pT, pSrc, pTrg}).collect(Collectors.toSet());
338 }
339
340 /**
341 * Returns a stream of all matches of the pattern that conform to the given fixed values of some parameters.
342 * </p>
343 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
344 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
345 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
346 * @param pT the fixed value of pattern parameter t, or null if not bound.
347 * @param pSrc the fixed value of pattern parameter src, or null if not bound.
348 * @param pTrg the fixed value of pattern parameter trg, or null if not bound.
349 * @return a stream of matches represented as a Match object.
350 *
351 */
352 public Stream<Transition.Match> streamAllMatches(final ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition pT, final Vertex pSrc, final Vertex pTrg) {
353 return rawStreamAllMatches(new Object[]{pT, pSrc, pTrg});
354 }
355
356 /**
357 * Returns an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters.
358 * Neither determinism nor randomness of selection is guaranteed.
359 * @param pT the fixed value of pattern parameter t, or null if not bound.
360 * @param pSrc the fixed value of pattern parameter src, or null if not bound.
361 * @param pTrg the fixed value of pattern parameter trg, or null if not bound.
362 * @return a match represented as a Match object, or null if no match is found.
363 *
364 */
365 public Optional<Transition.Match> getOneArbitraryMatch(final ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition pT, final Vertex pSrc, final Vertex pTrg) {
366 return rawGetOneArbitraryMatch(new Object[]{pT, pSrc, pTrg});
367 }
368
369 /**
370 * Indicates whether the given combination of specified pattern parameters constitute a valid pattern match,
371 * under any possible substitution of the unspecified parameters (if any).
372 * @param pT the fixed value of pattern parameter t, or null if not bound.
373 * @param pSrc the fixed value of pattern parameter src, or null if not bound.
374 * @param pTrg the fixed value of pattern parameter trg, or null if not bound.
375 * @return true if the input is a valid (partial) match of the pattern.
376 *
377 */
378 public boolean hasMatch(final ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition pT, final Vertex pSrc, final Vertex pTrg) {
379 return rawHasMatch(new Object[]{pT, pSrc, pTrg});
380 }
381
382 /**
383 * Returns the number of all matches of the pattern that conform to the given fixed values of some parameters.
384 * @param pT the fixed value of pattern parameter t, or null if not bound.
385 * @param pSrc the fixed value of pattern parameter src, or null if not bound.
386 * @param pTrg the fixed value of pattern parameter trg, or null if not bound.
387 * @return the number of pattern matches found.
388 *
389 */
390 public int countMatches(final ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition pT, final Vertex pSrc, final Vertex pTrg) {
391 return rawCountMatches(new Object[]{pT, pSrc, pTrg});
392 }
393
394 /**
395 * Executes the given processor on an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters.
396 * Neither determinism nor randomness of selection is guaranteed.
397 * @param pT the fixed value of pattern parameter t, or null if not bound.
398 * @param pSrc the fixed value of pattern parameter src, or null if not bound.
399 * @param pTrg the fixed value of pattern parameter trg, or null if not bound.
400 * @param processor the action that will process the selected match.
401 * @return true if the pattern has at least one match with the given parameter values, false if the processor was not invoked
402 *
403 */
404 public boolean forOneArbitraryMatch(final ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition pT, final Vertex pSrc, final Vertex pTrg, final Consumer<? super Transition.Match> processor) {
405 return rawForOneArbitraryMatch(new Object[]{pT, pSrc, pTrg}, processor);
406 }
407
408 /**
409 * Returns a new (partial) match.
410 * This can be used e.g. to call the matcher with a partial match.
411 * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object.
412 * @param pT the fixed value of pattern parameter t, or null if not bound.
413 * @param pSrc the fixed value of pattern parameter src, or null if not bound.
414 * @param pTrg the fixed value of pattern parameter trg, or null if not bound.
415 * @return the (partial) match object.
416 *
417 */
418 public Transition.Match newMatch(final ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition pT, final Vertex pSrc, final Vertex pTrg) {
419 return Transition.Match.newMatch(pT, pSrc, pTrg);
420 }
421
422 /**
423 * Retrieve the set of values that occur in matches for t.
424 * @return the Set of all values or empty set if there are no matches
425 *
426 */
427 protected Stream<ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition> rawStreamAllValuesOft(final Object[] parameters) {
428 return rawStreamAllValues(POSITION_T, parameters).map(ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition.class::cast);
429 }
430
431 /**
432 * Retrieve the set of values that occur in matches for t.
433 * @return the Set of all values or empty set if there are no matches
434 *
435 */
436 public Set<ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition> getAllValuesOft() {
437 return rawStreamAllValuesOft(emptyArray()).collect(Collectors.toSet());
438 }
439
440 /**
441 * Retrieve the set of values that occur in matches for t.
442 * @return the Set of all values or empty set if there are no matches
443 *
444 */
445 public Stream<ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition> streamAllValuesOft() {
446 return rawStreamAllValuesOft(emptyArray());
447 }
448
449 /**
450 * Retrieve the set of values that occur in matches for t.
451 * </p>
452 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
453 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
454 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
455 *
456 * @return the Stream of all values or empty set if there are no matches
457 *
458 */
459 public Stream<ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition> streamAllValuesOft(final Transition.Match partialMatch) {
460 return rawStreamAllValuesOft(partialMatch.toArray());
461 }
462
463 /**
464 * Retrieve the set of values that occur in matches for t.
465 * </p>
466 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
467 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
468 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
469 *
470 * @return the Stream of all values or empty set if there are no matches
471 *
472 */
473 public Stream<ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition> streamAllValuesOft(final Vertex pSrc, final Vertex pTrg) {
474 return rawStreamAllValuesOft(new Object[]{null, pSrc, pTrg});
475 }
476
477 /**
478 * Retrieve the set of values that occur in matches for t.
479 * @return the Set of all values or empty set if there are no matches
480 *
481 */
482 public Set<ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition> getAllValuesOft(final Transition.Match partialMatch) {
483 return rawStreamAllValuesOft(partialMatch.toArray()).collect(Collectors.toSet());
484 }
485
486 /**
487 * Retrieve the set of values that occur in matches for t.
488 * @return the Set of all values or empty set if there are no matches
489 *
490 */
491 public Set<ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition> getAllValuesOft(final Vertex pSrc, final Vertex pTrg) {
492 return rawStreamAllValuesOft(new Object[]{null, pSrc, pTrg}).collect(Collectors.toSet());
493 }
494
495 /**
496 * Retrieve the set of values that occur in matches for src.
497 * @return the Set of all values or empty set if there are no matches
498 *
499 */
500 protected Stream<Vertex> rawStreamAllValuesOfsrc(final Object[] parameters) {
501 return rawStreamAllValues(POSITION_SRC, parameters).map(Vertex.class::cast);
502 }
503
504 /**
505 * Retrieve the set of values that occur in matches for src.
506 * @return the Set of all values or empty set if there are no matches
507 *
508 */
509 public Set<Vertex> getAllValuesOfsrc() {
510 return rawStreamAllValuesOfsrc(emptyArray()).collect(Collectors.toSet());
511 }
512
513 /**
514 * Retrieve the set of values that occur in matches for src.
515 * @return the Set of all values or empty set if there are no matches
516 *
517 */
518 public Stream<Vertex> streamAllValuesOfsrc() {
519 return rawStreamAllValuesOfsrc(emptyArray());
520 }
521
522 /**
523 * Retrieve the set of values that occur in matches for src.
524 * </p>
525 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
526 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
527 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
528 *
529 * @return the Stream of all values or empty set if there are no matches
530 *
531 */
532 public Stream<Vertex> streamAllValuesOfsrc(final Transition.Match partialMatch) {
533 return rawStreamAllValuesOfsrc(partialMatch.toArray());
534 }
535
536 /**
537 * Retrieve the set of values that occur in matches for src.
538 * </p>
539 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
540 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
541 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
542 *
543 * @return the Stream of all values or empty set if there are no matches
544 *
545 */
546 public Stream<Vertex> streamAllValuesOfsrc(final ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition pT, final Vertex pTrg) {
547 return rawStreamAllValuesOfsrc(new Object[]{pT, null, pTrg});
548 }
549
550 /**
551 * Retrieve the set of values that occur in matches for src.
552 * @return the Set of all values or empty set if there are no matches
553 *
554 */
555 public Set<Vertex> getAllValuesOfsrc(final Transition.Match partialMatch) {
556 return rawStreamAllValuesOfsrc(partialMatch.toArray()).collect(Collectors.toSet());
557 }
558
559 /**
560 * Retrieve the set of values that occur in matches for src.
561 * @return the Set of all values or empty set if there are no matches
562 *
563 */
564 public Set<Vertex> getAllValuesOfsrc(final ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition pT, final Vertex pTrg) {
565 return rawStreamAllValuesOfsrc(new Object[]{pT, null, pTrg}).collect(Collectors.toSet());
566 }
567
568 /**
569 * Retrieve the set of values that occur in matches for trg.
570 * @return the Set of all values or empty set if there are no matches
571 *
572 */
573 protected Stream<Vertex> rawStreamAllValuesOftrg(final Object[] parameters) {
574 return rawStreamAllValues(POSITION_TRG, parameters).map(Vertex.class::cast);
575 }
576
577 /**
578 * Retrieve the set of values that occur in matches for trg.
579 * @return the Set of all values or empty set if there are no matches
580 *
581 */
582 public Set<Vertex> getAllValuesOftrg() {
583 return rawStreamAllValuesOftrg(emptyArray()).collect(Collectors.toSet());
584 }
585
586 /**
587 * Retrieve the set of values that occur in matches for trg.
588 * @return the Set of all values or empty set if there are no matches
589 *
590 */
591 public Stream<Vertex> streamAllValuesOftrg() {
592 return rawStreamAllValuesOftrg(emptyArray());
593 }
594
595 /**
596 * Retrieve the set of values that occur in matches for trg.
597 * </p>
598 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
599 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
600 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
601 *
602 * @return the Stream of all values or empty set if there are no matches
603 *
604 */
605 public Stream<Vertex> streamAllValuesOftrg(final Transition.Match partialMatch) {
606 return rawStreamAllValuesOftrg(partialMatch.toArray());
607 }
608
609 /**
610 * Retrieve the set of values that occur in matches for trg.
611 * </p>
612 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
613 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
614 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
615 *
616 * @return the Stream of all values or empty set if there are no matches
617 *
618 */
619 public Stream<Vertex> streamAllValuesOftrg(final ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition pT, final Vertex pSrc) {
620 return rawStreamAllValuesOftrg(new Object[]{pT, pSrc, null});
621 }
622
623 /**
624 * Retrieve the set of values that occur in matches for trg.
625 * @return the Set of all values or empty set if there are no matches
626 *
627 */
628 public Set<Vertex> getAllValuesOftrg(final Transition.Match partialMatch) {
629 return rawStreamAllValuesOftrg(partialMatch.toArray()).collect(Collectors.toSet());
630 }
631
632 /**
633 * Retrieve the set of values that occur in matches for trg.
634 * @return the Set of all values or empty set if there are no matches
635 *
636 */
637 public Set<Vertex> getAllValuesOftrg(final ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition pT, final Vertex pSrc) {
638 return rawStreamAllValuesOftrg(new Object[]{pT, pSrc, null}).collect(Collectors.toSet());
639 }
640
641 @Override
642 protected Transition.Match tupleToMatch(final Tuple t) {
643 try {
644 return Transition.Match.newMatch((ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition) t.get(POSITION_T), (Vertex) t.get(POSITION_SRC), (Vertex) t.get(POSITION_TRG));
645 } catch(ClassCastException e) {
646 LOGGER.error("Element(s) in tuple not properly typed!",e);
647 return null;
648 }
649 }
650
651 @Override
652 protected Transition.Match arrayToMatch(final Object[] match) {
653 try {
654 return Transition.Match.newMatch((ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition) match[POSITION_T], (Vertex) match[POSITION_SRC], (Vertex) match[POSITION_TRG]);
655 } catch(ClassCastException e) {
656 LOGGER.error("Element(s) in array not properly typed!",e);
657 return null;
658 }
659 }
660
661 @Override
662 protected Transition.Match arrayToMatchMutable(final Object[] match) {
663 try {
664 return Transition.Match.newMutableMatch((ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition) match[POSITION_T], (Vertex) match[POSITION_SRC], (Vertex) match[POSITION_TRG]);
665 } catch(ClassCastException e) {
666 LOGGER.error("Element(s) in array not properly typed!",e);
667 return null;
668 }
669 }
670
671 /**
672 * @return the singleton instance of the query specification of this pattern
673 * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded
674 *
675 */
676 public static IQuerySpecification<Transition.Matcher> querySpecification() {
677 return Transition.instance();
678 }
679 }
680
681 private Transition() {
682 super(GeneratedPQuery.INSTANCE);
683 }
684
685 /**
686 * @return the singleton instance of the query specification
687 * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded
688 *
689 */
690 public static Transition instance() {
691 try{
692 return LazyHolder.INSTANCE;
693 } catch (ExceptionInInitializerError err) {
694 throw processInitializerError(err);
695 }
696 }
697
698 @Override
699 protected Transition.Matcher instantiate(final ViatraQueryEngine engine) {
700 return Transition.Matcher.on(engine);
701 }
702
703 @Override
704 public Transition.Matcher instantiate() {
705 return Transition.Matcher.create();
706 }
707
708 @Override
709 public Transition.Match newEmptyMatch() {
710 return Transition.Match.newEmptyMatch();
711 }
712
713 @Override
714 public Transition.Match newMatch(final Object... parameters) {
715 return Transition.Match.newMatch((ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition) parameters[0], (ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex) parameters[1], (ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex) parameters[2]);
716 }
717
718 /**
719 * Inner class allowing the singleton instance of {@link JvmGenericType: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.Transition (visibility: PUBLIC, simpleName: Transition, identifier: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.Transition, deprecated: <unset>) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)} to be created
720 * <b>not</b> at the class load time of the outer class,
721 * but rather at the first call to {@link JvmGenericType: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.Transition (visibility: PUBLIC, simpleName: Transition, identifier: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.Transition, deprecated: <unset>) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)#instance()}.
722 *
723 * <p> This workaround is required e.g. to support recursion.
724 *
725 */
726 private static class LazyHolder {
727 private final static Transition INSTANCE = new Transition();
728
729 /**
730 * Statically initializes the query specification <b>after</b> the field {@link #INSTANCE} is assigned.
731 * This initialization order is required to support indirect recursion.
732 *
733 * <p> The static initializer is defined using a helper field to work around limitations of the code generator.
734 *
735 */
736 private final static Object STATIC_INITIALIZER = ensureInitialized();
737
738 public static Object ensureInitialized() {
739 INSTANCE.ensureInitializedInternal();
740 return null;
741 }
742 }
743
744 private static class GeneratedPQuery extends BaseGeneratedEMFPQuery {
745 private final static Transition.GeneratedPQuery INSTANCE = new GeneratedPQuery();
746
747 private final PParameter parameter_t = new PParameter("t", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Transition", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "Transition")), PParameterDirection.INOUT);
748
749 private final PParameter parameter_src = new PParameter("src", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "Vertex")), PParameterDirection.INOUT);
750
751 private final PParameter parameter_trg = new PParameter("trg", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Vertex", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "Vertex")), PParameterDirection.INOUT);
752
753 private final List<PParameter> parameters = Arrays.asList(parameter_t, parameter_src, parameter_trg);
754
755 private GeneratedPQuery() {
756 super(PVisibility.PUBLIC);
757 }
758
759 @Override
760 public String getFullyQualifiedName() {
761 return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.transition";
762 }
763
764 @Override
765 public List<String> getParameterNames() {
766 return Arrays.asList("t","src","trg");
767 }
768
769 @Override
770 public List<PParameter> getParameters() {
771 return parameters;
772 }
773
774 @Override
775 public Set<PBody> doGetContainedBodies() {
776 setEvaluationHints(new QueryEvaluationHint(null, QueryEvaluationHint.BackendRequirement.UNSPECIFIED));
777 Set<PBody> bodies = new LinkedHashSet<>();
778 {
779 PBody body = new PBody(this);
780 PVariable var_t = body.getOrCreateVariableByName("t");
781 PVariable var_src = body.getOrCreateVariableByName("src");
782 PVariable var_trg = body.getOrCreateVariableByName("trg");
783 new TypeConstraint(body, Tuples.flatTupleOf(var_t), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Transition")));
784 new TypeConstraint(body, Tuples.flatTupleOf(var_src), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Vertex")));
785 new TypeConstraint(body, Tuples.flatTupleOf(var_trg), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Vertex")));
786 body.setSymbolicParameters(Arrays.<ExportedParameter>asList(
787 new ExportedParameter(body, var_t, parameter_t),
788 new ExportedParameter(body, var_src, parameter_src),
789 new ExportedParameter(body, var_trg, parameter_trg)
790 ));
791 // Transition.source(t, src)
792 new TypeConstraint(body, Tuples.flatTupleOf(var_t), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Transition")));
793 PVariable var__virtual_0_ = body.getOrCreateVariableByName(".virtual{0}");
794 new TypeConstraint(body, Tuples.flatTupleOf(var_t, var__virtual_0_), new EStructuralFeatureInstancesKey(getFeatureLiteral("YakinduMetamodel", "Transition", "source")));
795 new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_0_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Vertex")));
796 new Equality(body, var__virtual_0_, var_src);
797 // Transition.target(t, trg)
798 new TypeConstraint(body, Tuples.flatTupleOf(var_t), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Transition")));
799 PVariable var__virtual_1_ = body.getOrCreateVariableByName(".virtual{1}");
800 new TypeConstraint(body, Tuples.flatTupleOf(var_t, var__virtual_1_), new EStructuralFeatureInstancesKey(getFeatureLiteral("YakinduMetamodel", "Transition", "target")));
801 new TypeConstraint(body, Tuples.flatTupleOf(var__virtual_1_), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Vertex")));
802 new Equality(body, var__virtual_1_, var_trg);
803 bodies.add(body);
804 }
805 return bodies;
806 }
807 }
808}
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/TwoSynch.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/TwoSynch.java
new file mode 100644
index 00000000..4595f6bc
--- /dev/null
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src-gen/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/TwoSynch.java
@@ -0,0 +1,714 @@
1/**
2 * Generated from platform:/resource/ca.mcgill.ecse.dslreasoner.standalone.test/queries/ca/mcgill/ecse/dslreasoner/standalone/test/yakindu/queries/yakinduPatterns.vql
3 */
4package ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries;
5
6import ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization;
7import java.util.Arrays;
8import java.util.Collection;
9import java.util.LinkedHashSet;
10import java.util.List;
11import java.util.Objects;
12import java.util.Optional;
13import java.util.Set;
14import java.util.function.Consumer;
15import java.util.stream.Collectors;
16import java.util.stream.Stream;
17import org.apache.log4j.Logger;
18import org.eclipse.emf.ecore.EClass;
19import org.eclipse.viatra.query.runtime.api.IPatternMatch;
20import org.eclipse.viatra.query.runtime.api.IQuerySpecification;
21import org.eclipse.viatra.query.runtime.api.ViatraQueryEngine;
22import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFPQuery;
23import org.eclipse.viatra.query.runtime.api.impl.BaseGeneratedEMFQuerySpecification;
24import org.eclipse.viatra.query.runtime.api.impl.BaseMatcher;
25import org.eclipse.viatra.query.runtime.api.impl.BasePatternMatch;
26import org.eclipse.viatra.query.runtime.emf.types.EClassTransitiveInstancesKey;
27import org.eclipse.viatra.query.runtime.matchers.backend.QueryEvaluationHint;
28import org.eclipse.viatra.query.runtime.matchers.psystem.PBody;
29import org.eclipse.viatra.query.runtime.matchers.psystem.PVariable;
30import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.PAnnotation;
31import org.eclipse.viatra.query.runtime.matchers.psystem.annotations.ParameterReference;
32import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.ExportedParameter;
33import org.eclipse.viatra.query.runtime.matchers.psystem.basicdeferred.Inequality;
34import org.eclipse.viatra.query.runtime.matchers.psystem.basicenumerables.TypeConstraint;
35import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameter;
36import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PParameterDirection;
37import org.eclipse.viatra.query.runtime.matchers.psystem.queries.PVisibility;
38import org.eclipse.viatra.query.runtime.matchers.tuple.Tuple;
39import org.eclipse.viatra.query.runtime.matchers.tuple.Tuples;
40import org.eclipse.viatra.query.runtime.util.ViatraQueryLoggingUtil;
41
42/**
43 * A pattern-specific query specification that can instantiate Matcher in a type-safe way.
44 *
45 * <p>Original source:
46 * <code><pre>
47 * Simplifying model generation
48 *
49 * {@literal @}Constraint(severity="error", message="error", key = {s1,s2})
50 * pattern twoSynch(s1 : Synchronization, s2 : Synchronization) {
51 * Synchronization(s1);
52 * Synchronization(s2);
53 * s1 != s2;
54 * }
55 * </pre></code>
56 *
57 * @see Matcher
58 * @see Match
59 *
60 */
61@SuppressWarnings("all")
62public final class TwoSynch extends BaseGeneratedEMFQuerySpecification<TwoSynch.Matcher> {
63 /**
64 * Pattern-specific match representation of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.twoSynch pattern,
65 * to be used in conjunction with {@link Matcher}.
66 *
67 * <p>Class fields correspond to parameters of the pattern. Fields with value null are considered unassigned.
68 * Each instance is a (possibly partial) substitution of pattern parameters,
69 * usable to represent a match of the pattern in the result of a query,
70 * or to specify the bound (fixed) input parameters when issuing a query.
71 *
72 * @see Matcher
73 *
74 */
75 public static abstract class Match extends BasePatternMatch {
76 private Synchronization fS1;
77
78 private Synchronization fS2;
79
80 private static List<String> parameterNames = makeImmutableList("s1", "s2");
81
82 private Match(final Synchronization pS1, final Synchronization pS2) {
83 this.fS1 = pS1;
84 this.fS2 = pS2;
85 }
86
87 @Override
88 public Object get(final String parameterName) {
89 if ("s1".equals(parameterName)) return this.fS1;
90 if ("s2".equals(parameterName)) return this.fS2;
91 return null;
92 }
93
94 public Synchronization getS1() {
95 return this.fS1;
96 }
97
98 public Synchronization getS2() {
99 return this.fS2;
100 }
101
102 @Override
103 public boolean set(final String parameterName, final Object newValue) {
104 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
105 if ("s1".equals(parameterName) ) {
106 this.fS1 = (Synchronization) newValue;
107 return true;
108 }
109 if ("s2".equals(parameterName) ) {
110 this.fS2 = (Synchronization) newValue;
111 return true;
112 }
113 return false;
114 }
115
116 public void setS1(final Synchronization pS1) {
117 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
118 this.fS1 = pS1;
119 }
120
121 public void setS2(final Synchronization pS2) {
122 if (!isMutable()) throw new java.lang.UnsupportedOperationException();
123 this.fS2 = pS2;
124 }
125
126 @Override
127 public String patternName() {
128 return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.twoSynch";
129 }
130
131 @Override
132 public List<String> parameterNames() {
133 return TwoSynch.Match.parameterNames;
134 }
135
136 @Override
137 public Object[] toArray() {
138 return new Object[]{fS1, fS2};
139 }
140
141 @Override
142 public TwoSynch.Match toImmutable() {
143 return isMutable() ? newMatch(fS1, fS2) : this;
144 }
145
146 @Override
147 public String prettyPrint() {
148 StringBuilder result = new StringBuilder();
149 result.append("\"s1\"=" + prettyPrintValue(fS1) + ", ");
150 result.append("\"s2\"=" + prettyPrintValue(fS2));
151 return result.toString();
152 }
153
154 @Override
155 public int hashCode() {
156 return Objects.hash(fS1, fS2);
157 }
158
159 @Override
160 public boolean equals(final Object obj) {
161 if (this == obj)
162 return true;
163 if (obj == null) {
164 return false;
165 }
166 if ((obj instanceof TwoSynch.Match)) {
167 TwoSynch.Match other = (TwoSynch.Match) obj;
168 return Objects.equals(fS1, other.fS1) && Objects.equals(fS2, other.fS2);
169 } else {
170 // this should be infrequent
171 if (!(obj instanceof IPatternMatch)) {
172 return false;
173 }
174 IPatternMatch otherSig = (IPatternMatch) obj;
175 return Objects.equals(specification(), otherSig.specification()) && Arrays.deepEquals(toArray(), otherSig.toArray());
176 }
177 }
178
179 @Override
180 public TwoSynch specification() {
181 return TwoSynch.instance();
182 }
183
184 /**
185 * Returns an empty, mutable match.
186 * Fields of the mutable match can be filled to create a partial match, usable as matcher input.
187 *
188 * @return the empty match.
189 *
190 */
191 public static TwoSynch.Match newEmptyMatch() {
192 return new Mutable(null, null);
193 }
194
195 /**
196 * Returns a mutable (partial) match.
197 * Fields of the mutable match can be filled to create a partial match, usable as matcher input.
198 *
199 * @param pS1 the fixed value of pattern parameter s1, or null if not bound.
200 * @param pS2 the fixed value of pattern parameter s2, or null if not bound.
201 * @return the new, mutable (partial) match object.
202 *
203 */
204 public static TwoSynch.Match newMutableMatch(final Synchronization pS1, final Synchronization pS2) {
205 return new Mutable(pS1, pS2);
206 }
207
208 /**
209 * Returns a new (partial) match.
210 * This can be used e.g. to call the matcher with a partial match.
211 * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object.
212 * @param pS1 the fixed value of pattern parameter s1, or null if not bound.
213 * @param pS2 the fixed value of pattern parameter s2, or null if not bound.
214 * @return the (partial) match object.
215 *
216 */
217 public static TwoSynch.Match newMatch(final Synchronization pS1, final Synchronization pS2) {
218 return new Immutable(pS1, pS2);
219 }
220
221 private static final class Mutable extends TwoSynch.Match {
222 Mutable(final Synchronization pS1, final Synchronization pS2) {
223 super(pS1, pS2);
224 }
225
226 @Override
227 public boolean isMutable() {
228 return true;
229 }
230 }
231
232 private static final class Immutable extends TwoSynch.Match {
233 Immutable(final Synchronization pS1, final Synchronization pS2) {
234 super(pS1, pS2);
235 }
236
237 @Override
238 public boolean isMutable() {
239 return false;
240 }
241 }
242 }
243
244 /**
245 * Generated pattern matcher API of the ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.twoSynch pattern,
246 * providing pattern-specific query methods.
247 *
248 * <p>Use the pattern matcher on a given model via {@link #on(ViatraQueryEngine)},
249 * e.g. in conjunction with {@link ViatraQueryEngine#on(QueryScope)}.
250 *
251 * <p>Matches of the pattern will be represented as {@link Match}.
252 *
253 * <p>Original source:
254 * <code><pre>
255 * Simplifying model generation
256 *
257 * {@literal @}Constraint(severity="error", message="error", key = {s1,s2})
258 * pattern twoSynch(s1 : Synchronization, s2 : Synchronization) {
259 * Synchronization(s1);
260 * Synchronization(s2);
261 * s1 != s2;
262 * }
263 * </pre></code>
264 *
265 * @see Match
266 * @see TwoSynch
267 *
268 */
269 public static class Matcher extends BaseMatcher<TwoSynch.Match> {
270 /**
271 * Initializes the pattern matcher within an existing VIATRA Query engine.
272 * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned.
273 *
274 * @param engine the existing VIATRA Query engine in which this matcher will be created.
275 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
276 *
277 */
278 public static TwoSynch.Matcher on(final ViatraQueryEngine engine) {
279 // check if matcher already exists
280 Matcher matcher = engine.getExistingMatcher(querySpecification());
281 if (matcher == null) {
282 matcher = (Matcher)engine.getMatcher(querySpecification());
283 }
284 return matcher;
285 }
286
287 /**
288 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
289 * @return an initialized matcher
290 * @noreference This method is for internal matcher initialization by the framework, do not call it manually.
291 *
292 */
293 public static TwoSynch.Matcher create() {
294 return new Matcher();
295 }
296
297 private final static int POSITION_S1 = 0;
298
299 private final static int POSITION_S2 = 1;
300
301 private final static Logger LOGGER = ViatraQueryLoggingUtil.getLogger(TwoSynch.Matcher.class);
302
303 /**
304 * Initializes the pattern matcher within an existing VIATRA Query engine.
305 * If the pattern matcher is already constructed in the engine, only a light-weight reference is returned.
306 *
307 * @param engine the existing VIATRA Query engine in which this matcher will be created.
308 * @throws ViatraQueryRuntimeException if an error occurs during pattern matcher creation
309 *
310 */
311 private Matcher() {
312 super(querySpecification());
313 }
314
315 /**
316 * Returns the set of all matches of the pattern that conform to the given fixed values of some parameters.
317 * @param pS1 the fixed value of pattern parameter s1, or null if not bound.
318 * @param pS2 the fixed value of pattern parameter s2, or null if not bound.
319 * @return matches represented as a Match object.
320 *
321 */
322 public Collection<TwoSynch.Match> getAllMatches(final Synchronization pS1, final Synchronization pS2) {
323 return rawStreamAllMatches(new Object[]{pS1, pS2}).collect(Collectors.toSet());
324 }
325
326 /**
327 * Returns a stream of all matches of the pattern that conform to the given fixed values of some parameters.
328 * </p>
329 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
330 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
331 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
332 * @param pS1 the fixed value of pattern parameter s1, or null if not bound.
333 * @param pS2 the fixed value of pattern parameter s2, or null if not bound.
334 * @return a stream of matches represented as a Match object.
335 *
336 */
337 public Stream<TwoSynch.Match> streamAllMatches(final Synchronization pS1, final Synchronization pS2) {
338 return rawStreamAllMatches(new Object[]{pS1, pS2});
339 }
340
341 /**
342 * Returns an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters.
343 * Neither determinism nor randomness of selection is guaranteed.
344 * @param pS1 the fixed value of pattern parameter s1, or null if not bound.
345 * @param pS2 the fixed value of pattern parameter s2, or null if not bound.
346 * @return a match represented as a Match object, or null if no match is found.
347 *
348 */
349 public Optional<TwoSynch.Match> getOneArbitraryMatch(final Synchronization pS1, final Synchronization pS2) {
350 return rawGetOneArbitraryMatch(new Object[]{pS1, pS2});
351 }
352
353 /**
354 * Indicates whether the given combination of specified pattern parameters constitute a valid pattern match,
355 * under any possible substitution of the unspecified parameters (if any).
356 * @param pS1 the fixed value of pattern parameter s1, or null if not bound.
357 * @param pS2 the fixed value of pattern parameter s2, or null if not bound.
358 * @return true if the input is a valid (partial) match of the pattern.
359 *
360 */
361 public boolean hasMatch(final Synchronization pS1, final Synchronization pS2) {
362 return rawHasMatch(new Object[]{pS1, pS2});
363 }
364
365 /**
366 * Returns the number of all matches of the pattern that conform to the given fixed values of some parameters.
367 * @param pS1 the fixed value of pattern parameter s1, or null if not bound.
368 * @param pS2 the fixed value of pattern parameter s2, or null if not bound.
369 * @return the number of pattern matches found.
370 *
371 */
372 public int countMatches(final Synchronization pS1, final Synchronization pS2) {
373 return rawCountMatches(new Object[]{pS1, pS2});
374 }
375
376 /**
377 * Executes the given processor on an arbitrarily chosen match of the pattern that conforms to the given fixed values of some parameters.
378 * Neither determinism nor randomness of selection is guaranteed.
379 * @param pS1 the fixed value of pattern parameter s1, or null if not bound.
380 * @param pS2 the fixed value of pattern parameter s2, or null if not bound.
381 * @param processor the action that will process the selected match.
382 * @return true if the pattern has at least one match with the given parameter values, false if the processor was not invoked
383 *
384 */
385 public boolean forOneArbitraryMatch(final Synchronization pS1, final Synchronization pS2, final Consumer<? super TwoSynch.Match> processor) {
386 return rawForOneArbitraryMatch(new Object[]{pS1, pS2}, processor);
387 }
388
389 /**
390 * Returns a new (partial) match.
391 * This can be used e.g. to call the matcher with a partial match.
392 * <p>The returned match will be immutable. Use {@link #newEmptyMatch()} to obtain a mutable match object.
393 * @param pS1 the fixed value of pattern parameter s1, or null if not bound.
394 * @param pS2 the fixed value of pattern parameter s2, or null if not bound.
395 * @return the (partial) match object.
396 *
397 */
398 public TwoSynch.Match newMatch(final Synchronization pS1, final Synchronization pS2) {
399 return TwoSynch.Match.newMatch(pS1, pS2);
400 }
401
402 /**
403 * Retrieve the set of values that occur in matches for s1.
404 * @return the Set of all values or empty set if there are no matches
405 *
406 */
407 protected Stream<Synchronization> rawStreamAllValuesOfs1(final Object[] parameters) {
408 return rawStreamAllValues(POSITION_S1, parameters).map(Synchronization.class::cast);
409 }
410
411 /**
412 * Retrieve the set of values that occur in matches for s1.
413 * @return the Set of all values or empty set if there are no matches
414 *
415 */
416 public Set<Synchronization> getAllValuesOfs1() {
417 return rawStreamAllValuesOfs1(emptyArray()).collect(Collectors.toSet());
418 }
419
420 /**
421 * Retrieve the set of values that occur in matches for s1.
422 * @return the Set of all values or empty set if there are no matches
423 *
424 */
425 public Stream<Synchronization> streamAllValuesOfs1() {
426 return rawStreamAllValuesOfs1(emptyArray());
427 }
428
429 /**
430 * Retrieve the set of values that occur in matches for s1.
431 * </p>
432 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
433 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
434 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
435 *
436 * @return the Stream of all values or empty set if there are no matches
437 *
438 */
439 public Stream<Synchronization> streamAllValuesOfs1(final TwoSynch.Match partialMatch) {
440 return rawStreamAllValuesOfs1(partialMatch.toArray());
441 }
442
443 /**
444 * Retrieve the set of values that occur in matches for s1.
445 * </p>
446 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
447 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
448 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
449 *
450 * @return the Stream of all values or empty set if there are no matches
451 *
452 */
453 public Stream<Synchronization> streamAllValuesOfs1(final Synchronization pS2) {
454 return rawStreamAllValuesOfs1(new Object[]{null, pS2});
455 }
456
457 /**
458 * Retrieve the set of values that occur in matches for s1.
459 * @return the Set of all values or empty set if there are no matches
460 *
461 */
462 public Set<Synchronization> getAllValuesOfs1(final TwoSynch.Match partialMatch) {
463 return rawStreamAllValuesOfs1(partialMatch.toArray()).collect(Collectors.toSet());
464 }
465
466 /**
467 * Retrieve the set of values that occur in matches for s1.
468 * @return the Set of all values or empty set if there are no matches
469 *
470 */
471 public Set<Synchronization> getAllValuesOfs1(final Synchronization pS2) {
472 return rawStreamAllValuesOfs1(new Object[]{null, pS2}).collect(Collectors.toSet());
473 }
474
475 /**
476 * Retrieve the set of values that occur in matches for s2.
477 * @return the Set of all values or empty set if there are no matches
478 *
479 */
480 protected Stream<Synchronization> rawStreamAllValuesOfs2(final Object[] parameters) {
481 return rawStreamAllValues(POSITION_S2, parameters).map(Synchronization.class::cast);
482 }
483
484 /**
485 * Retrieve the set of values that occur in matches for s2.
486 * @return the Set of all values or empty set if there are no matches
487 *
488 */
489 public Set<Synchronization> getAllValuesOfs2() {
490 return rawStreamAllValuesOfs2(emptyArray()).collect(Collectors.toSet());
491 }
492
493 /**
494 * Retrieve the set of values that occur in matches for s2.
495 * @return the Set of all values or empty set if there are no matches
496 *
497 */
498 public Stream<Synchronization> streamAllValuesOfs2() {
499 return rawStreamAllValuesOfs2(emptyArray());
500 }
501
502 /**
503 * Retrieve the set of values that occur in matches for s2.
504 * </p>
505 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
506 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
507 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
508 *
509 * @return the Stream of all values or empty set if there are no matches
510 *
511 */
512 public Stream<Synchronization> streamAllValuesOfs2(final TwoSynch.Match partialMatch) {
513 return rawStreamAllValuesOfs2(partialMatch.toArray());
514 }
515
516 /**
517 * Retrieve the set of values that occur in matches for s2.
518 * </p>
519 * <strong>NOTE</strong>: It is important not to modify the source model while the stream is being processed.
520 * If the match set of the pattern changes during processing, the contents of the stream is <strong>undefined</strong>.
521 * In such cases, either rely on {@link #getAllMatches()} or collect the results of the stream in end-user code.
522 *
523 * @return the Stream of all values or empty set if there are no matches
524 *
525 */
526 public Stream<Synchronization> streamAllValuesOfs2(final Synchronization pS1) {
527 return rawStreamAllValuesOfs2(new Object[]{pS1, null});
528 }
529
530 /**
531 * Retrieve the set of values that occur in matches for s2.
532 * @return the Set of all values or empty set if there are no matches
533 *
534 */
535 public Set<Synchronization> getAllValuesOfs2(final TwoSynch.Match partialMatch) {
536 return rawStreamAllValuesOfs2(partialMatch.toArray()).collect(Collectors.toSet());
537 }
538
539 /**
540 * Retrieve the set of values that occur in matches for s2.
541 * @return the Set of all values or empty set if there are no matches
542 *
543 */
544 public Set<Synchronization> getAllValuesOfs2(final Synchronization pS1) {
545 return rawStreamAllValuesOfs2(new Object[]{pS1, null}).collect(Collectors.toSet());
546 }
547
548 @Override
549 protected TwoSynch.Match tupleToMatch(final Tuple t) {
550 try {
551 return TwoSynch.Match.newMatch((Synchronization) t.get(POSITION_S1), (Synchronization) t.get(POSITION_S2));
552 } catch(ClassCastException e) {
553 LOGGER.error("Element(s) in tuple not properly typed!",e);
554 return null;
555 }
556 }
557
558 @Override
559 protected TwoSynch.Match arrayToMatch(final Object[] match) {
560 try {
561 return TwoSynch.Match.newMatch((Synchronization) match[POSITION_S1], (Synchronization) match[POSITION_S2]);
562 } catch(ClassCastException e) {
563 LOGGER.error("Element(s) in array not properly typed!",e);
564 return null;
565 }
566 }
567
568 @Override
569 protected TwoSynch.Match arrayToMatchMutable(final Object[] match) {
570 try {
571 return TwoSynch.Match.newMutableMatch((Synchronization) match[POSITION_S1], (Synchronization) match[POSITION_S2]);
572 } catch(ClassCastException e) {
573 LOGGER.error("Element(s) in array not properly typed!",e);
574 return null;
575 }
576 }
577
578 /**
579 * @return the singleton instance of the query specification of this pattern
580 * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded
581 *
582 */
583 public static IQuerySpecification<TwoSynch.Matcher> querySpecification() {
584 return TwoSynch.instance();
585 }
586 }
587
588 private TwoSynch() {
589 super(GeneratedPQuery.INSTANCE);
590 }
591
592 /**
593 * @return the singleton instance of the query specification
594 * @throws ViatraQueryRuntimeException if the pattern definition could not be loaded
595 *
596 */
597 public static TwoSynch instance() {
598 try{
599 return LazyHolder.INSTANCE;
600 } catch (ExceptionInInitializerError err) {
601 throw processInitializerError(err);
602 }
603 }
604
605 @Override
606 protected TwoSynch.Matcher instantiate(final ViatraQueryEngine engine) {
607 return TwoSynch.Matcher.on(engine);
608 }
609
610 @Override
611 public TwoSynch.Matcher instantiate() {
612 return TwoSynch.Matcher.create();
613 }
614
615 @Override
616 public TwoSynch.Match newEmptyMatch() {
617 return TwoSynch.Match.newEmptyMatch();
618 }
619
620 @Override
621 public TwoSynch.Match newMatch(final Object... parameters) {
622 return TwoSynch.Match.newMatch((ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization) parameters[0], (ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization) parameters[1]);
623 }
624
625 /**
626 * Inner class allowing the singleton instance of {@link JvmGenericType: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.TwoSynch (visibility: PUBLIC, simpleName: TwoSynch, identifier: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.TwoSynch, deprecated: <unset>) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)} to be created
627 * <b>not</b> at the class load time of the outer class,
628 * but rather at the first call to {@link JvmGenericType: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.TwoSynch (visibility: PUBLIC, simpleName: TwoSynch, identifier: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.TwoSynch, deprecated: <unset>) (abstract: false, static: false, final: true, packageName: ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries) (interface: false, strictFloatingPoint: false, anonymous: false)#instance()}.
629 *
630 * <p> This workaround is required e.g. to support recursion.
631 *
632 */
633 private static class LazyHolder {
634 private final static TwoSynch INSTANCE = new TwoSynch();
635
636 /**
637 * Statically initializes the query specification <b>after</b> the field {@link #INSTANCE} is assigned.
638 * This initialization order is required to support indirect recursion.
639 *
640 * <p> The static initializer is defined using a helper field to work around limitations of the code generator.
641 *
642 */
643 private final static Object STATIC_INITIALIZER = ensureInitialized();
644
645 public static Object ensureInitialized() {
646 INSTANCE.ensureInitializedInternal();
647 return null;
648 }
649 }
650
651 private static class GeneratedPQuery extends BaseGeneratedEMFPQuery {
652 private final static TwoSynch.GeneratedPQuery INSTANCE = new GeneratedPQuery();
653
654 private final PParameter parameter_s1 = new PParameter("s1", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "Synchronization")), PParameterDirection.INOUT);
655
656 private final PParameter parameter_s2 = new PParameter("s2", "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.Synchronization", new EClassTransitiveInstancesKey((EClass)getClassifierLiteralSafe("YakinduMetamodel", "Synchronization")), PParameterDirection.INOUT);
657
658 private final List<PParameter> parameters = Arrays.asList(parameter_s1, parameter_s2);
659
660 private GeneratedPQuery() {
661 super(PVisibility.PUBLIC);
662 }
663
664 @Override
665 public String getFullyQualifiedName() {
666 return "ca.mcgill.ecse.dslreasoner.standalone.test.yakindu.queries.twoSynch";
667 }
668
669 @Override
670 public List<String> getParameterNames() {
671 return Arrays.asList("s1","s2");
672 }
673
674 @Override
675 public List<PParameter> getParameters() {
676 return parameters;
677 }
678
679 @Override
680 public Set<PBody> doGetContainedBodies() {
681 setEvaluationHints(new QueryEvaluationHint(null, QueryEvaluationHint.BackendRequirement.UNSPECIFIED));
682 Set<PBody> bodies = new LinkedHashSet<>();
683 {
684 PBody body = new PBody(this);
685 PVariable var_s1 = body.getOrCreateVariableByName("s1");
686 PVariable var_s2 = body.getOrCreateVariableByName("s2");
687 new TypeConstraint(body, Tuples.flatTupleOf(var_s1), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Synchronization")));
688 new TypeConstraint(body, Tuples.flatTupleOf(var_s2), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Synchronization")));
689 body.setSymbolicParameters(Arrays.<ExportedParameter>asList(
690 new ExportedParameter(body, var_s1, parameter_s1),
691 new ExportedParameter(body, var_s2, parameter_s2)
692 ));
693 // Synchronization(s1)
694 new TypeConstraint(body, Tuples.flatTupleOf(var_s1), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Synchronization")));
695 // Synchronization(s2)
696 new TypeConstraint(body, Tuples.flatTupleOf(var_s2), new EClassTransitiveInstancesKey((EClass)getClassifierLiteral("YakinduMetamodel", "Synchronization")));
697 // s1 != s2
698 new Inequality(body, var_s1, var_s2);
699 bodies.add(body);
700 }
701 {
702 PAnnotation annotation = new PAnnotation("Constraint");
703 annotation.addAttribute("severity", "error");
704 annotation.addAttribute("message", "error");
705 annotation.addAttribute("key", Arrays.asList(new Object[] {
706 new ParameterReference("s1"),
707 new ParameterReference("s2")
708 }));
709 addAnnotation(annotation);
710 }
711 return bodies;
712 }
713 }
714}
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/Function.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/Function.java
index 1fed3a2d..b2e5af29 100644
--- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/Function.java
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/Function.java
@@ -53,7 +53,7 @@ public interface Function extends FunctionalElement {
53 * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionType 53 * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.FunctionType
54 * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.famPackage#getFunction_Type() 54 * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.famPackage#getFunction_Type()
55 * @model required="true" transient="true" changeable="false" volatile="true" derived="true" 55 * @model required="true" transient="true" changeable="false" volatile="true" derived="true"
56 * annotation="org.eclipse.viatra.query.querybasedfeature patternFQN='ca.mcgill.ecse.dslreasoner.standalone.test.xyz.type'" 56 * annotation="org.eclipse.viatra.query.querybasedfeature patternFQN='ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.type'"
57 * @generated 57 * @generated
58 */ 58 */
59 FunctionType getType(); 59 FunctionType getType();
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/FunctionalElement.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/FunctionalElement.java
index c3ed76d6..acfffbc0 100644
--- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/FunctionalElement.java
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/FunctionalElement.java
@@ -63,7 +63,7 @@ public interface FunctionalElement extends EObject {
63 * @see #setModel(FunctionalArchitectureModel) 63 * @see #setModel(FunctionalArchitectureModel)
64 * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.famPackage#getFunctionalElement_Model() 64 * @see ca.mcgill.ecse.dslreasoner.standalone.test.fam.famPackage#getFunctionalElement_Model()
65 * @model required="true" transient="true" volatile="true" derived="true" 65 * @model required="true" transient="true" volatile="true" derived="true"
66 * annotation="org.eclipse.viatra.query.querybasedfeature patternFQN='ca.mcgill.ecse.dslreasoner.standalone.test.xyz.model'" 66 * annotation="org.eclipse.viatra.query.querybasedfeature patternFQN='ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.model'"
67 * @generated 67 * @generated
68 */ 68 */
69 FunctionalArchitectureModel getModel(); 69 FunctionalArchitectureModel getModel();
diff --git a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/impl/famPackageImpl.java b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/impl/famPackageImpl.java
index 74efeeeb..e928e04e 100644
--- a/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/impl/famPackageImpl.java
+++ b/Tests/ca.mcgill.ecse.dslreasoner.standalone.test/src/ca/mcgill/ecse/dslreasoner/standalone/test/fam/impl/famPackageImpl.java
@@ -561,13 +561,13 @@ public class famPackageImpl extends EPackageImpl implements famPackage {
561 (getFunctionalElement_Model(), 561 (getFunctionalElement_Model(),
562 source, 562 source,
563 new String[] { 563 new String[] {
564 "patternFQN", "ca.mcgill.ecse.dslreasoner.standalone.test.xyz.model" 564 "patternFQN", "ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.model"
565 }); 565 });
566 addAnnotation 566 addAnnotation
567 (getFunction_Type(), 567 (getFunction_Type(),
568 source, 568 source,
569 new String[] { 569 new String[] {
570 "patternFQN", "ca.mcgill.ecse.dslreasoner.standalone.test.xyz.type" 570 "patternFQN", "ca.mcgill.ecse.dslreasoner.standalone.test.fam.queries.type"
571 }); 571 });
572 } 572 }
573 573